開發與維運

阿里雲AIoT物聯網平臺Arduino環境監控開發實戰

   硬件準備   

今天我們在只有20元預算前提下,帶領大家完成一次IoT物聯網開發之旅!

感謝萬能的淘寶,讓我們能採購到esp8266開發板,dht11溫溼度傳感器:

  架構方案  

我們通過DHT11採集溫度,溼度數據,通過 MQTT 協議上報到阿里雲 IoT 物聯網平臺,並通過規則引擎轉發到表格存儲OTS數據庫中,整體技術方案如下:

  創建產品和註冊設備  

我們登錄阿里雲IoT物聯網平臺控制檯,創建產品溫溼度計。

在溫溼度計產品詳情的Topic類列表可以看到系統默認創建的Topic,這就是我們用來上報溫溼度數據的Topic。

接下來,我基於溫溼度計產品註冊一個設備hz9527,並獲取到設備身份三元組。
  配置數據流轉 規則引擎  

我們在表格存儲控制檯,預先創建數據庫實例iotMsg和iot_thermometer_data表,如下圖:

然後,我們回到IoT物聯網平臺控制檯,配置數據流轉規則,把設備上報數據存儲到已有的表格存儲數據庫實例iotMsg中的iot_thermometer_data表中,規則引擎配置如下:
image.png

完整的數據處理SQL:

SELECT *,
deviceName() as deviceName,
timestamp() as time,
timestamp('yyyy-MM-dd HH:mm:ss') as date_time 
FROM "/a1k3547Gr0v/+/user/update"

數據轉發配置如下:

image.png

設備和雲端通信Topic和Payload如下:

Topic:
/a1k823sJ0v/hz9527/user/update
Payload:
{
    "temperature":23,
    "humidity":65
}

  硬件 開發  

Arduino開發依賴C庫,如下:
image.png

/* 連接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控制檯的日誌服務中查看到上報的數據,如下圖:
image.png

image.png

image.png
image.png

  物模型開發  

物模型指將物理空間中的實體數字化,並在雲端構建該實體的數據模型。物模型描述產品是什麼、能做什麼、可以對外提供哪些服務。

我們在物聯網平臺控制檯,產品詳情頁面的功能定義,添加溫度和溼度兩個屬性,如下圖:

物模型屬性上報的通信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後,重新燒錄,設備上報數據後,在控制檯可以查看日誌,如下圖:

image.png設備詳情image.png物模型數據image.png運行狀態image.png

Leave a Reply

Your email address will not be published. Required fields are marked *