Most complete Modbus library for Arduino. A library that allows your Arduino board to communicate via Modbus protocol, acting as a master, slave or both. Supports network transport (Modbus TCP) and Serial line/RS-485 (Modbus RTU). Supports Modbus TCP Security for ESP8266/ESP32.
#include <ESP8266WiFi.h>
#include <ModbusIP_ESP8266.h>
// Modbus Registers Offsets
const int TEST_HREG = 100;
#define LED_PIN D4 // Definice pinu pro LED diodu
#define Hi 1
#define Lo 0
#define cPeriodaLED 10 // Perioda pro blikání LED v milisekundách (0.5 sekundy)
#define Port_ModbusIP 503
#define Unit_Id 100
#define SSID "xxx"
#define PASS "xxx"
bool bStatusResetDefault = Lo;
bool bDefaul_PIN_Reset = Lo;
bool bSwitch_LED_Status = true;
bool ledBlinking = true;
int iCounter = 0;
unsigned long previousMillis = 0; // Předchozí čas pro časování
const long interval = 1000; // Interval pro generování nového čísla (1 sekunda)
// ModbusIP object
ModbusIP modbusTCPServer;
//**************************************************************************************
void Blikani() {
// Blikání LEDky, to jen abych věděl, že HW žije...
if (bSwitch_LED_Status == true) { // když je tlačítko stisknuto
iCounter++;
if (iCounter == cPeriodaLED / 2) {
digitalWrite(LED_PIN, Hi);
} else if (iCounter == cPeriodaLED) {
digitalWrite(LED_PIN, Lo);
iCounter = 0;
}
} else { // Vypnutí LEDky
iCounter = 0;
digitalWrite(LED_PIN, Lo);
}
}
void setup() {
Serial.begin(115200);
// Nastavení pinu pro LED diodu jako výstup
pinMode(LED_PIN, OUTPUT);
WiFi.begin(SSID, PASS);
// Nastavení pevné IP adresy, masky sítě a brány
IPAddress ip(192, 168, 11, 4);
IPAddress subnet(255, 255, 255, 0);
IPAddress gateway(192, 168, 11, 1);
// Připojení k Wi-Fi s pevným nastavením IP
WiFi.config(ip, gateway, subnet);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
// Nastavení ModbusIP jako server
modbusTCPServer.server(Port_ModbusIP);
modbusTCPServer.addHreg(TEST_HREG, 0); // Nastavení registru
}
void loop() {
// Volání funkce Blikani()
Blikani();
// Zpracování Modbus úkolů
modbusTCPServer.task();
// Použití yield() pro zabránění resetu watchdog timeru
yield();
// Generování náhodného čísla a zápis do holding registru v sekundových intervalech
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
uint16_t randomValue = random(0, 0xFFFF); // Generování náhodného čísla od 0 do 0xFFFF
modbusTCPServer.Hreg(TEST_HREG, randomValue); // Zápis náhodného čísla do holding registru
Serial.print("Writing random value to holding register: ");
Serial.println(randomValue, HEX);
}
delay(100);
}
I made a modbus.TCP server in NodeMCU. How do I set the Unit_ID, I couldn't. It's still set to 1 by default. I'm reading data in Node-RED and I want to define internal registers, currently I only have one but I don't know how to change the Unit_ID.
I have this code:
I made a modbus.TCP server in NodeMCU. How do I set the Unit_ID, I couldn't. It's still set to 1 by default. I'm reading data in Node-RED and I want to define internal registers, currently I only have one but I don't know how to change the Unit_ID.