ESP32 – poznámky

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.

Základní odkazy:

  • Přehledný datasheet čipu ESP-32.
  • ESP32 core pro Arduino IDE – github repo. Jen zdrojáky, bez dokumentace.
  • 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.
      • Poznámky k tomu, jak nastavit rozlišení a citlivost A/D vstupů.
    • 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.
  • 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 i v low power mode.
    • 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.

Omezené použití pinů:

  • 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.
  • GPIO12 nastavuje při startu napětí pro interní flash paměť. Info. Asi je nejjednodušší se mu vyhnout.
  • 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). Podobnou situaci jsem viděl také. Autor to řešil připojením I2C na 18,19.
  • 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.
  • GPIO 34, 35, 36, 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.

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.

Zapojení:

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

Srovnání ESP32 a ESP32-S2:

1 komentář

Filed under Mikrokontroléry - Arduino, ESP8266, Picaxe, ...

One response to “ESP32 – poznámky

  1. Pingback: ESP8266 – poznámky | pebrou

Zanechat odpověď

Vyplňte detaily níže nebo klikněte na ikonu pro přihlášení:

Logo WordPress.com

Komentujete pomocí vašeho WordPress.com účtu. Odhlásit /  Změnit )

Google photo

Komentujete pomocí vašeho Google účtu. Odhlásit /  Změnit )

Twitter picture

Komentujete pomocí vašeho Twitter účtu. Odhlásit /  Změnit )

Facebook photo

Komentujete pomocí vašeho Facebook účtu. Odhlásit /  Změnit )

Připojování k %s