IoTで使うPython入門Step3-計測 (2) DMM 34461A-②
KeysightのDMM 34461Aのカタログには、USB 2.0(USB-TMC488 & MTPプロトコル)対応と書かれています。USBTMC488はUSB Test & Measurement Classの略で、ユーザからは、USBデバイスはGPIBデバイスが動作しているように見えます。MTPはMedia Transfer Protocolの略で、PCとつないだときのファイル転送用です。
ここではUSBTMCを利用します。
●USBTMCライブラリ
ラズパイの環境です。
最初に、次のライブラリをインストールします。1.0.2がインストールされました。
pip install PyUSB |
今回利用したusbtmcはソース・プログラムで提供されています。GitHubにいってZIPファイルをダウンロードします。
ダブルクリックするとアーカイバが立ち上がるので、解凍します。
cd Dwonloads/python-usbtmc-master sudo python setup.py install |
0.8がインストールされました。
34461AのリアパネルからUSBケーブルでラズパイのUSBへつなぎます。ターミナルでlsusbを実行します。
不明なデバイスが見つかります。「2a8d:1301」はVenderIDが0x2a8d、Productが0x1301を示しています。新しいファイルを作ります。2a8dはKeysightのIDです。
sudo nano /etc/udev/rules.d/usbtmc.rules |
内容です。
# USBTMC instruments # Agilent 34461A SUBSYSTEMS=="usb", ACTION=="add", ATTRS{idVendor}=="2a8d", ATTRS{idProduct}=="1301", GROUP="usbtmc", MODE="0660" # Devices KERNEL=="usbtmc/*", MODE="0660", GROUP="usbtmc" KERNEL=="usbtmc[0-9]*", MODE="0660", GROUP="usbtmc" |
記入が終わったら、CTRL-O CTRL-Xで終了します。
usbtmcのグループを作ります。
sudo groupadd usbtmc |
usbtmcのグループにユーザpiを追加します。
sudousermod -aG usbtmc pi |
rebootします。
テキスト・エディタでテスト・プログラムを入力します。
import usbtmc instr = usbtmc.Instrument("USB::0x2a8d::0x1301::INSTR") print(instr.ask("*IDN?")) |
k.pyで保存して、python k.pyで実行します。
LANのときと同じ結果が返ってきました。
●プログラム
usbtmcのドキュメントはここで見つかりました。python usbtmcのドキュメントはここで見つかりました。
設定はwrite("CONF...")、データの読み出しはask("READ?")です。電源投入後のデフォルトは直流電圧を読み出します。ここでは直流10Vレンジに変更しました。
import paho.mqtt.publish as publish
from time import sleep
import usbtmc
topic = "K-34461A/DC/volt"
host = 'raspberrypi.local'
instr = usbtmc.Instrument("USB::0x2a8d::0x1301::INSTR")
instr.write('CONF:VOLT:DC 10,0.001\n')
#instr.write("CONF:VOLT:AC\n")
while 1:
readDcVoltage = instr.ask("READ?")
print "DC :" ,float(readDcVoltage), "V"
publish.single(topic, readDcVoltage, hostname=host)
sleep(1)
Node-REDで購読し、dashboardで表示した様子です。読み出したデータをchartとgaugeで表示しました。34461Aで測っているのはTL431の出力電圧です。
第4回目でも、別のライブラリvisaを使ってUSBでアクセスします。