摘要
当你发现需要更多的计算能力或外设支持的时候,如 USB或高清晰度多媒体接口(HDMI)视频,你已经离开了像 Arduino这样的微控制器领域,进入了计算机领域。树莓派(Raspberry Pi)是一个小型计算机,可以很好地执行这样的高级任务。树莓派可以在许多有趣的项目中使用。
本文将用树莓派以及温度和湿度传感器(DHT11),来构建基于 Web 的温度和湿度监控系统。在树莓派(arm开发板)上运用python语言来实现系统。
关键字:树莓派、python、环境监测
一. 开发环境及相关技术
本系统的开发环境:
树莓派3B+、DHT11温湿度传感器,杜邦线,无线网卡,PC
Raspbian系统、python语言。
1.DHT11温湿度传感器
DHT11是一种测量温度和湿度的常用传感器。
精度湿度+-5%RH, 温度+-2℃,量程:湿度20-90%RH,温度0~50℃。
DHT1有4个引脚,分别是VDD(+)、 GND(—)、 DATA, NC(不使用)
pin |
名称 |
注释 |
1 |
VDD(+) |
供电3~5.5v |
2 |
DATA |
串行数据,单总线 |
3 |
NC |
不使用 |
4 |
GND(—) |
接地,电源负极 |
DATA 引脚连接到微控制器(树莓派),输入和输出都通过该引脚。我们将用 Adafruit Python 库 Adafruit_Python_DHT 与 DHT11 通信,取得温度和湿度数据。
2 . 树莓派
Raspberry Pi(中文名为“树莓派”,简写为RPi,(或者RasPi / RPI),是为学习计算机编程教育而设计),只有信用卡大小的微型电脑,其系统基于Linux。随着Windows 10 IoT的发布,我们也将可以用上运行Windows的树莓派。
本项目用到的是Raspberry Pi 3 Model B +(树莓派3B+),如图
树莓派3B+硬件情况:
博通BCM2837B0 SoC,集成四核ARM Cortex-A53(ARMv8)64位@ 1.4GHz CPU,集成博通 Videocore-IV GPU
内存:1GB LPDDR2 SDRAM
有线网络:千兆以太网(通过USB2.0通道,最大吞吐量 300Mbps)
无线网络:2.4GHz和5GHz 双频Wi-Fi,支持802.11b/g/n/ac
蓝牙:蓝牙4.2&低功耗蓝牙(BLE)
存储:Micro-SD
其他接口:HDMI,3.5mm模拟音频视频插孔,4x USB 2.0,以太网,摄像机串行接口(CSI),显示器串行接口(DSI),MicroSD卡座,40pin扩展双排插针
尺寸:82mmx 56mmx 19.5mm,50克
树莓派3b+两个重要的升级特性:更强的CPU性能以及更强的无线(WiFi/BT,支持5G频段的WiF以及支持BT 4.2&BLE)连接功能
树莓派3b+GPIO引脚图:
3. 安装配置软件
设置树莓派并准备编写Python
二. 系统设计
在树莓派上运行的代码将启动 Bottle Web 服务器,监听传入的连接。当你访问本地网络上的树莓派的 Internet 协议(IP)地址时, Bottle 服务器会提供包含天气数据图表的网页。树莓上的处理程序将与 DHT11 传感器通信,取得数据,并返回给客户程序,客户程序用 flot 库在浏览器中绘制传感器数据。我们还会为连接到树莓派的发光二极管(LED)提供基于 Web 的控制(这只是为了演示如何用树莓派通过 Web 来控制外部设备)。
系统功能模块图:
三 . 系统实现
1. 测试
使用 Adafruit 读取 DHT11 温湿度传感器
需要在电源和数据脚之间串联一个上拉电阻(4.7K-10K),这里串联一个5.1k的电阻。
以树莓派3b+、DHT11为例:
DHT11和树莓派连接参考图:
DHT Pin |
Signal |
Pi Pin |
1 |
3.3v |
1 |
2 |
Data |
11 (GPIO17) |
3 |
not used |
– |
4 |
Ground |
6 or 9 |
实物连接图:
Adafruit 提供了示例程序
运行下面的命令测试
cd Adafruit_Python_DHT
cd examples
python3 AdafruitDHT.py 11 17
进行测试,其中11代表DHT11型号,17代表GPIO硬件接口
打印结果:
循环打印温湿度
运行下面的命令测试
python3 test.py
测试结果:
每隔1s打印读取到的温湿度,向传感器哈暖气,温湿度升高。
输出结果:
Temp=22.0*C Humidity=73.0%
Temp=22.0*C Humidity=73.0%
Temp=23.0*C Humidity=73.0%
2. 实现过程
搭建硬件
除了前面提到的树莓派和外设之外,还需要以下各项和连接线:
DHT11传感器、5.1kΩ电阻、100Ω电阻、LED灯、面包板。
器件连接示意图:
树莓派、DHT11电路和LED之间的连接示意图
DHT11 的 VDD 引脚连接到+ 5V(树莓派上的引脚#2),DHT11 的 DATA 引脚连接到树莓派上的引脚#16,DHT11 的 GND 引脚连接到树莓派上的 GND(引脚#6)。DATA 和 VDD 之间连接一个 4.7kΩ 电阻。LED 的阴极(负极)通过 100Ω 电阻器连接到 GND,阳极(正极)连接到树莓派的引脚#18。
连接实物图:
树莓派、DRT11和LCD与面包板连接
3. 编程实现
定义main函数
def main():
print 'starting piweather...'
# create parser
parser = argparse.ArgumentParser(description="PiWeather...")
# add expected arguments
parser.add_argument('--ip', dest='ipAddr', required=True)
parser.add_argument('--port', dest='portNum', required=True)
# parse args
args = parser.parse_args()
# setup GPIO
GPIO.setmode(GPIO.BOARD)
GPIO.setup(18, GPIO.OUT)
GPIO.output(18, False)
# start server
run(host=args.ipAddr, port=args.portNum, debug=True)
4. 运行程序
将树莓派连接到DHT11和LCD电路后,利用SSH从计算机登录树莓派。
运行以下命令:
sudo python piweather.py –ip 192.168.4.236 –port 8080
打开浏览器,在浏览器的地址栏中输入树莓派的ip地址和端口:
http://192.168.4.236:8080/plot
运行结果:
在secureCRT上
在浏览器页面上,
如果点击图表中的任何数据点,点击的数据部分应该更新,显示有关该点的更多信息。在收集到 100 个点后,当新数据进入时,图形将开始水平滚动(单击 EnableLighting 复选框来打开和关闭 LED)。
对DHT11传感器处理,变化明显
四. 总结
项目构建了一个基于树莓派的环境监控系统,通过 Web 界面绘制温度和湿度数据。通过设置树莓派,使用树莓派的GPIO引脚与硬件通信(DHT11温湿度传感器、led灯),调用Python Web框架Bottle作为Web服务器,调用JavaScript库flot制作图表,来构建客户端-服务器一体的应用程序。
虽然本项目存在许多的不足,但是有巨大的发展潜力。在完成该项目后,我们将继续深入研究,不断的完善该系统。
参考文献
[1] Mahesh Venkitachalam. Python极客项目编程[M]. 人民邮电出版社,2017.