硬件準備
今天我們在只有20元預算前提下,帶領大家完成一次IoT物聯網開發之旅!
感謝萬能的淘寶,讓我們能採購到esp8266開發板,dht11溫溼度傳感器:
架構方案
我們通過DHT11採集溫度,溼度數據,通過 MQTT 協議上報到阿里雲 IoT 物聯網平臺,並通過規則引擎轉發到表格存儲OTS數據庫中,整體技術方案如下:
創建產品和註冊設備
我們登錄阿里雲IoT物聯網平臺控制檯,創建產品溫溼度計。
在溫溼度計產品詳情的Topic類列表可以看到系統默認創建的Topic,這就是我們用來上報溫溼度數據的Topic。
接下來,我基於溫溼度計產品註冊一個設備hz9527,並獲取到設備身份三元組。
配置數據流轉 規則引擎
我們在表格存儲控制檯,預先創建數據庫實例iotMsg和iot_thermometer_data表,如下圖:
然後,我們回到IoT物聯網平臺控制檯,配置數據流轉規則,把設備上報數據存儲到已有的表格存儲數據庫實例iotMsg中的iot_thermometer_data表中,規則引擎配置如下:
完整的數據處理SQL:
SELECT *,
deviceName() as deviceName,
timestamp() as time,
timestamp('yyyy-MM-dd HH:mm:ss') as date_time
FROM "/a1k3547Gr0v/+/user/update"
數據轉發配置如下:
設備和雲端通信Topic和Payload如下:
Topic:
/a1k823sJ0v/hz9527/user/update
Payload:
{
"temperature":23,
"humidity":65
}
硬件 開發
Arduino開發依賴C庫,如下:
/* 連接WiFi之後,連接MQTT服務器 */
client.setServer(MQTT_SERVER, MQTT_PORT);
client.setCallback(callback);
client.connect(CLIENT_ID, MQTT_USRNAME, MQTT_PASSWD)
設備讀取傳感器數據,並通過 MQTT 通道發送到雲端:
void loop() {
// 從傳感器獲取溫度,溼度數據
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
char jsonBuf[128];
sprintf(jsonBuf, BODY_FORMAT, temperature, humidity);
// 通過 MQTT 發送數據上雲
if (client.connected()) {
boolean d = client.publish(PROP_POST_TOPIC, jsonBuf);
}
client.loop();
// delay
delay(DELAY_TIME);
}
使用 Arduino IDE 燒錄程序到 esp8266 開發板:
聯機運行
燒錄完成後,程序啟動,我們就可以在IoT控制檯的日誌服務中查看到上報的數據,如下圖:
物模型開發
物模型指將物理空間中的實體數字化,並在雲端構建該實體的數據模型。物模型描述產品是什麼、能做什麼、可以對外提供哪些服務。
我們在物聯網平臺控制檯,產品詳情頁面的功能定義,添加溫度和溼度兩個屬性,如下圖:
物模型屬性上報的通信Topic,如下圖:
物模型通信Topic和Payload如下:
Topic:
/sys/a1k823sJ0v/hz9527/thing/event/property/post
Payload:
{
"id":1596087445906,
"params":{
"temperature":23,
"humidity":65
},
"method":"thing.event.property.post"
}
我們修改 Arduino 查詢中Topic和Payload後,重新燒錄,設備上報數據後,在控制檯可以查看日誌,如下圖:
設備詳情物模型數據運行狀態