前言
需要做一个实时监控环境温度的系统,上网搜索后,发现硬件方面树莓派连接传感器用来监控温度比较容易实现,不需要学习太多硬件方面的知识。传感器方面我选择DHT22,是因为DHT22测试的范围和精准度要比DHT11要高。
记录一下从树莓派开机、配置到项目成功运行
准备
硬件:
树莓派4B、DHT22传感器
参考资料:
树莓派零基础教程:https://github.com/TommyZihao/ZihaoTutorialOfRaspberryPi(B站同济子豪兄有相应视频)
DHT22用到的Python库:https://github.com/adafruit/Adafruit_Python_DHT
参照项目:https://github.com/yfgeek/rpi-TempRuntime
相关库的安装:
1 # 逐行运行命令
2 sudo apt-get update
3 sudo apt-get install python-dev python-rpi.gpio
4 sudo apt-get install build-essential python-dev python-smbus python-pip
5 sudo pip3 install Adafruit_DHT
6 sudo pip2 install RPi.GPIO
项目的下载
# 将项目下载到/home/pi下任意目录即可
git clone https://github.com/yfgeek/rpi-TempRuntime.git
进入该项目文件夹 /rpi-TempRuntime,项目内有多个传感器的python文件,WITHOUT-LCD表示不带屏幕输出
我们对 DHT22-WITHOUT-LCD.py 进行修改
sudo nano DHT22-WITHOUT-LCD.py
找到26行,核心代码,将GPIO#改为自己传感器所接的序号,这里我接的是4
humidity, temperature = Adafruit_DHT.read_retry(sensor, 4)
修改完成后,运行 DHT22-WITHOUT-LCD.py,即可在终端界面看到时间、温度、湿度的输出,生成的数据以JSON格式存储在 /rpi-TempRuntime/web/data/min(或者hour)中。
项目每分钟生成一组数据,按日期命名,存在/rpi-TempRuntime/web/data/min文件中,/rpi-TempRuntime/web/data/hour 存储的则是每个小时的数据
/rpi-TempRuntime/web 中还有个index.html,是一个查询网页(注意:不会实时刷新,按日期查询时,需要同时有分钟数据和时钟数据才会生效)
本地服务器部署
Web服务器选择nginx,相对APache的广泛应用,nginx属于轻量级服务器
安装nginx
sudo apt-get install nginx
启动nginx
sudo /etc/init.d/nginx start
测试安装是否成功(nginx默认是80端口)
将树莓派的ip地址设为静态ip(我的是192.168.31.102),先从内网测试是否安装成功,在同一个局域网的机子上的浏览器上访问 192.168.31.102。如果出现下图则说明nginx安装成功
修改nginx配置文件(使得nginx监听上面设定的8888端口)
sudo nano /etc/nginx/sites-available/default
#直接修改以下内容:
listen行:修改两处的监听端口
server {
listen 8888 default_server;
listen [::]:8888 default_server;
# SSL configuration
#
#修改指定访问html路径
root /home/pi/pyproject/sensor/rpi-TempRuntime/web;
# Add index.php to the list if you are using PHP
index index.html index.htm index.nginx-debian.html;
重新加载
sudo /etc/init.d/nginx reload
启动服务器
sudo /etc/init.d/nginx start
#停止
sudo /etc/init.d/nginx stop
浏览器上访问 192.168.31.102:8888