The Industrial Shields ESP32 PLC includes Wi-Fi 802.11 b/g/n and dual-mode Bluetooth 4.2 (Classic BR/EDR and BLE) built directly into the ESP32 chip. No additional wireless modules are required. This article covers the main connectivity specifications of the ESP32 and provides working examples for WiFi network scanning and BLE communication programmed with the Arduino IDE.
Especificaciones WiFi y Bluetooth del ESP32
El ESP32 es una solución monochip de 2,4 GHz que combina Wi-Fi y Bluetooth, fabricado con tecnología de bajo consumo de 40 nm de TSMC. Integra un procesador Xtensa LX6 de doble núcleo, 520 KB de SRAM y aceleradores criptográficos por hardware, lo que lo hace adecuado para aplicaciones industriales conectadas. La especificación completa está disponible en la hoja de datos oficial:
ESP32 Series Datasheet (Espressif)
WiFi
- 802.11 b/g/n (2,4 GHz), hasta 150 Mbps en modo 802.11n
- Modo Station, SoftAP y modo combinado SoftAP + Station
- Soporte de WPA/WPA2/WPA2-Enterprise y WPS
Bluetooth y BLE
- Controlador de doble modo Bluetooth 4.2 BR/EDR y BLE
- Potencia de transmisión +12 dBm
- Sensibilidad de recepción BLE de -97 dBm
CPU y memoria
- Xtensa 32-bit LX6 de doble núcleo a hasta 240 MHz (hasta 600 MIPS)
- 520 KB SRAM, 448 KB ROM
- 16 KB SRAM en RTC para despertar del sueño profundo
- Múltiples modos de consumo, incluido sueño profundo con coprocesador ULP
Interfaces periféricas
- 34 GPIO programables
- ADC de 12 bits hasta 18 canales, 2 DAC de 8 bits, 10 sensores táctiles
- 4x SPI, 2x I2C, 2x I2S, 3x UART, CAN 2.0
- LED PWM hasta 16 canales, motor PWM
- MAC Ethernet con soporte del protocolo de tiempo de precisión IEEE 1588
- Seguridad hardware: arranque seguro, cifrado de flash, AES, SHA-2, RSA, RNG
El diagrama siguiente muestra el pinout estándar del chip ESP32 como referencia:

Configuración del IDE de Arduino para el ESP32 PLC
Para programar un ESP32 PLC de Industrial Shields necesitas instalar el paquete de placas específico de IS en el IDE de Arduino. Proporciona los alias de pines correctos (Q0_0, Q0_1, I0_0, etc.) y las definiciones de hardware para cada modelo de ESP32 PLC. Ve a Archivo > Preferencias y añade la siguiente URL en URLs adicionales de gestor de tarjetas:
https://apps.industrialshields.com/main/arduino/boards/package_industrialshields_esp32_index.json
Si ya tienes otra URL en ese campo, sepáralas con una coma.

Ve a Herramientas > Placa > Gestor de tarjetas, busca "Industrial Shields ESP32" e instala el paquete. Una vez instalado, ve a Herramientas > Placa y selecciona tu modelo de ESP32 PLC.

Ejemplo WiFi: escáner de redes
El sketch siguiente escanea las redes WiFi disponibles cada 5 segundos e imprime el SSID, la intensidad de la señal (RSSI) y el estado de cifrado de cada una en el monitor serie. Usa Serial2, que es el puerto serie disponible en los modelos IS ESP32 PLC.
Abírelo desde Archivo > Ejemplos > Ejemplos para tu modelo de ESP32 PLC > WiFi > WiFiScan, o usa el código siguiente:

#include "WiFi.h"
void setup()
{
Serial2.begin(19200);
WiFi.mode(WIFI_STA);
WiFi.disconnect();
delay(100);
Serial2.println("Setup done");
}
void loop()
{
int start = millis();
Serial2.println("scan start");
int n = WiFi.scanNetworks();
int finish = millis();
Serial2.print("scan done, time = ");
Serial2.print(finish - start);
Serial2.println(" ms");
if (n == 0) {
Serial2.println("no networks found");
} else {
Serial2.print(n);
Serial2.println(" networks found");
for (int i = 0; i < n; ++i) {
Serial2.print(i + 1);
Serial2.print(": ");
Serial2.print(WiFi.SSID(i));
Serial2.print(" (");
Serial2.print(WiFi.RSSI(i));
Serial2.print(")");
Serial2.println((WiFi.encryptionType(i) == WIFI_AUTH_OPEN) ? " " : "*");
delay(10);
}
}
delay(5000);
}Subida del programa
Para subir un sketch al ESP32 PLC, mantén pulsado el botón BOOT mientras el IDE inicia la subida. Una vez completada, pulsa el botón EN para ejecutar el programa. Tras una subida correcta, el monitor serie mostrará los resultados del escaneo:

Ejemplo BLE: escritura en una caracteristica
El sketch siguiente crea un servidor BLE en el ESP32 PLC con un servicio y una característica personalizados. Una aplicación escáner BLE en un smartphone (como nRF Connect o LightBlue) puede conectarse al dispositivo y escribir un valor de cadena en la característica. El ESP32 PLC imprime entonces el valor recibido en el monitor serie.
Cada servicio y característica BLE requiere un UUID (identificador único universal). Genera tus propios UUID de 128 bits y reemplaza los valores de ejemplo del sketch:

/*
Based on Neil Kolban's example for IDF:
https://github.com/nkolban/esp32-snippets/blob/master/cpp_utils/tests/BLE%20Tests/SampleWrite.cpp
Ported to Arduino ESP32 by Evandro Copercini
*/
#include <BLEDevice.h>
#include <BLEUtils.h>
#include <BLEServer.h>
#define SERVICE_UUID "3e3593cf-e5cb-46ee-8fa4-16c8b6a563d0" // Replace with your own UUID
#define CHARACTERISTIC_UUID "beb5483e-36e1-4688-b7f5-ea07361b26a8" // Replace with your own UUID
class MyCallbacks: public BLECharacteristicCallbacks {
void onWrite(BLECharacteristic *pCharacteristic) {
std::string value = pCharacteristic->getValue();
if (value.length() > 0) {
Serial2.println("*********");
Serial2.print("New value: ");
for (int i = 0; i < value.length(); i++)
Serial2.print(value[i]);
Serial2.println();
Serial2.println("*********");
}
}
};
void setup() {
Serial2.begin(19200);
Serial2.println("1- Download a BLE scanner app to your phone (e.g. nRF Connect)");
Serial2.println("2- Scan for BLE devices");
Serial2.println("3- Connect to MyESP32");
Serial2.println("4- Go to CUSTOM CHARACTERISTIC and write something");
Serial2.println("5- See the result in this monitor");
BLEDevice::init("MyESP32");
BLEServer *pServer = BLEDevice::createServer();
BLEService *pService = pServer->createService(SERVICE_UUID);
BLECharacteristic *pCharacteristic = pService->createCharacteristic(
CHARACTERISTIC_UUID,
BLECharacteristic::PROPERTY_READ | BLECharacteristic::PROPERTY_WRITE
);
pCharacteristic->setCallbacks(new MyCallbacks());
pCharacteristic->setValue("Hello World");
pService->start();
BLEAdvertising *pAdvertising = pServer->getAdvertising();
pAdvertising->start();
}
void loop() {
delay(2000);
}Una vez que el sketch está en ejecución, el monitor serie muestra cinco pasos. Después de seguirlos desde tu móvil, cualquier valor que escribas en la característica aparecerá en el monitor:

Usar el ESP32 PLC como pasarela inalámbrica para M-Duino o Ardbox
Un ESP32 PLC puede actuar como pasarela WiFi o BLE para un PLC basado en Arduino (M-Duino o Ardbox) que no disponga de conectividad inalámbrica integrada. Los dos dispositivos se comunican mediante serie TTL a 19200 baudios. El ESP32 PLC envía y recibe datos de forma inalámbrica y los reenvía al PLC Arduino por serie.
Recuerda conectar el GND de ambos dispositivos.
Conexión con M-Duino
El ESP32 PLC usa Serial2 (pines TX2/RX2). Conecta ESP32 TX2 a M-Duino RX1 y ESP32 RX2 a M-Duino TX1. Alimenta el ESP32 PLC desde la misma fuente de 24 V que el M-Duino.

El sketch del M-Duino lee los datos recibidos en Serial1 e imprime en Serial:
void setup() {
Serial.begin(19200);
Serial1.begin(19200);
}
void loop() {
if (Serial1.available()) {
Serial.print((char)Serial1.read());
}
}Conexión con Ardbox
En el Ardbox, el Serial0 hardware (pines 0 y 1) está reservado para RS232. Usa SoftwareSerial en su lugar, con MISO como RX y MOSI como TX.

#include <SoftwareSerial.h>
SoftwareSerial mySerial(MISO, MOSI); // RX, TX
void setup() {
Serial.begin(19200);
mySerial.begin(19200);
}
void loop() {
if (mySerial.available()) {
Serial.print((char)mySerial.read());
}
}For the full range of Industrial Shields PLCs based on Arduino, Raspberry Pi, and ESP32, visit the ESP32 PLC product page.