You dont have javascript enabled! Please enable it!
Tech

コンテキスト・プロデューサ型の FIWARE 対応 IoT デバイス

Context Producer (CP)

コンテキスト・プロデューサは、コンテキスト情報を生成することができるアクターです。基本的なコンテキスト・プロデューサは、内部ロジックに従って1つ以上のコンテキスト属性に関するコンテキスト情報を自発的に更新します。コンテキスト・プロデューサ (CP) からコンテキスト・ブローカー (CB) への通信はプッシュ・モードです。

本記事では、IoT マイコンの ESP32 を使って、温度、湿度、気圧の情報を定期的に、FIWARE Orion にプッシュし、コンテキスト情報を更新するコンテキスト・プロデューサを紹介します。

BME280 のセットアップ

ESP32 に Bosch Sensortec GmbH 製の BME280 というセンサを接続し、温度、湿度、気圧の3つの環境情報を測定します。その情報を WiFi ネットワークを使って、FIWARE Orion にプッシュします。

ESP32 と BME280 の接続

BME280 のセンサ・モジュールに秋月電子通商の AE-BME280 を使用し、以下のように接続します。また、AE-BME280 の 通信方式を I2C に設定するため、3つジャンバー (J1, J2, J3) をすべてはんだジャンパーします。

BME280 接続
VDD 3.3V に接続
GND GND に接続
CSB プルアップ (I2C モード, J3)
SDA ESP32 の GPIO4 に接続し, プルアップ(J1)
SDO プルアップ (I2C のアドレスが 0x77 になる)
SCL ESP32 の GPIO5 に接続し, プルアップ(J2)

BME280 ソフトウェア・ライブラリ

Adafruti の BME280 ライブラリを使って、プログラムからセンサにアクセスします。Arduino IDE の ライブラリから以下のものをインストールします。

ライブラリ名 ヘッダ・ファイル
Adafruit Unified Sensor Adafruit_Sensor.h
Adafruit BME280 libary Adafruit_BME280.h

プログラムの概要

プログラムのメインは、プログラムのスタート時に1回だけ実行される、setup() と、setup() の処理の後に、繰り返し実行される、loop() です。

setup()

setup() では各種初期化処理を行います。connectWifi() で WiFi ネットワークへの接続、configTime() で時刻を UTC に設定、setupBME280() で BME280 センサを初期化します。次に、deleteEntity() で作成するエンティティがすでに存在する場合は削除してから、createEntity() でエンティティを作成します。

loop()

一定間隔で、updateAttrs() を実行して、エンティティの属性を更新します。

WeatherObserved

BME280 から取得した温湿度と気圧の情報に、情報の取得時刻と位置情報を合わせて、 FIWARE データモデルの WeatherObserved の形式で、FIWARE Orion にプッシュます。データは以下のようなものです。

deleteEntity()

作成するエンティティがすでに存在する場合、エンティティを削除します。エンティティの存在確認は以下で行います。

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

HTTP のレスポンス・コードが 200 の場合、エンティティが存在するため、以下を実行して、エンティティを削除します。

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

createEntity()

新たにエンティティを作成します。以下の POST を実行することで、エンティティの作成できますが、作成するエンティティの情報は、JSON 形式で POST の データとして送信する必要があります。

POST /v2/entities

ESP32 に JSON 形式のデータを作成するために、ArduinoJSON というライブラリを使用します。ライブラリはArduino IDE のライブラリ管理からインストールできます。ArduinoJSON を使用して、WeatherObserved の JSON 形式のデータ、以下のようにして作成することができます。

updateAttrs()

updateAttrs() では、以下を実行して、温湿度と気圧の情報を更新します。

PATCH /v2/entities/urn:ngsi-ld:WeatherObserved:sensor001/attrs

更新に使用するデータは以下のような内容です。

プログラム全体

プログラム全体は以下のような内容です。

シリアル・コンソールの出力

プログラムを実行すると、シリアル・コンソールに以下のようなメッセージが出力され動作状況を確認できます。

Orion からエンティティを取得

Orion から、urn:ngsi-ld:WeatherObserved:sensor001 のコンテキスト情報を取得して、情報が更新されていることを確認できます。

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


コンテキスト・プロバイダ型の FIWARE 対応 IoT デバイスContext Provider (CPr) コンテキスト・プロバイダ (CPr) は、コンテキスト・プロデューサ (CP) の特別な...
ESP32 を使って FIWARE 対応 IoT デバイスを作成ESP32 とは ESP32 は、Raspberry Pi や Arduino に続く、新たな IoT マイコンとして注目されています...