プライベートLoRaWANネットワーク/JEDI IoTプラットフォームのエンドノードとしてLoRa-E5 miniを開発するためにSTMCubeIDEを使用

概要

このプロジェクトは、SeeedのLoRa-E5 mini評価ボードをプライベートLoRaWANネットワーク上のLoRaWANエンドノードとしてセットアップするための「入門/概要」デモです。STのSTMCube IDEとST-Link/v2プログラマを使用して、STM32WLE5JCモジュールベースのLoRa-E5 miniボードをLoRaセンサ開発ノードとしてセットアップし、ボードにデモファームウェアをプログラムします。デモコードは、STのSTM32Cube MCU Package for STM32WLシリーズ(SDK)をSeeedのSTM32WLE5JCモジュールベースのLoRa-E5ミニボードに移植したものを使用しています。センサノードがプログラムされると、ChirpStackベースのプライベートLoRaWANネットワークに追加され、HTTP integrationとcustom data collectorを使用して、センサデータをMachinechatのJEDI Pro IoTプラットフォームに渡します。SeeedのIP67規格の産業用LoRaWANゲートウェイを使用して、LoRaセンサパケットをSeeedのOdyssey Blue mini PC(Ubuntu linuxをインストール)上で動作するプライベートChirpStack LoRaWANネットワークサーバに転送しています。MachinechatのJEDI Pro IoTプラットフォームは、同じOdyssey Blue mini PC上で動作しています。

ハードウェア

  • Seeed Odyssey Blue x86 Mini PC
    クアッドコアCeleron J4105搭載のミニPCで、128GB外付けSSD付き。注:これは利用可能な新しい品番に更新する必要があります。
  • Seeed SenseCAP Outdoor Gateway - LoRaWAN US915MHz
    SenseCAP LoRaWAN Gatewayは、LoRaWAN®プロトコルに基づき、低電力、長距離の環境データ収集とモニタリングに適用できます。
  • Seeed LoRa-E5 mini
    LoRa-E5 miniは、SeeedのLoRa-E5 STM32WLE5JCモジュールを組み込んだLoRa®(LoRaWAN™)評価ボードです。
  • ST-LINK/V2
    STM8、STM32シリーズのデバッガ、プログラマ(インサーキット/インシステム)です。

ソフトウェア

  • JEDI ProJEDI Pro SSE
    IoTデータの収集、可視化、モニタリング、データストレージのための適応型ソフトウェアで、IoTソリューションに組み込むことができます。
       ・センサ、デバイス、マシンからのデータ収集
       ・直感的なリアルタイムおよび履歴データ、システムビューダッシュボードの構築
       ・データ状態を自動的に監視し対応するためのルール作成
       ・メールやSMSによるアラート通知の受信
    などの機能を備えています。
    JEDI Pro SSEは、JEDI ProにSeeedのSenseCAP LoRaWANセンサ用のData Collectorを追加したSeeed Studio Editionバージョンです。
  • ChirpStack
    ChirpStackは、オープンソースのLoRaWANネットワークサーバスタックで、LoRaWANネットワーク用のコンポーネントをオープンソースで提供します。モジュラーアーキテクチャにより、既存のインフラストラクチャに統合することが可能です。
  • ST Tools & Software
    このプロジェクトでは、STツールSTM32CubeProgrammerとSTM32CubeIDEをインストールする必要があります。
  • Tera Term
    Tera Termは、UTF-8プロトコルに対応したオープンソースのフリーソフトウェア端末エミュレータです。

背景

この記事は、TechForumの関連記事「MachinechatとSeeed SenseCAPによるプライベートLoRaWANセンサネットワークの構築」を基にした後続プロジェクトで、Digi-Keyで入手できる既製のハードウェアとソフトウェアを使用してプライベートLoRaWAN IoTセンサネットワークを構築する詳細が記載されています。ソフトウェアとしては、MachinechatのJEDI ProアプリケーションソフトウェアとChirpStackのLoRaWANネットワークサーバアプリケーションが使用されました。ハードウェアは、Seeed reServer x86サーバとSenseCAP屋外用LoRaWANゲートウェイが使用されました。この記事では、LoRa-E5 miniをLoRaセンサとしてプログラムし、既存のプライベートLoRaWANネットワークに追加しています。

インプリメンテーション

このデモは、Seeed Wiki LoRa-E5 miniにあるSeeedの「Develop with STM32Cube MCU Package」のドキュメントを元に作成されています。「LoRaWAN End Node」STMCubeIDEプロジェクトを使用し、LoRa周波数、デバイスEUI、およびデバイスAppKeyをコードで修正し、LoRa-E5 miniにコンパイル、プログラミングしてデモを実施します。注: デモファームウェアを実装するためには、工場出荷時にロードされたATコマンドソフトウェアを再プログラムする必要があり、工場出荷時のATファームウェアは復元できません。

LoRa-E5 miniボードとST-Link/v2プログラマの接続のセットアップ

コンパイルしたHexファイルをLoRa-E5 miniボードにプログラムするために、STのST-Link/v2を使用します。コンピュータからUSBケーブルを本ボードのType-C USBポートに接続し、電源供給とシリアル通信を行います。ST-Link/v2は、下図のようにLoRa-E5 miniボードに接続する必要があります(Scheme-it LoRaE5mini_STlinkV2 Projectを参照)。また、STツールを実行するコンピュータからのUSBケーブルをST-Link/v2にも接続してください。

接続は以下のようにしてください。

ST-Link/v2 JTAG connector Function LoRa-E5 mini pin
pin 1 VCC 3V3
pin 4 GND GND
pin 7 SWDIO DIO
Pin 9 SWCLK CLK

LoRa-E5 miniセンサノードのファームウェアのセットアップ

このプロジェクトで使用したLoRa-E5 mini LoRaWANセンサノードのコードは、STのSTM32Cube MCU Package for STM32WLシリーズ(SDK)をSeeedに移植したもので、Seeed Wiki LoRa-E5 miniの関連手順に忠実に作成されています。Seeedのコードは、LoRaWANネットワークサーバに「The Things Network(TTN)」を利用していますが、今回使用したChirpStack LoRaWANネットワークサーバとも互換性があります。このプロジェクトではThings Networkは使われていませんが、LoRaWANのコンセプトは非常によく似ています。

1 - SeeedのGitHub - Seeed-Studio/LoRaWan-E5-Node at qianリポジトリにアクセスし、ZIPファイルとしてダウンロードします。
ZIPファイルを解凍し、ディレクトリC:\STMicro\LoRaE5project\LoRaWan-E5-Node-qian\LoRaWan-E5-Node-qian\Projects\Applications\LoRaWAN\LoRaWAN_End_Node\STM32CubeIDEに移動します。

2 - .project ファイルをダブルクリックします。

3 - STMCubeIDEが開いたら、ファイルを右クリックして、Propertiesを選択します。

4 - PropertiesC/C++ BuildSettingsMCU Post build outputsの順に移動します。Convert to Intel hex file(-O ihex)のチェックボックスを選択し、Apply and Closeをクリックします。

5 - Build Debugを選択して実行します。

image

6 - エラー無しでコンパイルできます。

7 - LoRaWANエンドノードのコードで LoRaWANのデバイスEUI、アプリケーションKEY のパラメータが変更されることになります。STMCubeIDEプロジェクトのインクルードファイルであるse-identity.hlora_app.hの#define文が修正されます。

se-identity.h#define LORAWAN_DEVICE_EUI#define LORAWAN_APP_KEYを変更します。

lora_app.h#define ACTIVE_REGIONをUS915に変更します。

8 - se-identity.hとlora-app.hを修正した後、プロジェクトを再構築してLoRa-E5 miniボードにプログラミングします。STMCubeProgammerを開き、ST-Link/v2をコンピュータに接続し、LoRa-E5 miniのRESETボタンを押したまま、プログラマでCONNECTを選択してRESETボタンを離します(プログラマの右上にST-LINKが選択されていることを確認して下さい)。

OB(Option bytes)を選択し、Read Out Protectionが値AAに設定されていることを確認してください。

Erasing and Programmingページに移動し、hexファイルを選択します(私の例では、C:\STMicro\LoRaE5project\LoRaWan-E5-Node-qian\LoRaWan-E5-Node-qian\Projects\Applications\LoRaWAN\LoRaWAN_End_Node\STM32CubeIDE\Debug\LoRaWAN_End_NodeSTM32E5.hex)。図のようにプログラミングオプションを選択し、Start Programmingを選択します。

LoRa-E5 miniのデバッグシリアル出力で、LoRaWANのネットワーク状態を確認

プログラムされると、ボードはLoRaWANネットワークへの参加を試みます。まだどのネットワークにも追加されていないので、シリアル出力には「NETWORK JOIN Fail」と表示されます。TeraTermを使用して、LoRa-E5 miniのUSBシリアル出力に接続できます。

1 - TeraTermを起動し、シリアルポートをLoRa-E5 miniのUSBシリアルポートに接続します。ボーレートを115200に、データビットを8に、およびパリティを無しに設定します。

image

LoRa-E5 miniセンサノードをChirpStack LoRaWANネットワークサーバに追加

(注:このプロジェクトと以下のステップは、ChirpStackベースのプライベートLoRaWANネットワークがアクティブで、LoRa-E5 mini LoRaWANセンサノードの範囲内にあることを前提としています。そうでない場合は、TechForumの投稿「MachinechatとSeeed SenseCAPによるプライベートLoRaWANセンサネットワークの構築」をご参照ください。)

1 - ChirpStackで、Service-profilesを選択し、Createを選択します。Service-profileの名前を「STM32WL」とし、Network-serverに「Chirpstack Network Server」を選択し、Add gateway meta-dataボックスにチェックを入れます。

2 - ChirpStackで、Device-profileを選択し、Createを選択します。Device-profile の名前を 「Seeed LoRaE5」とし、LoRaWAN MACのバージョンを「1.0.2」に、LoRaWAN Regional Parametersのバージョンを「A」に、ADR algorithmを「Default ADR algorithm」に、Uplink interval を「3600」に設定します。JOIN(OTAA/ABP) タブで、「Device supports OTAA」のボックスにチェックを入れます。CODECタブのCODECドロップダウンリストで「Cayenne LPP」を選択します。

3 - ChirpStackで、Applicationsを選択し、Creatを選択します。Application nameに「FarmTest」、Application descriptionに「description」、そしてService-profileに「STM32WL」を入力します。

4 - ChirpStackで、Applicationsを選択し、FarmTestを選択し、そしてCreateを選択します。Device nameに「LoRaE5mini」、Device descriptionに「description」、Device EUIにLoRa-E5 mini board(se-identity.hに入力したものと同じ番号)、Device-profileに「Seeed LoRaE5」と入力して、CREATE DEVICEを選択します。(注:最初のテストとデモでは、Disable frame-counter validation(フレームカウンタの検証を無効にする)ボックスにチェックを入れることをお勧めします。)

5 - DeviceのApplication keyを追加します。「se-identity.h」で指定されたApplication keyを入力し、SET DEVICE-KEYSを選択します。

LoRa-E5 miniセンサノードのファームウェアを実行し、ChirpStack LoRaWANネットワークサーバへの参加を確認

(注:LoRa-E5 miniボードはTera TermがインストールされたPCと接続する必要があります。)

1 - Tera Termシリアル端末のセットアップ - COM ポート番号を確認し、Tera Term を起動し、以下のように設定します。

image

2 - LoRa-E5 mini boardがChirpstack LoRaWANネットワークに参加しているかシリアルターミナルで確認 - ボードに電源を入れ、Tera Termシリアル端末でネットワークへの参加を確認します。

image

3 - LoRa-E5 miniボードがネットワークに参加していない場合のオプション手順です。Chirpstackで、Applicationsを選択し、Applicationに「FarmTest」、Deviceに「LoRaE5mini」、そしてCLEAR DEVNONCEを選択します。Tera Termのシリアル端末でネットワークに参加しているか確認します。

JEDI Pro Generic LoRaWAN Custom Data CollectorとChirpStackとのHTTP Integrationのセットアップおよびテスト

ChirpStackが変更され、LoRaWANメタデータとセンサデータを指定されたIPアドレスに転送するためのHTTP integrationが追加されました。MachinechatのGeneric LoRaWAN Custom Data Collector Plug-inは、指定されたIPアドレスをリッスンし、JEDI Proプラットフォームでレビュー(デバッグ有効時)および使用するためのLoRaWANデータを解析するために使用されます。
(注:Custom Data Collectorは、lorawan-linux.binとconfig.ymlの2つのファイルで構成されており、Machinechat から以下のサイトで入手可能です。 https://support.machinechat.io/hc/en-us/articles/6046199010327-Generic-LoRaWAN-Custom-Data-Collector-Beta-for-JEDI-PRO-Linux

1 - ChirpStackでHTTP Integrationを有効化します。
ChirpStackのIntegrations画面で「Add」を選択します。

2 - HTTP integrationを設定します。
Payload marshalerで「JSON」を選択し、Endpoint URLにIPアドレス(config.ymlファイルと同じIPを使用)を追加し、ADD INTEGRATIONを選択します。

3 - lorawan-linux.binconfig.ymlファイルをUbuntu Linux Mini-PCのJEDI Proがインストールされている~/jedi/pluginsディレクトリにコピーします。config.ymlファイルを修正して、デバッグを有効にし、IPリスニングアドレスを指定します。

4 - Ubuntu Linux Mini-PCの端末で「./lorawan-linux.bin ./config.yml」を使ってコマンドラインからCustom Plug-Inを実行し、出力データをモニタします。データは以下のようになります(注:lorawan-linux.binファイルを実行可能にしておくことを忘れないでください)。

5 - config.ymlファイルを編集し、LoRaWANデータをJEDI Proのデータパラメータにマッピングし、デバッグを無効にします。このプロジェクトの例では、LoRaWANのcSproperty: “barometer.0”mcProperty: “barometer”にマッピングされ、LoRaWANのcSproperty: “temperatureSensor.1”mcProperty: “temperature”にマッピングされ、LoRaWANのcSproperty: “humiditySensor.2”mcProperty: “humidityr”にマッピングされるようにpropertyNamesを編集します。「setDebug:」をfalseにしてデバッグを無効にし、ファイルを保存します。

JEDI Pro Custom Data CollectorとData Dashboardのセットアップ

JEDI Proで「Settings」タブを選択し、「Data Collectors」を選択し、「Add Collector」を選択します。

Collectorのセットアップは以下のように行います。Data Collectorの名前を「LoRaWAN」(またはお好きな名前)とし、Collector Typeとして「Custom Plug-In」を選択し、Plug-In Executable fileとして「lorawan-linux.bin」を選択して、Plug-in Optionsのconfig.yml fileの場所(例えば、「/home/scutr/jedi/plugins/config.yml」)を入力し、「Run As Background Process and Monitor」のボックスにチェックを入れ、「VALIDATE PLUG-IN」を選択して機能を確認します。

JEDI Proで「Data Dashboards」を選択し、「+」を選択して新しいチャートを追加します。

データチャートを設定し、「Add」を選択すると、Data Dashboardに表示されます(以下の例を参照してください)。

image

まとめ

SeeedのLoRa-E5 miniボードは、LoRaWANセンサノードの開発、プロトタイピング、および少量展開のためのコスト効率の高いコンパクトなハードウェアソリューションを提供します。Seeedは、STMicroelectronicsのSTM32Cube MCU Package for STM32WLシリーズSDKを同社のLoRa-E5モジュールに移植することで、LoRaWANエンドノードのアプリケーション開発のための迅速かつ効率的な出発点を提供します。そして、ChirpStackのHTTP IntegrationとMachinechatのGeneric LoRaWAN Custom Data Collectorを設定し、LoRaWANエンドノードのセンサデータをJEDI Proに取り込み、IoTデータの収集、可視化、監視、そしてデータストレージを行います。SeeedのLoRaWANサンプルプロジェクトは、LoRa-E5ベースのLoRaWANセンサノードを作成し、プライベートLoRaWANネットワークを構築することに興味を持つお客様のためのクイックスタートガイドおよび一般的なリファレンスとして役立ちます。

参考資料




オリジナル・ソース(English)