How to fix PyVISA not finding any USB instruments
Problem:
You are trying to connect to a USB instrument using PyVISA & pyvisa-py
, but the PyVISA resource manager doesn’t find any instruments:
#!/usr/bin/env python3
import visa
rm = visa.ResourceManager()
print(rm.list_resources()) # Prints "()" => No instruments found!
Solution:
In order for pyvisa-py
to be able to connect to USB instruments, you need to install the Python usb
library!
On Debian or Ubuntu, install it using
sudo apt-get -y install python3-usb
or, if you are still using Python 2.x
sudo apt-get -y install python-usb
Now, re-run the script - you should see an output like
('USB0::6833::3601::DL3A204800938::0::INSTR',)
In case you still don’t see the output, run python3 -m visa info
or python -m visa info
(for Python 2.x).
It should show an output like this:
Machine Details:
Platform ID: Linux-4.19.0-5-686-i686-with-debian-10.0
Processor:
Python:
Implementation: CPython
Executable: /usr/bin/python3
Version: 3.7.3
Compiler: GCC 8.3.0
Bits: 32bit
Build: Apr 3 2019 05:39:12 (#default)
Unicode: UCS4
PyVISA Version: 1.9.1
Backends:
ni:
Version: 1.9.1 (bundled with PyVISA)
Binary library: Not found
py:
Version: 0.3.1
ASRL INSTR: Available via PySerial (3.4)
USB INSTR: Available via PyUSB (1.0.2). Backend: libusb1
USB RAW: Available via PyUSB (1.0.2). Backend: libusb1
TCPIP INSTR: Available
TCPIP SOCKET: Available
GPIB INSTR:
Please install linux-gpib to use this resource type.
No module named 'gpib'
Check Backends
-> py
-> USB INSTR
: If it’s not Available via PyUSB
, check the information message for hints what might be the issue. For example, if it says
USB INSTR:
Please install PyUSB to use this resource type.
No module named 'usb'
that means that the Python USB library has not been installed properly.
If USB is Available via PyUSB
but PyVISA still doesn’t find the instrument, check if it is connected properly using
lsusb
which should show a line related to your instrument’s manufacturer, e.g.
Bus 001 Device 002: ID 1ab1:0e11 Rigol Technologies
Also unplug and re-plug your instrument so Linux tries to reconnect to the USB device and check the end of the output of sudo dmesg
which could list e.g.
[19427.230120] usb 1-2: new high-speed USB device number 2 using ehci-pci
[19427.425464] usb 1-2: config 1 interface 0 altsetting 0 bulk endpoint 0x82 has invalid maxpacket 64
[19427.425469] usb 1-2: config 1 interface 0 altsetting 0 bulk endpoint 0x3 has invalid maxpacket 64
[19427.425947] usb 1-2: New USB device found, idVendor=1ab1, idProduct=0e11, bcdDevice= 0.02
[19427.425950] usb 1-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[19427.425953] usb 1-2: Product: DL3000 Serials
[19427.425955] usb 1-2: Manufacturer: Rigol Technologies.
[19427.425957] usb 1-2: SerialNumber: DL3A204800938
[19429.525745] usbcore: registered new interface driver usbtmc
usbtmc
in the last line means that the USB device has been recognized as USB Test & Measurement class device, and hence you should be able to connect to it using PyVISA as USB INSTR.