##1. はじめに
Raspberry PiのGPIOにタクタイルスイッチを接続し、スイッチが押されたらSCPIコマンドの「:RUN」「:STOP」をオシロスコープへ送信します。SCPIコマンドの送信はpyVISAを使用します。
##2. 結線
|BCM|Physical|I/O|機能
|---+--------+---+----
| 2 |3 |IN |RUNコマンド(:RUN)発行
| 3 |5 |IN |STOPコマンド(:STOP)発行
|17 |11 |OUT|LED点灯
LEDは3kΩの電流制限抵抗を介して接続します。
##3. プログラム
- あらかじめpyUSB、pyVISA、pyVISA-pyをpipコマンドでラズパイにインストールしてください
- VISAアドレスはハードコーディングしています(VISAアドレスの調べ方は付録をご参照ください)
- sudo python scpi-commander.py で実行します(sudo重要!)
scpi-commander.py
import RPi.GPIO as GPIO
import time
import visa
PORT_RUN = 2
PORT_STOP = 3
PORT_LED = 17
VISA_ADDR = "USB0::6833::1230::DS1Zxxxxxxxxxx::0::INSTR"
GPIO.setmode(GPIO.BCM)
GPIO.setup(PORT_LED, GPIO.OUT)
GPIO.setup(PORT_RUN, GPIO.IN)
GPIO.setup(PORT_STOP,GPIO.IN)
def open_dso():
rm = visa.ResourceManager()
resources = rm.list_resources()
#print(resources)
try:
dso = rm.open_resource(VISA_ADDR)
except:
print("Not Found:", resources)
else:
pass
#print("Detected")
return dso
def main():
try:
dso = open_dso()
except:
print("DSO Open Failed, exit.")
exit(1)
else:
print("DSO Open Success.")
try:
while True:
port_run = GPIO.input(PORT_RUN)
port_stop = GPIO.input(PORT_STOP)
if port_run == GPIO.LOW:
GPIO.output(PORT_LED,GPIO.HIGH)
#print(dso.query("*IDN?"))
print(":RUN")
dso.write(":RUN")
while(GPIO.input(PORT_RUN)==GPIO.LOW):
#print("pressing...")
time.sleep(0.1)
if port_stop == GPIO.LOW:
GPIO.output(PORT_LED,GPIO.HIGH)
print(":STOP")
dso.write(":STOP")
while(GPIO.input(PORT_STOP)==GPIO.LOW):
#print("pressing...")
time.sleep(0.1)
GPIO.output(PORT_LED,GPIO.LOW)
time.sleep(0.1)
except KeyboardInterrupt:
GPIO.cleanup()
main()
##4. おわりに
- フットスイッチを使うと両手がふさがっていても足で操作できそうです。
##5. 参考資料
この記事を作成するにあたって参考にさせていただいた記事です。
##X. 付録 VISAアドレスの調べ方
あらかじめオシロとラズパイ(またはPC)をUSBで接続します。
> sudo python
>>> import visa
>>> rm = visa.ResourceManager()
>>> print(rm.list_resources())
('USB0::0x1AB1::0x04CE::DS1Zxxxxxxxxxx::0::INSTR')