XBeeを使ってArduinoを無線接続


#きっかけ
　僕「先輩がArduinoを無線化できるモジュールを置いてってくれた」
　僕「センサー類をArduinoに載せ替えて無線通信すれば配線気にせずに済むやん」　

　※XBeeについては最初はほとんど無知でした
　いずれはラズパイとArduino間を無線化しようと考えています

#用意したもの

・Arduino UNO (Amazonで購入)
・XBeeとArduinoに接続するためのモジュールがセットになったやつ
・USBケーブル (A-miniB)　←片方のXBeeと適当な端末に接続用
・USBケーブル (A-B) ←Arduino電源&書き込み用

「XBeeとArduinoに接続するためのモジュールがセットになったやつ」はこんな感じ
XBeeのモデルは「XB24-API-001」
<img width="600" alt="IMG_3143.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/513034/b1d67a9b-1c94-1524-170d-cf14b20d2a76.jpeg">
だいぶ昔から放置されてホコリ被ってたやつなので今でも売ってるのかよくわからん...

<br/>

Arduinoにつけるとこんな感じ
<img width="600" alt="IMG_3146.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/513034/3c73a445-a6bb-a246-aed7-881898020cec.jpeg">

青と赤と青緑のコントラストがなんとなくかっこいい

XBeeもN番煎じですがやっていこうと思いまする




#手順
##XCTUのインストール

XBeeにファームウェアや設定等を書き込むための「XCTU」をこのサイトからダウンロードし、インストールする↓
https://www.digi.com/support/productdetail?pid=3352


`Diagnostics,Utilities and MIBs`のタブをクリックすると各OSごとのソフトウェアをダウンロードできる
<img width="600" alt="XCTU.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/513034/44f88dac-3011-e292-4167-1b83433baf44.png">

##XBeeモジュールにファームウェアや設定を書き込む

XBee本体の裏側に個別IDが記載されているのでメモして控えておく(二つ分)
どちらを親機、子機にするかは適当に
例

||上8桁|下8桁|
|:-:|:-:|:-:|
|親機側|0013A200|XXXXXXXX|
|子機側|0013A200|YYYYYYYY|

<br/>
XCTUをインストールしたパソコンにXBeeを接続する
こちらのUSB接続できるモジュールに載せて接続
<img width="600" alt="IMG_3143_2.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/513034/cc81333c-255d-e5b2-f313-c54c69169d50.jpeg">

<br/>
XCTUを起動し、接続したXBeeを読み込む
左上の検索アイコンをクリックすると
<img width="400" alt="XCTU_2.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/513034/76652f0e-11e9-f21b-bbcf-54de67841485.png">

<br/>
接続するポートを選択して適当に`Next`, `Finish`をクリックするとXBeeが認識される
最後に`Add selected device` でXbeeモジュールが読み込まれる
<img width="300" alt="XCTU_3.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/513034/bbf5c38e-d65e-f0f7-82b2-9ce638b9c527.png">　<img width="300" alt="XCTU_4.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/513034/76d29a8b-6bc9-2bb8-00bc-a7c29e48828f.png"> <img width="300" alt="XCTU_5.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/513034/f483b487-07f5-e44a-00ba-5e606618dacb.png">

<br/>
読み込まれたモジュールをクリックするとファームウェアの詳細と設定の書き込みが可能になる
設定の書き込みの欄に、適当に決めた共通の4桁の`PAN ID`(青丸)と**子機側のID**(赤丸)を入力する (画像は親機側の設定)
さらに親機の設定(緑丸)の部分を`Coodinator [1]`にする
最後に書き込みボタン(鉛筆マーク)をクリックして設定を書き込む
<img width="600" alt="XCTU_6.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/513034/39d07b4f-a052-525c-3acd-944fa46576d7.png">



<br/>
親機側のモジュールを取り外して子機側も同様に接続して設定する
子機側の場合は書き込み欄に同じ`PAN ID`と**親機側のID**を入力し、Coodinatorの欄を`End device [0]`に設定する
最後に書き込みボタンをクリック




##通信テスト

親機側をUSB変換モジュールに載せ,子機側をArduino接続モジュールに載せる (冒頭の画像の通り)
Arduinoに予めテスト用のスケッチを書き込んでおく

パソコンにArduinoを接続し、`Arduino IDE`を起動する
開くをクリックし、`04.Communication`→`ASCIITable`をクリックすると適当に文字列を表示するサンプルスケッチが読み込まれる
読み込まれたスケッチをArduinoに書き込む
<img width="600" alt="ARduino-IDE.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/513034/a237061a-eafc-28be-8e02-2dad7b3e4078.png">

<br/>
Arduinoをパソコンから取り外し、適当なUSB電源に接続する
親機側をパソコンに接続し、XCTUを起動する
上述した手順で親機側をXCTUに読み込ませて赤丸の部分をクリックしてコンソール画面を開く
その後、青丸の部分をクリックしてXBee同士を接続させる
<img width="600" alt="XCTU_7.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/513034/8f1a2ed0-52d0-b389-3d19-5efd252bc4cd.png">

Arduinoのリセットボタンを押してしばらくすると、Arduino側から送信された適当な文字列がコンソール画面に表示されたらテストは完了
画像ではhello! see you!を繰り返すようなスケッチを書き込んでいるが、赤文字で何か表示されていれば相手から何か受信してることになる
<img width="600" alt="XCTU_8.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/513034/75781ebf-cce8-a863-f613-136a98439071.png">


<br/>
今後はArduinoにセンサー類をつけて、取得した値が無線通信されるかやっていこうと思います
#参考にしたサイト

・接続関係
https://mag.switch-science.com/2012/07/20/startup_xbee_s1/
https://www.aihara.co.jp/~junt/electronic-circuit/XBee.html

後から気づいたけどこちらの記事で詳しくやってくれてますね...w
[XbeeでPC-Arduino間1対1通信を行う](https://qiita.com/s_fujii/items/9804eaf3599139164aa3)


有用な情報ありがとうございました