El ESP32 es un microcontrolador de bajo costo, con conectividad Wi-Fi y Bluetooth integrada, ideal para proyectos de IoT, control y automatización.
Características clave
- CPU: Dual-core Tensilica Xtensa LX6 (hasta 240 MHz).
- RAM: 520 KB de SRAM.
- Conectividad: Wi-Fi 802.11 b/g/n y Bluetooth 4.2.
- GPIOs: Hasta 36 pines programables.
- ADC: 18 canales de 12 bits.
- DAC: 2 canales de 8 bits.
- Interfaces: I2C, SPI, UART, PWM, I2S.
Configuración inicial
Instalar la placa ESP32 en el IDE de Arduino
Para empezar a programar el ESP32 con el IDE de Arduino, primero debes agregar el soporte para la placa.
- Ve a
Archivo > Preferencias
. - En “Gestor de URLs de tarjetas”, añade la siguiente URL:
https://dl.espressif.com/dl/package_esp32_index.json
- Ve a
Herramientas > Placas > Gestor de tarjetas
y buscaESP32
. - Instala la placa.
Seleccionar la placa y el puerto
Una vez instalada la placa, selecciona el modelo de ESP32 que estés usando.
Herramientas > Placa > ESP32 Dev Module
Selecciona el puerto USB al que está conectado el ESP32:
Herramientas > Puerto > (Selecciona el puerto correcto)
Primer programa (Blink)
Código para parpadear un LED en el ESP32
void setup() {
pinMode(2, OUTPUT); // Configura el GPIO 2 como salida
}
void loop() {
digitalWrite(2, HIGH); // Enciende el LED
delay(1000); // Espera 1 segundo
digitalWrite(2, LOW); // Apaga el LED
delay(1000); // Espera 1 segundo
}
Manejo de periféricos
GPIO (Entradas y salidas digitales)
Configurar un pin como entrada o salida
pinMode(pin, OUTPUT); // Configura un pin como salida
pinMode(pin, INPUT); // Configura un pin como entrada
digitalWrite(pin, HIGH); // Establece el valor del pin a HIGH o LOW
int estado = digitalRead(pin); // Lee el estado de un pin
PWM (Modulación por ancho de pulso)
Generar señal PWM en ESP32
const int ledPin = 2;
const int frecuencia = 5000;
const int canalPWM = 0;
const int resolucion = 8;
int dutyCycle = 128; // 50% del ciclo de trabajo
void setup() {
ledcSetup(canalPWM, frecuencia, resolucion);
ledcAttachPin(ledPin, canalPWM);
}
void loop() {
ledcWrite(canalPWM, dutyCycle); // Ajusta el ciclo de trabajo del PWM
}
ADC (Conversor Analógico-Digital)
Leer una señal analógica en ESP32
int valor = analogRead(34); // Lee un valor del pin ADC 34
Serial.println(valor);
I2C
Configurar I2C en ESP32
#include <Wire.h>
void setup() {
Wire.begin(21, 22); // SDA en pin 21, SCL en pin 22
}
void loop() {
Wire.beginTransmission(0x3C); // Inicia comunicación con dispositivo en la dirección 0x3C
Wire.write(0x00); // Envia datos
Wire.endTransmission();
}
Conectividad Wi-Fi
Conectar a una red Wi-Fi
Código para conectar el ESP32 a una red Wi-Fi
#include <WiFi.h>
const char* ssid = "nombre_red";
const char* password = "contraseña";
void setup() {
Serial.begin(115200);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Conectando...");
}
Serial.println("Conectado a Wi-Fi");
}
void loop() {
// Código principal
}
Crear un punto de acceso (AP)
Código para configurar el ESP32 como punto de acceso Wi-Fi
#include <WiFi.h>
void setup() {
WiFi.softAP("ESP32_AP", "contraseña_AP");
Serial.begin(115200);
Serial.println("Punto de acceso configurado.");
}
void loop() {
// Lógica de la aplicación
}
Bluetooth en ESP32
Bluetooth Classic
Habilitar Bluetooth Classic y emparejamiento
#include "BluetoothSerial.h"
BluetoothSerial SerialBT;
void setup() {
Serial.begin(115200);
SerialBT.begin("ESP32test"); // Nombre del dispositivo Bluetooth
Serial.println("Bluetooth listo para emparejar");
}
void loop() {
if (SerialBT.available()) {
char incomingChar = SerialBT.read();
Serial.write(incomingChar); // Muestra lo recibido por Bluetooth
}
}
Bluetooth Low Energy (BLE)
Configurar el ESP32 como servidor BLE
#include <BLEDevice.h>
#include <BLEUtils.h>
#include <BLEServer.h>
void setup() {
BLEDevice::init("ESP32_BLE");
BLEServer *pServer = BLEDevice::createServer();
}
void loop() {
// Lógica para la comunicación BLE
}
Gestión de energía
Modos de bajo consumo
Configurar el ESP32 en modo deep sleep
void setup() {
esp_sleep_enable_timer_wakeup(10 * 1000000); // Despierta en 10 segundos
esp_deep_sleep_start(); // Entra en modo deep sleep
}
void loop() {
// No se ejecuta en deep sleep
}
OTA (Actualización inalámbrica)
Subir código por Wi-Fi
Configurar OTA en el ESP32
#include <WiFi.h>
#include <ArduinoOTA.h>
void setup() {
WiFi.begin("nombre_red", "contraseña");
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
}
ArduinoOTA.begin();
}
void loop() {
ArduinoOTA.handle(); // Procesa las solicitudes de actualización OTA
}