orangepi Zero3 最近价格很亲民,所以做项目比较划算。
由于之前的Nanopi NEO3 开发板是塑胶盒子CPU是集成铝合金散热,他们都因为没有风扇降温,导致因为温度飙升80-90度导致经常死机。
一,材料:
1,Zero3(2G)单独主板 + 散热片+32G-TF卡。
2,某宝上面买的塑胶外壳+风扇+内置天线。
3,S8050三极管+100欧姆电阻+热缩管若干。
接线图:
二,刷机,
根据官网下载/:Orange Pi Zero3
根据说明来刷机:我刷的是:Orangepizero3_1.0.0_debian_bookworm_server_linux6.1.31。
大家可以根据实际情况刷其他系统,ubuntu镜像,debian镜像,都可以的。
三,根据用户手册来安装 wiringOP-Python。
引用 OrangePi_Zero3_H618_用户手册_v1.1.pdf 用户手册内容如下:
3.19. wiringOP-Python 的安装使用方法
wiringOP-Python 是 wiringOP 的 Python 语言版本的库, 用于在 Python 程序中
操作开发板的 GPIO、I2C、SPI 和 UART 等硬件资源。
另外请注意下面所有的命令都是在 root用户下操作的。
3.19.1. wiringOP-Python的安装方法
1) 首先安装依赖包
root@orangepi:~# sudo apt-get update
root@orangepi:~# sudo apt-get -y install git swig python3-dev python3-setuptools
2) 然后使用下面的命令下载 wiringOP-Python 的源码
注意,下面的 git clone--recursive 命令会自动下载 wiringOP 的源码,因为
wiringOP-Python 是依赖 wiringOP 的。请确保下载过程没有因为网络问题而报错。
如果从 GitHub 下载代码有问题,可以直接使用 Linux 镜像中自带的
wiringOP-Python 源码,存放位置为:/usr/src/wiringOP-Python。
root@orangepi:~# git clone --recursive https://github.com/orangepi-xunlong/wiringOP-Python -b next
root@orangepi:~# cd wiringOP-Python
root@orangepi:~/wiringOP-Python# git submodule update --init --remote
3) 然后使用下面的命令编译 wiringOP-Python 并将其安装到开发板的 Linux 系统中
root@orangepi:~# cd wiringOP-Python
root@orangepi:~/wiringOP-Python# python3 generate-bindings.py > bindings.i
root@orangepi:~/wiringOP-Python# sudo python3 setup.py install
4) 然后输入下面的命令,如果有帮助信息输出,说明 wiringOP-Python 安装成功,
按下 q键可以退出帮助信息的界面
root@orangepi:~/wiringOP-Python# python3 -c "import wiringpi; help(wiringpi)"
Help on module wiringpi:
NAME
wiringpi
2) 直接用命令测试的步骤如下所示:
a. 首先设置 GPIO 口为输出模式,其中 pinMode 函数的第一个参数是引脚对
应的 wPi 的序号,第二个参数是 GPIO的模式
root@orangepi:~/wiringOP-Python# python3 -c "import wiringpi; \
from wiringpi import GPIO; wiringpi.wiringPiSetup() ; \
wiringpi.pinMode(2, GPIO.OUTPUT) ; "
b. 然后设置 GPIO 口输出低电平, 设置完后可以使用万用表测量引脚的电压的
数值,如果为 0v,说明设置低电平成功
root@orangepi:~/wiringOP-Python# python3 -c "import wiringpi; \
from wiringpi import GPIO; wiringpi.wiringPiSetup() ;\
wiringpi.digitalWrite(2, GPIO.LOW)"
c. 然后设置 GPIO 口输出高电平, 设置完后可以使用万用表测量引脚的电压的
数值,如果为 3.3v,说明设置高电平成功
root@orangepi:~/wiringOP-Python# python3 -c "import wiringpi; \
from wiringpi import GPIO; wiringpi.wiringPiSetup() ;\
wiringpi.digitalWrite(2, GPIO.HIGH)"
3) 在 python3 的命令行中测试的步骤如下所示:
a. 首先使用 python3 命令进入 python3 的命令行模式
root@orangepi:~# python3
b. 然后导入 wiringpi 的 python 模块
>>> import wiringpi
>>> from wiringpi import GPIO
c. 然后设置 GPIO 口为输出模式,其中 pinMode 函数的第一个参数是引脚对
应的 wPi 的序号,第二个参数是 GPIO的模式
>>> wiringpi.wiringPiSetup()
0
>>> wiringpi.pinMode(2, GPIO.OUTPUT)
d. 然后设置 GPIO 口输出低电平, 设置完后可以使用万用表测量引脚的电压的
数值,如果为 0v,说明设置低电平成功
>>> wiringpi.digitalWrite(2, GPIO.LOW)
e. 然后设置 GPIO 口输出高电平, 设置完后可以使用万用表测量引脚的电压的
数值,如果为 3.3v,说明设置高电平成功
>>> wiringpi.digitalWrite(2, GPIO.HIGH)
测试代码如下。
import wiringpi
from wiringpi import GPIO
wiringpi.wiringPiSetup()
wiringpi.pinMode(17, GPIO.OUTPUT)
wiringpi.digitalWrite(17, GPIO.LOW)
wiringpi.digitalWrite(17, GPIO.HIGH)
说明:17对应是GPIO的第四个脚,其他引脚也可以用作GPIO脚,具体可以按照说明来选取。
root@orangepizero3:~# gpio readall # 来查询脚的情况。
四,我实际的接线位置图片。
五,散热风扇的 python程序运行代码:
# -*- coding:utf-8 -*-
"""
根据Orange-Pi CPU温度开启与关闭风扇
"""
import time, os
import wiringpi
from wiringpi import GPIO
import logging
GPIO_OUT = 17
START_TEMP = 60
CLOSE_TEMP = 45
DELAY_TIME = 5
LOG_PATH = '/var/log/fan_control.log'
logging.basicConfig(level=logging.DEBUG,
format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s', # 日志格式
datefmt='%Y-%m-%d %H:%M:%S', # 时间格式
filename=LOG_PATH, # 日志的输出路径
filemode='a') # 追加模式
def get_cpu_temperature():
"""
获取CPU温度, 读取/sys/class/thermal/thermal_zone0/temp内容, 除1000就是温度
:return: float
"""
with open("/sys/class/thermal/thermal_zone0/temp", 'r') as f:
temperature = float(f.read()) / 1000
return temperature
def start_fan(temp):
"""
开启风扇
:param temp: CPU温度
:return:
"""
logging.info('power on fan, temp is %s' % temp)
# PNP型三极管基极施加低电平时才导通电路, NPN型三极管相反
wiringpi.digitalWrite(GPIO_OUT, GPIO.HIGH)
def stop_fan(temp):
"""
关闭风扇
:param temp: CPU温度
:return:
"""
logging.info('power off fan, temp is %s' % temp)
# 基级施加高电平
wiringpi.digitalWrite(GPIO_OUT, GPIO.LOW)
def setup_GPIO():
"""
GPIO初始化
风扇设置为关闭状态
:return:
"""
wiringpi.wiringPiSetup()
wiringpi.pinMode(GPIO_OUT, GPIO.OUTPUT)
def control_fan():
is_closed = True
try:
while True:
temp = get_cpu_temperature()
logging.debug("temperature: %s" % temp)
# 温度大于START_TEMP开启风扇, 低于CLOSE_TEMP关闭风扇
if (temp > START_TEMP and is_closed):
start_fan(temp)
is_closed = False
elif (temp < CLOSE_TEMP and not is_closed):
stop_fan(temp)
is_closed = True
else:
pass
time.sleep(DELAY_TIME)
except Exception as e:
GPIO.cleanup()
logging.error(e)
if __name__ == '__main__':
os.environ["TZ"] = 'Asia/Shanghai'
time.tzset()
logging.info('started control fan...')
setup_GPIO()
control_fan()
logging.info('quit started control fan...')
参考链接:
六,添加python脚本和开机自动运行程序。
1,添加python 程序。
root@orangepizero3:~# sudo vim smartfan.py
把上面 散热风扇的 python程序运行代码:复制里面,然后 Esc 退出 :wq 保存。
2, 先运行调试一下。
sudo python -u /root/smartfan.py &
运行有代码输出确认无误后进行下一步操作。
2,让Python脚本开机自动启动
假如Python自启动脚本为smartfan.py
。那么用root权限编辑以下文件:
sudo vim /etc/rc.local
在exit 0上面添加启动脚本的命令
nohup python -u /root/smartfan.py > /root/smartfan.log 2>&1 &
然后 Esc 退出 :wq 保存。
最后重启Linux,脚本就能自动运行并打印日志了。
七,调试状态:
1,查看温度。
cat /sys/devices/virtual/thermal/thermal_zone0/temp
2,运行圆周率,CPU压力测试令到CPU迅速升温。
root@orangepizero3:~# echo "scale=50000; 4*a(1)" | bc -l -q
3,实时查询日志记录。
root@orangepizero3:~# tail -f /var/log/fan_control.log
4,当超过60度风扇转动,当温度低于45度风扇停止转动。
5, 运行了几天后用Jupyter Notebook python 做了个图表,CPU温度一直在45度-60度之间稳定波动。
八, 官方的linux系统自带Docker。
九,结束:
加了散热和风扇后可作的用途更多:
Linux 桌面计算机。
Linux 网络服务器。
openwrt的路由盒子。
打印机服务器。
建立自己的博客服务器。
Android TV电视盒子。
香橙派zero 3 塑料外壳 OrangePi Zero3 H618开发板外壳 散热壳