Arduino + Max + Xbee でシリアル通信 その2

遅延をなんとかした

前回、とりあえずシリアル通信できたはいいものの、遅延が大きくて使い物にならないレベルだった。

以下の二点を変更することで、そこそこ使えるようにはなった。

・子機のDestination Address(送信先アドレス)に親機の番号を指定するようにした。
(今まで設定していた0でも親機に飛ばせるのだけど、個別に指定したほうが早いようだ。今回は親1体子2なのでこれでOK。)

・Xbee(とArduino)のボーレートをデフォルトの9400→38400にあげた。
38400はMaxのシリアル通信対応の上限。

 

変える前は体感0.1秒くらいの遅延が出ていたが、あまり気にならない程度までは軽減できた。
もしかしてBluetoothじゃなきゃ不味かったか…と思ったけどとりあえずなんとかなったので一安心。

ただ、軽減されたと言ってもまだ遅延は認識できるレベルだ。
今のところ、Arduino側Xbee→PC側Xbeeはほぼ同時なのだけど、PC上Maxでの表示の時点では遅延を感じる。

 

どのくらい遅延が発生してるのか?

Maxでのシリアル通信では、シリアル通信オブジェクトにbangを送って、COMポートにたまってるデータをポーリングする必要がある。ポーリングレートは1msに一回が最大なので、タイミングによって最大これが上乗せされる。
また、Xbeeの通信速度は今38.4kbpsで、ヘッダが25byte=200bitくらいあるので、5msくらい遅延が発生していることになる。
加えて、Maxのソフトウェア的な遅延がかかって…6ms+αか。このαが意外と大きい気がしている…

αがどのくらいなのかわからないので、XbeeのAPIモードを使ってMaxと通信するMaxbeeuinoというライブラリを試してみようと思う。ただAPIモードはフレームヘッダがさらに大きくなるからもっと遅くなるかも…

ちなみに、bluetoothなら通信速度ももっとあげられて(Xbeeは上げれてもこの10倍くらいが限度)、ヘッダも5byteなので、遅延が重要なものをXbeeで作るの失敗だったかもしれない。

 

とりあえずつづく。

0 Comments

Leave a Reply

Your email address will not be published.