IM920 で PC と PC 間で送受信してみる


趣旨

920MHz 帯通信モジュール IM920 を二台の PC に USB 接続して、片方のPCからもう一方のPCにデータを送ります。

分かったら何も難しくはないんですけど、最初の設定が少しわかりにくいので、しばらく使わなくて忘れたときに、使い方を思い出すためのメモです。

多分「受信機ID」を設定しないと受信できないというのと、受信機ID変更が書き込み不可設定のせいでNGになるというあたりが罠です。

基礎知識

IM920 モジュール本体は2列ハーフピッチコネクタという、初心者殺しコネクタになっていて、UART の線を引っ張り出すだけでも多分苦労します。とりあえず試したい場合は、ゲタも買ったほうがいいです。ゲタをつかえば、簡単に PC とつながります。Arduino などとつなげたい場合は、シールドを使います。

PCと接続

ゲタにはめて、ネジ止めして、USB ケーブルでPCに接続します。USBコネクタはミニです。

ターミナルを起動

TeraTerm のシリアル接続とかでいけます。

上のような設定でいけるはず。

モジュールとしてみる

TeraTerm のウィンドウ内で RDID (Enter) と入力すると、16進数で4桁の固有 ID がかえってきたら、正常に動作してます。

RDID
A0B1

こんなかんじです。A0B1 というのが固有IDです。固有IDは通信機ごとに異なるので、通信機ごとに違うIDが表示されるはずです。TeraTerm の場合はローカルエコーの設定をしないと、RDID のところは表示されません。

コマンドの文字列のターミネータは \r (CR/0x0D) です。\n (LF/0x0A) では反応しません。

モジュール間で通信してみる

受信機ID の設定

IM920 は、固有 ID を使って通信機の識別をしてるぽいです。通信機には「受信機ID」というものを設定する必要があって、登録した受信機IDを(固定IDとして)もつ通信機から送られてきたパケットだけを受け取るようになっているようです。

そのため、最初に「自分がパケットを受け取りたい受信機ID」を登録しておく必要があります。

登録は SRID というコマンドで行えます。ただし、デフォルトではパラメータ書き込み不可状態になっているので、先にパラメータ書き込み可状態にしてから、受信機IDを書き換え、最後にまたパラメータ書き込み不可にします。

A0B0 を受信機IDとして設定する場合は、以下のような感じです。

ENWR
OK
SRID A0B0
OK
DSWR
OK

こんな感じになれば成功です。コマンドが失敗すると NG と出ます。

モジュールをそれぞれ別の PC (同じPC でもいい)に USB で接続して、それぞれ TeraTerm を開いて通信可能状態にしておきます。

通信する

  • 通信機A (固有ID: A0B0): COM3 (TeraTerm接続)
  • 通信機B (固有ID: A0B1): COM4 (TeraTerm接続)

このようになっているとして、A0B1 側に受信ID A0B0 を上記の手順で登録してあるものとします。

このとき、A0B0 側 (COM3) で TXDT コマンド + 送信したい16進数の文字列、を入力すると、A0B1 側に送信できます。

A0B0 側:

TXDT FF00A0B0
OK

A0B1 側:

00,A0B0,CC:FF,00,A0,B0,00,00,00,00

こうなります。受信側では、上のようにカンマ区切りした状態で受け取ることになります。戦闘の 00 は ノード番号、次の A0B0 は受信ID、次の CC は RSSI 値、その後ろに続く値が送信されたデータです。TXDT コマンドで送れるのは、最大 8byte だそうです。8byte 未満のデータを送ると、不足部分は自動的に 00 でパディングされます。

NG がかえってくる

キャリアセンスとか待機時間というのがあって、その結果によって NG になることがあります。

電波法の関係上、一度データをおくると 52ms は連続では送れず、そのあとキャリアセンス(拘束モードで 500us / 長距離モードで 5.2ms)するため、それ以下のタイミングでは送れません。また、キャリアセンスに失敗するとえんえん送れないこともあります。あまり NG がでるようなら、周波数をかえてみると良いかもしれません。

ちなみに、すでに設定済みの受信機IDを再度設定しようとしても、NG になります。つまり、

SRID A0B0
OK
SRID A0B0
NG

こうなります。別のIDを指定するとOKになります。同じのでも OK でいいやん!

おわり

細かい設定とかは、下記のドキュメントに書かれてます。基本、4文字の文字列+空白+パラメータ、というコマンドを使って操作する感じです。

まったく受信できないときは、受信IDの設定が間違っていないか、周波数の設定がそろっているか、TeraTerm などの通信ソフトの設定(ポート、通信速度)が間違ってないか、コマンド文字列の末端を \r (CR) にしているか、あたりを確認します。