项目目的:监测香菇大棚内温湿度变化,请求近3天的天气数据,并将数据反馈给用户,以增强用户对香菇生长的管理
项目思路:用树莓派ZERO+DHT22收集温湿度数据,并用NGINX搭建WEB服务,让用户使用手机浏览器了解温湿度信息.期间考虑过使用LED点阵显示,但考虑到LED点阵安装位置固定,不方便查看,手机随身携带比较方便,WEB服务无须安装其他应用.
项目硬件:树莓派ZERO,DHT22,乐光CPE,斐讯K3,小米3A,监控录像机,监控摄像头,网线若干
硬件连接:
项目软件:python,nginx,html,和风天气API
软件思路:使用python加载DHT库读取DHT22温湿度数据,使用python的openpyxl库将温湿度数据以天为单位保存成.xlsx文件.使用和风天气API,获取近3天的天气数据,最后将温湿度数据及天气数据保存到index.html.编写python自运行shell脚本,防止python意外停止,并将shell脚本设置开机自启.调整nginx配置文件,并加入开机自启.将树莓派ZERO设成静态IP地址,防止访问出现IP变动的问题.
项目代码:
greenhouse.sh
#!/bin/bash
while [ 1 ];do
python3 /home/pi/greenhouse/greenhousedetection.py
done
greenhousedetection.py
greenhousedetection.py
# -*- coding: utf-8 -*-
import Adafruit_DHT as dht
import datetime
import requests
import time
import os
from openpyxl import Workbook
# 传感器型号
sensor = dht.DHT22
# 树莓派GPIO BCM引脚号
pin1 = 5
pin2 = 6
pin3 = 13
pin4 = 19
# xlsx文件初始化
wb = Workbook() #创建文件对象
ws = wb.active #获取第一个sheet
# xlsx文件标头
ws['A1'] = "时间"
ws['B1'] = "室外标准温度"
ws['C1'] = "室外标准湿度"
ws['D1'] = "大棚北部温度"
ws['E1'] = "大棚北部湿度"
ws['F1'] = "大棚中部温度"
ws['G1'] = "大棚中部湿度"
ws['H1'] = "大棚南部温度"
ws['I1'] = "大棚南部湿度"
# xlsx偏移参数
i = 1
# 标准时间获取
time1 = time.strftime("%Y%m%d",time.localtime())
# 网页内容写入
def xieru():
f=open('/home/pi/greenhouse/html/index.html','w')
f.write('<!DOCTYPE html>'+'\n'
+'<html><head><meta charset="utf-8"><title></title></head>'+'\n'
+'<body>'+'\n'
+'<p style="text-align:center">'+'\n'
+'<font size="26" face="Time" color="orange">庆宝香菇大棚温湿度显示</font>'+'\n'
+'</p>'+'\n'
+'<p><font size="26" face="Time">室外标准温湿度</font></p>'+'\n'
+'<p><font size="26" face="Time">' + '温度:' + str(wendu1) + ' ' + '湿度:' + str(shidu1) + '</font></p>' + '\n'
+'<p><font size="26" face="Time">大棚北部温湿度</font></p>' + '\n'
+'<p><font size="26" face="Time">' + '温度:' + str(wendu2) + ' ' + '湿度:' + str(shidu2) + '</font></p>' + '\n'
+'<p><font size="26" face="Time">大棚中部温湿度</font></p>' + '\n'
+'<p><font size="26" face="Time">' + '温度:' + str(wendu3) + ' ' + '湿度:' + str(shidu3) + '</font></p>' + '\n'
+'<p><font size="26" face="Time">大棚南部温湿度</font></p>' + '\n'
+'<p><font size="26" face="Time">' + '温度:' + str(wendu4) + ' ' + '湿度:' + str(shidu4) + '</font></p>' + '\n'
+ '<p><font size="26" face="Time">今天天气' +