IMBLEを使ってみた
皆さんこんにちは!
今回は、インタープラン株式会社様の「IMBLE」を使ってみました。このモジュールは2.4GHz帯のBluetooth・ローエナジーを搭載したモジュールです。(一般的にはBLEモジュールと呼ばれています。)IMBLEにはSPP(シリアルポートプロファイル)ライクの通信プロトコルが搭載されていて、インタープラン様の独自コマンドと組み合わせて簡単にデータ通信端末(Bluetoothで言う所のペリフェラル側)を作る事が出来ます。セントラル側(スマホ側)は用途に合わせてアプリを作る必要が有りますが、実験的にはインタープラン様の方で簡易ターミナルを作っていただいておりますので、これを利用してIMBLEを動かしてみたいと思います。
説明は、
・用意するもの
・事前設定
・実験
の順に進めて行きます。
準備
1.用意するもの
・IMBLE 1台


・IMBLE-ADP 1台
周辺回路をユニバーサル基板上に組みますので、IMBLEの信号を2.54mmピッチに変換してくれるIMBLE-ADPを使います。(JP2とJP4のみ短絡、その他は開放)


・IMBLE用実験回路(手作り)
IMBLEをIMBLE-ADPに載せ、周辺部品をユニバーサル基板上に実装しています。実験回路図はクリックすると拡大したものが別ページで開きます。
拡大した回路の写真、USB-シリアル変換ケーブルの接続方向についても説明しています。
・USB-シリアル変換ケーブル(3.3V用) 1本
基板に接続する側はインターフェース電圧が5Vの物と3.3Vの物が市販されていますが、今回は3.3Vの物を使います。
自作される方は大抵ご存じだと思いますが、秋葉原の秋月電子通商様等で販売されています。型式:TTL-232R-3V3(FTDI製)

・PC 1台
・PC用ターミナルソフト (TeraTermなど)
IMBLEへデータを送信したり、受信したデータを表示するために必要です。
・対向通信用スマホ又はタブレット(アンドロイド端末又はiOS搭載機)
IMBLEからのデータを受けるための端末。インタープラン様の方でテスト用の簡易ターミナルソフトが用意されていますので予めインストールしてください。今回の実験ではレノボ製のアンドロイドタブレットを使いました。(Android9)
おまけ
今回はBUSYLEDの観測やスリープの動作をしてみるために実験回路を組みましたが、IM920やIM920sの様にIM920-USB又はIM315-USB-RXを使ってIMBLEを動かす事が出来ます。IMBLEをIMBLE-ADP(JP2とJP4のみ短絡、その他は開放)に載せ、それをIM920-USB又はIM315-USB-RXに繋ぎ、PCと接続してTeraTermで動かす事が出来ます。フロー制御(ハードフロー)は使わない状態にしておく必要が有ります。ハードフローを有効にしてしまいますと、IMBLEを初期化後、何らかのコマンドを送り込むとIMBLEのBUSY端子がHighになり、IM920-USB又はIM315-USB-RXの内部の配線により、PC側から見たCTS端子が非アクティブとなってしまい、その後のコマンドが送り込めなくなります。しかし、TeraTermのハードフローを無効にしておけばCTSを無視してくれるのでIMBLEのBUSY端子がHighになっていても問題なく通信が出来ます。但し、PC側のRTSはLow(アクティブ)になっていないとIMBLEがスリープに入ってしまいます。今回実験で用いているTeraTerm(Ver.4.103)では、ハードフローを有効にしてあっても無効にしてあっても、RTS端子がLow(アクティブ)になっているので問題なく通信が出来ますが、ターミナルソフトによってはこの辺の動作に違いが有るかも知れません。IM920-USB又はIM315-USB-RXを使ってIMBLEを動かす場合はご注意下さい。
2.事前設定
2-1.通信条件の設定
TeraTermを使った場合の端末設定、シリアル通信設定を以下に示します。(COMポート番号はお使いの環境によって変化します。コントロールパネルのデバイスマネージャーでご確認下さい。)設定後、TeraTermから「SRST」コマンドを送ると製品バージョンが表示されます。


2-2.対向機(この実験ではAndroidタブレット)
PlayストアからIMBLEのテスト用プログラム(簡易ターミナルソフト)をダウンロードし、インストールしておきます。iOSの場合は試しておりませんので具体的には判りかねますが、インタープラン様のホームページによるとiOS版の簡易ターミナルソフトも有るようです。
ダウンロードし、インストールすると以下の写真の様にアイコンが出来ていました。

実験
IMBLEの実験基板と簡易ターミナルソフトの間での通信実験を行います。
1.簡易ターミナルソフトの起動~IMBLEとの接続
IMBLEの実験回路をPCと接続し、ターミナルソフトとの間での通信確認を行った後、簡易ターミナルソフトのアイコンをタップすると以下の様な画面になります。

ターミナルソフトが起動するとペリフェラルを探す為にスキャンをはじめ、IMBLEが見つかると左の写真の様に「IMBLExxxx」が一覧の中に出てきます。ここで、「xxxx」は4桁の16進数で、シリアル番号を16進数にしたものになります。
また起動にあたり、端末のBluetooth機能がオフになっている場合は使用許可を求めるメッセージが出ますので簡易ターミナルソフトを使う場合は許可してください。
次に、先の画面上の「IMBLExxxx」をタップするとIMBLEと接続し、以下の左下の画面に切り替わります。その後、「Device Information Service」、「IMBLE Data Exchange Service」をタップすると右下の画面に切り替わります。


ここで、「Device Information Service」の下の「Manufacturer Name String」をタップすると下の画面の様に「Data:Interplan」と、それに相当するキャラクターコードが表示されます。

上から三行目の「Data:No data」となっていた行が「Data:Interplan」に変わっています。
簡易ターミナルソフトとIMBLEが接続されると、PCのターミナルソフト上に端末と接続された旨の表示が出ます。「CONNECT」の文字の後ろの文字は端末のアドレスを表しますが、Bluetoothの仕様により、同じ端末を使ったとしても、必ずしも同じ文字列にはならないようです。(ランダムアドレスを用いている端末の場合)

2.IMBLEから送信
IMBLEから文字を送ってみます。端末の「IMBLE Data Read」をタップし、TeraTermから「TXDA」コマンドを用いて文字列を送ってみましょう。


三行目のData欄にキャラクターコードを文字に変更した「ABC」とキャラクターコードが表示されている。
同様に、「TXDT」コマンドを使って文字を送ると以下の様になります。


「TXDA」コマンドは16バイト迄の任意長の送信が出来ますが、「TXDT」コマンドは8バイト固定長データの送信コマンドです。データが短い時は自動的に余りバイトに「00」が付加されます。よって、受信側では送信側で送っていない「00」が5個(5バイト)付いています。
3.端末から送信
今度は接続した端末からIMBLEに向けて文字を送ってみます。簡易ターミナルソフトの「IMBLE Data Write」をタップすると入力用のボックスが出てきます。この中に文字のキャラクターコードを打ち込みます。(例では「313233」)するとPCのターミナルソフトに「00,0000,00:31,32,33」が出力されたと思います。



端末から「313233」と言うデータ(キャラクタだと”123″)を送るとターミナルソフトには「00,0000,00:31,32,33」が出力されています。最初の「00,0000」は固定値で、常にこれが付加されます。続く「00」は、受信した電波の強さ(RSSI)ですが、現在未対応との事で「00」が出力されます。実際に送られてきたデータはコロン(:)以降で、送った「313233」が1バイトずつカンマ(,)で区切られて出力されています。
4.切断
実験が終了し、端末とIMBLEの通信を終了(切断)する手順です。
IMBLE側から切断する方法と、端末側から切断する方法が有ります。IMBLE側から切断するには、「DSCN」コマンドを打つと切断されます。端末側から切断するには簡易ターミナルソフトの右上に表示されている「DISCONNECT」をタップします。

TeraTerm上で「DSCN」コマンドを打つと、「OK」のメッセージと切断されたことを示す「DISCON」が返ってきます。
以上のように、IMBLE側は簡単なコマンドでキャラクターコードを使ったデータ通信が可能です。端末側のアプリをどうするかと言う点は有りますがBluetoothモジュールのプログラムを作らずにデータ通信が出来ると言う点はメリットではないでしょうか。
無線モジュール.comでは無線モジュールを利用した様々な提案・開発を行っております。是非開発実績もご覧になってください。