ProcessingでArduinoなどとシリアル接続する際の、ポート設定(ソース)を自動接続できるようにしてみました。
Arduinoの情報をProcessingを使ってよくビジュアル化したりデバッグしたりするのですが、ひとつのパソコンでCOMポートをたくさん使ってて、今や使っていないポート情報が残っていたり結構煩雑になってます。
Processingでシリアル通信するたびにCOMポートの記述直して、、と結構面倒。たまにCOMポート間違えてることに気付かずに、何故動かない?とソースとにらめっこして余計な時間使ってしまうこともあります。
ということで接続されているCOMポートを自動で判別して接続できたら便利かと思いやってみました。
▼よくあるシリアル接続の記述▼
import processing.serial.*; Serial myPort; void setup() { myPort = new Serial(this, "COM4", 57600); }
Processingでよくあるシリアル接続の記述はこんな感じかと思います。この”COM4”のところを、通信するCOMポートに合わせる必要があります。
今回は、「try~cathc~」文を使って、COMポートを自動で判別してシリアル接続してみます。try~catch~については検索すれば使い方はすぐわかるかと思います。
やり方ですが、まず準備としてCOMポートの一覧を取得します。
▼COMポートの一覧を取得▼
String[] comPort = myPort.list();
適当な文字配列を準備して、そこにCOMポートの一覧を格納しておきます。
あとはtry~catch使って、一つずつシリアル接続できるかを確認していきます。
▼try~catch~▼
int num = comPort.length; println("Test serial port."); for (int i=0; i<num; i++) { print(comPort[i]+" "); try { myPort = new Serial(this, comPort[i], 9600); println("O.K"); } catch(Exception e) { println("failed"); continue; } }
取得したCOMポートの数だけ接続を試みます。ここでは、例外が発生したら、コンソールにテキスト出力してます。
これだけで自動判別・接続の完了です。(Arduinoとの接続確認ではうまくいきました。他では試してませんので、状況によってはうまくいかない場合があるかもしれません。)
さらに、例えばArduino側からダミーのパケットを送信し続けて、接続したProcessing側からパケット内容判別して処理して、、、と行えば確実に接続確認できますし、ボーレートの自動判別や複数の接続があった場合にも対応できるかと思います。(今回はそこまでする必要が無かったので試してませんが・・。)
ここら辺りは必要性が出てきたら試してみたいと思います・・。
コメント