2014年5月25日2021年9月26日

XBeeで受信した温度センサーの値をArduinoで処理する

IMG_7456
前回までの記事では、XBeeの親機をパソコンに接続して、XCTUから通信データの内容を確認していました。

今回はパソコンではなく、ArduinoにXBeeの親機を接続して、子機のXBeeから送信されてくる温度センサーのデータを処理するテストを行ったメモです。

手順

・準備物
・XBeeの親機ユニット組み立て
・Arduinoのスケッチ作成
・XBee子機からのデータをArduinoでシリアル受信

準備物

・前回までに組み立てたXBeeの子機ユニット
・XBeeの親機ユニット作成用の材料
・XBeeピッチ変換基板
・ブレッドボード
・ジャンパワイヤ(短) x 2
・ジャンパワイヤ(長)x 1
・Arduino UNO

XBeeの親機ユニット組み立て

まずは、XBeeの通信テストwith APIモード on Mac OS X その(2)のでメモしたのと同じように、親機のXBeeを乗せたユニットを組み立てます。

ただし、XBeeへの電源供給はArduinoの電源を利用するので、電池ボックスは不要です。

ArduinoからXBeeへ電源供給

Arduinoの電源供給ソケットからXBeeの親機ユニットへジャンパワイヤを接続します。
Arduinoの「3.3V」と書かれたソケットからブレッドボードの「+」ラインへ、
Arduinoの「GND」と書かれたソケットからブレッドボードの「ー」ラインへ、それぞれジャンパワイヤを接続します。
IMG_7453

XBeeのデータ出力をArduinoのデータ入力へ接続

親機に設定したXBeeの電源入力(+)ピンの一つ下のピンが、データを出力するピンになっているので、このピンとArduinoの「RX」ピンをジャンパワイヤで接続します。

IMG_7455

以上でArduinoとXBee親機との接続は完了です。

Arduinoのスケッチ作成

親機のXBeeが子機から受信したデータを、Arduinoでシリアル通信で読み取り、温度をコンソールに表示するスケッチです。

long hex_pre;
long hex_aft;
byte trash;
long temper;

void setup(){
  Serial.begin(9600);
}

void loop(){
  //
  if(Serial.available() > 20){
    if(Serial.read() == 0x7E){
      //なぜか、delayでプログラムの実行を遅延させないとシリアル値を途中で読み飛ばされて意図しない動作をします。
      delay(10);
      //センサーの値の直前まで、20byte読み飛ばします
      for( int i = 1; i < 21; i++){
        trash = Serial.read();
      }
      //センサーの値(2byte)を読み出します
      hex_pre = Serial.read();
      hex_aft = Serial.read();
      //センサーの値を16進数表示します
      Serial.print(String(hex_pre,HEX) +" " + String(hex_aft,HEX) );
      //センサーの値を℃に変換します
      temper = (((hex_pre * 256 + hex_aft) * 1200 / 1024) - 600) / 10;
      Serial.print("-> "+ String(temper));
      Serial.print("\n");
    }
  }
}

XBee子機からのデータをArduinoでシリアル受信

スケッチをArduinoに書き込み、シリアルモニタを開くと、センサーの値である16進数文字列と、温度が表示されます。設定したXBeeのデータ送信間隔でデータが表示されます。
スクリーンショット 2014-05-22 19.38.18上の画像では、XBeeの子機ユニットに乗っている温度センサーを指先で暖めたので、途中で測定された温度が上がっているのが確認できます。

4 thoughts on “XBeeで受信した温度センサーの値をArduinoで処理する

  1. 初めまして、サンタンダと申します。
    貴殿のサイト+αで、Arduino+XBee(2台)+温度センサー(LM61BIZ)の環境でデータ受信の試験をしている者です。

    先ず親機と子機間の通信はDigi X-CTU(最新版)でデータ受信は可能と
    なっております。
    この環境でArduinoにXBeeを搭載可能な接続ボートを介して、親機用のXBeeをセットし、子機側にはブレットボードにXBee+温度センサーをセットして親子間で通信可能としています。

    こに状態でArduinoIDE経由で親機に接続して、子機からの温度センサーデータを受信しますが、貴殿サイトのように温度データが計算されず、悩んでおります。どうも片方の子機のデータしか受信出来ないような感覚です。
    また、16進数表示も出来ません。
    ご教示頂けるならスケッチを送りたいのですが、如何でしょうか?

    長文で申しわけありません。

    1. こんにちは。筆者です。
      コメントいただいてから間が空いてしまいましたが、解決されましたでしょうか?
      温度データが計算されない、とのことですが何かしらのデータは受信できていますでしょうか?
      私はこの記事を書いた後、Xbeeの一台にファームウェアが書き込めなくなる不具合が出てしまい、それ以来取り組みがストップしてしまいました。。。記事は書いていませんが、今はTOCOSのTWE-Liteを使っています。
      お役に立てず、すみません(´Д`)

コメントはこちらから

メールアドレスは公開されません。 * が付いている欄は必須項目です

タグ一覧

© 2021 びわ湖のほとりの人 All Rights Reserved.