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

 

/*
*  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-2024  www.alciro.org  All rights reserved.         
Share |