Programming #
The NORVI IIOT-AE01-R has a mini USB Port for serial connection with the SoC for programming. Any ESP32 supported programming IDE can be used to program the controller. Follow this Guide to programming NORVI ESP32-based controllers with the Arduino IDE.
SoC: ESP32-WROOM32
Programming Port: USB UART
Digital Inputs #
Wiring Digital Inputs #
The digital inputs of NORVI IIOT-AE01-R can be configured as both Sink and Source connections. The inverse of the Digital Input polarity should be supplied to the common terminal.

Programming Digital Inputs #
Reading the relevant GPIO of the ESP32 gives the value of the Digital Input. When the inputs are in the OFF state, the GPIO goes HIGH, and when the input is in the ON stage, the GPIO goes LOW.
Refer to the GPIO allocation table in the Datasheet the digital input GPIO.
#define INPUT1 18
void setup() {
Serial.begin(115200);
Serial.println("Device Starting");
pinMode(INPUT1, INPUT);
}
void loop() {
Serial.print(digitalRead(INPUT1));
Serial.println("");
delay(500);
}
Relay / Transistor Output #
Wiring Relay Outputs #

Wiring Transistor Outputs #

Programming Relay/ Transistor Outputs #
Reading the relevant GPIO of the ESP32 gives the value of the relay or transistor output. Refer to the GPIO allocation table in the Datasheet for the relay/transistor output GPIO.
#define OUTPUT1 14
void setup() {
Serial.begin(115200);
Serial.println("Device Starting");
pinMode(OUTPUT1 , OUTPUT);
}
void loop() {
digitalWrite(OUTPUT1, HIGH);
delay(500);
digitalWrite(OUTPUT1, LOW);
delay(500);
Serial.println("");
delay(500);
}
RS-485 communication #
RS-485 Wiring #

Driver | MAX485 |
UART RX | GPIO3 |
UART TX | GPIO1 |
Flow Control | GPIO4 |
Programming RS-485 #
The UART Connections of RS-485 in the NORVI IIOT-AE01 series are shared with the UART connections of USB Serial.
#define RS485_FC 4
void setup() {
Serial.begin(115200);
Serial.println("Device Starting");
pinMode(RS485_FC, OUTPUT);
}
void loop() {
digitalWrite(RS485_FC, HIGH); // Turns on Transmitter Mode
Serial.println("RS-485 Sending");
delay(500);
}
Built-in OLED Display #
Display driver | SSD1306 |
Communication | I2C |
Module Address | 0x3C |
Resolution | 128 x 64 |
Refer to the GPIO allocation table in the datasheet for the I2C GPIO of the OLED Display.
Library supported by the Adafruit_SSD0306 Library.
Wire.begin (SDA, SCL); is required to initialize I2C on correct pins.
Programming OLED Display #
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
#define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
void setup() {
Wire.begin(16,17);
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address 0x3C for 128x64
Serial.println(F("SSD1306 allocation failed"));
for(;;); // Don't proceed, loop forever
}
// Show initial display buffer contents on the screen --
// the library initializes this with an Adafruit splash screen.
display.display();
delay(2000); // Pause for 2 seconds
}
void loop() {
}
Built-in Buttons #
Read mode | ADC (Analog to Digital Conversion) |
Analog IO | GPIO32 |
![]() Built-in button Internal Schematic |
Programming Buttons #
#define buttonPin 32
int buttonState = 0;
void setup() {
Serial.begin(9600);
pinMode(buttonPin,INPUT);
}
void loop() {
Serial.print("Button: ");
buttonState = analogRead(buttonPin);
delay(50);
Serial.print(analogRead(buttonPin));
Serial.print("\tAnalog: ");
delay(1000);
}