====== ESP32 – Beskrivelse og funktionaliteter ====== **ESP32** er en **lavpris, lavt strømforbrugende system-on-chip (SoC)** udviklet af **Espressif Systems**. Den er designet til **IoT (Internet of Things)**, indlejrede systemer og trådløse applikationer. ESP32 kombinerer **Wi-Fi**, **Bluetooth (Classic + BLE)**, en **dual-core mikrocontroller** og en række periferienheder, hvilket gør den ekstremt alsidig for både hobbyprojekter og professionelle løsninger. ---- **Nyere** modeller er beskrevet på [[https://let-elektronik.dk/esp32]] (nederst, under produkt-billeder/links) ---- **OBS!**\\ Nedestående beskrivelser er primært gældende for den oprindelige ESP32 ---- ==== Hovedkomponenter og specifikationer ==== ^ **Komponent** ^ **Beskrivelse** ^ | **CPU** | Dual-core **Xtensa LX6** (32-bit) med op til **240 MHz** (kan køre på 80/160/240 MHz). | | **Hukommelse** | **520 KB SRAM** (ekstern RAM kan tilføjes op til 16 MB via PSRAM). | | **Flash-hukommelse** | Ekstern **SPI flash** (typisk 4–16 MB, understøtter op til 32 MB). | | **Wi-Fi** | **802.11 b/g/n** (2,4 GHz), understøtter **STA (Station), AP (Access Point), P2P (Peer-to-Peer)**. | | **Bluetooth** | **Bluetooth 4.2** (Classic + **BLE – Bluetooth Low Energy**). | | **Periferienheder** | **GPIO, ADC, DAC, PWM, I²C, SPI, UART, CAN, Touch Sensor, Hall Sensor, RTC, DMA** mv. | | **Strømforbrug** | **~0,15 mA** i dyb søvn, **~10–20 mA** i aktiv tilstand (afhænger af konfiguration). | | **Spændingsforsyning** | **2,2–3,6 V** (typisk 3,3 V). | | **Driftstemperatur** | **-40°C til +125°C** (industrielt interval). | --- ==== Hovedfunktionaliteter ==== ===== Trådløs kommunikation ===== * **Wi-Fi (802.11 b/g/n)** - Understøtter **2,4 GHz** (ingen 5 GHz) **//[1]//** - Kan fungere som **klient (STA)**, **access point (AP)** eller **begge på samme tid**. - Understøtter **WPA/WPA2/WPA3-sikkerhed**. - **TCP/IP-stak** integreret (understøtter HTTP, MQTT, WebSocket mv.). * **Bluetooth (Classic + BLE)** - **Bluetooth 4.2** med **Low Energy (BLE)** til energibesparende applikationer. - Understøtter **SPP (Serial Port Profile)**, **A2DP**, **HID** og **GATT/GAP** (BLE). - Kan fungere som **server, klient eller master/slave**. **//[1]//** Nyere modeller har dog 2/4/5G som f.eks. ESP32-C5 --- ===== Mikrocontroller-funktioner ===== * **Dual-core Xtensa LX6** (kan køre to tråde samtidigt). * **Understøtter FreeRTOS** (real-time operativsystem til multitasking). * **Hardware-accelereret kryptering** (AES, SHA, RSA, ECC). * **JTAG-debugging** (til avanceret fejlfinding). --- ===== I/O og periferienheder ===== ^ **Type** ^ **Beskrivelse** ^ **Antal** ^ | **GPIO** | Generelle input/output-pins (kan konfigureres som input, output, interrupt mv.). | **34–48** (afhænger af pakke) | | **ADC (Analog-Digital)** | **12-bit SAR ADC** (op til 2,048 niveauer), understøtter **18 kanaler** (nogle med 12-bit, andre med 9-bit). | **2x 12-bit ADC** | | **DAC (Digital-Analog)** | **8-bit DAC** til at generere analoge signaler. | **2x** | | **PWM** | **Pulse-Width Modulation** til motorstyring, LED-dimming mv. | **16 kanaler** | | **I²C** | **Inter-Integrated Circuit** (2-lednings kommunikation til sensorer mv.). | **2x** | | **SPI** | **Serial Peripheral Interface** (højhastigheds kommunikation til flash, display mv.). | **4x** | | **UART** | **Asynkron serial kommunikation** (RS-232/485). | **3x** | | **CAN** | **Controller Area Network** (til bilindustri og industrielle applikationer). | **1x** | | **Touch Sensor** | **Kapacitive berøringsensorer** (op til 10 kanaler). | **10x** | | **Hall Sensor** | **Måling af magnetfelter** (til f.eks. strømsensorer). | **1x** | | **RTC (Real-Time Clock)** | **Hardware-ur** med kalenderfunktion (kan køre i dyb søvn). | **1x** | | **DMA** | **Direct Memory Access** (til hurtig dataoverførsel uden CPU-indblanding). | **2x** | --- ==== Strømforbrug og energistyring ==== ESP32 understøtter flere **strømbesparende tilstande**: ^ **Tilstand** ^ **Beskrivelse** ^ **Strømforbrug** ^ | **Aktiv** | CPU, Wi-Fi/Bluetooth og periferienheder kører. | **~80–200 mA** | | **Modem Søvn** | CPU kører, men Wi-Fi/Bluetooth er slukket. | **~20–30 mA** | | **Let Søvn** | CPU er slukket, men RAM bevares. Kan wake up via eksterne interrupts. | **~0,8 mA** | | **Dyb Søvn** | CPU, RAM og de fleste periferienheder er slukket. Kan kun vækkes via eksterne signals (GPIO, RTC). | **~5–150 µA** | | **Hibernation** | Alt er slukket (inkl. RTC). Kan kun vækkes via reset. | **~1 µA** | --- ==== Programmering og udvikling ==== ESP32 kan programmeres på flere måder: ^ **Metode** ^ **Beskrivelse** ^ **Fordele** ^ **Ulemper** ^ | **Arduino IDE** | Populært værktøj med **ESP32-core** (understøtter de fleste Arduino-biblioteker). | Nemt for begyndere, stort community. | Begrænset adgang til avancerede funktioner. | | **ESP-IDF** | **Espressifs officielle framework** (C/C++). | Fuldt udnyttelse af hardware, avancerede funktioner. | stejl læringskurve. | | **MicroPython** | **Python-implementering** til ESP32. | Nem syntax, godt til hurtig prototyping. | Langsommere end C, begrænset RAM. | | **PlatformIO** | **Avanceret udviklingsmiljø** (understøtter Arduino, ESP-IDF, MicroPython). | Fleksibelt, god til store projekter. | Kræver opsætning. | | **Lua (NodeMCU)** | **Scripting-sprog** til ESP32 (baseret på Lua). | Hurtig udvikling, dynamisk. | Mindre udbredt end Arduino/ESP-IDF. | --- ==== Populære ESP32-moduler ==== ESP32 findes i flere **fysiske pakker**, hvoraf de mest populære er: ^ **Modul** ^ **Beskrivelse** ^ **Antal GPIO** ^ **Wi-Fi/Bluetooth** ^ **PSRAM** ^ **Flash** ^ **Pris (ca.)** ^ | **ESP32-WROOM-32** | Standardmodul med **4 MB flash**, **PCB-antenne**. | 34 | ✅ Ja | ❌ Nej | 4 MB | ~50–100 DKK | | **ESP32-WROOM-32D** | Som WROOM-32, men med **16 MB flash** og **PSRAM-understøttelse**. | 34 | ✅ Ja | ✅ Ja | 16 MB | ~80–120 DKK | | **ESP32-WROOM-32E** | Opdateret version med **16 MB flash** og **bedre antenne**. | 34 | ✅ Ja | ✅ Ja | 16 MB | ~100–150 DKK | | **ESP32-SOLA-1** | **Single-core**, **2 MB flash**, **ingen Bluetooth**. | 18 | ✅ Wi-Fi kun | ❌ Nej | 2 MB | ~40–70 DKK | | **ESP32-C3** | **RISC-V CPU**, **2,4 GHz Wi-Fi + BLE 5.0**, **ingen Bluetooth Classic**. | 22 | ✅ Ja | ✅ Ja | 4–16 MB | ~60–100 DKK | | **ESP32-S2** | **Single-core Xtensa**, **2,4 GHz Wi-Fi (ingen Bluetooth)**, **USB OTG**. | 42 | ✅ Wi-Fi kun | ✅ Ja | 4–16 MB | ~70–120 DKK | | **ESP32-S3** | **Dual-core Xtensa**, **2,4 GHz Wi-Fi + BLE 5.0**, **USB OTG**, **PSRAM-understøttelse**. | 45 | ✅ Ja | ✅ Ja | 8–16 MB | ~100–150 DKK | | **ESP32-C6** | **RISC-V CPU**, **2,4 GHz Wi-Fi 6 + BLE 5.0**, **Zigbee/Thread-understøttelse**. | 22 | ✅ Ja | ✅ Ja | 4–16 MB | ~120–180 DKK | --- ==== Typiske anvendelsesområder ==== * IoT-enheder (smart home, sensorer, styring) * Trådløse kommunikationssystemer (Wi-Fi/Bluetooth-gateways) * Robotik og motorstyring (PWM, encoder-input) * Audio-applikationer (streaming, stemmestyring) * Wearables (BLE, lavt strømforbrug) * Industrielle automatiseringsløsninger (CAN, RS-485) * Data-logging (SD-kort, flash-hukommelse) * Web-servere (HTTP, MQTT, WebSocket) * GPS-trackere (UART-kommunikation med GPS-moduler) * DIY-projekter (LED-styring, weather stations, home automation) --- ==== Fordele og ulemper ==== ^ **Fordele** ✅ ^ **Ulemper** ❌ ^ | **Lav pris** (fra ~50 DKK). | **Begrænset 5 GHz Wi-Fi** (kun 2,4 GHz). | | **Dual-core CPU** (høj ydeevne). | **ADC-nøjagtighed** (12-bit, men ikke lineær ved lave spændinger). | | **Wi-Fi + Bluetooth integreret**. | **Begrænset RAM** (520 KB, men kan udvides med PSRAM). | | **Lavt strømforbrug** (god til batteridrevne enheder). | **Kompleks opsætning** (kræver ekstern flash/RAM). | | **Stort community** (mange biblioteker og eksempler). | **Varmeudvikling** (kan kræve køling ved høj belastning). | | **Mange periferienheder** (GPIO, I²C, SPI, UART mv.). | **Forskellige revisioner** (kan være svært at vælge det rigtige modul). | | **Understøtter flere programmeringssprog ** (C, Python, Lua). | **Begrænset USB-understøttelse ** (nogle moduler kræver ekstern USB-chip). | == OBS 5G kan tilføjes som ekstern enhed == [[ekstern5g|Eksternt 5G-modem]] ---- ==== Eksempel: Enkel Wi-Fi-klient (Arduino-kode) ====\\ #include const char* ssid = "DitNetværk"; const char* password = "DitPassword"; void setup() { Serial.begin(115200); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED