本文檔以室內空氣檢測專案為例,介紹如何將GoogleAndroid Things物聯網硬體接入阿里雲物聯網平台。
硬體裝置
- 專案裝置列表
下表中為室內空氣檢測所需的硬體裝置:
裝置 裝置圖片 備忘 NXP Pico i.MX7D
開發板
基於Android things系統1.0。
如需更多協助,請參見NXP Pico i.MX7D I/O官網介面文檔:開發人員指南。
說明 該硬體可以用樹莓派替代。詳細內容,請參見遠端控制樹莓派伺服器。DHT12
溫濕度感應器
採用I2C資料通訊方式。 ZE08-CH2O
甲醛檢測感應器
採用UART資料通訊方式。 - 裝置接線示意圖
- 將溫濕度感應器(DHT12)的時鐘訊號線引腳SCL和資料線引腳SDA分別與開發板的I2C匯流排的SCL和SDA引腳相接。
- 將甲醛檢測感應器(ZE08-CH2O)的發送資料引腳TXD與開發板的接收資料引腳RXD相接;將ZE08-CH2O的接收資料引腳RXD與開發板的發送資料引腳TXD相接。
建立阿里雲物聯網平台產品和裝置
- 登入阿里雲物聯網平台控制台。
- 建立產品。
- 在執行個體概覽頁面,找到對應的執行個體,單擊執行個體進入執行個體詳情頁面。重要 目前日本(東京)地區開通了企業版執行個體服務。其他地區,請跳過此步驟。
- 在左側導覽列,單擊裝置管理,選擇產品。
- 在產品頁,單擊建立產品進入產品建立流程。詳情操作,請參見建立產品。
- 在執行個體概覽頁面,找到對應的執行個體,單擊執行個體進入執行個體詳情頁面。
- 定義物模型。
- 在產品建立成功頁面,單擊前往定義物模型。
- 在產品詳情頁的功能定義頁簽下,單擊 。
- 添加以下屬性。
屬性名稱 標識符 資料類型 取值範圍 描述 溫度 temperature float -50~100 DHT12溫濕度感應器採集的溫度資料。 濕度 humidity float 0~100 DHT12溫濕度感應器採集的濕度資料。 甲醛濃度 ch2o double 0~3 ZE08甲醛檢測感應器採集的甲醛濃度。 - 單擊發布上線發布物模型。
- 建立裝置。
在裝置頁面,單擊添加裝置,在產品下建立裝置。詳情操作,請參見單個建立裝置。
開發Android things裝置
- 使用Android Studio建立Android things工程,添加網路許可權。
<uses-permission android:name="android.permission.INTERNET" />
- 在gradle中添加
eclipse.paho.mqtt
。implementation 'org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.2.0'
- 配置通過I2C讀取溫濕度感應器DHT12的資料。
private void readDataFromI2C() { try { byte[] data = new byte[5]; i2cDevice.readRegBuffer(0x00, data, data.length); // check data if ((data[0] + data[1] + data[2] + data[3]) % 256 != data[4]) { humidity = temperature = 0; return; } // humidity data humidity = Double.valueOf(String.valueOf(data[0]) + "." + String.valueOf(data[1])); Log.d(TAG, "humidity: " + humidity); // temperature data if (data[3] < 128) { temperature = Double.valueOf(String.valueOf(data[2]) + "." + String.valueOf(data[3])); } else { temperature = Double.valueOf("-" + String.valueOf(data[2]) + "." + String.valueOf(data[3] - 128)); } Log.d(TAG, "temperature: " + temperature); } catch (IOException e) { Log.e(TAG, "readDataFromI2C error " + e.getMessage(), e); } }
- 配置通過UART擷取甲醛檢測感應器Ze08-CH2O的資料。
try { // data buffer byte[] buffer = new byte[9]; while (uartDevice.read(buffer, buffer.length) > 0) { if (checkSum(buffer)) { ppbCh2o = buffer[4] * 256 + buffer[5]; ch2o = ppbCh2o / 66.64 * 0.08; } else { ch2o = ppbCh2o = 0; } Log.d(TAG, "ch2o: " + ch2o); } } catch (IOException e) { Log.e(TAG, "Ze08CH2O read data error " + e.getMessage(), e); }
- 建立阿里雲物聯網平台與裝置端的串連,上報資料。
/* payload格式 { "id": 123243, "params": { "temperature": 25.6, "humidity": 60.3, "ch2o": 0.048 }, "method": "thing.event.property.post" } */ MqttMessage message = new MqttMessage(payload.getBytes("utf-8")); message.setQos(1); String pubTopYourPc = "/sys/${YourProductKey}/${YourDeviceName}/thing/event/property/post"; mqttClient.publish(pubTopic, message);
請訪問GitHub阿里雲IoT ,下載完整的樣本工程代碼。
查看即時資料
裝置啟動後,登入物聯網平台控制台,找到裝置詳情頁,在運行狀態頁簽下,查看裝置當前的即時屬性資料。