Cómo controlar un PLC industrial ESP32 a través de Bluetooth

Ejemplo de comunicaciones industriales
17 de diciembre de 2020 por
Cómo controlar un PLC industrial ESP32 a través de Bluetooth
Boot & Work Corp. S.L., Quesada Dani Salvans

Introducción

Hoy en día, el Bluetooth es una de las tecnologías más utilizadas en nuestra vida cotidiana; aparece en muchas conexiones con teléfonos móviles, tabletas y otros dispositivos con conexión. Además, se puede utilizar en aplicaciones relacionadas con la industria, como la gestión de un controlador lógico programable a distancia. En este post, vamos a ver un ejemplo fácil sobre ello.

Es muy importante saber que vamos a trabajar con el Bluetooth estándar, no con el BLE (Bluetooth de baja energía), porque vamos a ver un ejemplo de esta versión en otro post. Este post está hecho para trabajar con el PLC de 10 E/S ESP32, pero para la conexión y configuración del PLC, por favor, echa un vistazo a la hoja de datos y la guía de usuario del propio producto.


Enlaces relacionados 

Las comunicaciones más utilizadas en cada sector industrial
Leer >>

Cómo usar los protocolos de comunicación en la automatización industrial
Leer >>

Familia de PLCs industriales 10 I/Os
Leer >>

Cómo programar un PLC industrial ESP32 de 10 E/S a través de WiFi
Leer >>


Requisitos


Ejemplo

Conexiones

El PLC tiene que estar conectado a una fuente de alimentación de 12/24V y conectado al PC a través de un cable microUSB para cargar el código y utilizar el Puerto Serie. Aparte de eso, este ejemplo utiliza seis leds conectados a seis salidas digitales del PLC (por lo que recomendamos la versión digital del PLC). 

ADVERTENCIA: LOS LEDS TIENEN QUE SER COMPATIBLES CON LA CORRIENTE Y EL VOLTAJE DE LAS SALIDAS DEL PLC, DE LO CONTRARIO LOS LEDS PUEDEN SER DAÑADOS.


Q0_0    ->     led 1       

Q0_1    ->     led 2       

Q0_2    ->     led 3       

Q0_3    ->     led 4       

Q0_4    ->     led 5       

Q0_5    ->     led 6       


Código

En primer lugar, incluimos la biblioteca "BluetoothSerial.h" que permite trabajar con esta tecnología como si se utilizara la comunicación en serie. Después de esto, debes asegurarte de que el Bluetooth está habilitado con la definición condicional. También definimos algunos parámetros más y una función open_all diseñada para abrir todos los leds simultáneamente.

En la configuración, tienes que inicializar el baudarte Serial, el SerialBT escribiendo el nombre del dispositivo Bluetooth, puedes configurar los pines de los leds como salidas, y definir un parámetro para la función millis() por lo que vas a necesitarlo.

En el bucle, se hace un bloque para abrir un led por cada periodo de tiempo en una fila; si millis() (que cuenta el tiempo real del bucle) - Tiempo (definido previamente) es mayor o igual al Periodo (250 ms), se introduce el primer condicional y, en el segundo, si select (inicializado a 0) es inferior a 7, se activa el led actual y se desactiva el anterior (si no, select se pone a 0). Se actualiza la variable de tiempo. Si el puerto Serial está disponible, el SerialBT escribe cualquier cosa que sea leída por el puerto Serial. Si el SerialBT está disponible, recibimos los datos haciendo un SerialBT.read y, si recibimos una nueva línea ('\n'), subimos el mensaje agregando la cadena del char recibido (de lo contrario el mensaje estará vacío). Harás un Serial.write del char recibido. Si el mensaje recibido por el BT (PLC) es STOP y se sincroniza con una lectura ALTA del led conectado al led_4 (Q0_3), habrás ganado la partida y todos los leds se abrirán en señal de victoria.


 /*
   Copyright (c) 2020 Boot&Work Corp., S.L. All rights reserved

   This program is free software: you can redistribute it and/or modify
   it under the terms of the GNU Lesser General Public License as published by
   the Free Software Foundation, either version 3 of the License, or
   (at your option) any later version.

   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU Lesser General Public License for more details.

   You should have received a copy of the GNU Lesser General Public License
   along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */


#include "BluetoothSerial.h"

#if !defined(CONFIG_BT_ENABLED) || !defined(CONFIG_BLUEDROID_ENABLED)
#error Bluetooth is not enabled! Please run `make menuconfig` to and enable it
#endif

BluetoothSerial SerialBT;

int leds[] = {Q0_0, Q0_1, Q0_2, Q0_3, Q0_4, Q0_5};

String message = "";
char char_received;
int Period = 250;
unsigned long Time;
int select = 1;

void open_all(void){
  select = 0;
  while(select < 7){
    digitalWrite(leds[select], HIGH);
    select += 1;
  }
}

void setup() {

  Serial.begin(115200);
  SerialBT.begin("ESP32test"); //Bluetooth device name
  Serial.println("The device started, now you can pair it with bluetooth!");
  pinMode(Q0_0, OUTPUT);
  pinMode(Q0_1, OUTPUT);
  pinMode(Q0_2, OUTPUT);
  pinMode(Q0_3, OUTPUT);
  pinMode(Q0_4, OUTPUT);
  pinMode(Q0_5, OUTPUT);
  Time = millis();
}

void loop() {
if(millis()-Time>=Period){
    if (select<7){
      digitalWrite(leds[select-1], LOW);
      digitalWrite(leds[select], HIGH);
      select += 1;
    }
    else{
      select = 0;
    }
    Time = millis();
  }
  if (Serial.available()) {
    SerialBT.write(Serial.read());
  }
  if (SerialBT.available()) {
    char_received = SerialBT.read();
    if (char_received != '\n'){
      message += String(char_received);
    }
    else {
      message = "";
    }
    Serial.write(char_received);
    if (message == "STOP"){
      if (digitalRead(Q0_3) == HIGH){
        Serial.println("\nYOU HAVE WON");
        open_all();
        Time = 0;
      }
    }
  }
  delay(20);
}


Aplicación

Si quieres comunicarte con el PLC a través de Bluetooth, necesitarás, por ejemplo, una aplicación Bluetooth en serie, como la que se usa en este ejemplo. El nombre de la aplicación es "Serial Bluetooth Terminal©"* y puedes descargarla en el Android Market (no existe en el Apple Store pero puedes encontrar otras similares):

Aplicación Serial Bluetooth Terminal

Después de esto, tienes que cargar el código previo al PLC, enviando el dispositivo y el puerto correctos. Cuando la carga se haya completado, puedes buscar el dispositivo llamado "ESP32test" con el Bluetooth de tu teléfono móvil y emparejarlo:

Aplicación Serial Bluetooth Terminal

Ahora, puedes abrir la aplicación, haz clic en el botón de conexión en la esquina superior derecha y puede comenzar a chatear con el Serial Monitor IDE de Arduino; puede escribir y recibir mensajes usando la aplicación (teléfono móvil) - Serial Monitor (PLC). Los mensajes azules son los que se envían desde la aplicación al PLC, y los mensajes verdes son los que se envían desde el PLC a la aplicación:

Aplicación Serial Bluetooth Terminal

Como hemos explicado, el juego aquí es que los leds se van a activar uno por uno, en orden y, usando la aplicación, tienes que escribir y enviar la palabra "STOP" cuando el cuarto led esté encendido. Puedes intentarlo tantas veces como quieras y, si ganas, se imprimirá un mensaje a través del Monitor de Serie y todos los leds se activarán:


How to control an ESP32 industrial controller via Bluetooth


* Esta aplicación está creada por Kai Morich ©

¿Quiere saber más sobre el funcionamiento y las posibilidades de nuestros dispositivos basados en código abierto?

Mantente al día suscribiéndote a nuestro blog.


Buscar en nuestro blog

Cómo controlar un PLC industrial ESP32 a través de Bluetooth
Boot & Work Corp. S.L., Quesada Dani Salvans 17 de diciembre de 2020
Compartir

¿Estás buscando tu Controlador Lógico Programable ideal?

Echa un vistazo a esta comparativa de producto de varios controladores industriales basados en Arduino.

Comparamos entradas, salidas, comunicaciones y otras especificaciones con las de los equipos de otras marcas destacadas.


Industrial PLC comparison >>>