本文檔以室內空氣檢測專案為例,介紹如何將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 ,下載完整的樣本工程代碼。
查看即時資料
裝置啟動後,登入物聯網平台控制台,找到裝置詳情頁,在運行狀態頁簽下,查看裝置當前的即時屬性資料。