ESP32 WiFi / Bluetooth
Conoce el m贸dulo ESP32 Arduino. Aprende c贸mo funciona. El m贸dulo que soluciona tus problemas de conectividad.
10 mayo, 2019 por
ESP32 WiFi / Bluetooth
Serzh Ohanyan

Ardbox

This post will be explained how the module ESP32 works according to the ESP32 Series Datasheet. At the end of the post, there is a practical example.

Aqu铆 tienes el link del Datasheet:

ESP32 Series Datasheet

Overview

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 ultra baja.聽 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.

General Features of the ESP32

ESP32 Wi-Fi

  • 802.11 b/g/n

  • 802.11 n (2.4 GHz), up to 150 Mbps

ESP32 Bluetooth / ESP32 BLE

  • Bluetooth 4.2 BR/EDR BLE dual-mode controller

  • +12 dBm transmitting power

  • NZIF receiver with -97 dBm BLE sensivity

CPU and Memory

  • Microprocesador(es) Xtensa de uno o dos n煤cleos LX6 de 32 bits, 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).聽

Clocks and timers

  • 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 s贸lo para la funcionalidad Wi-Fi/BT)

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

  • Dos grupos de temporizadores, incluyendo 2 x temporizadores de 64 bits y 1 x watchdog principal en cada grupo.聽

  • Un temporizador RTC

  • RTC watchdog

Advanced Peripheral Interfaces

  • x34 GPIOs programables

  • ADC SAR de 12 bits de hasta 18 canales

  • 2 x 8-bit DAC

  • 10 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 MAC Ethernet con DMA dedicado y soporte IEEE 1588

  • CAN 2.0

  • IR (TX(RX)

  • Motor PWM

  • LED PWM hasta 16 canales

  • Sensor Hall

Security

  • Arranque seguro

  • Encriptaci贸n flash

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

  • Aceleraci贸n de hardware criptogr谩fico:

    • AES

    • Hash (SHA-2)

    • RSA

    • EXX

    • Random Number Generator (RNG)

La imagen de abajo muestra el pinout del ESP32:

ESP32 Bluetooth / WiFi pinout

For more information see Datasheet.

ESP32 Arduino

ESP32 board

To load the program into the ESP32 you have to install the board. Go to File >聽 Preferences and into Additional Boards Manager URLs add the next 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. Inst谩lalo.聽聽

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

Examples

Moreover, there are multiple applications for multiple sectors to get industrial control. With ESP32 projects for automation solutions.

See

ESP32 WiFi

You will find some examples to test in聽File聽>聽Examples聽>聽Examples for ESP32 Dev Module.聽Let's take a look at the WiFi Scan example.
ESP32 WiFi / Bluetooth - WiFi scan Example

Here you have the code with some additions and comments:

ESP32 WiFi > Wifi_Scan code:

#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);
}
  • Load a program

聽 聽 聽 聽 聽IMPORTANT

To load a program you have to press the button BOOT while is uploading the program. Once it is uploaded press the button EN to run the program.

  • Result

Despu茅s de cargar el programa anterior de WiFiScan, ver谩s algo as铆 en el Serial Monitor:

ESP32 Bluetooth / BLE / WiFi - WiFi scan example - Result

ESP32 Bluetooth

You will find some examples to test in File > Examples > Examples for ESP32 Dev Module. Let's take a look at the BLE to write an example.

ESP32 Bluetooth / BLE -  BLE Scan Example

Aqu铆 tienes el c贸digo con algunos a帽adidos y comentarios:

ESP32 BLE > BLE write code:

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

As you can see you have to go to www.uuidgenerator.net to generate a 128-bit number identifier UUID (universally unique identifier) that is used to ensure that the services and characteristics of your device are globally unique.聽聽

Despu茅s de cargar el programa en el Monitor Serial 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. Scan for BLE devices in the app.聽

  3. Con茅ctate a MyESP32. No lo ver谩s hasta que ejecutes el programa.聽聽

  4. Ves a CUSTOM CHARACTERISTIC en CUSTOM SERVICE y escribe algo.

  5. Mira la magia =). Todo lo que escribas se imprimir谩.聽

  • Result

Despu茅s de cargar el programa anterior de escritura BLE ver谩s algo as铆 en el Serial Monitor:

ESP32 Bluetooth / BLE / WiFi - BLE scan example - Result

Hello? and It works :) are two messages sent from the phone.

6. 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 >>

  • PLC code

El programa del PLC 煤nicamente 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());
  }
}

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 >>

  • PLC code

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

IMPORTANT
Remember to connect the same 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


ESP32 WiFi / Bluetooth
Serzh Ohanyan
10 mayo, 2019
Compartir
Archivar

驴Buscas 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.


Comparaci贸n PLC industrial>>>

驴Quieres m谩s informaci贸n?

隆Rellena el formulario!

隆Cu茅ntame m谩s!