wip
プロジェクトステータス:
主なアイデアは、STM32WB55 NucleoボードでSemTech LORA SX1272MB2DASシールドを使用できることです。残念ながら、このシールドでST(I-Cube-LRWAN)が利用できるコードは、いくつかのヌクレオボード(L053RG、L073RZ、L152REおよびL476RG)でのみ利用可能です。
デリバティブのアイデアは、ロラとBLEと結婚することです。最近では、さまざまな理由(設定、プロビゾン、フオタなど)で多くのIoTオブジェクトにアクセスできますが、それは主にスマートフォンと互換性があるためです。 STM32WLセリエにはBLEがなく、STM32WBセリエにはLORA機能がありません。
さて、SX1272とWB55でペアを作成し、柔軟なIoTプロジェクトのために2つのチップの組み合わせを許可する機会がありました。 WB55セリエはBLEに限定されないことに注意してください。コプロセッサのファームウェアは、ZigbeeやOpenthreadなどの2.4GHzの横方向プロトコルを処理できます。したがって、長距離と短距離RF通信の組み合わせは興味深いものです。
このプロジェクトは、既存のコードとライブラリのポートにすぎませんが、解決すべき技術的な問題がいくつかあるため、一部の開発者のセットアップ時間を節約する可能性があります。
今後のLORA 2.4GHzでは、これは移行中の仕事と見なされます。 SX1280は、1つのチップで短距離通信と長距離通信を組み合わせます。よく見たいと思うかもしれません。
それは簡単なものです。 SemTech SX1272MB2XAS LORA MBED SHIELDはArduino互換シールドであり、Nucleoボードには対応するコネクタがあります。テクニカルブリーフ:
前述のように、STM32WB55 Serieはここでターゲットであり、P-Nucleo-WB55RGは遊ぶのに最適なボードです。テクニカルブリーフ:
一度接続すると(簡単なことはありません)、結果のオブジェクトがここにあります。 

ボードに電力を供給する前に、アンテナを接続することを忘れないでください。 RFアンプの出力に損傷を与える場合があります(ただし、かなり低い電力です)。もちろん、Ping Pongにはそれぞれ2つを購入することが少し必要です。
| パッケージ | バージョン |
|---|---|
| stm32cubeide | 1.7 |
| STM32CUBEMX | 6.3.0 |
| FW_WB | 1.12.1 |
| i-cube-lrwan | 2.0 |
コードの大部分は、STおよびSEMTECHサブライセンスでカバーされています。適切な使用については、それぞれの契約をチェックしてください。
| 成分 | 著作権 | ライセンス |
|---|---|---|
| 元のアプリケーションソース | stmicroelectronic | STライセンス契約SLA0044 |
| Lorawan®Stacks | semtech | BSDは、SemTech部品のライセンスを修正しました |
| cortex®-m cmsis | ARM LTD | BSD-3-ClauseまたはApacheライセンス2 |
私のお気に入りの開発環境はLinuxですが、STツールもMacとWindowsで利用できます。最初の2つはセットアップが簡単で、通常は問題やドライバーの問題はありません。まあ、本物のテクノロジー・サバビーはすでにそれを知っています。
私はIDESの大ファンではありませんが、STM32CudeideはOKとSTプラグインが役立ちました(MX、ソフトウェア拡張のダウンロード、...)。 Stmicroは、一部のLoraシールドにソフトウェア拡張パッケージを提供しています。上にリンクされているように、それはi-cube-lrwanであり、低レベルのSX1272ドライバー(SPIを介して)やLorawanスタック(1.0.3互換)などのプロジェクトとライブラリの例を含んでいます。
このプロジェクトは、依存関係なしでSTM32Cudeideで簡単にオープンできます。すべてのコードは、stからWBまたはLorawan firmareをインストールする必要はありません。プロジェクトを開いて構築します(LinuxとMacOSでテストします)。ただし、CPU2用にBLEスタックファームウェアをインストールする必要があります。ここでは、 stm32wb5x_ble_stack_full_fw.binが点滅しました。すべてのStacksファームウェアは、STM32WB_COPRO_WIRLESS_BINARIES/STM32WB5XディレクトリSTM32CUBEWBファームウェアパッケージのディレクトリと、このためのボードをプログラムする方法で提供されます。一度行う必要があります。
実験全体には、いくつかの追加のツールが必要でした。 Nordic SemiconductorからDesktop 3.7.0(Linux、Mac、およびWindowsで利用可能)にNRF Connectを備えたMighty NRF52840 USBドングルを使用して、BLE接続をテストしました。スマートフォンがそれを行うことができることを知っています。iOSまたはAndroidでLightBlueを使用しますが、UUIDまたはデバイス名を台無しにすると、プラットフォームはキャッシュされたデータが失われる傾向があるため、Nordicのような開発ツールで何が起こっているのかがわかります。
ロラワンの部分では、TTNは素晴らしいものであり、私はローカルテストのために安価なロラワンゲートウェイ、TTIG(Raspberry PiのRak Hatsよりも安い)を購入することを選択しました。ゲートウェイはTTNサービスにハードコードされていますが、独自のLNSに接続する方法が必要です。
それが最初のステップでした。物事を機能させると、そのために低レベルのRF伝送の例を選択しました。 ST/SEMTECHコードを移植することは、WB55の再構成を扱うことの問題です。
Nucleo WB55ボードとSX1272MB2DASシールドの間のピンマッピング:
| SX1272MB2DAS | P-Nucleo-STM32WB55 | Arduinoコネクタピン名 |
|---|---|---|
| dio0 | PC6 | D2 |
| dio1 | PA10 | D3 |
| dio2 | PC10 | D4 |
| dio3 | PA15 | D5 |
| NSS | PA4 | D10 |
| sclk | PA5 | D13 |
| 味噌 | PA6 | D12 |
| モシ | PA7 | D11 |
| リセット | PC0 | A0 |
したがって、最初は何も互換性がありません。 SPI1ピンセットマッチ、NSS、リセットピンも問題ありません。しかし、IRQラインを使用した最初のヒックアップがここにあります。 PC6はexti6 IRQライン(exti9_5_irqn)を使用しますが、PA10、PC10、PA15は同じexti IRQライン、つまりexti15_10_irqnを共有しています。
したがって、無線インターフェイス定義は、Nucleo-WB55ボード(SX1272MB2DAS_CONF.H)に一致するように変更されています。また、IRQハンドラーは、対応するSX1272 IRQハンドラーを呼び出す前にGPIO(DIOX)状態を確認するように変更されています(STM32WBXX_IT.Cソースファイルをチェックしてください)
RTCには、LSEにセットされたクロックソースがあります。
元のプロジェクトファイルレイアウトもわずかに変更されています。元のファイルの統合は、プロジェクトを変更する可能性を維持するために、MX生成プロジェクト(SX1272.IOC)で行われました。ただし、矛盾するコードが生成される可能性があるため、ある程度の慎重なものをとる必要があります。
このコードで2つのボードをプログラミングすると機能し、予想どおり、pingメッセージに対するポンの応答を受信する最初のボードがマスターになり、もう1つはスレーブになります。 LEDステータスを反映しました(以前は元のコードで計画されていたように)。 1つは赤を点滅させ、もう1つは緑色のLEDが短い時間の後に点滅します:ビデオ。
BLEコードは完全にMX生成されたものです。 MXプロジェクトで適切に設定する必要があるため、すぐに機能するものをすぐに使用することは簡単ではありませんでした(それは別の記事になる可能性があります)。その目的のためにBLEテストプロジェクトを別々にセットアップしましたが、それが機能すると、コードをLORAプロジェクトに統合して、2つの走行を並べて実行しました。
したがって、BLEテストソフトウェアは、HRS(心拍数センサー)周辺コードにすぎません。これは、ハードウェアタイマーサーバー(hw_ts)と呼ばれるまったく異なるタイマーフレームワークに基づいています。 Semtech Loraライブラリは、これに基づいているのではなく、HAL RTCドライバーに基づいたSTM32_Timerユーティリティに基づいています。ユーティリティライブラリとRTCアダプターを削除して、プロジェクト全体がhw_tsのみに依存しています。 LORAライブラリは、実際には中間API(Timer.H)に依存しています。これは、代わりにhw_tsが使用されるように簡単に書き換えることができました。一方、Ping Pongアプリケーションは、以前のユーティリティライブラリに依存しています。その部分でいくつかの変更により、コード全体がhw_tsのみに依存するようになりました。
Ping PongアプリケーションとBLEコードで定義されたTaskIDSをマージする必要があります。幸いなことに、2つはSTM32_ sequencerユーティリティを使用します。適切に完了したら、STM32WB55ボードで同時に完璧に実行されているLora Ping PongアプリケーションとHRS BLEアプリケーションを正常に作成しました。
app_ble.cコードを変更したように、広告化された(可視)名前がSTM32 UDNに基づいているため、同時に実行されているボードを区別できます。
便利なデモのために、私は専用のGATTサービスを書き、両方のボードをBLEで尋問できるようにし、LORAノードがどの役割(マスターまたはスレーブ)と送信/受信したPing/Pongの数を知ることができます。このために、私はBLEコードをわずかに適応させたので、Blue LEDはBLE接続状態を反映します。カスタムサービス(MXによって生成されず、乱雑すぎます)には、2つの特性があります。1つはノードの役割(ピンポン同期後のマスターまたはスレーブ)と、受信したPingフレーム(スレーブノード)またはポンフレーム(マスターノード)のカウンターであるもう2つの特性があります。 2つの同期ボードに接続されたNRF接続のスクリーンショットは次のとおりです。 
それは、BLEによって制御されるわずかに異なるLORAアプリケーションにもう少し時間を費やすことを好みました。これが次のステップです。
Lorawanスタックは、i-cube-lrwan拡張パッケージで提供されるSemtechによるものです。最終デバイスにLORA Alliance認定が必要な場合、1.0.3に準拠しており、認定ソフトウェアパッケージが含まれています。
繰り返しますが、コードはBLEスタックとは異なるRTCラッパーに依存しているため、そのために変更されています。初期のHWタイマーサーバー設定が2つのスタックを同時に実行するには限られているため、タイマーの数が増加しました(hw_if.hファイルが変更された後に変更されました)。
元の例であるLorawan End Nodeは、非常に完全なデータセットを送信し、テストフレームを簡単なテキストに大幅に削減しました。
このデバイスはOTAAを使用してネットワークに参加するように設定されているため、Deveui、Joineui、Appkeyの3つの要素が必要です。 DeveUIは、ハードウェアデバイスのユニークな識別子であり、STM32「シリアル番号」から構築されています。 joineUI(または以前のappeui)識別子は、サーバー側のアプリケーション分離に使用されます。 AppKeyは非常に重要です(AES128キー)、Mutは非常に密かに保持されます。ソースコードは、最終使用のために変更する必要がある値に任意に設定します。秘密は、Secure Element APIを使用してSemTechコードによって行われます。この場合、仮想SEですが、実際のものを使用する場合は非常に便利です。
JoineUiとAppkeyはse-Identity.hファイル( lorawan_app_keyおよびlorawan_nwk_keyがOTAAの値である必要があります。後者はMICの計算に使用され、JoinRequestがLNSで有効になるために必要です)。
TTNおよびTTIGゲートウェイでのテストでは、次のものが与えられます。

宣言的な部分の場合。

2つのボードがそれぞれのJoinRequestから肯定的な返信を得たら。
公開するために特別なGATTサービスが書かれています。
| 属性 | アクセス | コメント |
|---|---|---|
| 状態 | 読む | JoinRequestが完了したかどうか |
| deveui | 読む | 計算されたdeveuiの読み取り |
| Joinui | 読む | ハードコーディングされたJoinui/appeuiの読み取り |
| データ | 書く | 送信されるデータ(最大16バイト)。デフォルトは「ここでstm32wb55!」になります。 |
| 期間 | 書く | データが送信される秒単位の期間(デフォルトは10秒になります) |
| rssi | 読む | ダウンリンクメッセージが受信されたときに更新されます |
| SNR | 読む | ダウンリンクメッセージが受信されたときに更新されます |
注:期間を台無しにしないでください、1%のデューティサイクル制限があります。デフォルト設定を使用すると、モジュールは10秒ごとに15バイトを送信します。 SF7BW125では、これは最低7秒で行うことができます。
ここに、それに接続したときの露出した特性のイラスト:

つづく