Przegląd płytki: ESP32 WROOM-32

Cześć,
dzisiaj oddaje Wam do lektury, przegląd płytki, a zarazem test układu ESP32 WROOM-32. Sprawdziłem jego wydajność, pobór energii, oraz stworzyłem parę podstawowych programów sprawdzających jego możliwości. Wyniki są interesujące. Zapraszam :)

Spis treści:

  1. Przegląd peryferiów
  2. Środowisko programistyczne
  3. Sposób programowania
  4. Obliczanie liczby pi – milion iteracji
  5. Przykładowe aplikację dla IoT
  6. Podsumowanie

1. Przegląd peryferiów

Jak już wiemy z wcześniejszych informacji, to ESP32 (a tak właściwie to ESP3212) jest bardzo rozbudowanym następcą swojego popularnego poprzednika ESP8266. Jego główne cechy to:

  • Procesor: 2 rdzeniowy Xtensa 32-bit LX6 (wydajność 600 DMIPS) taktowany zegarem 240MHz
  • Pamięć: 520 kB SRAM / 448 kB ROM
  • Pamięć Flash: do 16MB (standardowo spotykane 2MB)
  • Napięcia zasilania: 2,2V – 3,6V
  • Wi-Fi: 802.11 b/g/n/d/e/i/k/r (802.11n z prędkością do 150 Mbps)
  • Tryby Wi-Fi: Station/softAP/SoftAP+station/P2P
  • Szyfrowanie Wi-Fi: WPA/WPA2/WPA2-Enterprise/WPS
  • 29 realnie programowalnych pinów GPIO
  • 10 10-bitowych wejść ADC
  • 4 wyjścia PWM
  • 4× SPI / 2× I2S / 2× I2C / 3× UART
  • Bluetooth 4.2 BR/EDR (ze wsparciem dla BLE)
  • Sprzętowa akceleracja kryptograficzna: AES /HASH (SHA-2) library / RSA / ECC / Random Number Generator (RNG)
  • Sposoby programowania: UART i OTA

 

I wiele innych, które to można by wymieniać bardzo długo. Jeżeli ktoś chciałby poznać wszystkie peryferia tego układu to warto przeczytać notę katalogową

pdf

 

 

Co najważniejsze w tym układzie to fakt, że wprowadzono drugi rdzeń, który może np. sobie spokojnie obsługiwać Wi-Fi, a następny wykonywać pozostałe operacje, przez co poprzednik – ESP8266 miał problemy między innymi z nawiązaniem łączności Wi-Fi po uśpieniu- tzn. ponowne nawiązanie połączenia musiało potrwać parę cennych sekund oraz ogólny fakt, że samo ESP8266 musiało jakoś jednocześnie obsługiwać Wi-Fi oraz nasz program. Co prawda problem można było „ominąć” stosując funkcję yield(), ale to nie była właściwa droga. Nie mniej jednak dwa rdzenie poprawiają funkcjonalność naszego układu przez co, z sukcesem możemy ominąć problem blokowania się programu (crashowania) spowodowanego posiadaniem przez układ tylko jednego rdzenia.

Kolejnym zauważalnym postępem jest dodanie przez Espressif funkcjonalności Bluetooth 4.2 z kompatybilnością dla BLE (ang. Bluetooth Low Energy), co pozwala przy niskim nakładzie energii łączyć się z pobliskimi urządzeniami wspierającymi Bluetooth do 10m. Niestety na ten moment (grudzień 2016) funkcja Bluetooth nie jest jeszcze obsługiwana programowo.
Nie mniej jednak moim zdaniem te powyższe rzeczy co wymieniłem to jest „pikuś” w porównaniu z tym co zostało dodane do ESP32- a mianowicie sprzętowa akceleracja kryptograficzna.
Sama kryptografia w tym przypadku polega na tym, że jeżeli chcemy wysyłać do drugiego urządzenia jakieś poufne dane, np. kod do otwarcia bramy garażowej (w tym przypadku odbiornika w bramie) to wysłanie w sposób bezpośredni było by w znacznym stopniu niebezpieczne. To znaczy, ktoś mógłby przechwycić ten kod i bez naszej autoryzacji otworzyć bramę co byłoby równoznaczne z włamaniem. Zatem tego typu kod jest szyfrowany- i w tym momencie wchodzimy na pole kryptograficzne, gdzie przy pomocy jakiegoś x wzorca jest szyfrowany ten kod, którego długość może wynosić np. 128 bitów. Ze względu na to że to jest duża liczba, to software’owe jej policzenie przy tak małej mocy układu mogłoby zająć dużo czasu. Dlatego więc wprowadzono sprzętową akcelerację kryptograficzną, która to posiada specjalne „układy szyfrujące” kod, dzięki którym cały proces jest znacznie skrócony. Moim zdaniem jest to bardzo ważny blok w ciągle rozwijającej się dziedzinie IoT.

Przyjrzyjmy się teraz samej budowie układu:

esp32-blokowy

Po lewej stronie na zielono zaznaczyłem peryferia obsługiwane przez nowe ESP32 – oczywiste. W górnej części schematu blokowego znajdują się moduły radiowe odpowiedzialne za Bluetooth oraz Wi-Fi. Poniżej tych układów znajdują się- po prawej, na fioletowo wspomniany wcześniej dwurdzeniowy procesor, oraz sąsiadujący z nim moduł odpowiedzialny za kryptografię. Poniżej w bloku RTC mamy bardzo ciekawy układ jakim jest ULP coprocessor (ang. Ultra Low Power), którego zadaniem jest utrzymanie połączenia Wi-Fi w trakcie trybu zasilania deep-sleep, gdzie wyłączone są dwa główne rdzenie układu. W takim trybie układ pobiera jedynie 0,15mA + znikomy prąd pobierany przez Wi-Fi (tylko utrzymanie połączenia). Oczywiście układ odbiera też zdarzenia (events) od niektórych pinów, aby wybudzić ESP32.
Jaki widać układ jest bardzo rozbudowany w porównaniu z poprzednikiem, który to posiadał tylko wyróżnioną część radiową i logiczną z pomniejszymi blokami:

esp8266-blokowy

Przyjrzyjmy się teraz samemu modułowi ESP32 WROOM 32:

dsc_0014

dsc_0015

Płytka posiada wymiary 18mm x 25mm. Jak widać na spodzie ma opisany każdy pin, przez co nawet zmontowanie jej na pająku nie powinno być trudne. Jednak do tego celu polecałbym płytkę. Jeżeli chciałbyś wykonać taką płytkę jak ja, to poniżej zamieszczam wszystkie potrzebne pliki:

Download-icon

 

 

 

p61220-230130

Z tą różnicą, że ta płytka jest jeszcze minimalnie ulepszona, tzn. dodane jest gniazdo do zewnętrznego zasilania (nie bez powodu, ale o tym to kawałeczek dalej).

  • Przemek Michalak

    Napisałeś „Możemy tu gołym okiem stwierdzić, że podwojona ilość rdzeni pozytywnie wpływa na moc obliczeniową układu.” a w jaki sposób aplikacja wykorzystuje te 2 rdzenie w tym przykładzie? Ten drugi dodatkowy nie jest przeznaczony na obsługę wifi itp?

    • Cześć,
      jest właśnie tak jak piszesz :) drugi rdzeń zajmuje się obsługą między innymi Wi-Fi, ale jak na to popatrzymy w porównaniu do ESP8266, gdzie miałeś jeden rdzeń na wszystko, to to jednak w ESP32 wpływa pozytywnie na działanie :)

      • Przemek Michalak

        Tak, ale w tym przykładzie 2 rdzeń nie jest używany. A może jakiś przykład tego typu, ale jeszcze serwer? Tylko wtedy efekt będzie pewnie taki, ze ESP8266 będzie się wieszał po stronie serwera, a ESP32, będzie stabilnie pracował i średnio będzie można to porównać.

        Swoją drogą poza tą stabilnością połączenia to raczej mało kto ma hobbystyczne projekty, które musiałyby mieć aż taką wielką moc obliczeniową

        • Zapewne chodzi ci o test obliczania liczby pi. Było on nastawiany bezpośrednio na test wydajności modułów. Możnaby spróbować dodać serwer, ale test raczej nie byłby miarodajny. Co do wykorzystania hobbystycznego to kuszącym może być sprzętowa akceleracja kryptograficzna

  • Mscichu

    A jak z zasięgiem tych modułów i może wiecie czym się różni moduł z końcówką S?

    • Zasięgu nie sprawdzałem ale sądząc po wbudowanej antenie to będzie porównywalny z ESP-12. Moduł ESP-32S od zwykłego ESP-32 myślę że może się różnić tylko płytką i ewt. wielkością pamięci FLASH, bo innego układu niż ESP3212 w niej nie ma :)

      • Mscichu

        Raczej zastanawiałem się czy zasięg jest poprawiony, bo były moduły ESP8266 z dodatkowym wzmacniaczem antenowym. Będzie więcej artykułów o modułach bezprzewodowych?

        • Mam taką nadzieje, że będą bo w dziedzinie IoT jest szerokie spektrum możliwości :)

  • Mscichu

    Jeszcze zastanawiam się, bo piszesz o ESP-WROOM-2, a wszędzie gdzie znajduję to jest na ESP8266. Na necie i na zdjęciach jest ESP-WROOM-32. Literówka?