WHAT
Windowsでは新しいArduinoやRS232C変換ケーブルなどを接続すると、無限にCOMポートが新しく確保されていき、そのデバイスを接続していない時でも使用中となり、そのCOMポートは別のデバイスでは使用できなくなる。
その結果COMポートの数がとんでもないことになる。
秋月電子のPICProgrammerなどでは指定できるCOMポートが20までと決まっており、「指定できねえじゃん、やべえ」を回避するための手段である。
HOW
Windowsのスタートメニューを開き、プログラムとファイルの検索かregeditを検索する。
左のサイドメニューから
HKEY_LOCAL_MACHINE > SYSTEM > CurrentControlSet > Control > COM Name Arbiter
を選択する。
このCom DB
の中身が使用中のポートを指しているbinary fileなのでこいつを編集する。
が、その前にPC固有で持っているCOMポートがあり、間違って解放して使用すると競合して不具合を起こしてしまうので固有のCOMポートを確認しておく。
スタートメニューからコントロールパネルを開き、デバイスマネージャーを起動する。
COMポートを使用するデバイスを全てはずしてポート(COM と LPT)
を開くと、PCの固有の通信ポートが出てくる。
これらのポートを別のCOMデバイス(Arduinoなど)で使用しようとすると、競合して不具合を起こすので、これらのポートだけは解放しないようにする。
私のPCではCOM1とCOM2(私のと書いたが大抵のWindowsPCは1と2は使用されているように思う。)が使用されているので、この2つは解放しないようにする。
ここで先ほどのComDBというファイルだが、1byte目のLSBからCOM1,COM2,COM3…と使用中かそうでないかが0,1で表現されている。
私のPCでは、1,2を解放してはいけないという話だったので、1byte目の下位2bitは1にする必要がある。
バイナリファイルを編集するときはHEX表記されているので、
0b0000 0011 = 0x03
つまり、1byte目を03
に指定してあげればよい、ということになる。
ComDBを編集するには、ComDBを右クリックし、バイナリデータの修正を選択する。
そして、1byte目に03を与え残りをDel
キーなどで消してやり、OKを押下する。
これで解放は終了です。
Arduinoなどを新しく接続すると、解放されたCOM3から割り当てられる。
これで無事COMポートが解放された。