レビューメディア「ジグソー」

Galileoレビュー用支給品

アンテナ付です。
4個のうち1個はコーディネータ3個はエンドデバイスとする予定です。

■XBeeってなんですか?
XBeeはシリアルケーブルを無線で置き換えたかのように使えるIOです。Galileoに接続してIO拡張として使ウ予定です。XBee1個につきデジタル入出力11本アナログ入力4本が使えるようになります。本アイテムはシリーズ2という分類になるのですが、ほかにシリーズ1というのがありアナログ(PWM)出力を持っているそうです。通信距離(出力)の違いによりPROとそうでないものがあります。本アイテムはPROなので1.5km程度通信距離があります。

■設定
XBeeはデジタル通信なので、アドレスやネットワークトポロジーを設定する必要があります。


本によると、裏ワザとしてArduinoから設定することが可能だそうですが、不慣れなので専用品を使わせていただきます。



■ピン機能
1 :VCC
2 :DOUT
3 :DIN
4 :DIO12
5 :RESET
6 :PWM/RSSI/DIO10
7 :DIO11
8 :Reserved
9 :DTR/SEEP_RQ/DIO8
10:GND
11:DIO4
12:CTS/DIO7
13:ON/SLEEP
14:VREF
15:ASSOC/DIO5
16:RST/DIO6
17:AD3/DIO3
18:AD2/DIO2
19:AD1/DIO1
20:AD0/DIO0/COMMIS

■参考サイト
http://www.digi-intl.co.jp/products/wireless-wired-embedd...

■XCTUで手動制御で動作確認
NEX-5T制御用の端末になる構成で動作確認です。
右端のLEDは接続状態確認用です。
右から2つ目のLEDがリモコン制御のポートにつながっています。
左側の画像がリモコンOFF、右の画像がリモコンONになります。

ここまでできたら、送信コマンドをGalileoにプログラムするだけです。

■プログラムするデータ
コーディネータに送るデータは、
7E 00 10 17 00 xx xx xx xx xx xx xx xx FF EE 02 44 30 05 6F
の形になります。
7E 00 10 17 00 [64ビットアドレス] FF EE 02 44 30 [H/L] [sum]
[]の部分がプログラムで値を入れなければいけない部分です。と言ってもそんなに多いわけではありません。アドレスが3種、ポート出力が2種類なのでチェックサムも6種類しかないです。
7E:スタート
00 10:ペイロードの長さ
17:フレームタイプ(Remote AT Command)
00:フレームID(0x00固定)
xx xx xx xx xx xx xx xx:XBee個体の64ビットアドレス
FF FE:16ビットアドレス(ネットワーク構成時に変わるので不明の意味です。64ビットアドレスがあるので指定しなくていいようです。)
02:即時反映の指定
44 30:’D0'デジタルポート0を指定
05:ポートのHigh出力(04でLowです。)

結局、リモートのポート制御コマンド部分は、44 30 05 (D05)になります。
44 30 05 と 44 30 04 の2種類です。

■自作プログラム
Galileoで本アイテムをのD0ポートを操作するプログラムです。
--------------------------------------------------
#define XBEE_DL 0x04
#define XBEE_DH 0x05
#define XBEE_64bitADR 8

//----------
//XBee
//----------
class XBee
{
private:
byte address[XBEE_64bitADR];
byte p_Value;
public:
XBee(unsigned long address_h, unsigned long address_l);
void set_address(unsigned long address_h, unsigned long address_l);
void check_address(void);
void Write(byte port, byte value);
void Write(byte value);
void Write_L(void);
void Write_H(void);
void Change(void);
};
XBee::XBee(unsigned long address_h, unsigned long address_l)
{
set_address(address_h, address_l);
}
void XBee::set_address(unsigned long address_h, unsigned long address_l)
{
int i;
//送信順になるようにビッグエンディアンでデータを入れる
for(i=XBEE_64bitADR-1; i >= 0 ; i--){
if(i >= XBEE_64bitADR/2){ //4~7
address[i] = (byte)(address_l % 0x100);
address_l /= 0x100;
}else{ //0~3
address[i] = (byte)(address_h % 0x100);
address_h /= 0x100;
}
}
}
void XBee::check_address(void){ //デバグ用
for(int i=0; i<8; i++){
Serial.print((byte)(address[i]), HEX);
}
Serial.println();
}
void XBee::Write(byte port, byte value){
byte sum = 0;
p_Value = value;

Serial1.write((byte)0x7E); // スタートビット
Serial1.write((byte)0x00); // 長さ上位
Serial1.write((byte)0x10); // 長さ下位
Serial1.write((byte)0x17); // リモートATコマンド
Serial1.write((byte)0x00); // フレームID
for(int i=0; i<8; i++){
Serial1.write((byte)(address[i])); // 64bitアドレス
sum += address[i];
}
Serial1.write((byte)0xFF); // 64bitで指定しているので不明(0xFFFE)でOK
Serial1.write((byte)0xFE);

Serial1.write((byte)0x02); // 即反映
Serial1.write((byte)0x44); // 'D'
Serial1.write((byte)port); // ポート番号
Serial1.write((byte)value); // L:0x04, H:0x05
sum += (0x17 + 0xFF + 0xFE + 0x02 + 0x44 + port + value);
Serial1.write((byte)(0xFF- (sum % 0x100))); // チェックサム
}
void XBee::Write(byte value){
Write('0', value);
}
void XBee::Write_L(void){
Write('0',XBEE_DL);
}
void XBee::Write_H(void){
Write('0',XBEE_DH);
}
void XBee::Change(void){
Write('0', p_Value ^ 0x1);
}

XBee Io(0x0013A200,0x________); //第一衛星イオ 太陽系で一番活発な火山があります
XBee Europa(0x0013A200,0x________); //第二衛星エウロパ 海があるのではないかといわれています
XBee Ganymede(0x0013A200,0x________); //第三衛星ガニメデ 太陽系で最大の衛星です
XBee Callisto(0x0013A200,0x________); //第四衛星カリスト 太陽系で3番目に大きい衛星です

void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
Serial1.begin(9600);
delay(1000);
}

void loop() {
// put your main code here, to run repeatedly:
Io.check_address();
Europa.check_address();
Ganymede.check_address();
Callisto.check_address();

Io.Write_L();
Europa.Write_L();
Ganymede.Write_L();
Callisto.Write_L();
delay(500);
Io.Write_H();
Europa.Write_H();
Ganymede.Write_H();
Callisto.Write_H();
delay(4500);
}
--------------------------------------------------
このプログラムで操作した結果です。

  • 購入金額

    0円

  • 購入日

    2014年03月23日

  • 購入場所

10人がこのレビューをCOOLしました!

コメント (2)

  • jakeさん

    2014/04/12

    シリアルの無線化にはうってつけなんですよね。
    速度が出ないですが、無線モデムとしては小さいし安いし、
    ちょっとした制御にはうってつけですよね。

    外付けアンテナタイプのもありますが、屋外だと100mくらいが実用範囲でしたね。
    PROじゃなかったのかもしれませんが。
  • つきさん

    2014/04/12

    Galileoから1ポートを動かすのに結構手間取りましたが、一度動くことがわかったので、展開はしやすそうです。
    送信ができたので、次は受信を作らなきゃいけません。

    1.5kmはPROでもアンテナのでかいタイプかもしれません。
    この距離が使えるならラジコンにも向いてそうです。

ZIGSOWにログインするとコメントやこのアイテムを持っているユーザー全員に質問できます。

YouTube の動画を挿入

YouTube の URL または動画の ID を入力してください

動画の ID が取得できません。ID もしくは URL を正しく入力してください。

ニコニコ動画の動画を挿入

ニコニコ動画の URL または動画の ID を入力してください

動画の ID が取得できません。ID もしくは URL を正しく入力してください。

ZIGSOWリンク挿入

検索対象とキーワードを入力してください

    外部リンクを挿入

    リンク先の URL とタイトルを入力してください

    URL を正しく入力してください。

    画像を挿入(最大サイズ6MB)

    画像を選択してください

    ファイルサイズが6MBを超えています

    別の画像を追加

    ZIGSOW にログイン

    ZIGSOW会員登録(無料)はこちらから