You dont have javascript enabled! Please enable it!
FI-BB

MQTT に対応した IoT デバイス (センサ) の作成とセンサ・データの送信

本記事では、クラウド上の FIWARE 基盤に IoT デバイスから測定データを定期的に送信したり、FIWARE 基盤から IoT デバイスを制御したり、する方法を紹介します。

本記事を含め、次の複数の記事から構成されています。

M5Stack とセンサ・デバイス

温湿度と気圧センサを持つ IoT デバイスを、M5Stack Fire と ENV. III SENSOR Unitを使って作成します。次の写真のように、M5Stack と ENV. III を接続します。

Ultralight 2.0 over MQTT 対応デバイスの作成

次に、M5Stack を IoT デバイスとして動作させるための、ソースコードを GitHub から取得します。

以下のディレクトリにある m5stack_fire_sensor_mqtt.ino がプログラムです。

m5stack_fire/m5stack_fire_sensor_mqtt

プログラム全体

MQTT ベースの Ultralight 2.0 対応デバイスです。プログラムは次のとおりです。一定間隔でセンサからデータを取得し、Ultralight 2.0 のペイロードを作成して、温湿度、気圧の情報を クラウドにある、MQTT Broker の Mosquitto に送信します。

プログラム中の次の変数に適切な値に変更してください。

const char* gEssid = “ESSID”;
const char* gPassword = “ESSID_PASSWORD”;
const char* gMqttServer = “MOSQUITTO.EXAMPLE.COM”;
const char* gMqttUsername = “MQTT_USER”;
const char* gMqttPassword = “MQTT_PASSOWRD”;

MQTT サーバとユーザ名、パスワードは、FIWARE Big Bang をインストールしたディレクトリで、make mqtt コマンドを実行すると確認できます。

プログラムの解説

WiFi 接続

WiFi の初期化は、setup() 関数で行います。WiFi のモードを指定して、ESSID と パスワードを指定して開始します。そして、接続が確立するまで待ち合せます。

時刻の設定

センサの測定データの送信時に、測定時刻も送信します。このため、現在時刻を取得できるよう設定を行います。setup() 関数で、configTime() 関数を使用して、NTP サーバに接続して、時刻を合わせます。loop () 関数では、getLocalTime () 関数を使用して、現在時刻を取得します。

センサの測定値の取得

ENV. III SENSOR Unit から、温湿度と気圧の測定値を取得します。setup() 関数でセンサを初期化して、loop() 関数で測定値を取得します。

MQTT の設定と処理

MQTT には、Arduino Client for MQTT を使用します。

MQTT は、WiFi ネットワークを使用するため、WiFiClient クラスのオブジェクトを指定して、PubSubClient のオブジェクトをグローバル変数として作成します。

setup() 関数では、PubSubClient オブジェクトの接続先の MQTT Broker のアドレスとポートを指定します。

loop() 関数では、MQTT Broker への接続状況を確認し、未接続の場合は再接続を行います。また、センサの測定値と現在時刻から Ultralight 2.0 形式のメッセージを作成して、MQTT Broker にパブリッシュします。

プログラムのビルド

プログラムのビルドとM5Stackへの書き込みは、Arduino IDE を使用します。事前にボードマネージャとライブラリの導入と設定を行ってください。

項目
Board manager URL
https://dl.espressif.com/dl/package_esp32_index.json
Board manager
esp32 by Espressif Systems 2.0.6
Board
M5Stack-FIRE
Library manager
M5Stack by M5Stack version 0.4.3

IoT Agentの設定

IoT Agent を設定するコマンドを GitHub から取得します。

一連のコマンドは次のディレクトリにあります。

script/sensor

環境変数の設定

スクリプトの実行には、次の環境変数の設定が必要です。FIWARE Big Bang をインストールしたディレクトリに、.env ファイルがあります。このファイルのスクリプトのディレクトリにコピーしてください。

ORION=orion.big-bang.letsfiware.jp
IOTAGENT_UL=iotagent-ul.big-bang.letsfiware.jp
IOTA_UL_DEFAULT_RESOURCE=/iot/ul
MOSQUITTO=mosquitto.big-bang.letsfiware.jp
MQTT_USERNAME=fiware
MQTT_PASSWORD=OHUvmoB7ai7e5QDq
MQTT_1883=true
MQTT_TLS=true
MQTT_PORT=1883
MQTT_TLS_PORT=8883

IoT Agent の正常性を確認

IoT Agent のバージョン取得を実行して、正しくデプロイされたことを確認します。IoT Agent の場合、以下のクエリで正常性を確認できます。

GET /iot/about

次のコマンドを実行して、レスポンスが返ってくることを確認してください。

./01.version.sh

結果

サービス・グループのプロビジョニング

IoT 対応デバイスを IoT Agent に登録します。このため、最初にサービス・グループをプロビジョニングし、次にデバイスをプロビジョニングします。次のようなクエリを IoT Agent に POST することで、サービス・グループのプロビジョニングができます。

POST /services

のコマンドを実行して、サービス・グループをプロビジョニングしてください。プロビジョニングされたサービス・グループの一覧が表示できます。

./02.create-service.sh

デバイスのプロビジョニング

サービス・グループのプロビジョニング後に、デバイスのプロビジョニングを行います。デバイスが複数台ある場合は、デバイスごとに実施します。次のようなクエリで、動的な属性値として、温度、湿度、気圧、取得時刻を、静的な属性値として位置情報をもつデバイスとして、Ultralight 2.0-MQTT 対応デバイスをプロビジョニングできます。

POST /iot/devices

次のコマンドを実行して、Ultralight 2.0-MQTT 対応デバイスをプロビジョニングしてください。

./03.create-deivce.sh

センサデータの送信

サーバ環境の作成、サービスとデバイスのプロビジョニングが完了したら、M5Stack を起動してください。2秒ことに、クラウドにある FIWARE 基盤に温湿度と気圧情報を送信します。

エンティティの確認

Orion に対して次のようなクエリを実行して、エンティティ urn:ngsi-ld:WeatherObserved:sensor001 のコンテキスト情報が更新されているかを確認します。

GET /v2/entities/urn:ngsi-ld:WeatherObserved:sensor001

次のコマンドを実行して、コンテキスト情報を確認します。

./06.get-entity.sh

実行結果

次のステップ

次のステップでは、アクチュエータとなる IoT デバイスを作成して、クラウドの FIWARE 基盤からデバイスを制御します。