Programming #
The NORVI EC-M11-EG-C4-S 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
8-pin Connector and wire harness #
![](https://norvi.lk/wp-content/uploads/2023/10/345.jpg)
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 | Power+ |
8 | Red | Power- |
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);
}
LoRa Transceiver Module #
Specification | Long Range(LoRa) |
RF Transceiver | Order depending on regional regulations |
SPI MISO | GPIO19 |
SPI MOSI | GPIO23 |
SPI SCK | GPIO18 |
NSS | GPIO26 |
DIO0 | GPIO25 |
DIO1 | GPIO27 |
DIO2 | NOT CONNECTED |
RESET | GPIO15 |
Programming LoRa Modules #
#include <lmic.h>
#include <hal/hal.h>
#include <SPI.h>
#define CONFIRMED_MSG_RETRY_COUNT 3
static const u1_t PROGMEM APPEUI[8] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
void os_getArtEui (u1_t* buf) {
memcpy_P(buf, APPEUI, 8);
}
static const u1_t PROGMEM DEVEUI[8] = {0x4B, 0x11, 0x3F, 0xB1, 0x3C, 0xBE, 0xD6, 0x56};
void os_getDevEui (u1_t* buf) {
memcpy_P(buf, DEVEUI, 8);
}
static const u1_t PROGMEM APPKEY[16] = {0xF9, 0x65, 0xE4, 0xED, 0xFF, 0x8A, 0x89, 0x27, 0x23, 0xA6, 0xB7, 0x42, 0x2F, 0x05, 0x8E, 0x9F};
void os_getDevKey (u1_t* buf) {
memcpy_P(buf, APPKEY, 16);
}
static uint8_t mydata[] = "Hello, world!";
static osjob_t sendjob;
const unsigned TX_INTERVAL = 60;
const lmic_pinmap lmic_pins = {
.nss = 26,
.rxtx = LMIC_UNUSED_PIN,
.rst = 15,
.dio = {25, 27, -1},
};
void printHex2(unsigned v) {
v &= 0xff;
if (v < 16)
Serial.print('0');
Serial.print(v, HEX);
}