Features
- 8 digital inputs — optically isolated, via PCF8574
- 2 relay outputs — high-current relay control, via PCF8574
- 2 DAC outputs — 0-10V analog, 12-bit (GP8403)
- 2 pulse counters — hardware interrupt-based
- RS485 — half-duplex with automatic direction control
- Modbus RTU — full Master and Slave implementation for PLC/SCADA
- Push button — single / double / triple / long-press detection
- 2 PWM outputs — configurable frequency and resolution
- Status LED — onboard indicator
Hardware specifications
| Component | Model | I²C address | GPIO |
|---|---|---|---|
| Digital input expander | PCF8574 | 0x3A | — |
| Relay expander | PCF8574 | 0x3C | — |
| DAC | GP8403 (12-bit) | 0x58 | — |
| I²C bus | — | — | SDA 4, SCL 5 |
| Pulse inputs | — | — | 34, 35 |
| Push button | — | — | 16 (input pullup) |
| PWM outputs | LEDC | — | 32, 33 |
| Status LED | — | — | 2 |
| RS485 | Serial2 | — | RX 14, TX 13 |
Pin mapping
Install the library
NI-EVALUATION_BOARD-V1
Board library, examples, and docs on GitHub.
libraries/ folder:
- PCF8574 by Renzo Mischianti (Library Manager)
- ESP32 Arduino Core (Boards Manager)
Quick start
begin() accepts optional RS485 baud, PWM frequency, and PWM resolution:
begin(rs485Baud = 115200, pwmFreq = 5000, pwmResolution = 8).
API summary
| Subsystem | Methods |
|---|---|
| Digital inputs | readDigitalInput(channel) |
| Relays | setRelay(channel, on), setAllRelays(on) |
| DAC (0-10V) | setAnalogVoltage(channel, volts), setAnalogRaw(channel, value) |
| Pulse counters | getPulseCount(channel, resetAfterRead = false) |
| PWM | setPwmDuty(channel, duty), configurePwm(freq, resolution) |
| RS485 | rs485ReadLine(timeoutMs) (+ direction handled automatically) |
| Modbus Master | readCoils, readDiscreteInputs, readHoldingRegisters, readInputRegisters, writeSingleCoil, writeSingleRegister, writeMultipleCoils, writeMultipleRegisters |
| Modbus Slave | setSlaveAddress(addr), process(), onReadCoil/onWriteCoil/onReadHoldingRegister/… callbacks |
Using it with Hyperwisor
The board library is independent, but it pairs with the Hyperwisor firmware SDK: read inputs / drive outputs with the board API, then push values to dashboard widgets and receive commands with the Hyperwisor library. The board repo includes a HypervisorIOT example showing the two together.Firmware SDK
Connect the board to a dashboard.
The core loop
Push values, receive commands.

