Technical Workshop 20080501
-
Upload
shigeru-kobayashi -
Category
Documents
-
view
1.255 -
download
0
Transcript of Technical Workshop 20080501
テクニカル・ワークショップ:無線通信デバイス
担当:小林茂(IAMAS:岐阜県立国際情報科学芸術アカデミー)
2008.05.01
参考書籍
Making Things TalkTom Igoe(2007年・O’Reilly Media)
さまざまな無線通信の方式とその特徴
2.4GHz帯を利用する代表的な無線通信方式
• Wi-Fi(IEEE 802.11b/g/n)• Bluetooth• IEEE 802.15.4/ZigBee
さまざまな無線通信の方式とその特徴
Wi-Fi Bluetooth ZigBee
IEEE規格 802.11b 802.15.1 802.15.4通信距離 約100m 約10m 約30m
最大通信速度 11Mbps 1Mbps 250kbps接続ノード数 32 7 65535電池寿命 数時間 数日 数年
ネットワーク構成 スター型 スター型 スター型・メッシュ型など主な用途 無線LAN 携帯電話 セキュリティ機器
表1 代表的な2.4GHz帯無線通信方式の比較(Bluetoothはクラスやバージョンにより異なる)
IEEE 802.15.4とZigBee
レイヤ名 定義する規格
アプリケーション層 ZigBeeアプリケーション・サポート・サブ層 ZigBeeネットワーク層 ZigBee
MAC層 IEEE 802.15.4物理層 IEEE 802.15.4
表2 ZigBee規格の階層構造
Point to Point
Point to Multi
Star
802.15.4 Coordinator802.15.4 End Device
IEEE 802.15.4で可能な構成
IEEE 802.15.4デバイスの種類
• コーディネータ(1個)• エンド・デバイス(複数)
MeshCoordinator
End DeviceRouter
ZigBeeで可能となるクラスタツリー/メッシュ構成
ZigBeeデバイスの種類
• コーディネータ(1個)• ルータ(複数)• エンド・デバイス(複数)
XBeeの特長
• IEEE 802.15.4モデルとZigBeeモデルの両方がある*1
– XBee 802.15.4– XBee ZNet 2.5
• 比較的低価格(国内モデルで4000円弱)• 日本国内でも利用できるよう認証取得済み• 利用方法を解説した書籍がある
*1 モデル間での相互接続性はない
参考資料(日本語)
• アルファ電子株式会社http://www.alpha-denshi.co.jp/seihin/toriatukai/Digi/TechDB/
– 基本的なドキュメントの日本語版– 内容的には最新でない部分もある
XBeeで実験するための準備
• ブレークアウトボードの準備– コネクタをはんだ付け– ピンをハンダ付け
• ドングル用のドライバをインストール• X-CTUをセットアップ• ファームウェアを最新版*2にアップデート
*2 現時点では1.0.A.5
ドライバのインストール(Windows XP/Vista)
• ドライバをダウンロードhttp://www.ftdichip.com/Drivers/VCP.htm
• デバイスをPCに接続• 指示に従ってインストール
ドライバのインストール(Windows XP/Vista)
• ソフトウェア検索のため、Windows Updateに接続しますか?→いいえ、今回は接続しません。
• インストール方法を選んでください→一覧または特定の場所からインストールする(詳細)• 次の場所で最適のドライバを検索する→「次の場所を含める」をチェックし→ドライバを展開したフォルダを指定
ドライバのインストール(Windows XP/Vista)
ドライバのインストール(Windows XP/Vista)
ドライバのインストール(Windows XP/Vista)
ドライバのインストール(Mac OS X)
• ドライバをダウンロードhttp://www.ftdichip.com/Drivers/VCP.htm
• 指示に従ってインストール• デバイスをPCに接続
XBeeの設定方法の説明と簡単な通信
• Windows XP/Vistaの場合– 専用ユーティリティーX-CTUを使う方法– Acknowrichを使う方法
• Mac OS Xの場合– screenコマンドを使う方法
• 共通– Processing用のスケッチを使う方法
専用ユーティリティーX-CTUを使う方法
1. X-CTUをダウンロードするhttp://www.digi.com/support/productdetl.jsp?pid=3352&osvid=57&tp=4&s=316
2. ダウンロードしたファイルを実行してインストールする
3. X-CTUを起動して該当するポートを選択する4. Serialタブを開いて通信する
Processing用のスケッチを使う方法
1. Making Things Talkのサポートページからコードをコピーする
http://www.makingthingstalk.com/chapter6/31/2. Processingを起動してスケッチにコードを貼付ける
3. スケッチを実行する4. Display Windowをクリックしてアクティブにする5. キーボードからATコマンドをタイプする
Processing用のスケッチを使う方法
Processing用のスケッチを使う方法
1. +++をタイプする(returnなし)2. 1秒程度待つ3. received:の下にOKが表示される
4. ATID 1111のように入力して最後に return5. 電源をオフにした後も設定を保持するには最後にATWRコマンドを実行する
6. キー入力終了後に一定時間が経過すると自動的にコマンドモードに戻る
実習:XBeeを使ってお互いに通信してみる1
1:1で通信してみる
• 二人一組で実習• 一方がタイプした内容が他方で表示されることを確認
実習:XBeeを使ってお互いに通信してみる1
A B 備考
ATID 1111 1111 チームごとに別の IDを設定ATMY 0001 0002
ATDH 0000 0000
ATDL 0002 0001 相手側の ID
表3 1:1の通信のための設定
実習:XBeeを使ってお互いに通信してみる2
1:Nの通信(ブロードキャスト)
• 五人一組で実習• Aがタイプした内容がB~Eで表示されることを確認
• Aはコーディネータでそれ以外はエンドデバイス
実習:XBeeを使ってお互いに通信してみる2
A B C D E 備考
ATID 1111 1111 1111 1111 1111 チームごとに別の IDを設定ATMY 0001 0002 0003 0004 0005
ATDH 0000 0000 0000 0000 0000
ATDL FFFF 0001 0001 0001 0001 Aはブロードキャストに設定
表4 1:Nのブロードキャスト通信のための設定
実習:XBeeの通信モード
• コマンドモード– 単なる無線モデムとして気軽に使える– 通信相手は基本的に固定
• APIモード– 通信時のパケット構造を知る必要がある– 通信相手を随時変更できる
実習:XBee用のライブラリ
• XBee API Library for Processinghttp://www.faludi.com/code/xbee-api-library-for-processing/
• Funnelhttp://funnel.cc/
実習:XBee用のライブラリ
XBee API Library Funnel
802.15.4 ○ ○ZigBee ○ ー受信 ○ ○送信 ー ○
Processing ○ ○ActionScript 3 ー ○
Ruby ー ○
表5 XBee API Library for Processing 1.2とFunnel 007の比較
XBee API Libraryを使ってみる
• ライブラリのインストール*3
• エンドデバイス側の回路を組む• エンドデバイス側を設定• コーディネータ側を設定• エンドデバイスからの情報をグラフ表示
*3 一般に配布されているXBee API LibraryはJava 1.5用にビルドされているため、ProcessingのJava実行環境のバージョンに注意。将来のバージョンでは解決される可能性あり。
エンドデバイス側の回路を組む
!"#!$#%&'%!(%)''#*+,-+#./0/12.3#4/526,70+#,89:,#020/-38:#;1,,<,7=<=,>35,?+5@'AB@,,0('%#%C
XBee API Libraryを使ってみる
エンドデバイス側の回路を組む際の注意点
• 電源電圧は必ず2.8~3.4Vの範囲で使用↑5Vを加えるとモジュールが破壊!
• Vref(14番ピン)はVCC(1番ピン)に接続↑A/D変換のための基準電圧
XBee API Libraryを使ってみる
コーディネータ エンド・デバイス 備考
ATID 1111 1111 チームごとに別の IDを設定ATMY 0001 0002
ATDH 0000 0000
ATDL 0002 0001 相手側の IDATD0 - 2 AD0/DIO0をアナログ入力にATIR - 64 サンプリング間隔(0x64 = 100ms)ATIT - 5 ここで指定したサンプル数ごとに送信ATAP 1 - APIモードの設定
表6 XBee API Libraryのための設定
XBee API Libraryを使ってみる
リスト 1 XBeeReaderオブジェクトのコンストラクタで設定
import xbee.*;
import processing.serial.*;
Serial port;
XBeeReader xbee;
void setup() {
size(200, 200);
port = new Serial(this, Serial.list()[0], 9600);
xbee = new XBeeReader(this,port);
println("Setting up Xbee");
// 最初のコマンドのみATをつけて後は省略String response = xbee.startXBee("ATRE,ID1111,MY2,DH0,DL1");
println("Setup response: " + response);
}
XBee API Libraryを使ってみる
リスト 2 受信したデータからAD0/DIO0の値を取得する
public void xBeeEvent(XBeeReader xbee) {
XBeeDataFrame data = xbee.getXBeeReading();
if (data.getApiID() == XBeeDataFrame.SERIES1_IOPACKET) {
int totalSamples = data.getTotalSamples();
for (int n = 0; n < totalSamples; n++) {
int[] analog = data.getAnalog(n);
print("analog: ");
for (int i = 0; i < analog.length; i++) {
print(analog[i] + " ");
}
println();
...
}
}
}
XBee用Funnelライブラリを使ってみる
• ライブラリのインストール• Funnel Serverの設定• コーディネータの設定• エンドデバイスからの情報をグラフ表示
Funnel Severの設定
リスト 3 XBee用のserver/settings.yamlの設定例
server:
command port: 9000
notification port: 9001
io:
type: XBee
com:
baudrate: 9600
コーディネータの設定
コマンド 値 備考
ATID 1111 個人ごとに別の IDを設定ATMY 0001
ATDH 0000
ATDL 0002 相手側の IDATAP 2 APIモード
表7 Funnelライブラリから使用するための設定
Funnel Severの起動
リスト 4 Funnel Server起動時に表示されるメッセージの例
Funnel 007 (2008-04-21)
シリアルポートが指定されていないため自動的に取得されたポートを使用しますI/Oモジュールと接続中です…I/Oモジュールと接続が完了しました:/dev/cu.usbserial-A1001hqjコマンドポート:サーバの起動中…通知ポート:サーバの起動中…コマンドポート:サーバが起動しました:9000
通知ポート:サーバが起動しました:9001
FIRMWARE VERSION: 10a5
SOURCE ADDRESS: 01
PAN ID: 5555
NODE: MY=2, SH=13a200, SL=4044245d, dB=54, NI=’ ’
チェックポイント
• FIRMWARE VERSIONなどの情報が表示されているか?→されていなければATAPの結果を確認
• エンド・デバイスが表示されているか?→リトライしても表示されなければATIDの結果を確認
Funnelライブラリでの使用方法
リスト 5 FunnelライブラリでXBeeを使用する例
import processing.funnel.*;
XBee xbee;
void setup()
{
...
int[] moduleIDs = { 2 }; // 使用するXBeeのID一覧を納めた配列xbee = new XBee(this, moduleIDs);
}
void draw()
{
background(0);
text("analogInput[0]: " + xbee.iomodule(2).port(0).value, 10, 80);
}
Funnel 007でのXBee関連のサンプル
libraries/processing/workshop/XBee
• SimpleScope3ch XBee– 3ch分の入力をグラフで表示– チャンネル数などは簡単に変更可能– スコープ表示はScopeクラスで担当
• RGBCube XBee– サンプルのRGBCubeに変更を加えたもの– マウスの代わりに加速度センサで制御
レスポンスを改善するには?
• サンプリング間隔を短くする例:100ms→10ms
• 送信までにサンプリングする回数を少なくする→例:5回→1回
• コーディネータ⇔PC間の通信速度を上げる*4
例:9600bps→57600bps
*4 最終的にはコーディネータがボトルネックとなるために限界はある。
まとめ
• 有線では1:1の通信が基本だが無線では1:NやN:Mが比較的簡単に実現できる
• XBeeのような扱いやすい無線モジュールを使えば難易度はそれほど高くない
• ただし有線の場合と比較すると不安定なのでプログラム側で配慮する必要がある