Según altos estándares industriales

Busca en nuestro Blog. Encontrarás múltiples aplicaciones, soluciones, ejemplos de código. Navega utilizando la nube de etiquetas o busca utilizando criterios específicos

ESP32 WiFi / Bluetooth

Conoce el PLC Arduino. Aprende cómo funciona. El módulo que soluciona tus problemas de conectividad.

Índice

1. Introducción

2. Resumen

3. Características Generales del ESP3

  • ESP32 WiFi

  • ESP32 Bluetooth / ESP32 BLE

  • CPU y Memoria

  • Relojes y Temporizadores

  • Interfaces Periféricas Avanzadas

  • Seguridad

4. ESP32 Arduino

  • Placa ESP32

5. Ejemplos

  • ESP32 WiFi

  • ESP32 Bluetooth

6. Conexiones con nuestro PLC industrial

  • M-Duino

  • Ardbox

Introducción

En este post se explicará cómo funciona el módulo ESP32 según la hoja de datos de la serie ESP32. Al final del post hay un ejemplo práctico. 

Aquí tienes un enlace a la Hoja de Datos:  

ESP32 Series Datasheet


Resumen

ESP32 es un único chip combinado Wi-Fi y Bluetooth de 2,4 GHz diseñado con la tecnología TSMC de 40 nm de potencia ultrabaja.  Está diseñado para lograr la mejor potencia y rendimiento de RF, y muestra robustez, versatilidad y fiabilidad en una amplia variedad de aplicaciones y escenarios de potencia. Algunas aplicaciones son IoT Sensor Hub genérico de baja potencia, registradores de datos IoT genéricos de baja potencia y red de malla.

Está diseñado para aplicaciones móviles, dispositivos electrónicos portátiles e Internet de las cosas (IoT). Cuenta con todas las características de vanguardia de los chips de baja potencia, incluida la sincronización de reloj de grano fino, múltiples modos de potencia y escalado dinámico de potencia. La salida del amplificador de potencia también es ajustable, contribuyendo así a un equilibrio óptimo entre el rango de comunicación, la velocidad de datos y el consumo de energía.


Características Generales del ESP32

ESP32 Wi-Fi

  • 802.11 b/g/n 

  • 802.11 n (2.4 GHz), hasta 150 Mbps

ESP32 Bluetooth / ESP32 BLE

  • Controlador de modo dual Bluetooth 4.2 BR/EDR BLE

  • +12 dBm de potencia de transmisión

  • Receptor NZIF con sensibilidad BLE de -97 dBm

CPU y Memoria

  • Xtensa single-/dual-core 32-bit LX6 microprocessor(s), hasta 600 MIPS (200 MIPS para ESP32-S0WD, 400 MIPS para ESP32-D2WD).

  • 448 KB ROM

  • 520 KB SRAM

  • 16 KB SRAM en RTC (8KB de Memoria RTC FAST a la que accede la CPU principal durante el arranque RTC desde el modo Deep-sleep y 8 KB de Memoria RTC SLOW a la que accede el coprocesador durante el modo de suspensión profunda). 

Relojes y temporizadores

  • Osciladores internos de 8 MHz con calibración

  • Oscilador RC interno con calibración

  • Oscilador de cristal externo de 2 MHz ~ 60 MHz (40 MHz solo para funcionalidad Wi-Fi/BT)

  • Oscilador de cristal externo de 32 kHz para RTC con calibración

  • Dos grupos de temporizadores, incluidos 2 temporizadores x 64-bit y 1 x watchdog principal en cada grupo

  • Un temporizador RTC

  • RTC watchdog

Interfaces Periféricas Avanzadas

  • 34 x  GPIOs programables

  • 12-bit SAR ADC hasta 18 canales

  • 2 x 8-bit DAC

  • 10 x sensores táctiles

  • 4 x SPI

  • 2 x I2S

  • 2 x I2C

  • 3 x UART

  • 1 host (SD/eMMC/SDIO)

  • 1 slave (SDIO/SP)

  • Interfaz Ethernet MAC con DMA dedicado y compatibilidad con IEEE 1588

  • CAN 2.0

  • IR (TX(RX)

  • Motor PWM

  • Motor PWM

  • LED PWM hasta 16 canales

  • Sensor de pasillo

Seguridad

  • Arranque seguroSecure boot

  • Cifrado Flash

  • 1024-bit OTP, hasta 768-bit para clientes

  • Aceleración de hardware criptográfico:

    • AES

    • Hash (SHA-2)

    • RSA

    • EXX

    • Generador de Números Aleatorios (RNG)



La imagen abajo muestra el pinout ESP32:


ESP32 Bluetooth / WiFi pinout

Para obtener más información consulte Datasheet. 


ESP32 Arduino

Placa ESP32

Para cargar el programa en el ESP32 tienes que instalar la placa. Ve a File > Preferences y en Additional Boards Manager URLs agrega la siguiente URL: https://dl.espressif.com/dl/package_esp32_index.json

 *Si ya tienes una URL ponla junto a la otra separada por coma, como en la imagen de abajo.  

ESP32 WiFi / Bluetooth - Instalación de la placa

Ahora puedes instalar la placa. Ve a Tools > Boards > Boards Manager y busca ESP32. Aparecerá el ESP32 de Espressif Systems. Instalalo.

Una vez instalado ve a Tools > Boards y elige DOIT ESP32 DEVKIT V1


ESP32 WiFi - WiFi Scan

Ejemplos

Además, hay múltiples aplicaciones para múltiples sectores. El PLC ESP32 crea soluciones para muchos proyectos. Ver 👉

ESP32 WiFi

Encontrarás algunos ejemplos para probar en File > Examples > Examples for ESP32 Dev ModuleEchemos un vistazo al ejemplo de WiFi Scan 


ESP32 WiFi / Bluetooth - Arduino IDE Ejemplo

Aquí tienes el código con algunas adiciones y comentarios:


Wifi_Scan código:

#include "WiFi.h"

void setup()
{
    Serial2.begin(19200);
    // Set WiFi to station mode and disconnect from an AP if it was previously connected
    WiFi.mode(WIFI_STA);
    WiFi.disconnect();
    delay(100);
    
    Serial2.println("Setup done");
}

void loop()
{
    int start = millis(); // Capture start time 
    Serial2.println("scan start");

    // WiFi.scanNetworks will return the number of networks found
    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) {
            // Print SSID and RSSI for each network found
            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);
        }
    }
    Serial2.print("");

    // Wait a bit before scanning again
    delay(5000);
}


  • Cargar un programa 

            IMPORTANTE

            Para cargar un programa, debes presionar el botón BOOT mientras se carga el programa. Una vez cargado presiona el botón EN (English) para ejecutar el programa.


  • Resultado

            Después de subir el programa anterior de WiFiScan verás algo como esto en el Monitor serie:  


ESP32 Bluetooth

Encontrarás algunos ejemplos para probar en  File > Examples > Examples for ESP32 Dev Module. Echemos un vistazo al ejemplo de escritura BLE. 


ESP32 Bluetooth / BLE - Arduino BLE Scan


Aquí tienes el código con algunas adiciones y comentarios:


Código de escritura BLE:

/*
    Based on Neil Kolban 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>

// See the following for generating UUIDs:
// https://www.uuidgenerator.net/

#define SERVICE_UUID        "3e3593cf-e5cb-46ee-8fa4-16c8b6a563d0" // example comes with 4fafc201-1fb5-459e-8fcc-c5c9c331914b
#define CHARACTERISTIC_UUID "beb5483e-36e1-4688-b7f5-ea07361b26a8"


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 and install an BLE scanner app in your phone");
  Serial2.println("2- Scan for BLE devices in the app");
  Serial2.println("3- Connect to MyESP32");
  Serial2.println("4- Go to CUSTOM CHARACTERISTIC in CUSTOM SERVICE and write something");
  Serial2.println("5- See the magic =)");

  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() {
  // put your main code here, to run repeatedly:
  delay(2000);
}


Como puedes ver, tienes que ir a www.uuidgenerator.net para generar un identificador de número de 128 bits UUID  (identificador único universal) que se utiliza para garantizar que los servicios y características de tu dispositivo son únicos a nivel mundial. 


Después de cargar el programa en el Monitor serie, verás 5 pasos a seguir:

  1. Descarga e instala una aplicación de escáner BLE en tu teléfono. Por ejemplo, BLE Scanner de Bluepixel Technologies

  2. Busca dispositivos BLE en la aplicación.  

  3. Conéctate a MyESP32. No lo verás hasta que ejecutes el programa.  

  4. Ve a CUSTOM CHARACTERISTIC en CUSTOM SERVICE y escriba algo. 

  5. Observa la magia :). Todo lo que escribas será impreso.


  • Resultado

            Después de subir el programa anterior de BLE escribir, verás algo como esto en el Serial Monitor.


Hola? and It works :) son dos mensajes enviados desde el teléfono 


Conexiones con nuestro PLC industrial

M-Duino

La comunicación entre el módulo WiFi y el PLC es por TTL. El ESP32 usa Serial2 para enviar los datos al PLC. El PLC recibe los datos por Serial1. Por lo tanto, debes conectar el pin ESP TX2 al pin PLC RX1 y el pin ESP RX2 al pin PLC TX1. El ESP conecta el Vin y GND a la fuente de alimentación. A partir de ahora, la comunicación Serial 1 estará ocupada.

Aquí tienes un diagrama: 

ESP32 y M-Duino ejemplo conexiones

Dale un vistazo al M-Duino. El PLC industrial con Arduino MEGA
M-Duino - Arduino PLC >>


Código PLC: 

El programa PLC solo lee los datos recibidos por Serial1 y los imprime por Serial. 


void setup() {
  Serial.begin(19200);
  Serial1.begin(19200);
}

void loop() {
  if (Serial1.available()){
    Serial.print((char)Serial1.read());
  }
}


Ardbox

Para evitar inhabilitar los pines de comunicación RS232 (pins 0 y 1) utilizamos el serial del software en vez del serial del hardware. En Ardbox tenemos 3 pines RX disponibles (MISO, MOSI y SCK). En este caso utilizamos MISO como RX y MOSI como TX.

ESP32 y Ardbox ejemplo conexiones


Dale un vistazo a Ardbox. El PLC industrial con Arduino Leonardo
Ardbox - Arduino PLC >>


Código PLC: 

La función del programa es la misma que antes.

#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());
  }
}


IMPORTANTE:

Recuerde conectar el mismo GND (ESP32 - PLC). 

* Para hacer la prueba hemos realizado estas conexiones, pero el módulo ESP32 estará dentro del PLC correctamente conectado. 

Consulta la gama completa de controladores industriales con Arduino, Raspberry Pi o ESP32

Soluciones de automatización, monitorización y control

PLC Basado en Arduino, Raspberry Pi y ESP 32


¿Estás buscando tu PLC ideal?

Echa un vistazo a esta comparación de productos con otros controladores industriales Arduino.

Comparamos entradas, salidas, comunicaciones y otras características con las de algunas de las marcas relevantes


Comparación de controladores PLC industriales >>

¿Quieres más información? 

¡Solo llena el formulario! 

¡Quiero saber más!  Por favor, llene el formulario correctamente.