Hi, im Namnam 🕴🏼.
Object | Detail conponent | Note |
---|---|---|
Power | MC34063A | 5-35VDC |
Ethernet | LAN8720A (RJ45: HR911105A) | Ethernet RMII 10/100M |
RS485 | SP485EE | Serial2, auto DERE |
I2C | Pull up 4.7k | SDA = IO33, SCL = IO32 |
Led blue | - | PIN IO15 |
Led yellow | - | PIN IO2 |
Button | - | PIN IO36 |
🚀Download examples: 🐞Download🐞
Blink led
Read modbus slave via RTU
Read modbus slave via TCP/IP
Serve master RTU
Serve master TCP/IP
Auto switch WiFi_Ethernet
Auto switch many WiFi in list
Push value modbus to MQTT
On/off led via MQTT
FOTA - update firmware via Internet with FTP
WATCHDOG timmer
Deep sleep
We are preparing for the first release of the tool that supports the configuration of registers and read addresses of modbus RTU, TCP-IP and other configuration of accs information such as wifi name and password, MQTT. Users please wait until 5-Oct to download.
#define LED_YELLOW 2 //Pin led color yellow is IO2
void setup() {
// initialize digital pin LED_YELLOW as an output.
pinMode(LED_YELLOW, OUTPUT);
}
// the loop function runs over and over again forever
void loop() {
digitalWrite(LED_YELLOW, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(LED_YELLOW, LOW); // turn the LED off by making the voltage LOW
delay(1000); // wait for a second
}
#include <ModbusRTU.h>
#define DERE_PIN -1
ModbusRTU mb;
void setup() {
Serial2.begin(9600, SERIAL_8N1, 16, 17); // RX2=16, TX2=17
pinMode(DERE_PIN, OUTPUT);
mb.begin(&Serial2, DERE_PIN);
mb.slave(1); // ID slave is 1
mb.addCoil(0, false); // Ex coil
}
void loop() {
mb.task();
}
#include <ModbusRTU.h>
#define DERE_PIN -1
ModbusRTU mb;
void setup() {
Serial2.begin(9600, SERIAL_8N1, 16, 17);
pinMode(DERE_PIN, OUTPUT);
mb.begin(&Serial2, DERE_PIN);
mb.slave(2); // ID slave is 2
mb.addHreg(100, 123); // Holding register
}
void loop() {
mb.task();
}
#include <ETH.h>
#include <ModbusIP_ESP8266.h>
ModbusIP mb;
void setup() {
ETH.begin(); // LAN8720A Ethernet
mb.server(); // Run as Modbus TCP server (slave)
mb.addCoil(0, false);
}
void loop() {
mb.task();
}
#include <ETH.h>
#include <ModbusIP_ESP8266.h>
ModbusIP mb;
void setup() {
ETH.begin();
mb.server();
mb.addHreg(100, 456);
}
void loop() {
mb.task();
}
#include "Canopus_Modbus.h"
ModbusMaster node;
void setup()
{
Serial.begin(115200);
Serial.print("\r\n*****************CANOPUS BOARD*******************");
Serial_Canopus.begin(9600, SERIAL_8N1);
node.begin(1, Serial_Canopus); //ID node 1
}
void loop()
{
Serial.println("");
Serial.println("Wait Read");
uint8_t result;
result = node.readHoldingRegisters(1, 3);//Read 40001, 40002, 40003
delay(10);
if (result == node.ku8MBSuccess) //Read ok
{
uint16_t data[3];
data[0]=node.getResponseBuffer(0);
data[1]=node.getResponseBuffer(1);
data[2]=node.getResponseBuffer(2);
Serial.printf("\r\nValue 40001: %d",data[0]);
Serial.printf("\r\nValue 40002: %d",data[1]);
Serial.printf("\r\nValue 40003: %d",data[2]);
}
else Serial.print("Read Fail");
delay(500);
}
#include <WiFi.h>
#include "ETH_MB.h"
#include "ModbusIP_ESP8266.h"
ModbusIP mb;
extern bool eth_connected;
void setup() {
pinMode(14, OUTPUT);
digitalWrite(14, HIGH);
delay(1000);
Serial.begin(115200);
Serial.println("\r\nHello\r\n");
if(WiFi.status() != WL_CONNECTED&&!eth_connected)
{
IPAddress local_IP(192, 168, 1, 123);
IPAddress gateway(192, 168, 1, 1);
IPAddress subnet(255, 255, 255, 0);
IPAddress primaryDNS(8, 8, 8, 8); //optional
IPAddress secondaryDNS(8, 8, 4, 4); //optional
if (!WiFi.config(local_IP, gateway, subnet, primaryDNS, secondaryDNS)) {
Serial.printf("\r\nWiFi Failed to configure");
}
}
ETH_begin();
delay(5000);
WiFi.begin("TEN_WIFI", "PASS_WIFI");
while (WiFi.status() != WL_CONNECTED||eth_connected) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
if(!eth_connected)
Serial.println(WiFi.localIP());
else
Serial.println(ETH.localIP());
mb.begin();
mb.addHreg(2, 0);//FC03 040002
mb.addIreg(2, 0);//FC04 030002
}
void loop() {
mb.task();
mb.Hreg(2, 1);//Write value 1 to 040002
mb.Ireg(2, 1);//Write value 1 to 030002
delay(500);
mb.Hreg(2, 0);//Write value 0 to 040002
mb.Ireg(2, 1);//Write value 0 to 030002
delay(500);
}
#include <WiFi.h>
#include <ETH.h>
#define ETH_PHY_TYPE ETH_PHY_LAN8720
#define ETH_PHY_ADDR 1
#define ETH_PHY_MDC 23
#define ETH_PHY_MDIO 18
#define ETH_PHY_POWER 14
#define ETH_CLK_MODE ETH_CLOCK_GPIO0_IN
const char* ssid = "wifi1";
const char* password = "password";
bool isEthernet = false;
void setup() {
Serial.begin(115200);
ETH.begin();
delay(1000);
isEthernet = ETH.linkUp();
if (!isEthernet) {
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) delay(500);
Serial.println("WiFi connected");
} else {
Serial.println("Ethernet connected");
}
}
void loop() {
// Check connect
if (ETH.linkUp() && !isEthernet) {
isEthernet = true;
WiFi.disconnect();
Serial.println("Switched to Ethernet");
} else if (!ETH.linkUp() && isEthernet) {
isEthernet = false;
WiFi.begin(ssid, password);
Serial.println("Switched to WiFi");
}
delay(1000);
}
#include <WiFi.h>
const char* ssidList[] = {"wifi1", "wifi2", "wifi3"};
const char* passList[] = {"pass1", "pass2", "pass3"};
void setup() {
Serial.begin(115200);
for (int i = 0; i < 3; i++) {
WiFi.begin(ssidList[i], passList[i]);
int timeout = 0;
while (WiFi.status() != WL_CONNECTED && timeout < 10) {
delay(500);
timeout++;
}
if (WiFi.status() == WL_CONNECTED) {
Serial.print("Connected to: ");
Serial.println(ssidList[i]);
break;
}
}
}
void loop() {
// Other fn
}
#include <ModbusRTU.h>
#include <WiFi.h>
#include <PubSubClient.h>
#define DERE_PIN -1
ModbusRTU mb;
WiFiClient espClient;
PubSubClient client(espClient);
const char* ssid = "wifi1";
const char* password = "password";
const char* mqtt_server = "broker.hivemq.com";
void setup() {
Serial.begin(115200);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) delay(500);
client.setServer(mqtt_server, 1883);
Serial2.begin(9600, SERIAL_8N1, 16, 17);
mb.begin(&Serial2, DERE_PIN);
mb.slave(1);
mb.addHreg(100, 0);
}
void loop() {
mb.task();
int value = mb.Hreg(100);
if (!client.connected()) client.connect("ESP32Client");
String payload = String(value);
client.publish("esp32/modbus", payload.c_str());
delay(5000);
}
#include <WiFi.h>
#include <PubSubClient.h>
#define LED_YELLOW 2
WiFiClient espClient;
PubSubClient client(espClient);
const char* ssid = "wifi1";
const char* password = "password";
const char* mqtt_server = "broker.hivemq.com";
void callback(char* topic, byte* payload, unsigned int length) {
if (payload[0] == '1') digitalWrite(LED_YELLOW, HIGH);
else digitalWrite(LED_YELLOW, LOW);
}
void setup() {
pinMode(LED_YELLOW, OUTPUT);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) delay(500);
client.setServer(mqtt_server, 1883);
client.setCallback(callback);
client.subscribe("esp32/led");
}
void loop() {
client.loop();
}
#include <WiFi.h>
#include <FS.h>
#include "FtpClientUpdate.h"
const char *ssid = "N-ELEKTRIK";
const char *password = "namnam_wifi";
const char *HwVersion = "1.0";
const char *FwVersion = "1.0";
String host = "194.59.164.44";
String user = "u281006516";
String pass = "mypass";
String path = "V2.bin"; //V2.bin is name bin file
extern String md5;
#define DEBUG(fmt, ...) Serial.printf_P(PSTR("\r\nP" fmt) ,##__VA_ARGS__)
boolean debug = false; // true = more messages
// provide text for the WiFi status
const char *str_status[] = {
"WL_IDLE_STATUS",
"WL_NO_SSID_AVAIL",
"WL_SCAN_COMPLETED",
"WL_CONNECTED",
"WL_CONNECT_FAILED",
"WL_CONNECTION_LOST",
"WL_DISCONNECTED"
};
// provide text for the WiFi mode
const char *str_mode[] = { "WIFI_OFF", "WIFI_STA", "WIFI_AP", "WIFI_AP_STA" };
// change to your server
IPAddress server(185,224,138,17);
// change fileName to your file (8.3 format!)
String fileName = "BaseStation/ftpupdateV1.bin";
//----------------------- WiFi handling
void connectWifi() {
Serial.print("Connecting as wifi client to SSID: ");
Serial.println(ssid);
WiFi.disconnect();
if (WiFi.getMode() != WIFI_STA) {
WiFi.mode(WIFI_STA);
}
WiFi.begin ( ssid, password );
if (debug ) WiFi.printDiag(Serial);
unsigned long startTime = millis();
while (WiFi.status() != WL_CONNECTED && millis() - startTime < 10000) {
delay(500);
Serial.print(".");
}
Serial.println("");
if (WiFi.status() == WL_CONNECTED) {
Serial.print("WiFi connected; IP address: ");
Serial.println(WiFi.localIP());
} else {
Serial.print("WiFi connect failed to ssid: ");
Serial.println(ssid);
Serial.print("WiFi password <");
Serial.print(password);
Serial.println(">");
Serial.println("Check for wrong typing!");
}
} // connectWiFi()
void setup() {
delay(1000);
Serial.begin(115200);
delay(1000);
Serial.printf("\r\nN-ELEKTRIK");
delay(500);
Serial.println();
Serial.printf_P(PSTR("\r\nHwVersion: %s"),HwVersion);
DEBUG("FwVersion: %s",FwVersion);
Serial.println ( "Connect to Router requested" );
connectWifi();
if (WiFi.status() == WL_CONNECTED) {
Serial.print("WiFi mode: ");
Serial.println(str_mode[WiFi.getMode()]);
Serial.print ( "Status: " );
Serial.println (str_status[WiFi.status()]);
} else {
Serial.printf("\r\n");
Serial.printf("\r\nWiFi connect failed, push RESET button.");
}
Serial.printf("\r\nReady. Press N if u want update");
Serial.printf("\r\nN-ELEKTRIK");
}
void loop() {
byte inChar;
if (Serial.available() > 0) {
inChar = Serial.read();
}
if (inChar == 'N') {
if (FtpClientUpdate.update(host,user,pass,path,md5)) {
Serial.println(F("FTP with N-ELEKTRIK done"));
delay(1000);
ESP.restart();
}
else Serial.println(F("FTP FAIL"));
}
delay(10);
}
#include <esp_task_wdt.h>
#define WDT_TIMEOUT 5
void setup() {
Serial.begin(115200);
esp_task_wdt_init(WDT_TIMEOUT, true);
esp_task_wdt_add(NULL);
}
void loop() {
esp_task_wdt_reset(); // Reset watchdog
delay(1000);
}
#define uS_TO_S_FACTOR 1000000
#define TIME_TO_SLEEP 60 // 60 giây
void setup() {
Serial.begin(115200);
Serial.println("ESP32 deep sleep 60s...");
esp_sleep_enable_timer_wakeup(TIME_TO_SLEEP * uS_TO_S_FACTOR);
Serial.println("enter deep sleep...");
delay(1000);
esp_deep_sleep_start();
}
void loop() {
}