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

 

/*
*  Ejemplo de comunicación ModBus TCP/IP con el ESP32 como exclavo
*  
*  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
*
*  Autor: Rafa Aranda
*  Fecha: 13-12-2019
*  Versión: 1.0
*/

// Librerías
#ifdef ESP8266
 #include ‹ESP8266WiFi.h›
#else //ESP32
 #include ‹WiFi.h›
#endif
#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 = "ssid";
const char *password = "password";

// 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() {
 #ifdef ESP8266
    Serial.begin(74880);
 #else
    Serial.begin(115200);
 #endif
 
    WiFi.begin(ssid, password);
    while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(".");
    }

    Serial.println("");
    Serial.println("WiFi connected");  
    Serial.println("IP address: ");
    Serial.println(WiFi.localIP());

    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);
    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..... */




//----------------------------------------------------------------------------------------------------

  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)
       //Repetir para otras entradas.....    
   }
}
Loading

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