この記事では、室内空気試験プロジェクトを例として Google Android Things を Alibaba Cloud IoT Platform に接続する方法を説明します。

ハードウェア

  • 本プロジェクトのハードウェア一覧

    以下の表に、室内空気試験プロジェクトに必要なハードウェアを示します。

    ハードウェア 画像 備考

    NXP Pico i.MX7D

    開発ボード



    Android Things 1.0
    Raspberry Pi も使用できます。

    DHT12

    温湿度センサー



    I2C データ通信方式をサポートします。

    ZE08-CH2O

    ホルムアルデヒド検出センサー



    UART データ通信方式をサポートします。
  • NXP i.MX7D 開発ボードピンのレイアウト図


    NXP Pico i.MX7D の詳細は、『https://developer.android.com/things/hardware/imx7d-pico-io』 をご参照ください。.

  • ハードウェア接続図


    • 温湿度センサー (DHT12) の SCL (クロックライン) ピンと SDA (データライン) ピンを開発ボードの I2C SCL ピンと SDA ピンに接続します。
    • ホルムアルデヒド検出センサー (ZE08-CH2O) の TXD (データ伝送) ピンを開発ボードの RXD (データ受信) ピンに接続し、ZE08-CH2Oの RXD ピンを開発ボードの TXD ピンに接続します。

Alibaba Cloud IoT Platform コンソールでプロダクトとデバイスを作成

  1. IoT Platform コンソールにログインします。
  2. IoT Platform Pro でプロダクトを作成します。

    [プロダクト] ページで [プロダクトの作成] をクリックします。 プロダクトを作成するバージョンとして Pro Edition を選択します。 詳細は、プロダクトの作成 (Pro Edition)をご参照ください。



  3. 新しく作成したプロダクトの機能を定義します。

    [プロダクト詳細] ページで [フィーチャーの定義] > [追加] をクリックし、プロダクトのプロパティを定義します。 詳細は、TSL (Thing Specification Language) の説明をご参照ください。

    表 1. 室内空気試験プロジェクトに必要なプロパティ
    プロパティ名 識別子 データ型 値の範囲 説明
    Temperature temperature float -50~100 DHT12 によって検出されます。
    Humidity humidity float 0~100 DHT12 によって検出されます。
    Formaldehyde concentration ch2o double 0~3 ZE08 により検出されます。


  4. デバイスを作成

    [デバイス] ページで新しく作成したプロダクトの名前を選択し、[デバイスの追加] をクリックしてデバイスを作成します。 詳細は、デバイスの作成をご参照ください。



Android Things クライアントの開発

  1. Android Studio を使用して Android Things プロジェクトを作成し、インターネットの権限を追加します。
    <uses-permission android:name="android.permission.INTERNET" />
  2. eclipse.paho.mqtt を Gradle ファイルに追加します。
    implementation 'org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.2.0'
  3. DHT12 のデータを I2C で読み込む設定をします。
    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. Ze08-CH2O のデータを UART で読み込む設定をします。
    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. Alibaba Cloud IoT Platform とクライアントを接続し、データを報告します。
    /*
    Payload format
    {
      "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);

デバイスのリアルタイムデータを表示

デバイスを有効にすると、IoT Platform コンソールの [デバイスの詳細] ページの [ステータス] カラムからデバイスのリアルタイムデータを閲覧できます。