概要
- SeedStudioのLoRaチップを搭載デバイスである
STM32WLE5JCを試してみる- というか実際にはSTMのLoRaチップおよびMCUが統合されたもの
- SeedStudio自体はそれをUSB経由で便利に扱えるように統合しただけ
- 非常に調達しやすいのでよく市場で使われるやつの1つだと思う
- ひとまずLoRaWANネットワークへのジョインおよび任意のデータ送信までやる
前提
- 既にほんの少しはLoRaWANについて知ってる人向けに書くので、専門用語的な説明は割愛する
参照情報
-
SeedStudioの商品説明ページ
- 大体はここでわかる
-
LoRaチップのATコマンドリファレンス
- ここ読めばすべてがわかる
ざっくり使いそうなコマンドたちを羅列
IDとかの表示やKEYなどの設定
-
AT+IDを投げるだけ, これで少なくとも工場出荷時設定が表示される - もし任意の値に変更してるなら当然それが表示される
AT+ID
- もしLNS側での登録が必要ならここで取得した値をメモっておいて設定する感じになる
- もちろん
AT+ID=DEVEUI,FF:FF:FF:FF:FF:FF:FF:FFみたいな感じで任意の値に変更することも可能
- もちろん
AT+ID
+ID: DevAddr, FF:FF:FF:FF
+ID: DevEui, FF:FF:FF:FF:FF:FF:FF:FF
+ID: AppEui, FF:FF:FF:FF:FF:FF:FF:FF
-
APP+KEY=APPKEYで任意の値に設定 - こちらは取得系は存在しない
AT+KEY=APPKEY,FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
- GETしようとしてもだめ
AT+KEY=APPKEY
+KEY: ERROR(-1)
ジョインモードの取得あるいは変更
- もう今ではOTAAでの運用が主だと思うのでそちらに明示的に変えておいたほうがいい
- というよりLNS側の設定 (TTNやAWS)に合わせればOK
- 工場出荷時設定に戻してしまうとここが
ABPになってたりするのでジョインがコケる可能性アリ
AT+MODE
+MODE: LWABP
- ABP → OTAAへの変更
AT+MODE=LWOTAA
+MODE: LWOTAA
LoRaWANネットワークへのジョイン
AT+JOIN
+JOIN: Start
+JOIN: NORMAL
+JOIN: Network joined
+JOIN: NetID 000000 DevAddr FF:FF:FF:FF
+JOIN: Done
- KEYが違うとか、JOINモードが違うときは以下のようにエラーになる
AT+JOIN
+JOIN: Not in OTAA mode
ADRの変更
- 現代だとまぁまずオンで良いと思う
AT+ADR=ON
クラスの変更
- デフォはAだがBやCに返ることももちろん可能
AT+CLASS=C
DR設定
- デフォでは大丈夫だと思うが工場出荷時設定に強制リセットかけると吹っ飛ぶのでDR設定はしておいたほうがいい
- 後述のFDEFAULTコマンドで工場出荷時にリセットするとEU向けになってるので確定で失敗する (そもそもそれで電波吹いたら違法)
AT+DR=AS923
工場出荷時にリセット
-
AT+FDEFAULTを投げればOK - 工場出荷時に... というか、なんというかデバイスとしてのデフォ値に戻るような感じ
- そのため、気軽にこのコマンド投げるとアジア向けのリージョン設定とかも飛ぶので注意
データ送信
- JOINさえできたら、
AT+MSGで任意データをぶん投げられる
AT+MSG=Hello
+MSG: Start
+MSG: FPENDING
+MSG: RXWIN1, RSSI -37, SNR 6.0
+MSG: Done
参考: AWS IoT側でのアップリンク通信の確認
AT+MSGでぶん投げたとき本当にLNSまで届いているかな?と不安になると思う。
まぁすんなり通れば、そもそもLNS側で簡単に確認可能だろうが、色々やってる最中だと本当にうまくいってるかどうかすらわからず調査したくなる。
AWS IoTの場合は、LoRaWANデバイスを作るときに 送信先 としてMQTTトピックを指定しておけばダウンリンクなどの通信たちはLoRaWANネットワークを抜けAWS IoTのMQTT空間に貫通してくるので簡単に確認が可能になる。
こうやって何らかのMQTTトピックに流れるようにしておけば、さらにそこからMQTTテストクライアントでサブスクライブして見てみるとか、CloudWatch Logsで見てみるとか、Lambdaで捕まえてなにか処理してみる...とかがすごい簡単にできるようになる。
例えばこんな感じで流れる。単純にペイロードだけが流れるわけではなくメタデータも一緒についてくるのですごく便利。
{
"MessageId": "FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF",
"WirelessDeviceId": "FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF",
"PayloadData": "SGVsbG8=",
"WirelessMetadata": {
"LoRaWAN": {
"ADR": true,
"Bandwidth": 125,
"ClassB": false,
"CodeRate": "4/5",
"DataRate": "2",
"DevAddr": "FFFFFFFF",
"DevEui": "FFFFFFFFFFFFFFFF",
"FCnt": 0,
"FOptLen": 0,
"FPort": 8,
"Frequency": "922600000",
"Gateways": [
{
"GatewayEui": "FFFFFFFFFFFFFFFF",
"Rssi": -33,
"Snr": 13.25
}
],
"MIC": "24fb8898",
"MType": "UnconfirmedDataUp",
"Major": "LoRaWANR1",
"Modulation": "LORA",
"PolarizationInversion": false,
"SpreadingFactor": 10,
"Timestamp": "2025-12-08T09:45:36Z"
}
}
}
備考
- ここでは言及してないが
RETRY設定などもあるので、実運用ではそのへんも要調整
