Skip to content

misterjcs/Nanopi-Neo3.GPIO

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

33 Commits
 
 
 
 
 
 

Repository files navigation

Nanopi-Neo3.GPIO

系统为Dietpi,不修改内核,在用户层使用sysfs设置rk3288的GPIO。

简介

Nanopi-Neo3设有散热风扇接口,散热扇运行噪声较大,故想设置CPU达到温度后自动开启风扇,降温后再关闭。
查阅网上案例,树莓派等设备较多采用RPI.GPIO库等实现,但其未适配Nanopi-Neo3,故采取直接设置sysfs方式实现。

参考资料

实现步骤

1.GPIO sysfs interface 基本原理

  • 通过操作/sys/class/gpio目录下的export、unexport、gpio{N}/direction, gpio{N}/value(用实际引脚号替代{N})等文件实现。

2.声明GPIO口

  • 计算引脚号。Nanopi-Neo3散热扇接口为GPIO2A6(设置1为打开,0为关闭。通过原理图获得),通过计算可得引脚号为70(计算公式见资料3)。
  • 定义GPIO70指令:(这个命令需要root权限)
    echo 70 > /sys/class/gpio/export
    此时在/sys/class/gpio,会生成一个新目录,其名字为gpio70。
    进入其目录,依次能看到:active_low、device、direction、edge、power、subsystem、uevent、value文件。
    direction文件定义端口为输入或输出,参数范围是:in或out;
    value文件定义GPIO的值,参数范围是:0或1
    直接对其读写,达到读写GPIO的效果。

3.设置GPIO口为输出

  • 设置指令:(这个命令需要root权限)
    echo out > /sys/class/gpio/gpio70/direction

4.设置GPIO输出值

  • 设置指令:
    echo 1 > /sys/class/gpio/gpio70/value 输出1
    echo 0 > /sys/class/gpio/gpio70/value 输出0

5.读取CPU温度指令

  • cpu原厂提供的linux内核通常已经带有cpu温度检测驱动,并将温度信息映射到用户文件系统下,用户只需从该虚拟文件读取温度信息即可。
  • 经查找,cpu温度存储于 /sys/devices/virtual/thermal/thermal_zone0/temp 文件中,数值除1000即为当前实际温度。
  • 查看指令:
    cat /sys/devices/virtual/thermal/thermal_zone0/temp

6.Shell控制

Shell+Crontab控制,每分钟检测。

6.1.编写shell脚本

  • 见shell/fan_ctrl.sh,存放至/root目录。

6.2.使用crontab定时执行

  • 设置指令:sudo crontab -e 添加*/1 * * * * sh /root/fan_ctrl.sh >/dev/null 2>&1至文件,设置每分钟执行一次。
  • service cron status   查看运行状态
  • service cron restart   重启服务

7.C程序控制

C程序+开机启动,每秒检测。

7.1.编写C程序

  • 见c/,存放至/root/fan_ctrl目录。
  • 编译指令gcc -o fan cputemp.c gpiolib.c main.c生成可执行文件fan。

7.2.开机自动执行

  • Dieipi设置:dietpi-config -> AutoStart Options -> Custom script ,在exit 0上一行插入/root/fan_ctrl/fan。
  • 也可通过修改 /etc/rc.d/rc.local 文件方式实现。

Releases

No releases published

Packages

No packages published