45
テクニカル・ワークショップ:無線通信デバイス 担当:小林茂(IAMAS:岐阜県立国際情報科学芸術アカデミー) 2008.05.01

Technical Workshop 20080501

Embed Size (px)

Citation preview

Page 1: Technical Workshop 20080501

テクニカル・ワークショップ:無線通信デバイス

担当:小林茂(IAMAS:岐阜県立国際情報科学芸術アカデミー)

2008.05.01

Page 2: Technical Workshop 20080501

参考書籍

Making Things TalkTom Igoe(2007年・O’Reilly Media)

Page 3: Technical Workshop 20080501

さまざまな無線通信の方式とその特徴

2.4GHz帯を利用する代表的な無線通信方式

• Wi-Fi(IEEE 802.11b/g/n)• Bluetooth• IEEE 802.15.4/ZigBee

Page 4: Technical Workshop 20080501

さまざまな無線通信の方式とその特徴

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はクラスやバージョンにより異なる)

Page 5: Technical Workshop 20080501

IEEE 802.15.4とZigBee

レイヤ名 定義する規格

アプリケーション層 ZigBeeアプリケーション・サポート・サブ層 ZigBeeネットワーク層 ZigBee

MAC層 IEEE 802.15.4物理層 IEEE 802.15.4

表2 ZigBee規格の階層構造

Page 6: Technical Workshop 20080501

Point to Point

Point to Multi

Star

802.15.4 Coordinator802.15.4 End Device

IEEE 802.15.4で可能な構成

Page 7: Technical Workshop 20080501

IEEE 802.15.4デバイスの種類

• コーディネータ(1個)• エンド・デバイス(複数)

Page 8: Technical Workshop 20080501

MeshCoordinator

End DeviceRouter

ZigBeeで可能となるクラスタツリー/メッシュ構成

Page 9: Technical Workshop 20080501

ZigBeeデバイスの種類

• コーディネータ(1個)• ルータ(複数)• エンド・デバイス(複数)

Page 10: Technical Workshop 20080501

XBeeの特長

• IEEE 802.15.4モデルとZigBeeモデルの両方がある*1

– XBee 802.15.4– XBee ZNet 2.5

• 比較的低価格(国内モデルで4000円弱)• 日本国内でも利用できるよう認証取得済み• 利用方法を解説した書籍がある

*1 モデル間での相互接続性はない

Page 11: Technical Workshop 20080501

参考資料(日本語)

• アルファ電子株式会社http://www.alpha-denshi.co.jp/seihin/toriatukai/Digi/TechDB/

– 基本的なドキュメントの日本語版– 内容的には最新でない部分もある

Page 12: Technical Workshop 20080501

XBeeで実験するための準備

• ブレークアウトボードの準備– コネクタをはんだ付け– ピンをハンダ付け

• ドングル用のドライバをインストール• X-CTUをセットアップ• ファームウェアを最新版*2にアップデート

*2 現時点では1.0.A.5

Page 13: Technical Workshop 20080501

ドライバのインストール(Windows XP/Vista)

• ドライバをダウンロードhttp://www.ftdichip.com/Drivers/VCP.htm

• デバイスをPCに接続• 指示に従ってインストール

Page 14: Technical Workshop 20080501

ドライバのインストール(Windows XP/Vista)

• ソフトウェア検索のため、Windows Updateに接続しますか?→いいえ、今回は接続しません。

• インストール方法を選んでください→一覧または特定の場所からインストールする(詳細)• 次の場所で最適のドライバを検索する→「次の場所を含める」をチェックし→ドライバを展開したフォルダを指定

Page 15: Technical Workshop 20080501

ドライバのインストール(Windows XP/Vista)

Page 16: Technical Workshop 20080501

ドライバのインストール(Windows XP/Vista)

Page 17: Technical Workshop 20080501

ドライバのインストール(Windows XP/Vista)

Page 18: Technical Workshop 20080501

ドライバのインストール(Mac OS X)

• ドライバをダウンロードhttp://www.ftdichip.com/Drivers/VCP.htm

• 指示に従ってインストール• デバイスをPCに接続

Page 19: Technical Workshop 20080501

XBeeの設定方法の説明と簡単な通信

• Windows XP/Vistaの場合– 専用ユーティリティーX-CTUを使う方法– Acknowrichを使う方法

• Mac OS Xの場合– screenコマンドを使う方法

• 共通– Processing用のスケッチを使う方法

Page 20: Technical Workshop 20080501

専用ユーティリティー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タブを開いて通信する

Page 21: Technical Workshop 20080501

Processing用のスケッチを使う方法

1. Making Things Talkのサポートページからコードをコピーする

http://www.makingthingstalk.com/chapter6/31/2. Processingを起動してスケッチにコードを貼付ける

3. スケッチを実行する4. Display Windowをクリックしてアクティブにする5. キーボードからATコマンドをタイプする

Page 22: Technical Workshop 20080501

Processing用のスケッチを使う方法

Page 23: Technical Workshop 20080501

Processing用のスケッチを使う方法

1. +++をタイプする(returnなし)2. 1秒程度待つ3. received:の下にOKが表示される

4. ATID 1111のように入力して最後に return5. 電源をオフにした後も設定を保持するには最後にATWRコマンドを実行する

6. キー入力終了後に一定時間が経過すると自動的にコマンドモードに戻る

Page 24: Technical Workshop 20080501

実習:XBeeを使ってお互いに通信してみる1

1:1で通信してみる

• 二人一組で実習• 一方がタイプした内容が他方で表示されることを確認

Page 25: Technical Workshop 20080501

実習:XBeeを使ってお互いに通信してみる1

A B 備考

ATID 1111 1111 チームごとに別の IDを設定ATMY 0001 0002

ATDH 0000 0000

ATDL 0002 0001 相手側の ID

表3 1:1の通信のための設定

Page 26: Technical Workshop 20080501

実習:XBeeを使ってお互いに通信してみる2

1:Nの通信(ブロードキャスト)

• 五人一組で実習• Aがタイプした内容がB~Eで表示されることを確認

• Aはコーディネータでそれ以外はエンドデバイス

Page 27: Technical Workshop 20080501

実習: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のブロードキャスト通信のための設定

Page 28: Technical Workshop 20080501

実習:XBeeの通信モード

• コマンドモード– 単なる無線モデムとして気軽に使える– 通信相手は基本的に固定

• APIモード– 通信時のパケット構造を知る必要がある– 通信相手を随時変更できる

Page 29: Technical Workshop 20080501

実習:XBee用のライブラリ

• XBee API Library for Processinghttp://www.faludi.com/code/xbee-api-library-for-processing/

• Funnelhttp://funnel.cc/

Page 30: Technical Workshop 20080501

実習:XBee用のライブラリ

XBee API Library Funnel

802.15.4 ○ ○ZigBee ○ ー受信 ○ ○送信 ー ○

Processing ○ ○ActionScript 3 ー ○

Ruby ー ○

表5 XBee API Library for Processing 1.2とFunnel 007の比較

Page 31: Technical Workshop 20080501

XBee API Libraryを使ってみる

• ライブラリのインストール*3

• エンドデバイス側の回路を組む• エンドデバイス側を設定• コーディネータ側を設定• エンドデバイスからの情報をグラフ表示

*3 一般に配布されているXBee API LibraryはJava 1.5用にビルドされているため、ProcessingのJava実行環境のバージョンに注意。将来のバージョンでは解決される可能性あり。

Page 32: Technical Workshop 20080501

エンドデバイス側の回路を組む

!"#!$#%&'%!(%)''#*+,-+#./0/12.3#4/526,70+#,89:,#020/-38:#;1,,<,7=<=,>35,?+5@'AB@,,0('%#%C

Page 33: Technical Workshop 20080501

XBee API Libraryを使ってみる

エンドデバイス側の回路を組む際の注意点

• 電源電圧は必ず2.8~3.4Vの範囲で使用↑5Vを加えるとモジュールが破壊!

• Vref(14番ピン)はVCC(1番ピン)に接続↑A/D変換のための基準電圧

Page 34: Technical Workshop 20080501

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のための設定

Page 35: Technical Workshop 20080501

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);

}

Page 36: Technical Workshop 20080501

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();

...

}

}

}

Page 37: Technical Workshop 20080501

XBee用Funnelライブラリを使ってみる

• ライブラリのインストール• Funnel Serverの設定• コーディネータの設定• エンドデバイスからの情報をグラフ表示

Page 38: Technical Workshop 20080501

Funnel Severの設定

リスト 3 XBee用のserver/settings.yamlの設定例

server:

command port: 9000

notification port: 9001

io:

type: XBee

com:

baudrate: 9600

Page 39: Technical Workshop 20080501

コーディネータの設定

コマンド 値 備考

ATID 1111 個人ごとに別の IDを設定ATMY 0001

ATDH 0000

ATDL 0002 相手側の IDATAP 2 APIモード

表7 Funnelライブラリから使用するための設定

Page 40: Technical Workshop 20080501

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=’ ’

Page 41: Technical Workshop 20080501

チェックポイント

• FIRMWARE VERSIONなどの情報が表示されているか?→されていなければATAPの結果を確認

• エンド・デバイスが表示されているか?→リトライしても表示されなければATIDの結果を確認

Page 42: Technical Workshop 20080501

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);

}

Page 43: Technical Workshop 20080501

Funnel 007でのXBee関連のサンプル

libraries/processing/workshop/XBee

• SimpleScope3ch XBee– 3ch分の入力をグラフで表示– チャンネル数などは簡単に変更可能– スコープ表示はScopeクラスで担当

• RGBCube XBee– サンプルのRGBCubeに変更を加えたもの– マウスの代わりに加速度センサで制御

Page 44: Technical Workshop 20080501

レスポンスを改善するには?

• サンプリング間隔を短くする例:100ms→10ms

• 送信までにサンプリングする回数を少なくする→例:5回→1回

• コーディネータ⇔PC間の通信速度を上げる*4

例:9600bps→57600bps

*4 最終的にはコーディネータがボトルネックとなるために限界はある。

Page 45: Technical Workshop 20080501

まとめ

• 有線では1:1の通信が基本だが無線では1:NやN:Mが比較的簡単に実現できる

• XBeeのような扱いやすい無線モジュールを使えば難易度はそれほど高くない

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