Technical Workshop 20080501

Post on 04-Jul-2015

1.255 views 0 download

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のような扱いやすい無線モジュールを使えば難易度はそれほど高くない

• ただし有線の場合と比較すると不安定なのでプログラム側で配慮する必要がある