Update 2015 June: additions for Ubuntu 14.04LTS (where a symbolic link is required), and for the NI-USB-B dongle (which needs firmware loading). See also: Using the National Instruments GPIB-USB-B on linux
Notes on how to use GPIB from python on Ubuntu 12.04LTS. Tested with National Instruments USB-GPIB device and a recently bought NI GPIB PCI-E card.
- Get linux-gpib source from http://sourceforge.net/projects/linux-gpib/
- Building the python bindings requires libboost-python (and maybe libboost-python-dev)
- build linux-gpib by running: ./configure, make, sudo make install
- edit /etc/gpib.conf to fit your hardware. The default config board_type = "ni_pci" seems to work with the NI PCI-E card. For the USB-GPIB device we need board_type = "ni_usb_b"
- load the kernel module, for the PCI-E card this is sudo modprobe tnt4882, for the USB-dongle this is sudo modprobe ni_usb_gpib
- On Ubuntu 14.04LTS the library that gpib_config is linked against is installed in a location where the binary doesn't find it. The fix is to add a symbolic link in /lib/
/lib$ sudo ln -s /usr/local/lib/libgpib.so.0 libgpib.so.0
- configure: sudo gpib_config --minor 0 this reads and parses /etc/gpib.conf so it needs to be re-done if something is changed in gpib.conf
- If gpib_config fails, and you have the older/slower NI-USB-B dongle, then you need to first load the firmware. This seems to not be required with the newer NI-USB-HS (to be confirmed?). Firmware loading requires fxload and the firmware from http://linux-gpib.sourceforge.net/firmware/. Find out where your USB-dongle is with lsusb and then load the firmware with something like:
fxload -D /proc/bus/usb/001/002 -I niusbb_firmware.hex -s niusbb_loader.hex where you replace /001/002 with the numbers for your USB device. Now gpib_config should work.
- By default only members of the gpib-group can use gpib, and only root has access to /etc/gpib0. If we want normal users to use gpib, add them to the gpib group (on Ubuntu the graphical user&group editor is gnome-system-tools)
note: If "import gpib" fails in python you might have forgotten to install libboost-python before building linux-gpib. Python bindings will not be built&installed unless you have libboost-python.
I have two devices, so I've configured them like this in gpib.conf
/* agilent mux/dmm */
minor = 0 /* first gpib-card/usb-dongle */
name = "dmm"
pad = 8 /* primary address, configure on instrument front-panel*/
sad = 0 /* secondary address, always zero? */
/* kikusui psu controller */
minor = 0
name = "kikusui"
pad = 1
sad = 0
And now we can try some python:
dmm= gpib.find("dmm") # define in /etc/gpib.conf
def query(handle, command, numbytes=100):
response = gpib.read(handle,numbytes)
# KIKUSUI ELECTRONICS CORP.,PIA4830,0,2.20