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

MQTT に対応した IoT デバイス (アクチュエータ) の作成とデバイス制御

IoT Agnet 対応アクチュエータ

アクチュエータとは、コンピュータから指示を受けて、機械的な動作を行うデバイスです。 FIWARE では、IoT Agent を使うと、Context Broker の エンティティの属性値を更新することで、IoT デバイスを制御することができます。ここでは、FIWARE から指示を受けて、M5Stack 内蔵の LED を オン、オフ する IoT デバイスを作成して、制御してきます。

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

IoT Agent Ultralight 2.0 over MQTT に対応した、IoT デバイス (アクチュエータ) を作成します。ソースコードを GitHub から取得します。

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

m5stack_fire/m5stack_fire_actuator_mqtt

プログラム全体

MQTT ベースの Ultralight 2.0 対応デバイスです。プログラムは次のとおりです。プログラムは MQTT Client として動作し、IoT Agent からのリクエストを MQTT Broker の Mosquitto を介して待ち受けます。MQTT のメッセージは、Ultralight 2.0 形式で、LED の ON/OFF の状態を表すパラメータが含まれてます。これにしたがって、LED の状態を変更します。

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

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 と パスワードを指定して開始します。そして、接続が確立するまで待ち合せます。

LED 制御

M5Stack Fire の LED の制御には、Adafruit NeoPixel ライブラリを使用します。

MQTT の設定と処理

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

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

setup() 関数では、PubSubClient オブジェクトの接続先の MQTT Broker のアドレスとポートを指定します。さらに、MQTT Broker からのメッセージ受信時に呼び出される、callback 関数を指定しています。

loop() 関数では、MQTT Broker への接続状況を確認し、未接続の場合は再接続を行います。また、接続後、MQTT Broker からのメッセージ受信するために、トピックを指定して、subscribe を実行します。

callback() 関数は、MQTT Broker からのメッセージ受信時に呼び出されます。IoT Agentから送信されたメッセージの内容にしたがって、LED を点灯、消灯します。また、処理の完了後に、ステータスを IoT Agent に送信します。

プログラムのビルド

プログラムのビルドと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
Adafruit NeoPixel by Adafruit 1.10.7

IoT Agentの設定

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

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

script/actuator

環境変数の設定

スクリプトの実行には、次の環境変数の設定が必要です。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 することで、サービス・グループのプロビジョニングができます。以前のステップでの、センサの IoT デバイスの設定時に実行している場合は不要です。

POST /services

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

./02.create-service.sh

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

サービス・グループのプロビジョニング後に、デバイスのプロビジョニングを行います。デバイスが複数台ある場合は、デバイスごとに実施します。次のクエリで、コマンド (commands) に、led という属性を持つ、Ultralight 2.0 over MQTT 対応デバイスをプロビジョニングできます。

POST /iot/devices

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

./03.create-deivce.sh

LED の制御

Ultralight 2.0 over MQTT 対応デバイスの起動

M5Stack の電源をオンにします。M5Stack の LCD に、subscribe と表示されれば、クラウド上の MQTT Broker と接続ができています。

LED の点灯

Orion に次のような PATCH リクエストを送信することで、エンティティの属性が更新されて、M5Stack の LED の点灯、消灯ができます。

PATCH /v2/entities/urn:ngsi-ld:Atuator:actuator001?type=Thing

05.on.sh コマンドを実行します。

エンティティの属性値が、”on” に更新されると、IoT Agent が、MQTT Broker を介して、M5Stack に、Ultralight 2.0 形式のメッセージを送信します。M5Stack がメッセージを受信すると、LCD に表示します。

また、M5Stack の側面にある LED が点灯します。

LEDの消灯

M5Stack の LED を消灯する場合は、06.off.sh コマンドを実行します。

エンティティの確認

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

GET /v2/entities/urn:ngsi-ld:Atuator:actuator001

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

./07.get-entity.sh

 

“led_status” の値が、”OK” になっていれば、IoT デバイス側でメッセージが届き、IoT デバイスからレスポンスがあったことを示しています。”led_info” の値は、IoT デバイスが送信してきたメッセージで、”done” になっています。この IoT デバイスでは、LED の点灯または消灯が正しく実行できたことを示しています。

次のステップ

error: Alert: Content is protected !!