赤外線シリアル通信
M5stick ⇔ ATtiny 双方向通信テストやってみた。
通信手順の流れ
・M5stickからAttinyへ電池電圧の問い合わせ要求コマンド送信
→Attinyで受信コマンド識別 → 電圧送信
→M5stickで受信、コマンド識別 → 電池電圧データ格納
・Attinyのチップ温度通信も手順は同じ
こちらはその時の様子。
先日、M5stick単体で赤外線シリアル通信がうまくできそうか
試した。
思ったより、、、
簡単に通信ができることは確認した。
赤外線リモコン通信は・・・
いくつもフォーマットあるけど一番メジャーなNECフォーマットで
だいたい1回の通信50msほど掛かる。これを双方向通信で送受信を繰り返すと
妙な待ちが入ってしまう(この辺はライブラリの中身よく見てないので
ちゃんとわかってないんだけど)のでさらに遅くなる。
毎秒数セットの送受信がやっとだった。
でもって割込みで通信処理に占有されてるっぽい時間が長いので他の
処理が定期処理だと狂ってくる。
これはモータ制御なんか並列に動いてると影響出てくる。まずい。
その点、、、
赤外線シリアル通信、同じ38kHzキャリア使って
2400bpsは安定していける。・・・・1ビット約0.5ms
2バイト通信【アドレス(コマンド)で1バイト、データ1バイト】で
行うなら20ビット程度、10ms程で送れる・・・・速い。
割込みで占有される時間も短く他の制御への影響小さい。
でもってシリアル通信の方がメモリーの消費も少なく、
関数の動きも速い。元々シリアルは遥かに高いボーレートで使うのが
普通なので当たり前だけど。
赤外線リモコン通信のライブラリ、とにかく遅い。
そもそもテレビのチャンネル切り替えとか人の操作に
対応できればいいリモコンの通信方式なのでそれ自体には全く問題ない。
●M5stickの これまでIR_Remote
赤外線リモコン通信のためにユーザが割込み設定するところ
受信があったら読み取っておく
●M5stickの IR_Serial
赤外線シリアル通信のためにユーザが割込み設定するところ
38kHz搬送波作るところ。 Serial通信自体はもとよりある。
ビット演算子使ってちょいと処理は簡単に速くもできる・・・
自分がそのしくみでマイクロロボの操縦等々やろうとしたことが間違ってた。
無理があった。
リモコンフォーマットは秒単位送信のみの片道通信の仕様。
マイクロロボで考えている、、、
数台の双方向通信毎秒数十回の双方向通信には使いにくいの
当たり前・・・
M5stickとAttinyで
— しん (@shinichi_nin) 2023年9月3日
赤外線シリアル双方向通信
赤外線リモコン通信は、
リモコンフォーマットでは
双方向通信はちょいといまいちだった。
こっちはいい感じ。
マイクロロボで採用かな♪#M5Stack #M5StickC #Arduino #赤外線通信 #赤外線シリアル通信 #38kHz変調 #IR #赤外線LED pic.twitter.com/hKEMuuclEv
赤外線シリアル通信
基本操作テストはそれなりにうまく行ったので
これからプロトコル...的なしくみ造り込んでいこう。
実際にはほぼI2Cの通信風なことをシリアルでやるだけなのだけど。