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/) ![キャプションを入力できます](https://camo.elchika.com/6fe68029a8d48e993ea57e7ee4443c05f70dc875/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f35313935656231352d393966302d346438342d383363652d6562366533343062303533642f38393966623562612d356332322d346434652d623438662d323736393965646465623832/) 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) ![キャプションを入力できます](https://camo.elchika.com/ab2652e594e7cd1e06dada95fac1df93015d7e13/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f35313935656231352d393966302d346438342d383363652d6562366533343062303533642f65326239643566352d643631382d343031332d393234352d643834303231343761323733/) 対向デバイスは、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/) ![キャプションを入力できます](https://camo.elchika.com/51fb47155134b5cf86b1e8a89570e0c8beedfa68/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f35313935656231352d393966302d346438342d383363652d6562366533343062303533642f32376230393535392d636665642d346531332d386265362d343762653361613961623734/) こちらを使って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) ![キャプションを入力できます](https://camo.elchika.com/9b67a29c2c275f7cf0d3aa4e66c1979e64018107/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f35313935656231352d393966302d346438342d383363652d6562366533343062303533642f39636463343664322d623137322d343338362d386239322d396239613462363064303063/) このモジュールは、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) ![キャプションを入力できます](https://camo.elchika.com/aedd3c86631e195ae484191da075513286d74e83/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f35313935656231352d393966302d346438342d383363652d6562366533343062303533642f62363335306134312d353238302d343534302d613636622d666163633935326339316137/) 基本的に、こちらのライブラリで動作するのですが、少し使いにくかったことと、今後、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)]; } ``` このようにダミーデータを送れば、以下のようにターミナルに受信データが表示されます。 ![キャプションを入力できます](https://camo.elchika.com/5158b8feba04a17158cb37698b8e2b35d8352fbb/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f35313935656231352d393966302d346438342d383363652d6562366533343062303533642f64653839353363312d366365322d346562632d383530312d336231383732663531323436/) これで、Spresenseからデータの送信ができました! 次は、コーディネーター対応を仕様かな…。