概要

Raspberry PiにSkWANを実装したUSBドングルを通信モジュールとして接続し、ステーションとして動作させ、Web経由で状態を管理するサンプルプログラムを作成しました。ブラウザからRaspberry PiのURLにアクセスし、以下の情報を取得/更新します。

  • 通信モジュール(1〜4台)の設定値表示・更新
    • MACアドレス
    • ベースチャネル
    • ステーションID
    • スロットモード
    • PSK
  • 通信モジュールに接続中のエンドデバイス情報表示
    • 接続台数
    • 接続日時
    • スロット番号
    • スロットインデックス
    • MACアドレス
  • エンドデバイスからの受信データ表示
    • 受信日時
    • 受信データ
    • RSSI

構成

ハードウェア

  • 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アドレス123456789ABCDEF00123456789ABCDEF01123456789ABCDEF02123456789ABCDEF03
      ベースチャネル2125292D
      ステーションID12345678
      スロットモード32スロット
      PSK11111111222222223333333344444444
  • 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をホームディクトリにコピーした後、 以下を順に実行します。

通信モジュール管理プログラムのセットアップ

  1. RXTXライブラリをインストール
    sudo apt-get install librxtx-java

Web環境のセットアップ

  1. パッケージリポジトリを更新
    sudo apt-get update
  2. Apache2をインストール
    sudo apt-get install apahce2
  3. PHP5をインストール
    sudo apt-get install php5
  4. スクリプトをドキュメントルート(/var/www/html)にコピー
    cd ~
    cp -r html/* /var/www/html
  5. パーミッションを設定
    sudo chmod -R 777 /var/www/html/kvs
    sudo chmod -R 777 /var/www/html/order

動作確認

  1. 通信モジュールをRaspberry Piに接続
  2. デバイス操作のパーミッション付与
    sudo chmod 666 /dev/ttyUSB*
  3. 通信モジュール管理プログラムを起動
    cd ~/bin
    java -cp .:/usr/share/java/RXTXcomm.jar -Djava.library.path=/usr/lib/jni Test
  4. ブラウザから次のURLにアクセス(10秒ごとに自動更新)
    http://<Raspberry PiのIPアドレス>/index.php
  5. 任意の通信モジュールにエンドデバイスを接続
    (1番目の通信モジュールに接続する場合)
    SKSREG S1 1111000000000000
    SKSREG S8 21
    SKSETPSK 11111111222222223333333344444444
    ...
    ...
    (ビーコンを受信すると、次のタイミングで自動で接続開始)
  6. 接続後、ブラウザをリロード(エンドデイバス情報を表示)
  7. MACアドレスを変更し、2台目のエンドデバイスとして接続
    SKSREG S1 2222222200000000
    SKSREG S8 21
    SKSETPSK 11111111222222223333333344444444
    ...
    ...
    (ビーコンを受信すると、次のタイミングで自動で接続開始)
  8. データを送信
    SKSEND 1 0000000000000000 4 11223344
    OK
    ...
    ...
    SKSEND 1 0000000000000000 8 1122334455667788
    OK
    ...
    ...
  9. 対向の通信モジュールでERXDATAイベント発生後、ブラウザ画面の「受信データ」をクリック (受信データを時系列で表示)

ソース補足

通信モジュール管理プログラム

開発環境

  • Ubuntu 16.04
  • Eclipse 4.6.1(Neon)
  • RXTX(以下の手順で導入、設定)
  1. sudo apt-get install librxtx-java
  2. プロジェクトのプロパティ→Java Build Path→Libraries→Add JARs...から"RXTXComm.jar"を追加
  3. 追加後一覧に表示されたRXTXComm.jarを展開→Native library locationを選択→Edit...から"/usr/lib/jni"を設定

StationModule.java

  • コンストラクタ最後の引数はデバッグスイッチです。
    true: 通信モジュールとの送受信文字列を出力する
    false: 出力しない
    

KVS.java

  • Webドキュメントルートが"/var/www/html"以外のとき、定数KVS_DIR, UPDATE_ORDER_DIRを変更してください。
    public static final String KVS_DIR = "/var/www/html/kvs/";
    public static final String UPDATE_ORDER_DIR = "/var/www/html/order/";

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-11-06 (日) 22:54:40 (2027d)