User: alciro    User
 

Microcontrolador ESP32

Share |
 ESP32 ejemplo de comunicación ModBus
 ESP32 Ejemplo de comunicación ModBus en modo AP Access Point
 Ejemplo de comunicación ModBus RTU con el ESP32 como slave RS485
 ModBus guía de referencia

ESP32 Ejemplo de comunicación ModBus en modo AP Access Point

/*
*  Ejemplo de comunicación ModBus TCP/IP con el ESP32 como server y en modo AP Access Point
*  
*  Descripción: Programa básico para utilizar una placa PCB de ESP32 como unidad remota de entradas
*  y salidas digitales y analógicas, utilizando comunicación modbus sobre tcp/ip
* 
*  Nota: Instalar las librerias modbus-esp8266 by Andre Sarmento Barbosa, Alexander Emelianov
*  https://github.com/emelianov/modbus-esp8266
*
*  Autor: Rafa Aranda
*  Fecha: 06-11-2023
*  Versión: 1.0
*/

// Librerías
#include ‹WiFi.h›
#include ‹ModbusIP_ESP8266.h›
 
// Asignación de Pins a Salidas digitales 
#define K1_PIN 2 // GPIO2 Lez integrado en la placa 
 
// Asignación de Pins a Entradas digitales
#define S1_PIN 5 // GPIO5 Pin de entrada

// Asignación de Pins a Entradas analógicas
#define A1_PIN A0 // Pin de entrada analógica

// Credenciales para la WIFI
const char *ssid = "RafaESP32AP";
const char *password = "12345678";

// Modbus dirección de registro
const int A1_IREG = 100;

// Modbus dirección de bobina de salida
const int K1_COIL = 100;

// Modbus dirección de bobina de entrada
const int S1_COIL = 200;

// Funciones prototipo 
void getInputs(void);
void setOutputs(void);
void getAnalog(void);

//  Variables globales
ModbusIP mb;  // ModbusIP se crea el objeto

// Temporizador para contar segundos
unsigned long ams;
unsigned long bms; 
unsigned long cms;

void setup() {
  Serial.begin(115200);

  delay(4000);
  Serial.println("\n-> Creating AP");
  WiFi.mode(WIFI_AP);
  WiFi.softAP(ssid, password);
  Serial.print("-> AP Created with IP Gateway ");
  Serial.println(WiFi.softAPIP());

  // Modbus en modo server
  mb.server();		//Iniciar el Modbus IP 

  // Asignación de registros enteros de entrada al objeto modbus
  mb.addIreg(A1_IREG);

  // Asignación de bobinas al objeto modbus
  mb.addCoil(K1_COIL);

  // Asignación de entrada digitales al objeto modbus
  mb.addCoil(S1_COIL);

  // Establecer los pins de salida
  pinMode(K1_PIN, OUTPUT);

  // Establecer los pins de entrada
  pinMode(S1_PIN, INPUT);

  // Iniciar variable contadora
  ams = millis();
}

void loop() {
   getInputs(); // Leer entradas digitales
   getAnalog(); // Leer entradas analógicas
   mb.task();   // Sondear el sistema de comunicaciones modbus

  // PROGAMA DE AUTOMATIZACIÓN DE......
  //----------------------------------------------------------------------------------------------------
  /* Aquí mi programa de automatización utilizando los datos de las bobinas y registros modbus como
  parámetros y consignas para hacer mi proyecto..... */




  //----------------------------------------------------------------------------------------------------
  mb.Ireg(A1_IREG, 123); // Leer la entrada del ADC (0 a 1023)
  setOutputs();   // Activar las salidas
  delay(10);      // CicloScan + 10ms, retardo para anti-rebotes
}

/*  getInputs
*  Lee el estado de la entrada indicada en el parámetro y lo asigna a las bobinas modbus
*/
void getInputs(void){
  mb.Coil(S1_COIL, digitalRead(S1_PIN));
  //Repetir para otras entradas.....
}

/*  setOutputs
*  asigna el estado de las bobinas modbus a las salidas digitales  
*/
void setOutputs(void){
  digitalWrite(K1_PIN, mb.Coil(K1_COIL));  // Escribimos en el pin de salida el estado de la bobina ModBus
   //Repetir para otras salidas.....
}

/*  getAnalog
*  Lee el estado de la entrada indicada en el parámetro y lo asigna a los registros modbus 
*/
void getAnalog(void){
   //Leer las entradas cada 2 segundos
   bms=millis();
   if(bms>=ams)cms=bms-ams;
   else cms=0x40000-ams+bms;
   if(cms>=2000){
      ams = bms;
      // Guardar en el registro modbus el valor de la entrada analógica
      mb.Ireg(A1_IREG, analogRead(A1_PIN)); // Leer la entrada del ADC (0 a 1023)
      //mb.Ireg(A1_IREG, 123); // Prueba, asignar la constante 123 al registro de entrada para probar el funcionamiento
      //Repetir para otras entradas.....    
   }
}
Loading

copyright © 2007-2026  www.alciro.org  All rights reserved.         
Share |