Interested_Spresenseのアイコン画像
Interested_Spresense 2023年12月19日作成 (2023年12月19日更新) © CC0 1+
セットアップや使用方法 セットアップや使用方法 閲覧数 279
Interested_Spresense 2023年12月19日作成 (2023年12月19日更新) © CC0 1+ セットアップや使用方法 セットアップや使用方法 閲覧数 279

Spresense 向けWiSUNボードを使ってみよう

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

こちらは、まだ、ライブラリ登録はしていません。
コーディネーター動作機能を追加したら登録しようかなと思っています。

サンプルプログラム

ですので、現時点で、エンドデバイスとして、コーディネーターへのダミーデータの送信を行うサンプルのみ追加しています。

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/

サンプルコードですが、非常にシンプルなものになっています。

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からデータの送信ができました!

次は、コーディネーター対応を仕様かな…。

ログインしてコメントを投稿する