ESP32: Arhitectură Dual-Core, Wi-Fi & Deep Sleep
Stăpânește SoC-ul favorit pentru IoT: pinii critici de strapping, conflictul ADC2 cu stiva Wi-Fi și calculul bugetului de energie în deep sleep.
1. De ce domină ESP32 ecosistemul embedded?
Spre deosebire de un Arduino Uno clasic (procesor pe 8 biți la 16 MHz cu 2 KB RAM), modulul ESP32 integrează un procesor pe 32 de biți Tensilica Xtensa LX6 la 240 MHz cu 520 KB SRAM, radio Wi-Fi 802.11 b/g/n și Bluetooth 4.2 / BLE pe aceeași pastilă de siliciu. Poți aloca Nucleul 0 exclusiv stivei de rețea TCP/IP, lăsând Nucleul 1 100% liber pentru algoritmi de control în timp real fără întârzieri (zero latency jitter).
Suficientă putere pentru procesare audio, criptare TLS/HTTPS și servere web direct pe cip.
Provizionare rapidă prin telefon prin BLE și transfer de date la distanță prin Wi-Fi MQTT.
Poate monitoriza senzori analogici în timp ce nucleele principale sunt oprite complet.
Inspector Pini GPIO & Capcane de Boot (Strapping Pins)
Apasă pe un pin pentru a afla dacă este sigur de folosit sau dacă poate bloca bootarea plăcii.
Dacă acest pin este tras la masă (LOW) în momentul pornirii sau resetării, ESP32 intră în modul de descărcare firmware prin UART. Dacă ai conectat un senzor care trage linia la 0V, placa nu va mai rula codul tău!
Calculator Inginerec: Buget de Energie & Autonomie Baterie
Emisia Wi-Fi consumă până la 240mA. Pentru a funcționa luni de zile pe o celulă Li-Ion 18650, ESP32 trebuie ținut în Deep Sleep 99% din timp.
Curent mediu ponderat: 0.282 mA. În deep sleep, consumul scade la doar 15 µA.
Plăcile de dezvoltare ieftine au un cip USB-Serial (CP2102) și un regulator liniar care consumă 10-15mA chiar și când ESP32 doarme! Pentru proiecte reale cu baterii, folosește module precum ESP32-WROOM conectate la un regulator de tensiune ultra-low Iq.
2. Cod Model: Conectare Wi-Fi & Deep Sleep cu RTC Timer
#include <WiFi.h>
const char* ssid = "NumeleReteleiTale";
const char* password = "ParolaTaWiFi";
void setup() {
Serial.begin(115200);
delay(500);
Serial.println("\n[ESP32] Initializare Wi-Fi...");
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\n[ESP32] Conexiune stabilita cu succes!");
Serial.print("Adresa IP alocata: ");
Serial.println(WiFi.localIP());
}
void loop() {
// Masurare senzor si intrare in deep-sleep
Serial.println("Trimitere telemetrie... Somn 15 minute.");
esp_sleep_enable_timer_wakeup(15 * 60 * 1000000ULL); // 15 minute in microsecunde
esp_deep_sleep_start();
}