Supported Devices#
Acqusition#
LDAQ.national_instruments.NIAcquisition: Any National Instruments input device.LDAQ.serial_communication.SerialAcquisition: Any device that communicates via serial port, tested with Arduino and ESP32.LDAQ.digilent.WaveFormsAcquisition: Any Digilent device, tested with Analog Discovery 2.LDAQ.flir.FLIRThermalCamera: Based on pySpin, tested with FLIR A50.LDAQ.basler.BaslerCamera: Based on pyPylon, any Basler Camera should work.LDAQ.telops.TelopsCamera: Based on pyTelops (pure-Python GigE Vision, no vendor SDK), tested with Telops FAST M3k MWIR. Install the optional dependencies withpip install LDAQ[telops](or install the underlying driver directly withpip install pyTelops).LDAQ.simulator.SimulatedAcquisition: Used to test the GUI without any hardware connected. Alternatively it can be used to track memory, CPU and disk usage.
Generation#
LDAQ.national_instruments.NIGeneration: Any National Instruments output device.
Hardware-Specific Installation Instructions#
- LDAQ.national_instruments.NIAcquisition[source]
Acquisition class for National Instruments devices via nidaqwrapper.
A thin wrapper around
nidaqwrapper.AITaskthat satisfies theBaseAcquisitioncontract. Supports both programmatic tasks (AITaskobjects) and tasks defined in NI MAX (task name strings).- Parameters:
task (nidaqwrapper.AITask or str) – Either a fully configured
AITaskinstance or the name of a task saved in NI MAX. When a string is supplied the task is loaded vianidaqwrapper.get_task_by_name().acquisition_name (str or None, optional) – Human-readable name for this acquisition source. Defaults to the underlying NI task name when
None.
- Raises:
ImportError – If the
nidaqwrapperpackage is not installed.TypeError – If
taskis not anAITaskinstance or a string.
Examples
Wrap a programmatically created task:
>>> ai = AITask("my_task", sample_rate=10_000) >>> ai.add_channel(...) >>> acq = NIAcquisition(ai)
Load a task saved in NI MAX:
>>> acq = NIAcquisition("MyNIMaxTask")
- LDAQ.flir.FLIRThermalCamera[source]
Acquisition class for FLIR thermal camera (A50).
This class is adapted from examples for thermal A50 camera provided by FLIR, found on their website (login required): https://www.flir.com/support-center/iis/machine-vision/downloads/spinnaker-sdk-download/spinnaker-sdk–download-files/
Installation steps:
Install Spinnaker SDK (i.e. SpinnakerSDK_FULL_3.1.0.79_x64.exe, found on provided link)
Install PySpin (python wrapper for Spinnaker SDK). On the website listed above, there are multiple build wheels listed under “Lastest Windows Python Spinnaker SDK”. Choose the one that matches your python version and architecture (i.e. spinnaker_python-3.1.0.79-cp310-cp310-win_amd64.zip for python 3.10 64-bit - this is also the version used for development of this class)
- LDAQ.digilent.WaveFormsAcquisition[source]
This is a class for acquiring data from Digilent Analog Discovery 2, using WaveForms SDK.
To use this class, you need to install WaveForms found on this link: https://digilent.com/shop/software/digilent-waveforms/
Installation instructions:
Download WaveForms from the link listed above.
Install WaveForms.
- LDAQ.basler.BaslerCamera[source]
Acquisition class for Basler camera using pypylon library.
Link to required programs: https://www.baslerweb.com/en/downloads/software-downloads/#type=pylonsoftware;language=all;version=7.3.0
Installation steps:
Download and install pylon 7.3.0 Camera Software Suite Windows software and choose developer option during installation
Install python library with pip install pypylon
- LDAQ.telops.TelopsCamera[source]
Acquisition class for Telops thermal cameras over GigE Vision.
Uses the pyTelops driver, a pure-Python GigE Vision implementation that does not require the Telops eBUS SDK. Tested against Telops FAST-series MWIR cameras (e.g. FAST M3k).
Installation:
Install pyTelops:
pip install pyTelopsNo vendor SDK, no compiled extensions required.
The plugin can either own its own
pyTelops.Camerainstance (default) or wrap a pre-configured one passed viacamera=. The pre-configured pattern is useful when the camera needs lens-specific calibration loading, NUC, or other one-time setup before acquisition.Examples
Standalone (plugin owns the camera):
import LDAQ tel = LDAQ.telops.TelopsCamera(sample_rate=100.0, integration_time=50.0) with tel: tel.run_acquisition(run_time=2.0) t, data = tel.get_data()
Pre-configured camera (with calibration block already loaded):
from pyTelops import Camera cam = Camera() cam.connect() cam.calibration_load(lens="50mm", temp=25) tel = LDAQ.telops.TelopsCamera(sample_rate=100.0, camera=cam) ni = LDAQ.national_instruments.NIAcquisition(...) ldaq = LDAQ.Core(acquisitions=[tel, ni]) ldaq.run(measurement_duration=5.0) cam.disconnect() # user owns the camera, must clean up