概要 †
Raspberry PiにSkWANを実装したUSBドングルを通信モジュールとして接続し、ステーションとして動作させ、Web経由で状態を管理するサンプルプログラムを作成しました。ブラウザからRaspberry PiのURLにアクセスし、以下の情報を取得/更新します。
- 通信モジュール(1〜4台)の設定値表示・更新
- MACアドレス
- ベースチャネル
- ステーションID
- スロットモード
- PSK
- 通信モジュールに接続中のエンドデバイス情報表示
- 接続台数
- 接続日時
- スロット番号
- スロットインデックス
- MACアドレス
構成 †
ハードウェア †
- Raspberry Pi Model B+ V1.2
- OS:Raspbian Jessie with PIXEL(2016-09-23)
- SkWAN実装USBドングル
- 通信モジュール用:1〜4台、Raspberry Piに接続
- エンドデバイス用:1台以上
ソフトウェア †
- 通信モジュール管理プログラム(Java)
- 通信モジュールへのコマンド発行/応答受信、イベント受信を担い、KVSに書き出します。
- Web経由で書き出されたKVSを参照し、通信モジュールの設定を更新します。
- SKSTACK API for JAVAをSkWAN向けに移植しました。
- 下表の通り、初期値を設定します。
項目 | 通信モジュール0 | 通信モジュール1 | 通信モジュール2 | 通信モジュール3 |
---|
MACアドレス | 123456789ABCDEF00 | 123456789ABCDEF01 | 123456789ABCDEF02 | 123456789ABCDEF03 |
ベースチャネル | 21 | 25 | 29 | 2D |
ステーションID | 12345678 |
スロットモード | 32スロット |
PSK | 11111111222222223333333344444444 |
- Web管理スクリプト(PHP)
- KVSを参照し、通信モジュールの状態を表示します。
- 設定値の更新要求をKVSに書き出します。
- KVS(Key-Value Store)
- 現在はテキストファイルを用いています。キー=ファイル名、値=ファイル内容、としています。
- キーと値の対応は下表の通りです。
キー | 値 |
---|
Module.Count | 通信モジュール個数 |
Module.{モジュール番号}.{項目名} | MACアドレス等、通信モジュールの設定値 |
Module.{モジュール番号}.EndDevice.Count | 接続中のエンドデバイス台数 |
Module.{モジュール番号}.EndDevice.{エンドデバイス番号}.{項目名} | MACアドレス等、エンドデバイスの情報 |
Module.{モジュール番号}.Rx.{MACアドレス} | {MACアドレス}を送信元として受信したデータ |
- 通信モジュール管理プログラムは/var/www/html/kvs/{モジュール番号}/に現在値を書き出し、Web管理スクリプトがこれらを読み取ります。
- Web管理スクリプトは設定更新要求を/var/www/html/order/{モジュール番号}/に、上記キーをファイル名としたテキストファイルとして書き出します。通信モジュール管理プログラムはこれを読み取り、値を更新、更新後の値を/var/www/html/kvs/{モジュール番号}/に書き出します。
セットアップ手順 †
Raspberry Piにユーザpiでログインし、パッケージのbin, htmlをホームディクトリにコピーした後、
以下を順に実行します。
通信モジュール管理プログラムのセットアップ †
- RXTXライブラリをインストール
sudo apt-get install librxtx-java
Web環境のセットアップ †
- パッケージリポジトリを更新
sudo apt-get update
- Apache2をインストール
sudo apt-get install apahce2
- PHP5をインストール
sudo apt-get install php5
- スクリプトをドキュメントルート(/var/www/html)にコピー
cd ~
cp -r html/* /var/www/html
- パーミッションを設定
sudo chmod -R 777 /var/www/html/kvs
sudo chmod -R 777 /var/www/html/order
動作確認 †
- 通信モジュールをRaspberry Piに接続
- デバイス操作のパーミッション付与
sudo chmod 666 /dev/ttyUSB*
- 通信モジュール管理プログラムを起動
cd ~/bin
java -cp .:/usr/share/java/RXTXcomm.jar -Djava.library.path=/usr/lib/jni Test
- ブラウザから次のURLにアクセス(10秒ごとに自動更新)
http://<Raspberry PiのIPアドレス>/index.php
- 任意の通信モジュールにエンドデバイスを接続
(1番目の通信モジュールに接続する場合)
SKSREG S1 1111000000000000
SKSREG S8 21
SKSETPSK 11111111222222223333333344444444
...
...
(ビーコンを受信すると、次のタイミングで自動で接続開始)
- 接続後、ブラウザをリロード(エンドデイバス情報を表示)
- MACアドレスを変更し、2台目のエンドデバイスとして接続
SKSREG S1 2222222200000000
SKSREG S8 21
SKSETPSK 11111111222222223333333344444444
...
...
(ビーコンを受信すると、次のタイミングで自動で接続開始)
- データを送信
SKSEND 1 0000000000000000 4 11223344
OK
...
...
SKSEND 1 0000000000000000 8 1122334455667788
OK
...
...
- 対向の通信モジュールでERXDATAイベント発生後、ブラウザ画面の「受信データ」をクリック
(受信データを時系列で表示)
ソース補足 †
通信モジュール管理プログラム †
開発環境 †
- Ubuntu 16.04
- Eclipse 4.6.1(Neon)
- RXTX(以下の手順で導入、設定)
- sudo apt-get install librxtx-java
- プロジェクトのプロパティ→Java Build Path→Libraries→Add JARs...から"RXTXComm.jar"を追加
- 追加後一覧に表示されたRXTXComm.jarを展開→Native library locationを選択→Edit...から"/usr/lib/jni"を設定
StationModule.java †
KVS.java †