このドキュメントでは、室内空気質監視プロジェクトを例として、Google Android Things ハードウェアデバイスを Alibaba Cloud の IoT Platform に接続する方法について説明します。
ハードウェア
プロジェクトのデバイスリスト
このプロジェクトでは、以下のハードウェアデバイスが必要です。
デバイス
画像
備考
NXP Pico i.MX7D
開発ボード

Android Things 1.0 ベースです。
詳細については、NXP Pico i.MX7D I/O の「デベロッパーガイド」をご参照ください。
説明代わりに Raspberry Pi を使用することもできます。 詳細については、「Raspberry Pi サーバーのリモート制御」をご参照ください。
DHT12
温湿度センサー

データ通信には I2C プロトコルを使用します。
ZE08-CH2O
ホルムアルデヒド検出センサー

データ通信には UART プロトコルを使用します。
配線図

DHT12 センサーの SCL (クロック信号) ピンと SDA (データ) ピンを、開発ボードの I2C バスの対応する SCL ピンと SDA ピンに接続します。
ZE08-CH2O センサーの TXD (送信データ) ピンを開発ボードの RXD (受信データ) ピンに接続し、センサーの RXD ピンをボードの TXD ピンに接続します。
プロダクトとデバイスの作成
IoT Platform コンソールにログインします。
プロダクトを作成します。
[インスタンス概要] ページで、対象のインスタンスを見つけてインスタンス名をクリックし、[インスタンス詳細] ページに移動します。
重要Enterprise Edition インスタンスは、日本 (東京) リージョンでのみ利用可能です。 インスタンスが別のリージョンにある場合は、この手順をスキップしてください。
IoT Platform コンソールにログインします。 ナビゲーションペインで [インスタンス概要] をクリックすると、現在のリージョン内の Enterprise Edition インスタンスとそのステータスが表示されます。
[インスタンス概要] ページでは、現在のリージョンにおける Enterprise Edition インスタンスの実行ステータス (インスタンスタイプ (Standard)、環境 (本番環境/テスト環境)、オンラインデバイス数、メッセージのアップリンクおよびダウンリンクの TPS クォータ情報など) を確認できます。
ナビゲーションペインで、[デバイス管理] > [プロダクト] を選択します。
[プロダクト] ページで、[プロダクトの作成] をクリックします。 詳細については、「プロダクトの作成」をご参照ください。
TSL モデルを定義します。
プロダクトが作成されたら、[TSL モデルの定義] をクリックします。
[プロダクト詳細] ページの [機能の定義] タブで、 をクリックします。
次のプロパティを追加します。
プロパティ
識別子
タイプ
値
説明
温度
temperature
float
-50~100
DHT12 温湿度センサーによって収集された温度データ。
湿度
humidity
float
0~100
DHT12 温湿度センサーによって収集された湿度データ。
ホルムアルデヒド濃度
ch2o
double
0~3
ZE08-CH2O センサーによって収集されたホルムアルデヒド濃度。
[公開] をクリックして TSL モデルを公開します。
デバイスを作成します。
[デバイス] ページで [デバイスの追加] をクリックして、プロダクトにデバイスを作成します。 詳細については、「単一デバイスの作成」をご参照ください。
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); // データのチェック if ((data[0] + data[1] + data[2] + data[3]) % 256 != data[4]) { humidity = temperature = 0; return; } // 湿度データ humidity = Double.valueOf(String.valueOf(data[0]) + "." + String.valueOf(data[1])); Log.d(TAG, "humidity: " + humidity); // 温度データ 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 { // データバッファ 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); }デバイスを IoT Platform に接続してデータを報告します。
/* ペイロード形式 { "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 pubTopic = "/sys/${YourProductKey}/${YourDeviceName}/thing/event/property/post"; mqttClient.publish(pubTopic, message);
完全なサンプルコードについては、GitHub にある「Alibaba Cloud IoT」プロジェクトをダウンロードしてください。
リアルタイムデータの表示
デバイスが起動したら、IoT Platform コンソールにログインします。 [デバイス詳細] ページに移動します。 [ステータス] タブで、デバイスのリアルタイムのプロパティデータを確認できます。