上傳溫濕度數據
更新時間:
本文介紹通過為樹莓派主板增加一個溫濕度傳感器,實現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平臺查詢上報的數據。
前往設備詳情頁,單擊
,查看新增的機房溫度和濕度數據。
后續步驟
文檔內容是否對您有幫助?