https://github.com/berndporr/pyusbdux
Python API for the USB-DUX data acquisition devices.
https://github.com/berndporr/pyusbdux
comedi data-acquisition oscilloscope python-library python3 usb-dux usbdux
Last synced: 12 months ago
JSON representation
Python API for the USB-DUX data acquisition devices.
- Host: GitHub
- URL: https://github.com/berndporr/pyusbdux
- Owner: berndporr
- License: gpl-3.0
- Created: 2018-11-06T11:13:35.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2023-01-27T22:39:37.000Z (over 3 years ago)
- Last Synced: 2025-04-08T00:04:55.965Z (about 1 year ago)
- Topics: comedi, data-acquisition, oscilloscope, python-library, python3, usb-dux, usbdux
- Language: Python
- Homepage: http://www.linux-usb-daq.co.uk
- Size: 97.7 KB
- Stars: 1
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.rst
- License: LICENSE
Awesome Lists containing this project
README
==========================
Python API for the USB-DUX
==========================
USB-DUX are open source & hardware data acquisition boxes designed for Linux
https://github.com/glasgowneuro/usbdux
pyusbdux supports the USB-DUX-sigma: 16 analogue inputs (isolated, 24 bit, 1 kHz), 4 analogue out (isolated, 8 bit) and 8 digital I/O
Installation instructions
=========================
Make sure that you have all `comedi` libraries,
`swig` and `python3` installed (both runtime and development).
Use your favourite package manager to install the packages.
Then install `pyusbdux` by typing::
pip3 install pyusbdux [--user] [--upgrade]
or
./setup install [--user]
Quick start guide
=================
Here are the basic steps how to use the API::
# load the module
import pyusbdux as dux
# create a callback interface
class DataCallback(dux.Callback):
def hasSample(self,sample): # sample arrived
print("s:",sample) # process sample
cb = DataCallback()
# opens the 1st USBDUX device (autodetect)
dux.open()
# Start asynchronous data acquisition in the background: one channel, fs=250Hz
dux.start(cb,1,250)
# do nothing or run a gui
input() # do nothing here
# shutdown
dux.stop()
dux.close()
API documentation
==================
These are the commands which allow you to access the analogue inputs asynchronously
and the analogue outputs, digital input and outputs synchronously::
# opens the comedi device with comediDeviceNumber
open(comediDeviceNumber)
open() # opens 1st USB-DUX device (autodetect)
# Callback interface
class DataCallback(dux.Callback):
def hasSample(self,sample): # sample arrived
# implement your callback handler here
# Starts acquisition of n_channels at the sampling rate of fs.
# Expects an instance of Callback with overloaded hasSample(self,sample).
start(Callback,n_channels, fs)
start(Callback,n_channels) # at fs=250
# gets the actual sampling rate of the running acquisition
getSamplingRate()
# stops the background acquisition
stop()
# writes to a digital pin the value 0 or 1
digital_out(channel, value)
# reads from a digital pin
digital_in(channel)
# writes to an analogue output pin (raw ADC values)
analoge_out(channel, value)
# gets the max raw value of the analogue output
get_analogue_out_max_raw_value()
# closes the comedi device
close()
# returns the name of the board connected
get_board_name()
Any error in comedi throws an exception in python.
Example / demo programs
=======================
In the folder https://github.com/berndporr/pyusbdux/tree/master/examples are example
scripts which show you how to sample data from the analogue and digital ports.
Troubleshooting
===============
Spyder
------
Start your program from the terminal and never within Spyder. Here is
an example::
~/pyusbdux$ cd examples
~/pyusbdux/examples$ python3 ./realtime_plot.py
The problem with Spyder is that it won't let your Python program terminate properly so
that you can examine variables etc. However, this means that
the USB-DUX board keeps running even if it seems that execution has finished.
If you then re-run your program
it won't be able to talk to your USB-DUX.
Bottomline: Use Spyder only for editing, instead run your program from the terminal. Never start
your program from within Spyder.
After an update still the old version is being used
---------------------------------------------------
If you use the `--user` option to install / update packages Python might keep older versions.
Solution: Do a `pip uninstall pyusbdux` multiple times until no version is left
on your computer. Then install it again as described above.