Programming #
The NORVI EC-M11-EG-C3-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 controllers with the Arduino IDE.
SoC: ESP32-WROOM32
Programming Port: USB UART
8-pin Connector and wire harness #
Pin Description #
8P Male | Wire color | I/O Configuration |
1 | White | A+ |
2 | Brown | A- |
3 | Green | B+ |
4 | Yellow | B- |
5 | Gray | RS-485A |
6 | Pink | RS-485B |
7 | Blue | Power+ |
8 | Red | Power- |
Load Cell Inputs #
Programming Load Cell Inputs #
Number of Load Cell Inputs | 1 |
Module Type | HX711 |
PD SCK | GPIO32 |
DOUT | GPIO33 |
#include "HX711.h"
const int LOADCELL_DOUT_PIN = 33;
const int LOADCELL_SCK_PIN = 32;
HX711 scale;
void setup() {
Serial.begin(115200);
Serial.println("HX711 Demo");
Serial.println("Initializing the scale");
scale.begin(LOADCELL_DOUT_PIN, LOADCELL_SCK_PIN);
scale.set_scale(2280.f);
// this value is obtained by calibrating the scale with known weights;
//see the README for details
scale.tare(); // reset the scale to 0
Serial.println("After setting up the scale:");
Serial.print("read: \t\t");
Serial.println(scale.read()); // print a raw reading from the ADC
Serial.print("read average: \t\t");
Serial.println(scale.read_average(20));
// print the average of 20 readings from the ADC
Serial.print("get value: \t\t");
Serial.println(scale.get_value(5));
// print the average of 5 readings from the ADC minus the tare weight,
//set with tare()
Serial.print("get units: \t\t");
Serial.println(scale.get_units(5), 1);
// print the average of 5 readings from the ADC minus tare weight, divided
Serial.println("Readings:");
}
void loop() {
Serial.print("one reading:\t");
Serial.print(scale.get_units(), 1);
Serial.print("\t| average:\t");
Serial.println(scale.get_units(10), 1);
}
RS-485 Communication #
Driver | MAX485 |
UART RX | GPIO4 |
UART TX | GPIO2 |
Flow Control | GPIO13 |
Programming RS-485 #
NORVI EC-M11-EG series RS-485 connection uses a half-duplex mode of MAX485 transmitter with UART
Communication.
#define RS485_FC 13
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);
}
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);
}