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でできるので本当に楽です
コメント
はじめてコメントさせていただきます!
このIM920cの使い方を紹介しているサイトはほとんどないのでとても参考になりました。
とても分かりやすい説明で感動しました。
ありがとうございました。
私はまだ購入はしていないのですが、購入を検討しています。
もしよろしければ、USBインターフェイスボードによるペアリングをする記事も書いていただけないでしょうか
ぶしつけなお願いで申し訳ありません…。
ご検討していただけたら嬉しいです!
よろしくお願いします!
購読していただきありがとうございます。
参考にしていただき、記述している私にとっては嬉しい限りです。
確かにUSBインターフェイスボードによるペアリング方法を書いていませんでした。
早速、記事にして掲載しますので今しばらくお待ち下さい。
記事にしました
https://www.autumn-color.com/?p=520
すみません、いつもお世話になっております.
先日は記事をありがとうございました.
早速購入し本記事のように試してみたところ, Teratermで以下のような出力になってしまいました…(><)
原因として何が考えられるでしょうか?
Teraterm上での設定でしょうか??
また上手く行っている場合, どのように表示されるのでしょうか.
教えていただけたら嬉しいです.
よろしくお願い致します.
「0,500,600,00,5791,DC00,00,,00,00,:00,00,900,00,500,00,500,00,500,F00,00,C00,
,500,00,500,00,500
0,500,00,:00,57800,00,200,00,500,00,500,00,500,00,500
00,00,5600,00,600,00,800,00,,00,00,500,00,5791,D200,00,500,00,500,600,
0,5791,D200,00,500,00,500,600,600,00,800,00,,00,00,500,00,500,00,500,00,500,57900,C00,00,500,00」
竜之助さま
いつも購読ありがとうございます
ペアリングした状態で受信側をTeraTermを開くと同じようになります
出力結果↓
”
00,5187,CC:68,65,6C,6C,6F
00,5187,CC:68,65,6C,6C,6F
00,5187,CC:68,65,6C,6C,6F
00,5187,CC:68,65,6C,6C,6F
・
・
・
”
“:”から後ろがアスキーコード化した文字列になります
“:”から前が受信したいモジュールのID等になります(詳しくはインタープラン社のHPを参照してください)
上記の出力結果と異なるのであれば、以下のことを確認してみたください
・TeraTermのボーレートは正しいか
・送信したい文字列をアスキーコード化して送信しているか
これらを行っても治らない場合は、一度ペアリングを解除してからもう一度ペアリングをしてみてください
Hi, Thanks for sharing a good article.
I am using IM920 with the shield. do you have an article on using the shield?
I am able to transmit using shield but using the shield I unable to see the received data in serial monitor. If you can help me on this point I will be very helpful.
Thank for watching the article. There is no article of IM920 with the shield.Sorry…
Maybe, I might use of IM920 with the shield.Please tell me the product name.