質問: ### 前提・実現したいこと Windows10にて, Pythonを使ってF.W. Bell社の5180 Gauss/Tesla Meter(つまり、制御対象である測定器)とのUSB通信をPythonを用いて行いたいです。 具体的には、パソコンからPythonで測定器にコマンド(送るコマンドは"*IDN?"のようにすでに指定されています。)を送ることで、測定器に書いてある値をパソコンにて読み取りたいです。 測定器にはインターフェースとして、USB-mini-Bメスタイプがあり、ケーブルにてパソコンと接続いたしました。 上のURLに専用のUSBドライバが配布されているため、ダウンロードし、その際に提供されているGUIを使うことで測定器の制御をPCからできたので、PCにて測定器自体は認識されているようです。 ここからやりたいのが、この測定器に対して、その提供されているGUIを使うのではなく、**PythonからPySerial(かPyUSB?)などのライブラリを用いることでUSB通信を確立し、用意されているコマンド(*IDN?や*CLSなど。)を直接測定器に送信し、その返り値としてデータをPCで受け取りたい**です。 ### 教えていただきたいこと。 ・USB通信を行うためのPythonのライブラリとして何を使えばいいのか。 ・そして、そのライブラリにて具体的にどういったコードを書くことで、USB通信を確立し、コマンドを送り、返り値として測定器の値を得られるのか。 ・その際参考になるウェブサイトなど(英語でも構いません。)があれば教えていただきたいです。 ### 試したこと イメージとしてはこのサイトみたいな感じです。 ただ、使うべき関数名などをどうやって知ったのかがわからないため、このサイトの通りに行えませんでした。 今回のガウスメーターではなく、別の測定器に対して、PythonのライブラリPyVISAを用いることで、GPIB-USB通信による制御はできました。今回は、純粋なUSB通信にての測定器制御を行いたいです。 インターネットで調べても文献があまり見つけられないため、こちらで質問させていただきました。 不明な点や分かりにくい点がありましたら、質問していただけるとありがたいです。よろしくお願いいたします。
回答: `pyserial` を使えば良いと思います。 私も似たようにシリアル通信を用いて測定機器等の制御を行っていますが,`pyserial` で特に問題なく動作しています。(Linux環境ですが...) 測定機器を制御PCに接続した際に,その測定機器のUSBシリアル番号が Windows でも調べられるはずです。 そのシリアル番号を用いて,以下の様にして通信できないでしょうか? **追記:2018/11/3** コードを少し修正しました。コマンドを送る際,文字列ではなくバイト列にしてください。 ``` >>> import serial >>> port = "xxxxx" # 調べたシリアル番号 >>> byte = 4096 # 適当なサイズ(読み出せる範囲で) >>> ser = serial.Serial(port=port) >>> ser.write(b"*IDN?\n") >>> ret = ser.read(size=byte) >>> print(ret) # デバイスの応答がプリントされる >>> ser.close() ```