Programming #
The NORVI EC-M11-BC-C4-B95 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
Wiring Thermocouple Input, and Solar. #
8-pin and 3-pin connectors and wire harness #
Pin Description #
8P Male | Wire color | I/O Configuration |
1 | White | Thermocouple + |
2 | Brown | Thermocouple – |
3 | Green | – |
4 | Yellow | – |
5 | Gray | – |
6 | Pink | – |
7 | Blue | – |
8 | Red | – |
3P Male | Wire color | I/O Configuration |
1 | Blue | Solar Panel + |
2 | Black | Not in Use |
3 | Brown | Solar Panel – |
Thermocouple Input #
SPI MISO | GPIO19 |
SPI SCK | GPIO18 |
CS | GPIO5 |
Programming Thermocouple Inputs #
#include <SPI.h>
#include "Adafruit_MAX31855.h"
#define MAXDO 19
#define MAXCS 5
#define MAXCLK 18 // Initialize the Thermocouple
Adafruit_MAX31855 thermocouple(MAXCLK, MAXCS, MAXDO);
void setup() {
Serial.begin(115200);
Serial.println("MAX31855 test"); // Wait for MAX chip to stabilize
delay(500);
Serial.print("Initializing sensor...");
if (!thermocouple.begin()) {
Serial.println("ERROR.");
while (1) delay(10);
}
Serial.println("DONE.");
}
void loop() {
Serial.print("Internal Temp = ");
Serial.println(thermocouple.readInternal());
double c = thermocouple.readCelsius();
if (isnan(c)) {
Serial.println("Thermocouple fault(s) detected!");
uint8_t e = thermocouple.readError();
if (e & MAX31855_FAULT_OPEN) Serial.println("FAULT: Thermocouple is open - no connections.");
if (e & MAX31855_FAULT_SHORT_GND) Serial.println("FAULT: Thermocouple is short-circuited to GND.");
if (e & MAX31855_FAULT_SHORT_VCC) Serial.println("FAULT: Thermocouple is short-circuited to VCC.");
} else {
Serial.print("C = ");
Serial.println(c);
} //Serial.print("F = ");
//Serial.println(thermocouple.readFahrenheit());
Serial.println("");
Serial.print("Analog Read : ");
Serial.print(analogRead(36));
Serial.println("");
delay(1000);
}
NB-IoT Module #
Modem | NB-101 |
RX | GPIO25 |
TX | GPIO26 |
POWER | GPIO22 |
RESET | GPIO32 |
Programming NB-IoT #
const int GSM_RST = 17; // Define the pin for modem reset
const int GSM_PWR_KEY = 22; // Define the pin for modem power key
const int MODEM_RX = 25; // Define the pin for ESP32's RX to modem's TX
const int MODEM_TX = 26; // Define the pin for ESP32's TX to modem's RX
void setup() {
pinMode(GSM_RST, OUTPUT);
pinMode(GSM_PWR_KEY, OUTPUT);
digitalWrite(GSM_PWR_KEY, HIGH); // Set modem to flight mode
digitalWrite(GSM_RST, HIGH);
delay(1000);
digitalWrite(GSM_RST, LOW);
delay(1000);
digitalWrite(GSM_RST, HIGH);
delay(1000);
Serial.begin(9600); // Initialize the serial monitor
Serial2.begin(9600, SERIAL_8N1, MODEM_RX, MODEM_TX);
// Initialize communication with modem
Serial.println("SIM AT START >>>>>>>>>>>>>>");
delay(2000);
Serial.flush();
Serial2.println("AT+NCONFIG=AUTOCONNECT,TRUE");
delay(2000);
while (Serial2.available()) {
char response = Serial2.read();
Serial.write(response);
}
Serial2.println("AT");
delay(2000);
while (Serial2.available()) {
char response = Serial2.read();
Serial.write(response);
}
Serial2.println("AT+CEREG?");
delay(2000);
while (Serial2.available()) {
char response = Serial2.read();
Serial.write(response);
}
Serial.flush();
}
void loop() {
Serial.print(".");
Serial2.println("AT");
while (Serial2.available()) {
char response = Serial2.read();
Serial.write(response);
}
delay(5000);
Serial2.println("AT+CEREG?");
delay(2000);
while (Serial2.available()) {
char response = Serial2.read();
Serial.write(response);
}
}
Solar Input #
Solar Powered Model | CN3083 |
Maximum Charge Current | 600mA |
Maximum Voltage | 6V |
Input Voltage monitor | ADS1115 – 0x49 – AIN2 |
Battery Input #
Battery Type | 103040 Lithium polymer battery |
Nominal Capacity | 1200mAh |
Nominal Voltage | 3.75V |
Overcharge | 4.2V |
Over-discharge Cutoff Voltage | 3V |
Programming Solar and Battery #
#include <Adafruit_SSD1306.h>
#include <Adafruit_ADS1X15.h>
Adafruit_ADS1115 ads1;
int analog_value = 0;
void setup() {
Serial.begin(115200);// put your setup code here, to run once:
Wire.begin(16,17);
if (!ads1.begin(0x49)) {
Serial.println("Failed to initialize ADS 1 .");
while (1);
}
}
void loop() {
int16_t adc0, adc1, adc2, adc3;
adc0 = ads1.readADC_SingleEnded(0);
adc1 = ads1.readADC_SingleEnded(1);
adc2 = ads1.readADC_SingleEnded(2);
adc3 = ads1.readADC_SingleEnded(3);
Serial.println("-----------------------------------------------------------");
Serial.print("AIN1: "); Serial.print(adc0); Serial.println(" ");
Serial.print("AIN2: "); Serial.print(adc1); Serial.println(" ");
Serial.print("SOLAR: "); Serial.print(adc2); Serial.println(" ");
Serial.print("AIN4: "); Serial.print(adc3); Serial.println(" ");
}