---
title: "ModBee Node UIO"
space: "Node UIO"
url: "https://docs.modbee.org/node-uio"
updated: "2026-10-25"
---

# ModBee Node UIO

Firmware libraries and hardware documentation for the ModBee Node UIO, an
ESP32-S3 industrial I/O module for 35 mm DIN rail: 8 digital inputs, 8 digital
outputs, 4 analog inputs, 2 analog outputs, 2 RS485 ports, Wi-Fi, Grove I2C
and stackable HAT headers.

![ModBee Node UIO](/files/gitimg-3badb7c3b10c3feef69e0e638cb6bf4e74f6ed57.webp)

## What is here

| Folder | What it is |
| --- | --- |
| [node-uio](https://github.com/mod-bee/modbee-node-uio/tree/main/node-uio) | `ModBeeNodeUIO`, the board library: I/O, pulse counting, HAT power, Wi-Fi bring-up, sleep and wake, the I2C expansion bus. Also the hardware documentation, schematic and photos. |
| [node-webUI](https://github.com/mod-bee/modbee-node-uio/tree/main/node-webUI) | `NodeWebUI`, an optional web page showing the board's live I/O, with an analog calibration editor. Depends on `ModBeeNodeUIO`. |

Start with [node-uio/README.md](/node-uio/library). The reference documents are:

- [Hardware](/node-uio/hardware): pinouts, GPIO map, power, solder bridges
- [API](/node-uio/api): the `NodeUioAPI` reference
- [Schematic](https://github.com/mod-bee/modbee-node-uio/blob/main/node-uio/schematics/modbee-node-uio.pdf)

## Quick start

```cpp
#include <NodeUioAPI.h>

void setup() {
  uio().begin();
}

void loop() {
  uio().update();

  bool on = false;
  uio().digitalIn(0, on);       // DI01
  uio().setDigitalOut(0, on);   // DO01
}
```

## Installing

Both libraries live in subfolders of this repository, so neither the Arduino
Library Manager nor a plain PlatformIO git URL can install them directly.

### Arduino IDE

1. Install the ESP32 core: Boards Manager, **esp32** by Espressif Systems.
2. Copy `node-uio` (and `node-webUI` if you want the web page) into your
   Arduino `libraries` folder.
3. For `node-webUI`, install **ArduinoJson**, **Async TCP** and
   **ESP Async WebServer** (the ESP32Async versions) from the Library Manager.
4. Select the **LOLIN S3 Mini** board, which uses the same ESP32-S3FH4R2, and
   set **USB CDC On Boot** to Enabled so that `Serial` is the USB port.

The ESP32 core already provides `Wire`, `Preferences` and `WiFi`. Do not
install libraries of those names from the Library Manager.

### PlatformIO

Clone this repository and point `lib_deps` at the folders:

```ini
[env:node_uio]
platform = espressif32
board = lolin_s3_mini
framework = arduino
build_flags =
  -D ARDUINO_USB_MODE=1
  -D ARDUINO_USB_CDC_ON_BOOT=1
lib_deps =
  symlink:///path/to/modbee-node-uio/node-uio
  symlink:///path/to/modbee-node-uio/node-webUI   ; optional
```

`node-webUI` pulls in its own dependencies from the PlatformIO registry. Each
folder also has a `platformio.ini` that builds its example.

## Related repositories

- [modbee-openplc](https://github.com/mod-bee/modbee-openplc): OpenPLC function
  blocks for this board, built on `ModBeeNodeUIO`
- [modbee-hats](https://github.com/mod-bee/modbee-hats): HATs for the Node UIO:
  LTE, Cat-M/NB-IoT, LoRa mesh, AC/DC power
- [modbee-modbus](https://github.com/mod-bee/modbee-modbus): Modbus library,
  for example over the RS485 ports
- [modbee-protocol](https://github.com/mod-bee/modbee-protocol): the ModBee
  RS485 / UDP mesh protocol

## Photos

| | |
| --- | --- |
| ![Top](/files/gitimg-2bb65b3e3271bf4d4319f6069d21554d092d7608.webp) | ![Assembled](/files/gitimg-1c7dda6dc3bc9017c5678184ba44061afa6fef64.webp) |
| ![Connections](/files/gitimg-8902d31186b7586252a02c2d9fc4f9e290bc7cf1.webp) | ![With LoRa mesh HAT](/files/gitimg-3d91c06aac83c908cbdc2f188cdb016b5f9d097c.webp) |

## Licence

AGPL-3.0, see [LICENSE](https://github.com/mod-bee/modbee-node-uio/blob/main/LICENSE). Vendored third-party drivers under
`node-uio/src/lib/` keep their own MIT licences.
