ラズパイ+Wi-SUNモジュールBP35A1で無線通信 その2

前回の続き。

今回は、2組の(ラズパイ+Wi-SUNモジュールBP35A1)で送受信する実験です。

1. インストール

GitHubにリポジトリ作りました。

GitHub「Wi-SUN_EnertyMeter」からダウンロードしても良いですが,次の手順でラズパイにgitでクローン作る方が速いでしょう。

ラズパイの適当なディレクトリに移動し,gitでリポジトリをクローンします。
本エントリー公開時のブランチである origin/0.2a をチェックアウトします。
さらに,デモスクリプトy3PingPong.pyに実行権を付与します。

2. デモスクリプトy3PingPong.py

Wi-SUNモジュール通信クラスが収められたファイルがy3module.pyです。それを使ったデモスクリプトがy3PingPong.pyです。

兎にも角にも動かしてみましょう。

ラズパイ0で,コーディネータとしてWi-SUNモジュールを起動します。コーディネータとは,使用する無線チャンネルを設定する,いわゆる親機です。

$ ./y3PingPong.py --mode c

 

ラズパイ2で,デバイスとしてWi-SUNモジュールを起動します。デバイスとは,いわゆる子機で,コーディネータが設定した無線チャンネルを使ってデータを送受信します。

デバイス側は2種類の送受信方法が選べます。1つはUDP/IPによるもの,もう一つはTCP/IPによるものです。

UDP/IPによる送受信を行うには,次のコマンドを入力します。

$ ./y3PingPong.py --mode d -- transport u

TCP/IPによる送受信を行うには,次のコマンドを入力します。

$ ./y3PingPong.py --mode d -- transport t

 

 

コーディネータ側(ラズパイ0)のコンソール出力はこんな感じです。

起動シーケンスを簡単に説明すると…

  • Wi-Fiモジュールをリセット
  • EDスキャンで全チャンネルの電波強度(LQI)を調べる。
  • 最も電波が弱い,すなわち空いている0x23チャンネルで開局。
  • ペアリングIDとして「PingPong」を設定
  • ペアリングIDの重複を避けるために,同じIDのコーディネータがいないかどうか,アクティブスキャンする。
  • 任意のPAN IDを設定する。

といった感じです。

 

デバイス側(ラズパイ2)のコンソール出力はこんな感じです。

起動シーケンスを簡単に説明すると…

  • Wi-SUNモジュールをリセット
  • ペアリングIDとして,「PingPong」を設定
  • アクティブスキャンによって,同一ペアリングID「PingPong」が設定されたコーディネータ(ラズパイ0)を見つける。
  • コーディネータからもらった情報(使用チャンネル,MACアドレス,PAN ID)をもとに,各セットアップを行う。

といった感じです。

 

両方が起動した後,Ping,Pongと,データ送受信のラリー合戦が始まります。その手順は次のとおりです。

  1. デバイス → コーディネータの向きに,「Ping…(xxxx)」を送信する。
  2. デバイス ← コーディネータの向きに, Pong…(xxxx)」を返信する。

なお,(xxxx)の部分は通し番号です。また,デバイス側のコンソール出力の,各行最後の数字は往復に要した秒数です。UDPによる往復時間は,平均すると0.5秒ぐらいでしょうか。決して速いとは言えません。遅いけど遠くへデータを飛ばすように設計されたWi-SUNの仕様上,仕方なさそうです。なお,TCPによる通信では更に遅くなり,往復に1~2秒ほど要します。

Ping…(0027) 0.39
Ping…(0028) 0.30
Ping…(0029) 0.54

さて,Wi-SUNモジュール同士でデータ通信することに成功しました。次回は,いよいよスマートメーターとの通信にチャレンジします。

1 Comment

  1. Pingback: スマートメーターから瞬時電力を取得する その1 – Blue-black.ink

Leave a Comment

メールアドレスが公開されることはありません。