Control remoto de un foco con dos esp32 usando comunicación esp-now

Aquí tienes una guía para desarrollar la práctica con dos ESP32:

Requerimientos:

  1. Hardware:
    • 2 ESP32.
    • 1 TRIAC (ej. BT136 o equivalente) con optoacoplador para aislamiento (ej. MOC3021).
    • 1 foco (AC o DC según el TRIAC utilizado).
    • 2 botones (uno para cada ESP32).
    • Resistencia de carga para el optoacoplador.
    • Fuente de alimentación para el ESP32.
  2. Software:
    • IDE Arduino.
    • Librería ESP-NOW.

Configuración del sistema:

  1. ESP32 Maestro (con TRIAC):
    • Controla el encendido y apagado del foco.
    • Tiene un botón local para alternar el estado del foco.
    • Recibe comandos vía ESP-NOW.
  2. ESP32 Esclavo (control remoto):
    • Envía comandos al maestro vía ESP-NOW al presionar su botón.

Código del ESP32 Maestro:

cpp


#include <esp_now.h>
#include <WiFi.h>

// Pines
#define BUTTON_PIN 0    // Cambiar según conexión
#define TRIAC_PIN  2    // Pin conectado al TRIAC

bool lightState = false; // Estado del foco

void toggleLight() {
  lightState = !lightState;
  digitalWrite(TRIAC_PIN, lightState ? HIGH : LOW);
}

void onDataRecv(const uint8_t *mac, const uint8_t *data, int len) {
  if (*data == 1) {
    toggleLight();
  }
}

void setup() {
  pinMode(TRIAC_PIN, OUTPUT);
  pinMode(BUTTON_PIN, INPUT_PULLUP);
  
  // Configuración ESP-NOW
  WiFi.mode(WIFI_STA);
  if (esp_now_init() != ESP_OK) {
    Serial.println("Error al inicializar ESP-NOW");
    return;
  }
  esp_now_register_recv_cb(onDataRecv);
  
  Serial.begin(115200);
}

void loop() {
  static bool lastButtonState = HIGH;
  bool currentButtonState = digitalRead(BUTTON_PIN);
  
  if (lastButtonState == HIGH && currentButtonState == LOW) {
    toggleLight();
  }
  lastButtonState = currentButtonState;
}

Código del ESP32 Esclavo:

cpp


#include <esp_now.h>
#include <WiFi.h>

// Pines
#define BUTTON_PIN 0  // Cambiar según conexión

uint8_t masterAddress[] = {0x24, 0x6F, 0x28, 0xAB, 0xCD, 0xEF}; // Cambiar por dirección MAC del maestro

void sendCommand() {
  uint8_t command = 1;
  esp_now_send(masterAddress, &command, sizeof(command));
}

void setup() {
  pinMode(BUTTON_PIN, INPUT_PULLUP);
  
  // Configuración ESP-NOW
  WiFi.mode(WIFI_STA);
  if (esp_now_init() != ESP_OK) {
    Serial.println("Error al inicializar ESP-NOW");
    return;
  }
  
  esp_now_peer_info_t peerInfo = {};
  memcpy(peerInfo.peer_addr, masterAddress, 6);
  peerInfo.channel = 0;  
  peerInfo.encrypt = false;
  
  if (esp_now_add_peer(&peerInfo) != ESP_OK) {
    Serial.println("Error al añadir el maestro");
    return;
  }
  
  Serial.begin(115200);
}

void loop() {
  static bool lastButtonState = HIGH;
  bool currentButtonState = digitalRead(BUTTON_PIN);
  
  if (lastButtonState == HIGH && currentButtonState == LOW) {
    sendCommand();
  }
  lastButtonState = currentButtonState;
}

Pasos adicionales:

  1. Obtener la MAC del ESP32 Maestro:
    • Sube un sketch que imprima WiFi.macAddress() y reemplaza masterAddress en el código del esclavo.
  2. Prueba del circuito:
    • Asegúrate de que el circuito del TRIAC esté correctamente conectado y aislado.
    • Configura el foco con precaución al trabajar con voltajes altos.
  3. Compila y sube el código:
    • Sube el código correspondiente a cada ESP32.
    • Prueba los botones local y remoto.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *