この記事は、2023年の M5Stack アドベントカレンダー の 17日目の記事です。
はじめに
前回は、SenseCAP T1000 が送っているデータを M5Stack で覗いてみました。今回は、受信したデータを LoRa のゲートウェイのように AWS IoT Core for Wireless に転送してみます。
処理概要
デバイスは Grove-Wio-E5 を使用します。このデバイスでは周波数を指定して1つのチャンネルを受信することができます。LoRaWAN の仕様では、ゲートウェイは2つのチャンネルでデバイスから送られる電波を待機するようになっており、SenseCAP T1000 はゲートウェイ向けに2つのチャンネルでランダムに(実際にはチャンネルの空きを判断しながら)送信します。今回はそのうちの片方を決め打ちで受信するようにします。
受信したデータは LoRaWAN の仕様で暗号化されています。LoRaWAN のゲートウェイでは、通常暗号化されたペイロードはそのままサーバーに転送します。今回のプログラムでは受信確認のため、前回同様 util-lorawan-packets を使って復号化してログを表示しています。
AWS IoT Core for Wireless は、LoRa の BasicStation と互換性のあるデータを送受信します。認証はサーバー認証、クライアント認証の両方を使用し、ヘッダーに余計なヘッダーが指定されていると認証が切断されます。WebSocket 通信は Links2004/arduinoWebSockets を使用しましたが、上記対応を行うため一部修正しています。
ソースコード
ソースコードは こちら をご覧ください。
以下の値を設定します。
- WiFi SSID/パスワード
- 利用するデバイス(SenseCAP T1000など)のアドレス
- キー(nwkSKey/appSKey)
- ルーター(本機)のアドレス
- AWS IoT Core for Wirelessのエンドポイント
- AWS IoT Core for Wirelessの証明書3つ(サーバー、クライアント)
実行例
M5Stack から送信された情報を AWS IoT Core for Wireless で受信することができました。
さいごに
広いエリアをカバーするゲートウェイとしては使えないものの、M5Stack がゲートウェイの動作の検証用に活用できました。
電波は国民の財産ですが、ほぼすべての帯域は既得権者が保有していて、アマチュアが遠距離通信できる帯域は限られています。デジタル化も進んでいて気軽に触れられなくなってしまっています。かつて同じ周波数帯にパーソナル無線という通信がありましたが、今回同じ周波数帯ということで懐かしさも感じました。