上传温湿度数据
更新时间:
本文介绍通过为树莓派主板增加一个温湿度传感器,实现Raspberry Pi 4计算机在服务器机房中搜集环境数据。
前提条件
已完成物模型定义。详细内容请参见为温湿度传感器定义物模型。
硬件连接
准备DHT11传感器设备。
将传感器接入到树莓派的主板。
传感器拥有四个引脚,从左往右依次是VCC供电、数据、空、GND负极。由于数据脚需要上拉电平支持,所以我们需要使用一个额外的10 KΩ电阻连接VCC与数据管脚,具体连接如下图。
接入后的效果图如下所示。
安装依赖程序
传感器的数据传递功能需要安装依赖程序开启。
在命令窗口执行以下命令,完成程序安装。
cd /home/pi/Desktop sudo apt update sudo apt install git git clone https://github.com/adafruit/Adafruit_Python_DHT.git cd Adafruit_Python_DHT sudo python3 setup.py install cd /
继续执行以下命令,测试传感器是否已经工作正常。
python3 import Adafruit_DHT humidity, temperature = Adafruit_DHT.read_retry(11, 4) humidity,temperature
如果传感器连接并且工作正常,会返回正确的温度与湿度数据。
修改和验证源码程序
您需要修改树莓派计算机的源码程序文件,将新属性(机房温度、机房湿度)数据添加到协议字段中。
修改源码程序文件run.py。
程序文件run.py的修改方法请参见将树莓派接入物联网平台。
说明不需要重新下载源码压缩包,直接修改已下载解压的程序文件即可。
请对比以下内容修改run.py文件并保存。
#!/usr/bin/python3 import aliLink,mqttd,rpi import time,json import Adafruit_DHT # 三元素(iot后台获取) ProductKey = '***' DeviceName = 'raspberrypi4-******' DeviceSecret = "assef***" # topic (iot后台获取) POST = '/sys/***/raspberrypi4-***/thing/event/property/post' # 上报消息到云 POST_REPLY = '/sys/***/raspberrypi4-***/thing/event/property/post_reply' SET = '/sys/***/raspberrypi4-***/thing/service/property/set' # 订阅云端指令 # 消息回调(云端下发消息的回调函数) def on_message(client, userdata, msg): # print(msg.payload) Msg = json.loads(msg.payload) switch = Msg['params']['PowerLed'] rpi.powerLed(switch) print(msg.payload) # 开关值 # 连接回调(与阿里云建立链接后的回调函数) def on_connect(client, userdata, flags, rc): pass # 链接信息 Server, ClientId, userNmae, Password = aliLink.linkiot(DeviceName, ProductKey, DeviceSecret) # mqtt链接 mqtt = mqttd.MQTT(Server, ClientId, userNmae, Password) mqtt.subscribe(SET) # 订阅服务器下发消息topic mqtt.begin(on_message, on_connect) # 信息获取上报,每10秒钟上报一次系统参数 while True: time.sleep(10) # 获取指示灯状态 power_stats = int(rpi.getLed()) if(power_stats == 0): power_LED = 0 else: power_LED = 1 # CPU 信息 CPU_temp = float(rpi.getCPUtemperature()) # 温度 ℃ CPU_usage = float(rpi.getCPUuse()) # 占用率 % # RAM 信息 RAM_stats = rpi.getRAMinfo() RAM_total = round(int(RAM_stats[0]) / 1000, 1) RAM_used = round(int(RAM_stats[1]) / 1000, 1) RAM_free = round(int(RAM_stats[2]) / 1000, 1) # Disk 信息 DISK_stats = rpi.getDiskSpace() DISK_total = float(DISK_stats[0][:-1]) DISK_used = float(DISK_stats[1][:-1]) DISK_perc = float(DISK_stats[3][:-1]) # 获取传感器信息 humidity, temperature = Adafruit_DHT.read_retry(11, 4) # 构建与云端模型一致的消息结构 updateMsn = { 'cpu_temperature': CPU_temp, 'cpu_usage': CPU_usage, 'RAM_total': RAM_total, 'RAM_used': RAM_used, 'RAM_free': RAM_free, 'DISK_total': DISK_total, 'DISK_used_space': DISK_used, 'DISK_used_percentage': DISK_perc, 'PowerLed': power_LED, 'temperature': temperature, 'humidity': humidity } JsonUpdataMsn = aliLink.Alink(updateMsn) print(JsonUpdataMsn) mqtt.push(POST, JsonUpdataMsn) # 定时向阿里云IOT推送我们构建好的Alink协议数据
重启服务。
在命令行窗口执行以下命令。
cd /home/pi/Desktop/code/ python3 run.py
数据结果如图所示。
在IoT平台查询上报的数据。
前往设备详情页,单击
,查看新增的机房温度和湿度数据。
后续步骤
文档内容是否对您有帮助?