Interested_Spresense が 2023年12月19日03時27分43秒 に編集
初版
タイトルの変更
Spresense 向けWiSUNボードを使ってみよう
タグの変更
spresense
Arduino_IDE
WiSUN
LPWA
記事種類の変更
セットアップや使用方法
ライセンスの変更
(CC0 1+) Creative Commons Public Domain Dedication version 1.0 or later
本文の変更
# 初めに WiSUNのボードを以前から持っていて、Arduinoライブラリ化しておこうとしていた件を記事化しようと思って、ようやく書けました。WiSUNは、WiSUNは、京都大学の原田先生が生みの親の日本発のLPWAなので興味もあり頑張って欲しいと思っていました。 Home Area Network(HAN)や HEMSで話題になっていたけど、実際に触ってみたことがなかったのですが、 Spresense にAddonボードの形式で提供されたので、触れるいい機会になりました。 # 用意するもの SpresenseはMainボードだけで良いです。 [**SPRESENSEメインボード[CXD5602PWBMAIN1]** https://www.switch-science.com/catalog/3900/](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](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/](https://www.ratocsystems.com/products/wisun/usb-wisun/rs-wsuha/)  こちらを使ってPCをコーディネーターにします。 # ブログ(元ネタ) この記事は、以下のブログに過去に投稿したもののまとめです。 [**Spresense 向けWiSUNボードを使ってみよう** http://spresense.livedoor.blog/archives/34324898.html](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](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](https://github.com/RohmSemiconductor/Arduino/blob/master/SPRESENSE-WISUN-EVK-701/documents/BP35C0-J11(Wi-SUN%20Enhanced%20HAN)/J11_UART_IF%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E4%BB%95%E6%A7%98%E6%9B%B8_%E7%AC%AC1.1%E7%89%88.pdf)  基本的に、こちらのライブラリで動作するのですが、少し使いにくかったことと、今後、Arduinoのライブラリマネージャに登録することも鑑みて、構成の変更やArduinoライブラリっぽくしたものをGitに載せました。 https://github.com/Interested-In-Spresense/BP35C0-J11 こちらは、まだ、ライブラリ登録はしていません。 コーディネーター動作機能を追加したら登録しようかなと思っています。 # サンプルプログラム ですので、現時点で、エンドデバイスとして、コーディネーターへのダミーデータの送信を行うサンプルのみ追加しています。 https://github.com/Interested-In-Spresense/BP35C0-J11/blob/main/examples/enddvice_sample/enddvice_sample.ino APIは、非常に簡単にReadmeに書いておきました。 詳細は、上記のデバイスのUARTコマンド仕様を読んでもらえると良いです。 PC側のドングルに設定するコマンドも置いて置きました。 https://github.com/Interested-In-Spresense/BP35C0-J11/blob/main/examples/enddvice_sample/SKSTACK-IP/PAN_Coordinator.txt TeraTermなどで流し込んてもらえればドングルがコーディネーターとして動作します。 https://forest.watch.impress.co.jp/library/software/utf8teraterm/ サンプルコードですが、非常にシンプルなものになっています。 ```c 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の設定を行った後、 ```c 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からデータの送信ができました! 次は、コーディネーター対応を仕様かな…。