本文檔以室內空氣檢測項目為例,介紹如何將谷歌Android Things物聯網硬件接入阿里云物聯網平臺。

硬件設備

  • 項目設備列表

    下表中為室內空氣檢測所需的硬件設備:

    設備 設備圖片 備注

    NXP Pico i.MX7D

    開發板

    Android Things

    基于Android things系統1.0。

    如需更多幫助,請參見NXP Pico i.MX7D I/O官網接口文檔:開發者指南

    說明 該硬件可以用樹莓派替代。詳細內容,請參見遠程控制樹莓派服務器

    DHT12

    溫濕度傳感器

    Android Things 采用I2C數據通信方式。

    ZE08-CH2O

    甲醛檢測傳感器

    Android Things 采用UART數據通信方式。
  • 設備接線示意圖
    Android Things
    • 將溫濕度傳感器(DHT12)的時鐘信號線引腳SCL和數據線引腳SDA分別與開發板的I2C總線的SCL和SDA引腳相接。
    • 將甲醛檢測傳感器(ZE08-CH2O)的發送數據引腳TXD與開發板的接收數據引腳RXD相接;將ZE08-CH2O的接收數據引腳RXD與開發板的發送數據引腳TXD相接。

創建阿里云物聯網平臺產品和設備

如果您還未開通阿里云物聯網平臺服務,請先了解、開通物聯網平臺

  1. 登錄阿里云物聯網平臺控制臺
  2. 創建產品。
    1. 實例概覽頁面,找到對應的實例,單擊實例進入實例詳情頁面。
      重要 目前華東2(上海)、華北2(北京)、華南1(深圳)地域開通了企業版實例服務。其他地域,請跳過此步驟。
      實例概覽
    2. 在左側導航欄,單擊設備管理,選擇產品
    3. 產品頁,單擊創建產品進入產品創建流程。詳情操作,請參見創建產品
  3. 定義物模型。
    1. 在產品創建成功頁面,單擊前往定義物模型
    2. 產品詳情頁的功能定義頁簽下,單擊編輯草稿 > 添加自定義功能
    3. 添加以下屬性。
      屬性名稱 標識符 數據類型 取值范圍 描述
      溫度 temperature float -50~100 DHT12溫濕度傳感器采集的溫度數據。
      濕度 humidity float 0~100 DHT12溫濕度傳感器采集的濕度數據。
      甲醛濃度 ch2o double 0~3 ZE08甲醛檢測傳感器采集的甲醛濃度。
    4. 單擊發布上線發布物模型。
  4. 創建設備。

    設備頁面,單擊添加設備,在產品下創建設備。詳情操作,請參見單個創建設備

開發Android things設備

  1. 使用Android Studio創建Android things工程,添加網絡權限。
    <uses-permission android:name="android.permission.INTERNET" />
  2. 在gradle中添加eclipse.paho.mqtt
    implementation 'org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.2.0'
  3. 配置通過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);
            }
    
        }
  4. 配置通過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);
                }
  5. 創建阿里云物聯網平臺與設備端的連接,上報數據。
    /*
    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 ,下載完整的示例工程代碼。

查看實時數據

設備啟動后,登錄物聯網平臺控制臺在對應實例下,找到設備詳情頁,在運行狀態頁簽下,查看設備當前的實時屬性數據。

Android Things