IPIで売ってるFM無線送信/受信モジュールを使ってみた。
先週の火曜から金曜まで残留して、433MHzの送信/受信モジュールで通信できるようになった。
UART(2400bps)→FM→UART(2400bps)と変換してくれるモジュールなのだが、何も送信してなくてもアンテナから常にノイズが入るので、シグナルとノイズを区別する必要がある。
連送照合(同じ文字をn文字ずつ送り、シグナルかどうか照合する)を使ったり、連送照合しても偶に文字列の頭の文字だけが抜けたりするので、頭に0xFF、ケツに0x00送ってみたりしながら色々工夫してたらできた。DNP1階~2階間ぐらいでならノイズ無しで通信できる。
ただし、136bpsしか出ない。(アンテナがブレッドボードの線だからノイズが入るのかもしれない)
やってみて、正直forkやthreadが無い上RAMも128byteだけのAVRで通信しながら他の処理をやったら頭おかしくなると思ったので、普通にRS232接続でデータを送る感じで使えるラッパーを作ろうと考えた。
送信機のハードができた。例によってCDドライブのオーディオケーブルで接続。ISPコネクタも装備。
ソフト書こう。
*送信機(AT90S2313 10MHz)の機能
-UART(9600bps)で受信して、バッファに溜めて、UART(2400bps)でn連送する
-文字の頭と尻に特徴的なビットを付ける
-パリティビットを付ける
-送信機のIDも送る
-送信中は、メインマイコンが更にデータを送って来ない様に「ちょっとまってシグナル」を送る
*受信機(AT90S2313 10MHz)の機能
-UART(2400bps)で受信して、バッファに溜めて、中身をチェックして問題なければUART(9600bps)で送信する
-n’文字以上同じ文字が来ていれば、シグナルだ(n>n’)
-文字の頭と尻の特徴的なビットを検出して、シグナル/ノイズを判断する
-パリティビットを検出して、(以下同文)
-送信機のIDを見て、通知する
送信機と受信機を接続して、勝手にコリジョン回避までやってくれるようにできたらマンセーだな。
欲を言えばマルチホップとかも。