Qiitaデビュー
初めて投稿します。皆様ご指導願います。
狼煙型のデバイスを作るためにデバイス間の通信をMono Wirelessが出してるxbee搭載モジュールtwe-liteを使うことにしました。
開発環境
- mac OS Sierra(アプリを書き込むときにだけwindowsを使いました。)
- TWE-LITE DIP x 2
- TWE-LITE R or FTDI USBシリアル変換アダプター x2
- Arduino pro mini 3.3v 8Mhz x2
TWE-LITE RとFTDI USBシリアル変換アダプターは合わせて2個あればいいです。
設定をデフォルトに戻す
以前、グルーピングの設定などをいじった記憶があるので一旦リセットします。
twe-liteの設定はインタラクティブモードに入って行います。
sudo cu -s 115200 -l /dev/tty.hogehoge
と入力し、 "Connected"と表示されたら、+
(プラス)を3回押します。
インタラクティブモードに入るので、R
を押すとリセットされます。S
で保存。
もう一度+
(プラス)を3回押すと、"!INF EXIT INTERACTIVE MODE."と表示され、インタラクティブモードを抜け出します。
最後に~.
を打ち込んだらcuコマンドから抜け出せます。(うまく抜け出せない場合はctl+cを押して再度~.
を入力してください。)
以上でリセット完了です。
アプリを書き込む
- Tera Termをダウンロード。
- シリアル通信アプリ(App_Uart)をダウンロード。v1.2.15 リリース候補版。
- 書き込みソフトをダウンロード。
- 先ほどダウンロードしたApp_Uart書き込む。readmeを読んだところ、App_Uart_Master_JN5164L1-0-6S_1_2_15.binがtwe-liteに対応してたのでそれを書き込みました。ちなみにwindowsでSnipping Toolで選択範囲をスクショ取れるのを初めて知りました。情弱。
UART設定
TWE-LITE DIPに親機と子機をそれぞれ設定します。
親機
リセットした時と同様、もう一度インタラクティブモードに入リマス。
変更する箇所は以下の通り
-
i
を入力して0
-
m
を入力してA
セーブを忘れないように………
子機
手順は親機とほぼ同じです。i
を1-100のどれかに設定してあげます。ぶっちゃけ、デフォルトで子機なので最早設定しなくてもいいです。
コマンド
コマンド | 説明 |
---|---|
i | 親機か子機かを設定する。(0, 121: 親機 (=121), 1-100: 子機, 120: 子機(ID設定無し)) |
m | 通信方式を設定する。(C: チャットモード, D: プロンプト無しチャットモード, A: 書式モード(アスキー形式), B: 書式モード(バイナリ形式), T: 透過モード) |
動作確認
シリアル通信の書式モードのチュートリアルが公式サイトにあるのでやってみてください。僕はバイナリー形式でうまく通信ができなかったのでアスキー形式でマイコンと繋げようと思います。
TWE-LITEのUART(シリアル)送信 – jumbleat
↑ こちらの記事のArduinoのプログラムを引用しています。
送信用
#include <SoftwareSerial.h>
SoftwareSerial TWE(5, 6); // RX, TX
#define LED 13
void setup() {
TWE.begin(38400);
Serial.begin(38400);
pinMode(LED, OUTPUT);
}
void loop() {
byte recv [60] = {};
byte count = 0;
//receive data
while (TWE.available())
{
digitalWrite(LED, HIGH);
recv [count] = TWE.read();
count++;
}
if (count > 0)
{
for (byte i = 0 ; i < count ; i++) Serial.write((char)recv[i]);
}
digitalWrite(LED, LOW);
}
受信用
#include <SoftwareSerial.h>
SoftwareSerial TWE(5, 6); // RX, TX
#define LED 13
void setup() {
TWE.begin(38400);
pinMode(13, OUTPUT);
}
void loop() {
#define DATA_SIZE 10
byte DATA[DATA_SIZE] = {':', '7', '8', '0', '1', '3', '5', 'X', '\r', '\n'};
digitalWrite(LED, HIGH);
for (byte i = 0 ; i < DATA_SIZE ; i++) TWE.write(DATA[i]);
delay(300);
digitalWrite(LED, LOW);
delay(300);
}
回路図
TWE-LITE DIPは、そのままだとボーレートが115200でシリアル通信を行ってしまいます。UARTアプリで設定されているボーレート38400でシリアル通信を行うためには、17番ピンをGNDに入れる必要があります。それに気づくのに3日かかりました。。。
動作
twe-lite & Arduino pro mini serial communication https://t.co/3mbDCFY1pj @YouTubeさんから
— とんぼろ(脳筋) (@shinnoske0714) November 19, 2016
シリアルモニター
シリアル通信で送っている文字の規則はこちらから