LoginSignup
3
0

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

Posted at

初めに

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、

で提供されています。こちらは現時点では、エンドデバイスのサンプルのみの提供となっています。

また、このデバイスのコマンド仕様は、こちらにすべてありますので、これを使ってライブラリを拡張可能です。

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に載せました。

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

サンプルプログラム

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

APIは、非常に簡単にReadmeに書いておきました。
詳細は、上記のデバイスのUARTコマンド仕様を読んでもらえると良いです。

PC側のドングルに設定するコマンドも置いて置きました。

TeraTermなどで流し込んてもらえればドングルがコーディネーターとして動作します。

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

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

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

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0