RFCOMMの応用例(RS232Cの無線化)

注意:ここでのファームウェア(OhBlue ver.1.0)は古くなりました。RFCOMMレーヤの節のrfcomm5.zip(PCとPIC基板とのRFCOMM接続)とbluetooth-HIDの応用例の所のRS232Cの無線化なる節のhid_rs232c.zip(PIC基板による温度制御器の制御部分)を組み合わせてOhBlue ver.1.0を作り直してください。

  RS232Cを無線化した例です。まず、これまで、RS232Cインターフェース・ケーブルによりパーソナル・コンピュータ(PC)と接続していた電子機器において、すべて無線化できるかと聞かれると、それは無理であろうと思います。次のような理由からです。無線化するためには、PICのようなマイクロ・コントローラが必要です。PICの立場に立つと、PCから送られてきたデータを受け取り、電子機器にそれを転送する、そしてその逆を行わなければいけません。これには時間がかかります。つまり、タイムラグ(時間遅れ)が問題となります。したがって、これまでPC上でお使いのアプリケーション・ソフトウェアが、このタイムラグを許容しないと、タイムアウトで通信が途絶えてしまいます。これが理由です。なお、ご自身で開発したアプリケーション・ソフトウェアならば、少しの手直しでタイムラグを許容できるはずです。以下参考になればと思います。

随分古くから、大倉電気株式会社の温度制御器EC5700を使っています。この機器をRS232Cインターフェース・ケーブルによりPCと接続し、制御して来ました。この接続を無線化します。具体的には温度調節器とPIC基板とを有線のRS232Cケーブルで結び(下の写真を参照)、PIC基板とPC間を無線(bluetoothのRFCOMM)で結びます。結果として、温度制御器とPCとを繋いできたRS232Cケーブルが不要となりました。

PIC基板の回路図を以下に示します。(拡大図)

また、実際のPIC基板は以下のようになっています。

 


さて、PIC24FJ64GB002に書き込むためのファームウェアはOhBlue ver.1.0です(Windows XP SP3のマイクロソフト・スタックでの動作確認だけは行っています)。温度制御器に対してはUART1を、デバッグ・モニター用のRS232C回路に対しては、これまでと同じくUART2を割り当てています。温度制御器は、ボーレートが9600 bps、データビット長が7ビット、 パリティが偶数, ストップビットが2、フロー・コントロールが無しの設定でのRS232C通信を要請しています。ところが、UART1はデータビット長を7ビットに設定できません。そこで、ファームウェア中でパリティを計算して、(データビット+パリティビット)として、これを8ビットのデータとして扱っています。そして、UART1はボーレートを9600 bps、データビット長を8ビット、 パリティなし, ストップビットを2、フロー・コントロールはなしの設定にしています。なお、温度制御器からPICがデータ受信する場合のために、タイムアウトを設けています。UART1.cとUART1.hをご覧ください。

PC側のアプリケーション・ソフトウェアは、前出のRsTestを元に、使用する電子機器に合わせて作成願います。 ただ作成の際には、必ず
GetCommState(hCom,&dcb);
dcb.BaudRate = 9600;
dcb.fBinary=1;
dcb.ByteSize = 7;
dcb.Parity = EVENPARITY;
dcb.StopBits = TWOSTOPBITS;
fSuccess = SetCommState(hCom, &dcb);
として初期化ください。これ以外の設定をすると通信ができなくなります。RsTestでの初期化とは異なっていますので注意願います。


以下の図は、PCのモニター画面で自作のアプリケーション・ソフトウェアを実行して、室温の経時変化をとっている時のものです。ただ、この画面だけでは、実際にBluetooth通信をしているかどうかは、理解頂けないと思います。

戻る