PROTOCOLO MODBUS TCP/IP ESP32-WROOM #131467
Unanswered
ELYSIUMjb
asked this question in
Programming Help
Replies: 1 comment
-
what is the question? |
Beta Was this translation helpful? Give feedback.
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
Select Topic Area
Question
Body
#include <WiFi.h>
#include <LiquidCrystal.h>
#include <ModbusRTU.h>
// Configuración de red
const char* ssid = "OXIMETRO PROTOCOLO TCP-IP"; // Reemplaza con el SSID de tu red
const char* password = "sdfg1234"; // Reemplaza con la contraseña de tu red
WiFiServer server(80); // Puerto del servidor TCP
// Conexiones de la pantalla LCD
const int rs = 14, en = 15, d4 = 16, d5 = 17, d6 = 18, d7 = 19;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
// Pines del LED y botón
const int ledPin = 5;
const int buttonPin = 4;
// Configuración de Modbus RTU
ModbusRTU mb;
uint16_t modbusData[10]; // Datos Modbus
uint16_t handleModbus(TRegister* reg, uint16_t val) {
// Ejemplo de manejo de datos Modbus
modbusData[0] = digitalRead(buttonPin); // Estado del botón
modbusData[1] = digitalRead(ledPin); // Estado del LED
return val;
}
void setup() {
Serial.begin(115200);
Serial2.begin(9600, SERIAL_8N1, 16, 17); // Configura Serial2 para Modbus
// Inicializar la pantalla LCD
lcd.begin(16, 2);
lcd.setCursor(0, 0);
lcd.print("Conectando...");
// Configuración del pin del LED como salida
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, LOW); // Inicialmente apagado
// Configuración del pin del botón como entrada con pull-up interno
pinMode(buttonPin, INPUT_PULLUP);
// Conexión a la red WiFi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Conectando a WiFi...");
lcd.setCursor(0, 1);
lcd.print("Conectando...");
}
Serial.println("Conectado a la red WiFi");
Serial.print("Dirección IP: ");
Serial.println(WiFi.localIP());
// Inicia el servidor
server.begin();
Serial.println("Servidor TCP iniciado");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("IP:");
lcd.setCursor(3, 0);
lcd.print(WiFi.localIP());
// Configuración de Modbus
mb.begin(&Serial2);
mb.master();
mb.addIreg(0, 0, 10); // Añade registros Modbus
// Añadir manejadores Modbus
mb.addHreg(100, 0);
mb.onSetHreg(100, [](TRegister* reg, uint16_t val) -> uint16_t {
if (reg->address.address == 100) { // Compara el valor del registro
digitalWrite(ledPin, val); // Controla el LED mediante Modbus
}
return val;
});
mb.onGetIreg(0, handleModbus);
}
void loop() {
// Ejecuta Modbus
mb.task();
// Comprueba si hay nuevos clientes
WiFiClient client = server.available();
if (client) {
String request = client.readStringUntil('\r');
client.flush();
}
}
Beta Was this translation helpful? Give feedback.
All reactions