Programování mikrokontroléru ESP32 – rozcestník na zdroje a poznámky. Můj interní Google Doc překlopený do formy blog postu. Třeba vám pomůže. Ekvivalentní post k ESP8266.
Obsah:
- Obecné poznámky
- Základní odkazy
- Vlastnosti hardware
- Srovnání ESP32, ESP32-S2, ESP32-C3
- Funkce jednotlivých pinů – původní ESP32
- Funkce jednotlivých pinů – ESP32-C3
- Deep sleep / low power
- Různé
- Konkrétní desky:
- LilyGO TTGO T-Display
- ESP32-CAM
- LilyGO TTGO T-Energy
- LilyGO TTGO T7 V1.4
- Waveshare ESP32 e-paper driver
- LILYGO T5 4.7 inch E-paper (ESP32 V3 16MB FLASH 8MB PSRAM)
- ESP32-C3 bez USBtoSerial čipu
Základní odkazy
- Přehledný datasheet čipu ESP-32.
- ESP32 core pro Arduino IDE – github repo. Jen zdrojáky, bez dokumentace.
- Dokumentace k ESP32 Arduino core.
- ESP-IDF dokumentace na webu Espressifu. Ve vztahu k ESP-32 Arduino Core jen velmi volná, nasměruje na správný cíl.
- Nástroj pro ladění problémů: ESP exception decoder. Nainstalujte si do Arduino IDE, objeví se v menu Tools. Pokud v aplikaci dojde k exception, nakopírujte ji ze serial monitoru do tohoto nástroje a ukáže vám stacktrace, kde k chybě došlo.
Vlastnosti hardware
- Běžné funkce:
- ESP32 GPIO interrupty.
- Celkem 18 12bitových A/D vstupů ve dvou bankách (ADC1, ADC2).
- Vrací hodnoty 0-4095 pro napětí 0-3.3 V.
- Ale podle tohoto článku nejsou na začátku a konci lineární, efektivně měří asi od 0.15 do 3.10 V.
- Knihovna, která linearizuje získaná data.
- Poznámky k tomu, jak nastavit rozlišení a citlivost A/D vstupů.
- Banku ADC2 není možné používat společně s WiFi.
- 10 vstupů umí detekovat dotyk lidské ruky.
- 2 8bitové D/A výstupy.
- 16 PWM kanálů.
- 2 I2C kanály – na libovolných GPIO pinech.
- SPI.
- GPIO 34-39 jsou jen vstupní a nemají zabudované pull-upy.
- Specifické funkce nad rámec toho, co je běžné:
- ESP-NOW – jednoduchý bezdrátový protokol pro rychlé a energeticky levné předávání zpráv mezi ESP8266 a ESP-32. Není to wifi. Jiná dema.
- Pulse counter. Počítání pulsů na vstupech.
- Více variant PWM. LEDC a SigmaDelta.
- LED PWM. Specifické PWM pro řízení LED, běží asi i když je procesor v low power modu.
- PSRAM, „pseudo-static RAM“. Některé moduly mají 2 MB až 8 MB další RAM paměti nad rámec těch cca 420 kB interní RAM. Dostanete se k ní pomocí ps_malloc(). Více info.
- Moduly *-WROOM jsou bez PSRAM
- Moduly *-WROVER mají PSRAM
- Pokud je více než 4 MB PSRAM, na první pohled je vidět jen 4 MB. Další paměť je potřeba získat odlišnými funkcemi. Info.
- V Arduino IDE je třeba v nastavení boardu zapnout podporu PSRAM.
- Senzor magnetického pole. Info. Jen na „velkém“ ESP32, chybí v ESP32-S2.
- Long-range Wifi – pokud je na obou stranách spoje ESP32, je možné i s malou anténou na plošňáku dosáhnout (pomalé) spojení na stovky metrů. Info.
- Použití hardwarového watchdogu v Arduino IDE.
- ULP koprocesor – Ultra Low Power koprocesor schopný provádět jednoduchý kód i když je procesor v deep sleep. Má k dispozici 8 kB SRAM.
Srovnání ESP32, ESP32-S2, ESP32-C3
Detailní srovnání např. zde: https://socialcompare.com/en/comparison/esp8266-vs-esp32-vs-esp32-s2
ESP32 | ESP32-S2 | ESP32-C3 | |
Procesor | Tensilica Xtensa LX6 32 bit Dual-Core @ 160 / 240Mhz | Tensilica Xtensa LX7 32 bit Single-Core @ 240Mhz | RISC-V 32-bit Single-Core @ 160 MHz |
Specifický datasheet | ESP32 | ESP32-S2 | ESP32-C3 |
Podpora v ESP32 Arduino core | 1.0.x | 1.0.x | 2.0.x |
RAM | 520 kB | 320 kB | 400 kB |
Bluetooth | 4.2 | není | 5.0 |
USB host (+ sw implementace USB client) | ne | ANO | ne |
Přímá implementace serial-over-USB client (USB-CDC) / USB JTAG | ne | ne | ANO |
Ethernet | ANO | ne | ne |
PSRAM | ANO | ANO | ANO (čip podle datasheetu podporuje, nevím o takovém modulu) |
Hall senzor (magnetické pole) | ANO | ne | ne |
Teplotní senzor | ne | ANO | ANO |
DAC | ANO | ANO | ne |
Nativní rozhraní pro kameru a LCD | ne | ANO | ne |
TODO: ESP32-S3
Funkce jednotlivých pinů – původní ESP32
pin | funkce | omezení |
0 | – může budit zařízení ze spánku – touch 1 – ADC2_CH1 (nelze s WiFi) | spouští při bootu programovací režim |
1 | – při bootu posílá HIGH nebo PWM – serial0 TX | |
2 | – může budit zařízení ze spánku – touch 2 – ADC2_CH2 (nelze s WiFi) | |
3 | – při bootu posílá HIGH nebo PWM – serial0 RX | |
4 | – může budit zařízení ze spánku – touch 0 | |
5 | – SPI-SS | při bootu posílá HIGH nebo PWM |
6 | při bootu posílá HIGH nebo PWM | |
7 | při bootu posílá HIGH nebo PWM | |
8 | při bootu posílá HIGH nebo PWM | |
9 | při bootu posílá HIGH nebo PWM | |
10 | při bootu posílá HIGH nebo PWM | |
11 | při bootu posílá HIGH nebo PWM | |
12 | – může budit zařízení ze spánku – ADC2_CH5 (nelze s WiFi) | nastavuje při startu napětí pro interní flash paměť |
13 | – může budit zařízení ze spánku – ADC2_CH4 (nelze s WiFi) | |
14 | – může budit zařízení ze spánku – ADC2_CH6 (nelze s WiFi) | při bootu posílá HIGH nebo PWM |
15 | – může budit zařízení ze spánku – ADC2_CH3 (nelze s WiFi) | – při bootu posílá HIGH nebo PWM – řídí to, zda při startu vypisuje ESP32 na sériový port informace. Pak je dále volně použitelný |
16 | ||
17 | ||
18 | – SPI-SCK | |
19 | – SPI-MISO | |
20 | ||
21 | – I2C SDA (ale I2C lze spustit na kterýchkoli pinech) | |
22 | – I2C SCL (ale I2C lze spustit na kterýchkoli pinech) | |
23 | – SPI-MOSI | |
24 | ||
25 | – může budit zařízení ze spánku – DAC1 – ADC2_CH8 (nelze s WiFi) | |
26 | – může budit zařízení ze spánku – DAC2 – ADC2_CH9 (nelze s WiFi) | |
27 | – může budit zařízení ze spánku – touch 7 – ADC2_CH7 (nelze s WiFi) | |
28 | ||
29 | ||
30 | ||
31 | ||
32 | – ADC1_CH4 – použitelný i s wifi – může budit zařízení ze spánku – touch 9 | |
33 | – ADC1_CH5 – použitelný i s wifi – může budit zařízení ze spánku – touch 8 | |
34 | – ADC1_CH6 – použitelný i s wifi – může budit zařízení ze spánku | jen vstup, nemá pullup |
35 | – ADC1_CH7 – použitelný i s wifi – může budit zařízení ze spánku | jen vstup, nemá pullup |
36 | – ADC1_CH0 – použitelný i s wifi – může budit zařízení ze spánku | jen vstup, nemá pullup |
37 | – ADC1_CH1 – použitelný i s wifi – může budit zařízení ze spánku | jen vstup, nemá pullup |
38 | – ADC1_CH2 – použitelný i s wifi – může budit zařízení ze spánku | jen vstup, nemá pullup |
39 | – ADC1_CH3 – použitelný i s wifi – může budit zařízení ze spánku | jen vstup, nemá pullup |
Omezené použití pinů (původní ESP32)
- GPIO2 musí být LOW pro začátek nahrávání aplikace přes sériový port. Tj. pokud máte bare modul a chcete nahrávat aplikaci, musíte si vyvést jumper nebo natvrdo připojit GPIO2 na LOW. Info. Info.
- GPIO12 nastavuje při startu napětí pro interní flash paměť. Info. Asi je nejjednodušší se mu vyhnout. Už jsem se setkal s modulem, kde když nebyl tento pin připojen na LOW, tak modul nefungoval – neviděl flash paměť. Info.
- GPIO15 řídí to, zda při startu vypisuje ESP32 na sériový port informace. Pak je dále volně použitelný.
- I2C na defaultních portech 21,22 – podle této issue se může stát, že způsobí bootloop – opakované resety při startu (alespoň pro modul WROOM). Výpis na seriovém portu vždy končí chybou
csum err:0x12!=0xb8
(samozřejmě s různými čísly). Nicméně když jsem zaznamenal podobný problém, byl to projev nedostatečně silného napájecího zdroje. - Analogové vstupy z banky ADC2 není možné používat souběžně s WiFi. U WiFi aplikací je tedy k dispozici jen 8 A/D vstupů z banky ADC1.
- ADC1_CH0 (GPIO 36)
- ADC1_CH1 (GPIO 37)
- ADC1_CH2 (GPIO 38)
- ADC1_CH3 (GPIO 39)
- ADC1_CH4 (GPIO 32)
- ADC1_CH5 (GPIO 33)
- ADC1_CH6 (GPIO 34)
- ADC1_CH7 (GPIO 35)
- GPIO 34-39 jsou pouze pro vstup. Nemají pull-upy. Není možné je použít pro výstup.
- Zde je jiná soupiska poznámek k tomu, jaké piny je možno použít.
- Tyto piny při bootu posílají HIGH nebo PWM signál: 1, 3, 5, 6-11 (SPI flash), 14, 15.
Funkce jednotlivých pinů – ESP32-C3
Všechny piny jsou in/out, všechny piny mají možný pull-up.
Info: https://api.riot-os.org/group__cpu__esp32__esp32c3.html a https://www.espressif.com/sites/default/files/documentation/esp32-c3_datasheet_en.pdf
pin | funkce | omezení |
0 | ADC1 factory-calibrated.; RTC GPIO = can be used in deep-sleep mode | |
1 | ADC1 factory-calibrated.; RTC GPIO = can be used in deep-sleep mode; | |
2 | ADC1 factory-calibrated.; RTC GPIO = can be used in deep-sleep mode | boostraping = nastavuje chování při bootu |
3 | ADC1 factory-calibrated.; RTC GPIO = can be used in deep-sleep mode; | |
4 | ADC1 factory-calibrated.; RTC GPIO = can be used in deep-sleep mode; default I2C SCL; external JTAG TMS | |
5 | ADC2 – není použitelné najednou s WiFi, není kalibrované; RTC GPIO = can be used in deep-sleep mode; Vref can be read with function adc_line_vref_to_gpio at GPIO5; default I2C SDA; external JTAG TDI | |
6 | external JTAG TCK | při startu projde krátký impulz (není stabilní) – LOW 5 ns |
7 | external JTAG TDO | při startu projde krátký impulz (není stabilní) – LOW 5 ns |
8 | boostraping = nastavuje chování při bootu | |
9 | UART1_RXD – lze přemapovat | boostraping = nastavuje chování při bootu; při bootu zapnut pullup |
10 | UART1_TXD – lze přemapovat | při startu projde krátký impulz (není stabilní) – LOW 5 ns |
11 | ||
12 | při bootu zapnut pullup | |
13 | při bootu zapnut pullup | |
14 | při bootu zapnut pullup | |
15 | při bootu zapnut pullup | |
16 | UART2_RXD – lze přemapovat | při bootu zapnut pullup |
17 | UART2_TXD – lze přemapovat | při bootu zapnut pullup |
18 | lze použít pokud nepoužíváte USBSerial / USB JTAG | USB JTAG D- (white); při startu projde krátký impulz (není stabilní) – HIGH 50 ms |
19 | lze použít pokud nepoužíváte USBSerial / USB JTAG | USB JTAG D+ (green) |
20 | UART0R_XD | při bootu zapnut pullup; při bootu projde krátký impulz (není stabilní)- LOW 5 ns |
21 | UARTU0_TXD | při bootu zapnuto jako výstup |


Deep sleep / low power
- Detailní popis deep sleep režimů, tj. jak uspat ESP32 do režimu s nízkou spotřebou; jak ho probudit (umí toho hodně, daleko více než ESP8266); jak zjistit, proč se probudilo. Text zde.
- Probuzení externím signálem jen na pinech označených jako RTCIO.
- Informace o tom, kdo probudil MCU ze spánku:
esp_sleep_wakeup_cause_t duvod = esp_sleep_get_wakeup_cause();
- Jak zajistit, aby aplikace neztratila data po dobu deep sleep? To je nutné třeba u počítadla impulzů z měřidla rychlosti větru (srážkového čidla, plynoměru) aby nebylo potřeba posílat po každém kliknutí data na server. ESP32 má „RTC Memory“ – celých 8 kB (a dalších 8 kB „slow RTC memory“ pro low-power koprocesor)! Jde o SRAM, jejíž obsah přežije deep sleep a reset (ale ne výpadek napájení). Ukázka.
- Čas běží i v deep sleep! ESP32 má „RTC timer“, který běží i v deep sleep. Info. Dá se načíst pomocí gettimeofday() nebo time().
- Přesnost času není absolutní, je to poháněné RC oscilátorem. Na hodinky to není, na orientační informaci ano.
- Za běžné pokojové teploty to za 1 hod naměřilo 3628 sekund, tj. odchylka +0,77 %. Dobré.
- Fce millis() vrací milisekundy od posledního resetu a po deep sleep začíná znovu od nuly; gettimeofday () / time() vrací sekundy od posledního zapnutí či uploadu sketche a při deep sleep běží na pozadí dál.
- Přesnost času není absolutní, je to poháněné RC oscilátorem. Na hodinky to není, na orientační informaci ano.
- U deep sleep trvá docela dlouho (několik sekund!), než začne běžet aplikace – než se naloaduje z flash do RAM a spustí. Proto existuje “deep sleep wake stub”, který může být v RTC RAM a který se spustí jako první, ještě před bootem celého ESP. Ukázka použití.
- K dispozici je také „light sleep“ se spotřebou cca 3 mA, kdy sice procesor neběží, ale paměť se zachovává a po obnovení provozu nedojde k resetu – kód pokračuje z místa, kde přepnul do ligh sleep, bez zdržení.
- Pro buzení zařízení ze sleepu je možné použít jen následující piny: 0, 2, 4, 12-15, 25-27, 32-39
Různé
Zapojení:
- Minimální konfigurace ESP32 core modulu a její programování přes USB-Serial převodník. Text zde.
Důležité knihovny:
- tzapu WiFiManager – Nepište jméno wifi sítě a její heslo do zdrojáku, ale zadejte je do aplikace z mobilky přes webový browser. Odkaz na development verzi, která podporuje i ESP-32.
- joysfera Tasker – Periodické či odložené spouštění úkolů. Strašně jednoduché a dobře funkční. Článek od autora (Petr Stehlík).
Ostatní poznámky:
- Při používání SPIFFS (filesystému ve flash paměti) to na rozdíl od ESP8266 nenamountuje filesystém, pokud není naformátován! Jednoduché řešení: zavolat SPIFFS.begin(true). Bool parametr, který u ESP8266 neexistuje, znamená „format on failure“.
- HW akcelerovaný AES256 – https://gist.github.com/cnlohr/96128ef4126bcc878b1b5a7586c624ef
Poznámky k jednotlivým modulům
LilyGO TTGO T-Display
Můj oblíbený modul ESP32 + barevný display 1.14″ 135×240, s podporou pro LiPo baterky – za méně než 7 USD.
- onboard modrá led zespodu je připojená na napáječi
- deska nemá říditelnou LED
- když máte USB konektor vlevo, pak:
- tlačítko nahoře je IO0
- tlačítko dole (u resetu) je IO35; má hardwarový pull-up (protože na tomto pinu interní není)
- akumulátor je přes dělič 100k/100k připojen na IO34
- podle popisu https://github.com/Xinyuan-LilyGO/TTGO-T-Display je ještě „ADC Power“ připojen na IO14
- spotřeba:
- deep sleep bere z akumulátoru cca 0.4 mA
- běžný provoz při 80 MHz CPU a 40 MHz flash bez WiFi cca 30 mA
- zapnutí displeje bere cca 8 mA; běžnými službami knihovny TFT-eSPI už nejde vypnout jinak než resetem
- pinout: https://github.com/Xinyuan-LilyGO/TTGO-T-Display
- kompletní schema: https://github.com/Xinyuan-LilyGO/TTGO-T-Display/blob/master/schematic/ESP32-TFT(6-26).pdf
ESP32-CAM
ESP32-S s kamerou OV2640 a 4 MB PSRAM.
- nákup
- pinout a schema zapojení
- kamera má rozlišení až 1600×1200; pro použití plného rozlišení je potřeba zapnout jen jeden framebuffer (pomalejší); při 800×600 fungují dva framebuffery
- Deska nemá USB – ukázka, jak zapojit na USB-serial adapter a vhodný USB-serial adapter s vyvedeným napájením 5 V i 3.3 V
- Detailnější popis API – projekt esp32-camera na githubu
- Pinout:
- malá červená LED ze spodní strany desky (!) je na GPIO 33; svítí při LOW
- velká bílá LED („blesk“) je na GPIO 4, svítí při HIGH
- pro programování je třeba dát pin 0 na nulu
- při použití SD karty nejsou v podstatě žádné volné piny
- ale podle tohoto popisu (poslední komentář) lze komunikaci s SD kartou přepnout do 1bit režimu, takže se uvolní piny pro další využití
- Aplikace:
- demonstrační projekt pro webserver s real-time daty a rozpoznáváním tváří
- český článek + aplikace
- Deska není úsporná, v deep sleep žere 6 mA.
- Analýzu proč (a návrh řešení) udělal Chiptron zde.
- Přesněji – konkrétně u desky, kterou jsem měřil, osciluje spotřeba při prostém přepnutí ESP do deep sleep mezi 0 a 20 mA, průměr je kolem těch 6 mA.
- Maximální spotřeba (při focení) je kolem 550 mA; provozní stav při zapnuté wifi je cca 200 mA.
- Pokud vám nefunguje kamera nebo některé piny, zde najdete checklist; i já jsem narazil na to, že byl modul v desce špatně zapájený – viz popis.
- Vlastnosti jednotlivých PINů:
- GPIO12 – OK (může budit zařízení ze spánku; ADC2_CH5 – nelze s WiFi)
- GPIO13 – přes 47k na 3V3, takže nelze použít pro analog in (může budit zařízení ze spánku)
- GPIO15 – přes 47k na 3V3, takže nelze použít pro analog in (může budit zařízení ze spánku; při bootu posílá HIGH nebo PWM; řídí to, zda při startu vypisuje ESP32 na sériový port informace a pak je dále volně použitelný)
- GPIO14 – OK (může budit zařízení ze spánku; ADC2_CH6 – nelze s WiFi; při bootu posílá HIGH nebo PWM)
- GPIO2 – přes 47k na 3V3, takže nelze použít pro analog in (může budit zařízení ze spánku; touch 2 – možná kvůli tomu rezistoru nebude fungovat)
- GPIO4 – při HIGH sepne „blesk“; (může budit zařízení ze spánku; touch 0 – možná kvůli tomu rezistoru nebude fungovat)
- GPIO16 je na mých modulech stále high; podle schématu je zapojeno přes 10k na 3V3 a dále na pin CS# u PSRAM; používá se tedy asi pro řízení PSRAM a pro aplikaci není dostupné
- GPIO0 – OK po bootu; LOW při bootu spouští programovací režim (může budit zařízení ze spánku; touch 1; ADC2_CH1 – nelze s WiFi)
- GPIO3 – serial RxD, programovací port
- GPIO1 – serial TxD, programovací port
LilyGO TTGO T-Energy
ESP32 s držákem na akumulátor 18650, obvodem pro řízení nabíjení a 8 MB PSRAM a malou spotřebou v deep sleep.
- schema
- GPIO35 je připojeno na akumulátor přes 100k/100k odporový dělič (= vidí polovinu napětí akumulátoru).
- modrá LED je na GPIO5 (svítí při HIGH)
- červená LED = nabíjení (když není baterie, bliká krátkými pulzy)
- zelená LED = nabito
Spotřeba?
- Při napájení 5 V:
- Pokud se nabíjí akumulátor, odebírá to 500 mA, ve špičkách (WiFi) až 750 mA.
- Pokud je akumulátor nabitý, má to standardní spotřebu jako běžné ESP32:
- cca 30 mA pro 80 MHz a vyplou WiFi
- cca 70 mA pro 240 MHz bez WiFi komunikace
- cca 360 mA pro WiFi komunikaci
- Z akumulátoru se odebírá jen cca 0.1 mA při deep sleep (!!!).
Nabíjení akumulátoru se zastaví na cca 4.1 V, tj. nevyužívá to plnou kapacitu, prodlužuje životnost.
LilyGO TTGO T7 V1.4
Malá deska s ESP32, 8 MB PSRAM a napájecím/nabíjecím obvodem pro lithiový akumulátor (s konektorem 2p Molex Picoblade).
- Shop. Domovská stránka produktu.
- Pinout.
- Schema.
- LED
- červená – svítí stále
- zelená – na pinu 19, svítí při HIGH
- modrá – nabíječka (bliká = není akumulátor, svítí = nabíjí, zhasnuto = nabito/provoz z akumulátoru)
- měření akumulátoru je na pinu 35 ADC1_CH7
- je ovlivněno spotřebou čipu a režimem provozu
- přepočtové koeficienty pro provoz z akumulátoru (při napájení z USB ukazuje více):
- procesor 240 MHz, flash 80 MHz, wifi:
- double batteryVoltage = ((double) analogRead(35) ) * 3.3 / 4096.0 * 2.2175;
- procesor 80 MHz, flash 40 MHz, bez WiFi
- double batteryVoltage = ((double) analogRead(35) ) * 3.3 / 4096.0 * 2.2552;
- procesor 240 MHz, flash 80 MHz, wifi:
- spotřeba desky v deep sleep 0.90 mA (mj. kvůli té stále svítící červené LED)
- spotřeba z akumulátoru za provozu je od 25 mA (CPU 80 MHz, flash 40 MHz, bez WiFi) až k 300 mA (WiFi, 240 MHz/80 MHz)
- na pinu 32 je něco připojeného – netuším, co. Analogové čtení dává od 0.2 do 0.9 V; při provozu z baterie to má velký rozkmit, při napájení z USB malý. Ve schematu není zakresleno.
- vybitý akumulátor nabíjí proudem 500 mA; s rostoucím napětím klesá proud; nabíjení končí na napětí cca 4.14 V
Waveshare ESP32 e-paper driver
- info: https://www.waveshare.com/wiki/E-Paper_ESP32_Driver_Board
- schema: https://www.waveshare.com/w/upload/8/80/E-Paper_ESP32_Driver_Board_Schematic.pdf
- knihovna a samply: https://www.waveshare.com/wiki/File:E-Paper_ESP32_Driver_Board_Code.7z (knihovna je v zipu v adresáři examples/ )
- nastavení přepínače na desce: popsáno zde v sekci FAQ (a taky ve schematu)
- LED je na GPIO2, svítí při HIGH
- na GPIO4 je řízení napájení e-paperu (HIGH = zapnuto)
- napojení e-paperu:
- 25 = BUSY
- 26 = RST
- 27 = D/C
- 15 = CS
- 13 = SCLK
- 14 = SDI (MOSI)
LILYGO T5 4.7 inch E-paper (ESP32 V3 16MB FLASH 8MB PSRAM)
- 4.7″, 540 x 960 px, 16 stupňů šedi, ED047TC1, partial refresh
- https://www.banggood.com/LILYGO-T5-4_7-inch-E-paper-Screen-ESP32-V3-Version-16MB-FLASH-8MB-PSRAM-WIFI-Bluetooth-Display-Module-p-1791808.html?rmmds=myorder&cur_warehouse=CZ&ID=6300830
- github se samplem https://github.com/Xinyuan-LilyGO/LilyGo-EPD47
- STL pro krabičku https://github.com/Xinyuan-LilyGO/LilyGo-EPD47/tree/master/3D_file

How to turn off the blue LED light?
To turn off the blue LED, you must call epd_poweroff_all(), which will turn off the entire power supply controlled by PWM_EN. Note that it cannot be turned off when powered by USB. It can only be turned off when powered by battery. For details, refer to examples/demo
ESP32-C3 bez USBtoSerial čipu
ESP32-C3 = Risc-V jádro. Má i USB rozhraní, takže pro „sériový port přes USB“ a programování není potřeba USB-to-Serial adaptér.
Nicméně:
- Je plně a spolehlivě podporováno až v ESP32 Arduino Core 2.0.5 (= je potřeba zaktualizovat podporu desek ESP32 v Arduino, na 1.0.6 to nefunguje)
- Má dvě sady serial rozhraní:
- Fyzické rozhraní Serial (UART0, funkce Serial.println a další), které je možné přes usb-to-serial připojit na jiný USB kabel než je ta nativní instance. Na toto rozhraní jdou debug hlášky arduino ESP32 core a boot messages!
- Virtuální USBSerial (UART1, funkce USBSerial.println a další), napojený na implementaci USB rozhraní v ESP32 a použitelné i bez externího čipu
- Debugovací zprávy ze Serial na USBSerial lze přesměrovat nastavením build parametru USB-CDC on boot : ENABLED. Pak také i Serial.prinln posílá na USBSerial.
- V aplikaci tedy musíte konfiguračně používat Serial (ESP32, ESP32-C2) a USBSerial (ESP32-C3 bez zapnutého USB-CDC on debug).
- Pokud je zařízení v deep sleep, pokus o programování přes USBSerial ho nevzbudí a tedy selže. Je třeba před programováním udělat standardní dvojklik – stisknout a držet BOOT, stisknout RESET, pak pustit BOOT.
- Tlačítko BOOT je (na rozdíl od ESP32 a ESP8266) na pinu 9.
POZOR! Pokud v aplikaci použijete tento standardní kód pro inicializaci Serial portu a máte zapnuto USB-CDC on boot: enabled (tj. Serial je ta nativní implementace USB CDC):
Serial.begin( 115200 );
while(!Serial) delay(1);
tak se to na tom druhém řádku zasekne v případě, že není není připojený sériový kabel k počítači na kterém běží nějaký serial monitor. Tj. stav Serial==false znamená, že není spojení s protistranou (zatímco na hardwarové lince to znamená jen to, že ještě nedoběhla inicializace sériového portu).
Ekvivalentně pokud máte USB-CDC on boot: disabled a výše uvedený kód použijete s USBSerial.
Obecně: pro sériový port přes nativní USB implementaci je while(!Serial) špatný nápad.

Konkrétní deska https://www.aliexpress.com/item/1005004477968500.html je bez USB-to-Serial čipu.
- musí být flash mode: DIO , jinak nenabootuje
- LED D4 = IO12, D5 = IO13
- tlačítko BOOT = IO9
dokumentace https://wiki.luatos.com/chips/esp32c3/board.html
Pingback: ESP8266 – poznámky | pebrou