User: alciro    User
 

Microcontrolador ESP32

Share |
 ESP32 ejemplo de comunicación ModBus
 ESP32 Ejemplo de comunicación ModBus en modo AP Access Point
 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-2024  www.alciro.org  All rights reserved.         
Share |