Skip to content

NORVI AE01-R Configuration

Overview

The NORVI IIOT-AE01-R is an industrial ESP32-WROOM32 controller with built-in relays, transistor outputs, digital inputs, an OLED display, RS-485, and push buttons — all in a DIN-rail-mountable enclosure (IP20). It is CE certified (EN 61131-2, EN 61010-1) and designed for permanent installation in electrical cabinets.

Key differences from a standard ESP32 dev board:

FeatureStandard ESP32 Dev BoardNORVI AE01-R
Supply voltage5V (USB)24V DC
Relay moduleExternal (needs 5V)6 built-in relays (5A 250V AC)
Power supply for relaysSeparate 5V neededIntegrated — powered from 24V
Status indicationBuilt-in LED only0.96" OLED display + external LED
EnclosureOpen board (breadboard)DIN-rail enclosure (IP20)
CertificationsNoneCE (EN 61131-2, EN 61010-1)
WiringScrew terminals / DupontIndustrial screw terminals
Digital inputsNone8x sink/source (18–32V DC)
Additional I/ONone2x transistor output, RS-485
User interfaceNone3 front-panel push buttons

If you already have a 230V AC → 24V DC power supply, the NORVI AE01-R can be powered directly from it — no separate 5V PSU needed.


Pin Assignment

Important hardware limitation: The NORVI’s 8 digital inputs (GPIO18/19/21/22/23/34/35/39) are optocoupler-isolated input-only — they expect 18–32V DC signals and cannot be used for bidirectional 1-Wire (DS18B20) communication.

The firmware uses the NORVI_AE01_R preprocessor macro to select an alternate pin mapping that avoids the occupied and input-only pins:

ConstantNORVI GPIOPurposeConnection
PIN_DS_SOLARGPIO25DS18B20 — Solar collector temperatureExpansion Port Pin 1
PIN_DS_POOLGPIO25DS18B20 — Pool water temperatureShared bus on GPIO25 (expansion)
PIN_RELAY_POOLGPIO14 (R0)Relay — Pool circulation pumpRelay Output 0
PIN_RELAY_SOLARGPIO13 (R2)Relay — Solar heating pump (moved: R1→R5→R2)Relay Output 2
PIN_LED_STATUSGPIO27 (T0.1)Status LED (external, via transistor output)Transistor Output 0.1
PIN_OLED_SDAGPIO16I2C SDA — built-in 0.96" OLED (SSD1306)Internal (I2C)
PIN_OLED_SCLGPIO17I2C SCL — built-in 0.96" OLED (SSD1306)Internal (I2C)
PIN_BUTTON_ADCGPIO323 front-panel buttons (via analog ADC)Internal (resistor ladder)

Connecting the DS18B20 Sensors — Shared OneWire Bus

Both sensors share a single OneWire bus on GPIO25 on the Expansion Port (a 10-pin male header on the side of the NORVI enclosure, 2.54 mm pitch). DATA, 3.3V, and GND are all available on this header — no soldering needed.

   NORVI AE01-R — Expansion Port (10-pin male header, 2.54 mm)
   ┌───────────────────────────────────────────────────────────┐
   │                                                           │
   │  Pin 1  ◄─────── IO25 ──── DS18B20 DATA (yellow)         │
   │  Pin 2         TXD0                                      │
   │  Pin 3         NC                                        │
   │  Pin 4         RXD0                                      │
   │  Pin 5         IO0 (BOOT)                                │
   │  Pin 6         IO32 (buttons)                             │
   │  Pin 7  ◄─────── 3.3V ──── DS18B20 VCC (red)             │
   │  Pin 8         SCL (OLED)                                 │
   │  Pin 9  ◄─────── GND  ──── DS18B20 GND (black)           │
   │  Pin 10        SDA (OLED)                                 │
   │                                                           │
   └───────────────────────────────────────────────────────────┘
                             ↑
               3× Female-Female Dupont cables

Wiring table:

Expansion PortDupont (colour)DS18B20Also connect to
Pin 1 (IO25)YellowDATA4.7 kΩ → 3.3V
Pin 7 (3.3V)RedVCC4.7 kΩ → DATA
Pin 9 (GND)BlackGND—

Both sensors share the same three pins — connect both DATA lines to Pin 1, both VCC to Pin 7, and both GND to Pin 9. A single 4.7 kΩ pull-up resistor between Pin 1 and Pin 7 is sufficient for both sensors.

Pull-up resistor color code: Gelb – Violett – Rot – Gold (±5%)

  Gelb  Violett  Rot   Gold
  ┌──┐  ┌──┐  ┌──┐  ┌──┐
  │  │  │  │  │  │  │  │
  └──┘  └──┘  └──┘  └──┘
   4     7    ×100  ±5%
  = 47 × 100 = 4700 Ω = 4,7 kΩ
Shared Bus Details: The firmware uses the NORVI_AE01_R preprocessor macro to create a single DallasTemperature instance shared by both sensor nodes. The solar node (device index 0) drives requestTemperatures(); the pool node (device index 1) reads from the same conversion. Both sensors require a 4.7 kΩ pull-up resistor between the DATA line and 3.3 V — one resistor is enough when they share the same bus.
Used the old soldered GPIO5? If you already soldered your pool sensor to the ESP32 module pin, the firmware falls back to the dedicated-bus mode when NORVI_AE01_R is not defined. You can keep your existing wiring and just omit the build flag, or move both sensors to the shared GPIO25 for a cleaner setup.

Sensor Identification — First Boot

Because both sensors share the same bus, the scan order determines which device is assigned to Solar (index 0) and which to Pool (index 1). To ensure they stay assigned correctly across reboots (e.g., when adding or replacing sensors), use the OLED Sensor Setup Wizard or the serial console.

OLED Setup Wizard (recommended)

  1. Enter setup: long-press (2 s) the left Button B1 on the front panel.
  2. The display shows both detected DS18B20 sensors with their ROM addresses and current temperatures.
  3. Identify your sensors: warm one sensor with your finger — its temperature will rise on the display. Press B2 to assign the currently selected sensor as Solar, or B3 to assign it as Pool.
  4. Repeat for the second sensor. The badge SOLAR or POOL appears next to each assigned device.
  5. Save & reboot: once both sensors are assigned, long-press B2 to write the mapping to NVS and restart. The mapping survives all future reboots.

Cancel: long-press B1 again at any time to exit without saving.

Serial Console

On first boot (or when no mapping is saved), the serial output prints:

• Sensor mapping: no addresses configured — using default device indices
  ℹ To configure: long-press Button 1 → Sensor Setup page → assign sensors

After identifying your sensors (warm one, watch the serial output for its address), you can find the ROM addresses in the boot log and configure them via the Web UI (coming soon).

How the Mapping Works

The 8-byte ROM address of each sensor is stored in NVS (Preferences namespace ds18b20, keys solar_adr and pool_adr). On every subsequent boot, the firmware scans the bus for a device matching the stored address. If found, that device is used — regardless of its bus scan position. If the stored sensor is not found (e.g., it was replaced), the firmware prints a warning and falls back to the default device index.


Wiring Diagram

 ─── POWER SUPPLY ─────────────────────────────────────────────────────

  [230V AC → 24V DC PSU]        [NORVI AE01-R]
   ┌──────────────────┐          ┌──────────────────────────┐
   │ 24V (+) ─────────┼──────────┤ 24V DC (+)              │
   │                  │          │                          │
   │ GND  ────────────┼──────────┤ GND (0V)                │
   └──────────────────┘          │                          │
                                 │  The NORVI powers itself │
                                 │  and the relays from 24V │
                                 └──────────────────────────┘

  ─── SENSORS (Shared OneWire Bus on Expansion Port) ────────────────

   ┌── DS18B20 Solar ──┐    ┌── DS18B20 Pool ───┐    NORVI Expansion Port
   │                   │    │                   │    ┌──────────────────────┐
   │ VDD (red) ────────┼────┼──── VDD (red) ────┼────┤ Pin 7 (3.3V)        │
   │                   │    │                   │    │                      │
   │ GND (blk) ────────┼────┼──── GND (blk) ────┼────┤ Pin 9 (GND)         │
   │                   │    │                   │    │                      │
   │DATA (yel) ────────┼────┼──── DATA (yel) ───┼────┤ Pin 1 (GPIO25)      │
   │                   │    │    │              │    └──────────────────────┘
   └───────────────────┘    │    │              │
                             │    │              │
                             │    └──[4.7kΩ]─────┼── 3.3V (single pull-up)
                             │                  │
                             └──────────────────┘

   One 4.7kΩ resistor between DATA (Pin 1) and 3.3V (Pin 7) is enough.
   Dupont cables: 3× Female-Female (red/yellow/black).

   ─── RELAY OUTPUTS (built-in) ─────────────────────────────────────────

   ╔══════════════════════════════════════════════════════════════════════╗
   ║  ⚠ IMPORTANT — Motor Load Consideration                            ║
   ║                                                                     ║
   ║  The NORVI built-in relays are rated for **5A resistive load**.     ║
   ║  A pump is a motor load with inrush current that can weld relay     ║
   ║  contacts after repeated switching.                                 ║
   ║                                                                     ║
   ║  **Standard configuration:** Use the NORVI relays as **control      ║
   ║  relays for external DIN-rail contactors** (see Contactor Wiring    ║
   ║  Guide below). This is zero-wear on the NORVI relays.               ║
   ║                                                                     ║
   ║  **For low-power pumps (<100W, e.g. ECM solar pumps):** direct      ║
   ║  wiring with an **RC snubber** (100nF + 100Ω, X2-rated) suppresses  ║
   ║  turn-off arcs but does **not** limit the closing inrush — use the  ║
   ║  **contactor** solution (or an inrush limiter) to avoid welding.    ║
   ║                                                                     ║
   ║  See → **[Contactor Wiring Guide](contactor-guide.md)**             ║
   ╚══════════════════════════════════════════════════════════════════════╝

   NORVI Relay Output 0 (GPIO14):   Control → Pool pump (via contactor or direct <100W)
   NORVI Relay Output 2 (GPIO13):   Control → Solar pump (via contactor or direct with inrush limiter)

   L (mains) ─── RCD ─── MCB ──┬── Relay COM0 ── NO0 ── Pump L
                                └── Relay COM2 ── NO2 ── Pump L
   N (neutral) ───────────────────────── Neutral bar ── Pump N

   ── Standard wiring (contactors) ─────────────────────────────────────

   24V DC (+) ──┬── NORVI R0 COM ── NO ──┬── Ext. Contactor Pool A1 ── A2 ──┬── GND
                 │                        │                                  │
                 ├── NORVI R2 COM ── NO ──┤── Ext. Contactor Solar A1 ── A2 ──┤
                 │                        │                                  │
                 └───── NORVI 24V IN ─────┘                                  │
                                                                             │
   GND ─────────────────────────────────────────────────────────────────────┘

   Each contactor requires a 1N4007 flyback diode across its coil
   (cathode to A1, anode to A2). The 230V load side:

   L (mains) ─── RCD ─── MCB ──┬── Contactor Solar 1-2 ── Solar Pump L
                                └── Contactor Pool 1-2 ─── Pool Pump L
   N (neutral) ───────────────────────── Neutral bar ── Both Pumps N

   ── Alternative: direct wiring (resistive/low-power loads) ───────────

   For **non-motor loads** (heating elements, valves, signal lamps) or
   **low-power pumps with low inrush** (e.g. 6–28W ECM with an inrush
   limiter), the NORVI relays can be wired directly. They are Normally
   Open (SPST), rated 5A/250V AC.

   L (mains) ─── RCD ─── MCB ──┬── NORVI COM0 ── NO0 ── Load
                                └── NORVI COM2 ── NO2 ── Load
   N (neutral) ───────────────────────── Neutral bar ── Load N

   > **For pumps (motor loads):** Use external contactors as shown above.
   > Direct wiring of motor loads will eventually weld the relay
   > contacts; an RC snubber does not prevent this.

   ── Field report ─────────────────────────────────────────────────────

   In one field installation, a solar pump was connected to Relay Output 1
   (GPIO12, R1). After a few hundred switching cycles, R1 developed a
   welded contact — the relay clicked audibly but the NO contact never
   opened. Subsequent rewiring to R5 (GPIO33) failed identically. R0
   (GPIO14, pool pump) continued working (different motor characteristic).
   The pump is now configured for R2 (GPIO13). A contactor (or inrush
   limiter) is recommended for this load — an RC snubber across the
   relay contacts does not prevent capacitive-inrush welding.

   ⚡ Relay polarity: Unlike standard external relay modules (which are
   typically active-LOW: LOW = ON, HIGH = OFF), the NORVI AE01-R built-in
   relays are **active-HIGH**: writing `HIGH` to the GPIO pin energizes
   the relay coil (contact closes), and `LOW` de-energizes it (contact opens).

   The firmware handles this automatically via the `RelayModuleNode` constructor's
   `activeLow` parameter. On NORVI builds the relays are instantiated with
   `activeLow = false` (see `PoolController.cpp`). When porting to a different
   board with built-in relays, verify the relay driver polarity.

 ─── STATUS LED (external) ────────────────────────────────────────────

   NORVI Transistor Output 0.1 (GPIO27):
     GPIO27 ─── 330Ω ─── LED (anode) ─── LED (cathode) ─── GND

   The transistor output is open-collector (100mA max). When the pin
   goes HIGH, the internal transistor switches to GND, completing the
   circuit. Use a standard 5mm LED with a 330Ω series resistor.

Built-in OLED Display

The NORVI AE01-R includes a 0.96" SSD1306 OLED display (128×64, I2C address 0x3C). The firmware uses it to show four information pages:

PageContent
1Pool & solar temperature, pump status, operation mode, and button hints (▲ next page, ▼ toggle pump, ■ cycle mode)
2WiFi SSID, IP address, MQTT connection status, AP mode hint
3System uptime, free heap, low-watermark heap, firmware version
4QR code linking to the web dashboard at http://<device-ip>/

Shared footer: All pages show a separator line at the bottom followed by the current operation mode (page 1 only), local time (HH:MM), firmware version (vX.Y.Z), and page number. The time updates with every display refresh and uses the configured timezone with automatic daylight saving time (DST).

Auto WiFi page: When no WiFi is configured (AP mode) or the connection is lost, the display automatically switches to the Network Status page (page 2) at startup so the user can see the AP name and the setup URL immediately.

QR code page: The last page (page 4) generates a QR code for the web dashboard URL (http://<ip>/). Scan it with your phone’s camera to open the dashboard quickly without typing the IP address. The QR code is generated on-device using the ricmoo/QRCode library.

The display updates every 2 seconds and is controlled by the front-panel buttons (see below).


Front-Panel Buttons

The three push buttons on the front panel are read via analog ADC on GPIO32. Each button produces a distinct voltage level through a built-in resistor ladder:

ButtonAction
1 (left)Cycle OLED display page forward (1 → 2 → 3 → 4 → 1)
2 (middle)In manual mode: toggle pool pump ON/OFF
3 (right)Cycle operation mode (auto → manu → boost → timer → auto)

The ADC thresholds are configured in NorviButtonHandler.hpp. Raw values are logged via serial on startup for calibration.


Power Supply

The NORVI AE01-R runs on 24V DC (±10%). The built-in relays and the ESP32 are both powered from this single supply.

ParameterValue
Rated voltage24V DC
Current consumption400 mA (all relays off)
Recommended PSU1A 24V DC (or more)

Note: Unlike the standard ESP32 dev board setup, the NORVI does not need a separate 5V USB supply or a 5V relay module PSU. Everything runs from the single 24V DC input.


What’s Different — Comparison with Standard Setup

AspectStandard ESP32 Dev BoardNORVI AE01-R
Power5V USB or 5V PSU24V DC (single supply)
RelaysExternal 2-channel module6 built-in (we use 2)
Relay power5V to relay moduleIntegrated (24V → relay coils)
Relay polarityActive-LOW (LOW = ON)Active-HIGH (HIGH = ON)
Sensor pinsGPIO32, GPIO33GPIO25 (Exp Port), GPIO5 (solder)
Relay pinsGPIO25, GPIO26GPIO14 (R0), GPIO13 (R2)
Status LEDBuilt-in (GPIO2)External via GPIO27 (T0.1)
OLED displayNoneBuilt-in 0.96" (SSD1306) — 4 info pages + QR code
Push buttonsBOOT button (GPIO0)3 front buttons — cycle pages & modes
MountingBreadboard / enclosureDIN-rail (standard electrical cabinet)

What’s no longer needed

  • External relay module — eliminated (built-in)
  • Separate 5V PSU for relays — eliminated (24V integrated)
  • 5V USB power supply — eliminated (24V single supply)
  • Breadboard / perfboard — eliminated (screw terminals)

What’s still the same

  • DS18B20 sensors with 4.7kΩ pull-up resistors
  • 230V AC wiring (RCD/MCB protection, pump connections)
  • MQTT / Home Assistant / Homie Convention — all software is identical

Building the Firmware

The NORVI variant is selected at compile time via the NORVI_AE01_R preprocessor macro. Use the dedicated PlatformIO environment:

pio run -e norvi_ae01_r -t upload

This environment:

  • Defines -D NORVI_AE01_R to select the alternate pin mapping (shared OneWire bus)
  • Includes Adafruit SSD1306 and Adafruit GFX Library for the OLED
  • Initializes I2C on GPIO16/GPIO17 and the button ADC on GPIO32
  • Instantiates relay nodes with activeLow = false for the built-in active-HIGH relays

To also upload the LittleFS filesystem (web UI):

pio run -e norvi_ae01_r -t uploadfs

Note: The NORVI’s USB port is used for programming but shares the UART with RS-485. Serial.print() may interfere with RS-485 communication — use the OLED display for debug output when RS-485 is active.


NORVI AE01-R Pin Reference

GPIONORVI FunctionUsed by Pool Controller?
0NRST (outputs PWM at boot)❌
1RS-485 TX (shared with USB)❌
2Relay Output 4 / Built-in LED❌
3RS-485 RX (shared with USB)❌
4RS-485 Flow Control❌
5— (free GPIO, no NORVI peripheral)✅ DS18B20 Pool (solder)
12Relay Output 1 (welded — use R2 instead)❌
13Relay Output 2✅ Solar pump (R2)
14Relay Output 0✅ Pool pump
15Relay Output 3❌
16I2C SDA (OLED display)✅ OLED display
17I2C SCL (OLED display)✅ OLED display
18Digital Input 0 (input only)❌
19Digital Input 4 (input only)❌
20—❌
21Digital Input 5 (input only)❌
22Digital Input 6 (input only)❌
23Digital Input 7 (input only)❌
25Expansion Port Pin 1✅ DS18B20 Solar
26Transistor Output 0.0❌ (free)
27Transistor Output 0.1✅ Status LED (external)
32Analog Input / Buttons✅ 3 front-panel buttons
33Relay Output 5❌
34Digital Input 2 (input only)❌
35Digital Input 3 (input only)❌
38—❌
39Digital Input 1 (input only)❌

Note: GPIOs marked “input only” (GPIO34, 35, 39) lack internal pull-ups and are connected to optocoupler circuits. They cannot be used for 1-Wire or any bidirectional protocol.


References

Last updated on