Kiwi TLM922S LoraWan ライブラリを作ってみた。

LoraWan/P2P通信に対応しているTLM922S用のライブラリを作ってみた。Arduino(AVR/ESP8266/ESP32/ARM/…)/Windows/Linuxに対応している。

LoRaモジュール TLM922S-P01A
TLM922S搭載LoRa評価ボード(Arduinoシールド) ADB922S

TLM922Sの文字列コマンドを関数に置き換えただけのライブラリであるが基本ロジックのみ試験しただけで通信試験も全機能試験も行っていないので不具合が残されている可能性があることに注意するべし。

ちなみにAVRでのRAM消費量を抑えるためにPROGMEMを利用したため若干複雑になってしまったがおかげで328/32u4などでも使えるようになった。

【Arduinoサンプル】

【Linux/Windowsサンプル】

【修正】
2023-10-10
LoRaWANのClass-C対応のためにlorawan_handle()を追加。LoRaWANの受信(A/C)のためにはlorawan_handle()を常に実行し続ける必要がある。

2023-10-06
tlm922s.hのマクロ定義の修正。

2023-10-05
バグ修正と改良。

2023-10-04
まだ見逃していた機能があった。製品CDに新旧バージョンのドキュメントが同梱されていて古いのを見たり新しいのを見たりしてたのがまずかったようだ。
旧: TLM922S Command InterfaceUser’s Guide-1.1.1.pdf
新: TLM922S Product Specification-2.0.0.pdf
名前が違うので異なるドキュメントかと思ってたら単にバージョンの違いだけみたい。紛らわしいので同じ名前にして欲しかったかも...
STATUS lorawan_get_uplink_dwell_table(uint8_t index, uint32_t &minfreq, uint32_t &maxfreq, uint8_t &uplinkdwell);

2023-10-03
見逃していた機能の追加。再度調べてみたら次々と...古いドキュメント見てたのかも。(-_-;)
STATUS lorawan_set_battery(uint8_t batterylevel);
STATUS lorawan_set_multicast_key(uint8_t index, const char *address, const char *nwkskey, const char *appskey);
STATUS lorawan_set_lbt_retry(uint8_t retrycount);
uint8_t lorawan_get_battery(void);
bool lorawan_get_multicast_key(uint8_t index, const char * &address, const char * &nwkskey, const char * &appskey);
STATUS lorawan_set_uplink_dwell_table(uint8_t index, uint32_t minfreq, uint32_t maxfreq, uint8_t uplinkdwell);

hex2bin()の汎用化とpublicアクセスへの変更。引数 len が -1 のときは入力データをヌル終端文字列とみなす。
static size_t bin2hex(char *buf, size_t size, const char *bin, int len = -1);
static size_t hex2bin(char *buf, size_t size, const char *hex, int len = -1);

2023-10-02
tlm922s.hのマクロ定義がバグッてたのとTLM922Sのシリアル通信速度の規定値(9600bps)に合わせてコードを修正。ついでにP2Pでエコーバック通信試験をしてみた。宛先アドレス指定がなくて所謂ブロードキャスト通信となるようだ。

【ライブラリ】