interplan社が販売しているIM920をArduinoで繋げて通信する方法が分かったのでメモをしておく
簡単な説明
IM920は、その名の通り920Mhz帯で通信できる無線モジュールです
アンテナがないIM920cとアンテナがあるIm920があります
今回はIM920cを使用します
IM920cは別途IM920c用変換アダプタを購入してください
2.54mmピッチランドが付いているため、簡単にArduinoにつけることができます
※今回はこれを使って通信を行います
接続方法
シリアル通信で通信ができるため、Arduinoの0ピン(RX)と1ピン(TX)に接続して通信することもできるが、SoftwareSerialを使わないと色々と不都合が起きる(後述)
下記の画像の通りに接続
右ピン
im920c Arduino
3番 - 11ピン
9番 - GND
左ピン
im920c Arduino
1番 - 8ピン
4番 - 10ピン
9番 - Vcc(3.3v)
プログラム
※予めお互いの通信モジュールがペアリングしていることを前提としています!
受信
#include <SoftwareSerial.h>
SoftwareSerial IM920Serial(10, 11); // RX, TX
char input[30]; // 文字列格納用
int i = 0; // 文字数のカウンタ
void setup() {
Serial.begin(19200);
IM920Serial.begin(19200);
pinMode(8,OUTPUT);//busy
digitalWrite(8, HIGH);
}
void loop() {
if (IM920Serial.available()) {
input[i] = IM920Serial.read();
if (i > 30 || input[i] == '\n') {
input[i] = '\n';
Serial.print(input);
i = 0;
}else{
i++;
}
}
delay(50);
}
送信
送信したい文字列の最後に**“\r\n”**をいれるのがコツです
さらにIM920はアスキーコードで文字列をやりとりする
TXDAは文字を送信するコマンドを意味する
#include <SoftwareSerial.h>
SoftwareSerial IM920Serial(10, 11); // RX, TX
void setup() {
IM920Serial.begin(19200);
pinMode(8,OUTPUT);//busy
digitalWrite(8, HIGH);
}
void loop() {
IM920Serial.print("TXDA 68656c6c6f\r\n");
delay(50);
}
なぜSoftwareSerialをつかうのか
SoftwareSerialを使わないと無限ループに陥るため、SoftwareSerialを使います
IM920はなにかのコマンドを打つと”OK”や”NG”を出力します
コマンドがない場合でもNGを出力します ← ここが落とし穴!
受信待機
↓
文字列受信
↓
受信した文字列をSerialで出力
↓
エラー(NG)を出力 ー ①
↓
"NG"という文字列が受信したと勘違いする
↓
①にいく
ということになり、永久ループします
そのため、SoftwareSerialを使い、SoftwareSerialで無線モジュールからのデータを受信し、Arduinoの0ピンと1ピンで行われるSerialで受信した文字列を出力しています
その他
USBインターフェイスボードがあればTeraTermで超絶簡単に調整することができます
USBでできるので本当に楽です