ArduinoとPCの通信

ArduinoとPCをシリアルで通信させたいということはまあまあ良くあると思います(多分)。

ちなみに手元にあるのは Arduino Nano で、USB経由でPCにはシリアルポートとして認識させることができます。

シリアルだと、ストリーム通信している分には問題ないのですが、コマンドパケットのようなものをやり取りしようとすると、パケット境界の記述に悩むことになります。
特にホスト側のアプリを強制終了させた場合などパケットが途切れたりした後の再開まで考えるとある程度回復できるプロトコルが望ましいです。

まあ、実体USBなので、多分エラーの心配は低く、チェックSUMとかいらないだろうということで、パケット転送をSLIP(RFC1055)で記述してみました。

https://github.com/ryuz/arduino

手順はシンプルですし、エスケープコードの 0xC0はパケット境界でしか出現しないので、どんな状態からでも0xC0を待てば一応の復帰はできるはずです。

調べれば世の中にメジャーなライブラリとかありそうですが、とりあえずお勉強ということで….

Serialslip_2

C++11のスレッドの勉強もかねてPC側も書いてみました。

ランダムなパケットをループバックさせてみましたが、時間に関してはばらつきが結構ありますね。

コメント

タイトルとURLをコピーしました