Diario de un Debugging: ESP32-C3 vs Wemos D1 Mini (ESP-NOW)

📍 El Escenario
- Emisor: ESP32-C3 Supermini con antena cerámica y OLED SSD1306 integrado.
- Receptor: Wemos D1 Mini (ESP8266).
- Protocolo: ESP-NOW (comunicación directa sin router).
🔍 El Problema (Diagnóstico)
Tras horas de pruebas y capturas de pantalla, el síntoma es claro:
- El Wemos recibe algunos paquetes (IDs salteados: 6, 41, 59…), lo que confirma que las direcciones MAC son correctas.
- El ESP32-C3 reporta «FALLO» en casi todos los envíos.
La teoría: El C3 envía el mensaje, el Wemos lo escucha, pero el Wemos no logra enviarle el ACK (Confirmación) de vuelta al C3. Al no haber confirmación, el emisor cree que el mensaje se perdió en el vacío. Esto suele ocurrir por una desincronización de los canales WiFi o interferencias en la antena cerámica del Supermini.
💻 El Código «Último Intento» (Forzando Canal 1)
Para intentar estabilizarlo, hemos forzado a ambos chips a trabajar exclusivamente en el Canal 1, evitando que la radio salte de frecuencia.
Emisor (ESP32-C3 + OLED)
#include <Arduino.h>
#include <esp_now.h>
#include <WiFi.h>
#include <U8g2lib.h>
#include <esp_wifi.h>
U8G2_SSD1306_72X40_ER_F_HW_I2C u8g2(U8G2_R0, U8X8_PIN_NONE, 6, 5);
uint8_t targetMac[] = {0x5C, 0xCF, 0x7F, 0x6A, 0xA3, 0x69};
void setup() {
Serial.begin(115200);
u8g2.begin();
WiFi.mode(WIFI_STA);
// Forzar Canal 1 para evitar desincronización
esp_wifi_set_promiscuous(true);
esp_wifi_set_channel(1, WIFI_SECOND_CHAN_NONE);
esp_wifi_set_promiscuous(false);
esp_wifi_set_ps(WIFI_PS_NONE); // Evitar que la radio se duerma
if (esp_now_init() != ESP_OK) return;
esp_now_peer_info_t peerInfo = {};
memcpy(peerInfo.peer_addr, targetMac, 6);
peerInfo.channel = 1;
esp_now_add_peer(&peerInfo);
}
// ... resto del código de envío ...
Receptor (Wemos D1 Mini)
#include <ESP8266WiFi.h>
#include <espnow.h>
void setup() {
Serial.begin(115200);
WiFi.mode(WIFI_STA);
// Truco para fijar el canal 1 en ESP8266
WiFi.begin("FIX_CH1", "password", 1, NULL, false);
if (esp_now_init() != 0) return;
esp_now_set_self_role(ESP_NOW_ROLE_SLAVE);
}
🚩 Conclusiones momentáneas
Si estás trabajando con el C3 Supermini, ten en cuenta:
- Antena: Es extremadamente direccional y sensible a objetos metálicos.
- Energía: La pantalla OLED y la radio WiFi pueden causar caídas de tensión si el cable USB no es de calidad.
- Canales: No asumas que ambos chips están en el mismo canal por defecto.