Spresense 向けWiSUNボードを使ってみよう
初めに
WiSUNのボードを以前から持っていて、Arduinoライブラリ化しておこうとしていた件を記事化しようと思って、ようやく書けました。WiSUNは、WiSUNは、京都大学の原田先生が生みの親の日本発のLPWAなので興味もあり頑張って欲しいと思っていました。
Home Area Network(HAN)や HEMSで話題になっていたけど、実際に触ってみたことがなかったのですが、
Spresense にAddonボードの形式で提供されたので、触れるいい機会になりました。
用意するもの
SpresenseはMainボードだけで良いです。
SPRESENSEメインボード[CXD5602PWBMAIN1]
https://www.switch-science.com/catalog/3900/
Spresense向けのWiSUN Addonボードは、SPRESENSE-WiSUN-EVK-701。
Wi-SUN Add-onボード SPRESENSE-WiSUN-EVK-701
https://www.rohm.co.jp/support/spresense-add-on-board
対向デバイスは、PCのドングルで、RS-WSUHA-J11。
Wi-SUN USBアダプター RS-WSUHAシリーズ
https://www.ratocsystems.com/products/wisun/usb-wisun/rs-wsuha/
こちらを使ってPCをコーディネーターにします。
ブログ(元ネタ)
この記事は、以下のブログに過去に投稿したもののまとめです。
Spresense 向けWiSUNボードを使ってみよう
http://spresense.livedoor.blog/archives/34324898.html
WiSUNモジュールについて
SPRESENSE-WiSUN-EVK-701に載っているWiSUNのモジュールは、BP35C0-J11です。
以下がデバイス情報になります。
BP35C0-J11 (Wi-SUN Enhanced HAN対応 無線モジュール)
https://www.rohm.co.jp/products/wireless-communication/specified-low-power-radio-modules/bp35c0-j11-product
このモジュールは、Bルート/Enhanced HAN 全モードサポートということで、コーディネーターにも、エンドデバイスにもなれそうです。
Arduino向けライブラリ
BP35C0-J11のArduino向けのライブラリは、ロームさんの公式GitHub、
https://github.com/RohmSemiconductor/Arduino/tree/master/SPRESENSE-WISUN-EVK-701
で提供されています。こちらは現時点では、エンドデバイスのサンプルのみの提供となっています。
また、このデバイスのコマンド仕様は、こちらにすべてありますので、これを使ってライブラリを拡張可能です。
BP35C0-J11(Wi-SUN Enhanced HAN)/J11_UART_IFコマンド仕様書_第1.1版.pdf
https://github.com/RohmSemiconductor/Arduino/blob/master/SPRESENSE-WISUN-EVK-701/documents/BP35C0-J11(Wi-SUN Enhanced HAN)/J11_UART_IFコマンド仕様書_第1.1版.pdfpdf
基本的に、こちらのライブラリで動作するのですが、少し使いにくかったことと、今後、Arduinoのライブラリマネージャに登録することも鑑みて、構成の変更やArduinoライブラリっぽくしたものをGitに載せました。
https://github.com/Interested-In-Spresense/BP35C0-J11
こちらは、まだ、ライブラリ登録はしていません。
コーディネーター動作機能を追加したら登録しようかなと思っています。
サンプルプログラム
ですので、現時点で、エンドデバイスとして、コーディネーターへのダミーデータの送信を行うサンプルのみ追加しています。
APIは、非常に簡単にReadmeに書いておきました。
詳細は、上記のデバイスのUARTコマンド仕様を読んでもらえると良いです。
PC側のドングルに設定するコマンドも置いて置きました。
TeraTermなどで流し込んてもらえればドングルがコーディネーターとして動作します。
https://forest.watch.impress.co.jp/library/software/utf8teraterm/
サンプルコードですが、非常にシンプルなものになっています。
void setup() {
if(!bp35c0j11.begin()){
puts("Device error");
exit(1);
}
if(!bp35c0j11.init(END_DEVICE, SLEEP_DISABLE, 0x05, 0x00)){
puts("Init error");
exit(1);
}
if(!bp35c0j11.set_auth(password)){
puts("set_auth error");
exit(1);
}
if(!bp35c0j11.start_han(pair_id)){
puts("start_han error");
exit(1);
}
if(!bp35c0j11.start_udp(mac_adr, my_port, dist_port)){
puts("start_udp error");
exit(1);
}
}
このように、デバイスの初期化、認証の設定、HANの初期化と起動、UDPの設定を行った後、
void loop() {
static unsigned char data[MAX_WISUN_DATA_SIZE] = { 'T' , 'E' , 'S' , 'T', 'A' , 'B' , 'C' , 'D', 'E' , 'F' , 'G' , 'H', 'I' , 'J' , 'K' , 'L'};
if(!bp35c0j11.send_data(data)){
puts("start_auth error");
}
for(int i=0; i<sizeof(data); i++){
data[i] = data[(i+1)%sizeof(data)];
}
このようにダミーデータを送れば、以下のようにターミナルに受信データが表示されます。
これで、Spresenseからデータの送信ができました!
次は、コーディネーター対応を仕様かな…。
投稿者の人気記事
-
Interested_Spresense
さんが
2023/12/19
に
編集
をしました。
(メッセージ: 初版)
-
Interested_Spresense
さんが
2023/12/19
に
編集
をしました。
ログインしてコメントを投稿する