# Overview

`instro` provides high-level, vendor-agnostic interfaces for common lab
instruments. Each instrument type defines a standard API that works across multiple hardware vendors.

| Class | Description |
| --- | --- |
| [`InstroDAQ`](https://dev.nominal.io/instro/ref/instruments/daq.md) | Data acquisition systems |
| [`InstroDMM`](https://dev.nominal.io/instro/ref/instruments/dmm.md) | Digital multimeters |
| [`InstroPSU`](https://dev.nominal.io/instro/ref/instruments/psu.md) | Programmable power supply units |
| [`InstroELoad`](https://dev.nominal.io/instro/ref/instruments/eload.md) | Electronic loads |
| [`InstroScope`](https://dev.nominal.io/instro/ref/instruments/scope.md) | Oscilloscopes |
| [`InstroFlowController`](https://dev.nominal.io/instro/ref/instruments/flowcontroller.md) | Flow Controllers |
| [`I2CInterface`](https://dev.nominal.io/instro/ref/instruments/i2c.md) | I2C bus communication devices |
| [`InstroAWG`](https://dev.nominal.io/instro/ref/instruments/awg.md) | Arbitrary waveform generators |
| [`InstroSDR`](https://dev.nominal.io/instro/ref/instruments/sdr.md) | Software defined radios (unstable) |

Each instrument page includes the interface, configuration types, driver base classes,
and vendor-specific driver implementations. Errors raised by instrument methods are
documented in [Exceptions](https://dev.nominal.io/instro/ref/library/exceptions.md).

## Supported devices

The table below is included verbatim from the repository README, so the two can’t drift.

| Category | Class | Vendors |
| --- | --- | --- |
| Power Supply | `InstroPSU` | B&K Precision (9115, 914X), EA Elektro-Automatik (PSB 10000-series), GW Instek (GPD-3303D), Keysight (E36100-series, N5700-series), Rigol (DP800-series), Siglent (SPD3303), TDK Lambda (Genesys), simulated |
| Multimeter | `InstroDMM` | Agilent 34401A, Keysight 34461A, Keithley 2400, Keithley 2750 (unstable), Fluke 8845A (unstable), simulated |
| Arbitrary Waveform Generator | `InstroAWG` | Keysight (33521B), Rigol (DG1022Z) |
| Electronic Load | `InstroELoad` | B&K Precision (85xxB-series), EA Elektro-Automatik (PSB 10000-series), Rigol (DL3000-series) |
| Oscilloscope | `InstroScope` | Keysight (1200X-series, 3000T X-series (unstable)), Tektronix (2-series), Siglent (SDS1000X-E) |
| Flow Controller | `InstroFlowController` | Alicat MC-series |
| DAQ | `InstroDAQ` | Keysight 34980A, NI-DAQmx, LabJack T-series, MCC USB-series, DewesoftX (unstable) |
| I2C | `I2CInterface` | Total Phase Aardvark |
| Modbus | `ModbusDevice` | Any Modbus TCP / RTU device |
| Motor Controller | `InstroMotorController` | VESC 6 over CAN via python-can (unstable) |
| EtherNet/IP | `EtherNetIPDevice` | Allen-Bradley / CompactLogix-class PLCs |

The Modbus and EtherNet/IP rows are covered under [Protocols](https://dev.nominal.io/instro/ref/protocols.md).
Community-contributed drivers are documented in the
[instro-contrib guide](https://dev.nominal.io/instro/library/contrib.md) rather than this reference.
