概要
Arduinoにシリアル通信させるプログラムはArduino IDEで書き込めたけど、Arduino IDE以外からシリアルポートにアクセスできなくなった対処の話。
類似事例が無いか軽く調べてみたけど引っかからなかったので需要があるんじゃないかと記録する。
状況発生環境
検証のための再現環境構築はしていない。シリアルポートがらみの主要登場人物から推定。
- Windows10
- Arduino IDE2.0.0
- Keysight IO Libraries Suite2022(多分主犯)
状況
Arduinoにシリアル通信でメッセージを送ってリレー制御したり、Arduinoの動作状態を返信するプログラムを書いたときに発生。
Arduino IDEでプログラムを書き込んで、Arduino IDE付属のシリアルモニタでメッセージを送って期待通りの動作をしていることを確認。
で、上記Arduinoを含めて複数の測定器を連動させたプログラムを作る段階で問題発生。
不具合現象(シリアルポートが開けない)
デバイスマネージャー上でArduinoのシリアルポートが認識されているにも関わらず、シリアルポートを開こうとするとエラーが出る。
色々試したけど例としてpyvisaで、こんなコードを書いてエラーが出る
import pyvisa
rm = pyvisa.ResourceManager()
resource_list = rm.list_resources()
print(resource_list)
('ASRL1::INSTR','ASRL2::INSTR', 'GPIB0::12::INSTR')
# イメージとしてpyvisa公式ページのサンプルコード結果修正引用
# ASRL2::INSTR相当が制御をかけたいArduinoのシリアルポート
inst = rm.open_resource('ASRL2::INSTR') # <-ここでエラー発生
試したのはほかにも
- pyserial ほぼ同様のところでエラー発生
- TeraTerm シリアルポートを認識しない
- PCのArduinoを刺すUSBポートを変更してもダメ
- Arduino IDEのシリアルモニタでは問題無く動く
原因と対処
どうもKeysight IO Libraries SuiteがArduino IDEのシリアルポートを勝手に占有していた模様。
その割にpyvisaでアクセスができないのはKeysight Connection Expert上でのシリアルポートを使用するためのボーレート等の設定が不足していたから。下記画面でシリアルポートの設定を行ったところ、前述のコードがエラーを吐かずに正常に走るようになった。
最後に
ちょっとKeysight IO Libraries Suiteの行儀が悪い・・・でも、GPIBがらみの制御では欲しいからアンインストールもできない困りもの。
あと、なんでArduino IDEは普通にアクセスできるのかが謎である。