TWE-LITE DIPのシリアル通信専用アプリを使ってみる

:clap:Qiitaデビュー:clap:
初めて投稿します。皆様ご指導願います。
狼煙型のデバイスを作るためにデバイス間の通信をMono Wirelessが出してるxbee搭載モジュールtwe-liteを使うことにしました。

## 開発環境
* mac OS Sierra(アプリを書き込むときにだけwindowsを使いました。)
* [TWE-LITE DIP](http://mono-wireless.com/jp/products/TWE-Lite-DIP/index.html) x 2
* [TWE-LITE R](http://mono-wireless.com/jp/products/TWE-LITE-R/index.html)　or [FTDI USBシリアル変換アダプター](https://www.switch-science.com/catalog/1032/) 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を押して再度`~.`を入力してください。)

以上でリセット完了です。


## アプリを書き込む
1. [Tera Term](https://ttssh2.osdn.jp/)をダウンロード。
1. [シリアル通信アプリ（App_Uart）](http://mono-wireless.com/jp/products/TWE-APPS/App_Uart/download.html)をダウンロード。v1.2.15 リリース候補版。
1. [書き込みソフト](http://mono-wireless.com/jp/tech/misc/LiteProg/index.html)をダウンロード。
1. 先ほどダウンロードしたApp_Uart書き込む。readmeを読んだところ、App_Uart_Master_JN5164L1-0-6S_1_2_15.binがtwe-liteに対応してたのでそれを書き込みました。ちなみにwindowsでSnipping Toolで選択範囲をスクショ取れるのを初めて知りました。情弱。
![1e42c6b8-599d-0956-ed47-d42b37cc1da0.png](https://qiita-image-store.s3.amazonaws.com/0/146199/1449e11b-ccd5-a363-679f-a680e72ff457.png)


## UART設定
TWE-LITE DIPに親機と子機をそれぞれ設定します。
### 親機
リセットした時と同様、もう一度インタラクティブモードに入リマス。
![スクリーンショット 2016-11-17 11.39.56.png](https://qiita-image-store.s3.amazonaws.com/0/146199/299b0b64-9f3c-32c3-926a-e8bb412aeb57.png)

変更する箇所は以下の通り

+ `i`を入力して`０`
+ `m`を入力して`A`

セーブを忘れないように………

![スクリーンショット 2016-11-17 11.39.56.png](https://qiita-image-store.s3.amazonaws.com/0/146199/8af2f4d1-1740-2d4a-67ca-967825ebde6d.png)

### 子機
手順は親機とほぼ同じです。`i`を1-100のどれかに設定してあげます。ぶっちゃけ、デフォルトで子機なので最早設定しなくてもいいです。
### コマンド
| コマンド | 説明 |
|:--|:--|
| i | 親機か子機かを設定する。(0, 121: 親機 (=121), 1-100: 子機, 120: 子機（ID設定無し）) |
| m | 通信方式を設定する。(C: チャットモード, D: プロンプト無しチャットモード, A: 書式モード(アスキー形式), B: 書式モード(バイナリ形式), T: 透過モード) |

## 動作確認

シリアル通信の書式モードの[チュートリアル](http://mono-wireless.com/jp/products/TWE-APPS/App_Uart/tutorial-binmode.html)が公式サイトにあるのでやってみてください。僕はバイナリー形式でうまく通信ができなかったのでアスキー形式でマイコンと繋げようと思います。

[TWE-LITEのUART（シリアル）送信 – jumbleat](http://jumbleat.com/2016/10/21/twe-lite_send_1/)
 ↑ こちらの記事のArduinoのプログラムを引用しています。

### 送信用

```serialReceive.ino
#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);
}
```

### 受信用

```serialSend.ino
#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_uart_ブレッドボード.png](https://qiita-image-store.s3.amazonaws.com/0/146199/b3275e92-1ac2-ed05-ec57-cd14da35989f.png)

TWE-LITE DIPは、そのままだとボーレートが115200でシリアル通信を行ってしまいます。UARTアプリで設定されているボーレート38400でシリアル通信を行うためには、17番ピンをGNDに入れる必要があります。それに気づくのに3日かかりました。。。

### 動作

<blockquote class="twitter-tweet" data-partner="tweetdeck"><p lang="ja" dir="ltr">twe-lite &amp; Arduino pro mini serial communication <a href="https://t.co/3mbDCFY1pj">https://t.co/3mbDCFY1pj</a> <a href="https://twitter.com/YouTube">@YouTube</a>さんから</p>&mdash; とんぼろ(脳筋) (@shinnoske0714) <a href="https://twitter.com/shinnoske0714/status/799967112949174272">November 19, 2016</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

#### シリアルモニター
![Untitled.gif](https://qiita-image-store.s3.amazonaws.com/0/146199/4ba0f5e7-50ce-a669-c13b-bdad7b6a03c5.gif)

シリアル通信で送っている文字の規則は[こちら](http://mono-wireless.com/jp/products/TWE-APPS/App_Uart/mode_format.html)から

## 参考
+ [App_Uart - MONO-WIRELESS.COM](http://mono-wireless.com/jp/products/TWE-APPS/App_Uart/mode_format.html)
+ [TWE-Lite DIPをRaspberry Pi上のToCoStickとPythonプログラム経由で通信しLチカ | サバカン屋テックブログ](http://www.skyarch.net/blog/?p=4941)
+ [TWE-LITEのUART（シリアル）送信 – jumbleat](http://jumbleat.com/2016/10/21/twe-lite_send_1/)