ArduinoをWindows PCに繋いだ場合のCOMポートの番号を調べるプログラムでちょっと失敗した。
Arduino Unoの中華互換機を使って試していて気が付いたのだが、シリアル通信のデバイスについてSetupAPIやレジストリの文字列をチェックするとArduinoという文字が出てくる場合と出てこない場合があるというのに気が付いた。
あるPCだとArduinoという文字がドライバ情報に入っているので、そのCOMポートの番号がArduinoだと特定することができた。
それで安心していたのだが、別のPCだとArduinoという文字が入っていなかったのでArduinoを見つけられなかった。
最近のPCにはRS-232Cポートはまず付いていないので、built-inのポートについては最初から除外しておけばよい。
あとは、PCに接続されたCOMポートのデバイスの数をチェックし、1つだけならば、そのCOMポートがArduinoであると仮定してしまえばよい。
大抵の場合はこのやり方で問題ないだろう。
問題になるのは2つ以上のUSB-UARTデバイスをPCに接続している場合だ。
その複数のものが別のメーカー製で、ドライバの情報の文字列が異なっていれば区別することができる。
FTDIとSiLabsとProlificとを区別したりすることができる。
ただし、今回Arduinoの場合に当てにしていたArduinoという文字列がPCによってあったりなかったりしたので、他の場合に大丈夫なのかちょっと自信がなくなってきた。
一番困るのは同じメーカーの、例えばFTDIのUSB-UARTが複数個が同時にPCにつながっている場合にCOMポートをそれぞれ区別しようとしても、できないという問題がある。
あとは実際に通信して、その応答で区別できるような仕掛けを仕込んでおくしかなさそうだ。