Od wielu lat internet rzeczy (Internet of Things czyli IoT) mocno się zadomowił wśród użytkowników. Niezaprzeczalnym prekursorem takiego stanu jest firma Espressif która dzięki wprowadzeniu swoich SoC (System on Chip) w rodzaju ESP8285, ESP8266 czy zdobywającego ostatnio coraz większą popularność ESP32 w zasadzie zdominowała rynek (choć zmienia się to). Łatwość programowania a także darmowe środowiska programistyczne np. Arduino IDE czy ESP IDF dają prostą drogę do świata internetu rzeczy (IoT) dla praktycznie każdego. Powstało wiele modułów i płytek prototypowych wykorzystywanych nie tylko w IoT ze względu na stosunkowo duże "zasoby systemowe". Jeden z takich modułów opisywałem w zeszłym roku, zostały tam na jednej płytce zintegrowane układy ESP32 oraz transceiver LoRa SX1276 a także graficzny wyświetlacz OLED. Tym razem zaprezentuję moduł oparty o ESP32 wraz z kamerą 2Mpix (OV2640v2) oraz pokażę jak go uruchomić. Moduł zależnie od źródła zakupu kosztuje od kilkunastu do kilkudziesięciu zł, za swój zapłaciłem niecałe 41zł.
Nasz zakupiony zestaw (moduł+kamera) jest fabrycznie zapakowany w torebkę antystatyczną a sama kamera jest luzem (nie podłączona);
Na powyższym zdjęciu widać również gniazdo karty microSD które możemy wykorzystać w razie potrzeby. Wymiary modułu to ~40x28mm i około 8mm grubości (bez kamery i złącz szpilkowych). Po drugiej stronie mamy "serce" modułu czyli ESP32 (u mnie jest to dokładnie taka wersja jak na fotografii czyli ESP32-S-CAM);
A po "wpięciu" kamery w złącze ZIF wygląda tak;
Kamera użyta przez producenta to OV2640 v2 której producentem jest firma OmniVision specjalizująca się (nie tylko) w przetwornikach obrazu CMOS. Poniżej najważniejsze parametry (za DS);
Schemat blokowy kamery przedstawiam poniżej;
Na temat dokładnego typu SoC'a użytego w module nie udało mi się znaleźć żadnych informacji a należy przypomnieć że ESP32 występuje w kilku trochę się różniących wariantach. Wszystko wskazuje na ESP32S i według opisu sprzedawcy;
Kłóci się to trochę z danymi producenta (Ai-Thinker) który podaje iż jest to dwurdzeniowy SoC o maksymalnej częstotliwości pracy 240MHz
Schemat modułu jest dostępny i przedstawia się następująco;
Oprócz trzech stabilizatorów napięcia (3,3V, 2,8V i 1,2V) widzimy dodatkową pamięć RAM (PSRAM) IPS6404LSQ zapewniającą dodatkowe 8 megabajtów na obróbkę obrazu oraz diodę LED pełniącą rolę lampy błyskowej
. Pinout modułu poniżej;
Pewnego wyjaśnienia wymaga zasilanie modułu oraz funkcje rezystorów R1 i R2, są to w zasadzie zworki (a raczej jedna), przy zasilaniu modułu z 5V potrzebne dla ESP32 napięcie uzyskujemy na wyjściu stabilizatora U2 (AMS1117 3,3) i odpowiednio przelutowując zworkę uzyskujemy na pinie P_OUT napięcie 3,3 lub 5V. Należy jednak pamiętać że logika GPIO ESP to 3,3V i nie jest 5V "tolerant". Poniżej założona fabrycznie zworka dla 3,3V (R1);
Jak zauważyliście moduł nie posiada żadnego złącza do programowania, tu niestety podobnie jak przy ESP8285 i ESP8266 trzeba się zaopatrzyć w jakikolwiek konwerter USB<->UART pracujący z logiką 3,3V. Lecz zanim przejdziemy do spraw technicznych musimy zaopatrzyć się i skonfigurować środowisko programistyczne, tu pokażę na przykładzie Arduino IDE jak je skonfigurować i uruchomić ESP32-CAM.
Uruchamiamy Arduino IDE i klikamy "Plik" i z rozwiniętej listy "Preferencje";
W kolejnym oknie w polu "Dodatkowe adresy URL dla menadżera płytek" wpisujemy; https://dl.espressif.com/dl/package_esp32_index.json , jeśli mamy już dopisane inne definicje to rozdzielamy je przecinkiem;
Po kilku chwilach jak IDE pobierze sobie definicje płytek wchodzimy w Narzędzia->Plytka->Menedżer płytek;
I wpisujemy w górne okno ESP32;
Klikamy zainstaluj i po kilku minutach pokazują nam się w menedżerze płytek nowe możliwości;
Przewijamy listę płytek w dół i odszukujemy oraz zaznaczamy "AI Thinker ESP32-CAM";
Już prawie jesteśmy gotowi do pracy z modułem
, musimy jeszcze połączyć nasz konwerter USB<->UART według poniższego schematu;
Zworka GPIO0-GND potrzebna jest tylko do programowania (ESP32 wchodzi w tryb flashowania) i po zaprogramowaniu należy ją usunąć.
Skoro już mamy wszystko podłączone to możemy spróbować z pierwszym oprogramowaniem, to jest bardzo duży plus dla Arduino IDE gdyż są odpowiednie przykłady. Zatem wybierzmy jeden z nich;
Oczywiście aby przykład zadziałał musimy go lekko zmodyfikować, tj. podać nazwę i hasło naszej sieci WiFi oraz wybrać dokładny rodzaj modułu;
Kompilujemy nasz sketch i wgrywamy do ESP32;
MAC oczywiście zamazałem
, po kilkunastu sekundach;
Odłączamy konwerter z portu USB i zdejmujemy zworkę łączącą GPIO0 i GND, podłączamy ponownie do USB i uruchamiamy Monitor portu szeregowego. Po naciśnięciu przycisku reset na module powinniśmy dostać po UART'cie informację o połączeniu z siecią oraz nr IP modułu;
Skoro znamy już adres IP naszego modułu zatem wpiszmy go w adres przeglądarki;
Ukaże nam się strona naszego WebCam serwera z elementami kontrolnymi, klikając dolny przycisk "Start Stream" otrzymujemy obraz"live" z naszego modułu;
Po kliknięciu równocześnie na port UART są wysyłane informacje na temat ilości klatek/s itp;
Oczywiście WebSerwer pozwala na interaktywną zmianę ustawień, np. rozdzielczości;
Efektów;
Czy też dobranie warunków oświetlenia (balansu bieli z ang. White Balance);
Do tego oczywiście standardowo jasność, nasycenie barw, kontrast etc. Przy okazji programowania wyszedł na jaw typ układu a jest to ESP32-DOWDQ6 co daje dwa rdzenie o Fmax 240MHz. Pobór prądu mocno mnie zaskoczył, po włączeniu zasilania było to około 60mA a po nawiązaniu połączenia WiFi następował wzrost do blisko 100mA. Po uruchomieniu strumieniowania obrazu w porywach przekraczał 400mA z zasilania 5V. Framerate też mocno się wahała, od około 50kl/s przy najniższej rozdzielczości(160x120px QQVGA) do około 5-6kl/s dla najwyższej (1600x1200px UXGA). Sam moduł ESP32 dość znacząco się nagrzewa po kilkunastu minutach pracy i może wymagać chłodzenia (moduł kamery a jednocześnie przetwornik CMOS na pewno).
W kolejnej części spróbuję pokazać jak wykonać fotopułapkę (zapis na kartę SD oraz usypianie modułu) a także kilka innych rzeczy.
Ciąg dalszy nastąpi...
Nasz zakupiony zestaw (moduł+kamera) jest fabrycznie zapakowany w torebkę antystatyczną a sama kamera jest luzem (nie podłączona);
Na powyższym zdjęciu widać również gniazdo karty microSD które możemy wykorzystać w razie potrzeby. Wymiary modułu to ~40x28mm i około 8mm grubości (bez kamery i złącz szpilkowych). Po drugiej stronie mamy "serce" modułu czyli ESP32 (u mnie jest to dokładnie taka wersja jak na fotografii czyli ESP32-S-CAM);
A po "wpięciu" kamery w złącze ZIF wygląda tak;
Kamera użyta przez producenta to OV2640 v2 której producentem jest firma OmniVision specjalizująca się (nie tylko) w przetwornikach obrazu CMOS. Poniżej najważniejsze parametry (za DS);
Schemat blokowy kamery przedstawiam poniżej;
Na temat dokładnego typu SoC'a użytego w module nie udało mi się znaleźć żadnych informacji a należy przypomnieć że ESP32 występuje w kilku trochę się różniących wariantach. Wszystko wskazuje na ESP32S i według opisu sprzedawcy;
Kłóci się to trochę z danymi producenta (Ai-Thinker) który podaje iż jest to dwurdzeniowy SoC o maksymalnej częstotliwości pracy 240MHz
Oprócz trzech stabilizatorów napięcia (3,3V, 2,8V i 1,2V) widzimy dodatkową pamięć RAM (PSRAM) IPS6404LSQ zapewniającą dodatkowe 8 megabajtów na obróbkę obrazu oraz diodę LED pełniącą rolę lampy błyskowej
Pewnego wyjaśnienia wymaga zasilanie modułu oraz funkcje rezystorów R1 i R2, są to w zasadzie zworki (a raczej jedna), przy zasilaniu modułu z 5V potrzebne dla ESP32 napięcie uzyskujemy na wyjściu stabilizatora U2 (AMS1117 3,3) i odpowiednio przelutowując zworkę uzyskujemy na pinie P_OUT napięcie 3,3 lub 5V. Należy jednak pamiętać że logika GPIO ESP to 3,3V i nie jest 5V "tolerant". Poniżej założona fabrycznie zworka dla 3,3V (R1);
Jak zauważyliście moduł nie posiada żadnego złącza do programowania, tu niestety podobnie jak przy ESP8285 i ESP8266 trzeba się zaopatrzyć w jakikolwiek konwerter USB<->UART pracujący z logiką 3,3V. Lecz zanim przejdziemy do spraw technicznych musimy zaopatrzyć się i skonfigurować środowisko programistyczne, tu pokażę na przykładzie Arduino IDE jak je skonfigurować i uruchomić ESP32-CAM.
Uruchamiamy Arduino IDE i klikamy "Plik" i z rozwiniętej listy "Preferencje";
W kolejnym oknie w polu "Dodatkowe adresy URL dla menadżera płytek" wpisujemy; https://dl.espressif.com/dl/package_esp32_index.json , jeśli mamy już dopisane inne definicje to rozdzielamy je przecinkiem;
Po kilku chwilach jak IDE pobierze sobie definicje płytek wchodzimy w Narzędzia->Plytka->Menedżer płytek;
I wpisujemy w górne okno ESP32;
Klikamy zainstaluj i po kilku minutach pokazują nam się w menedżerze płytek nowe możliwości;
Przewijamy listę płytek w dół i odszukujemy oraz zaznaczamy "AI Thinker ESP32-CAM";
Już prawie jesteśmy gotowi do pracy z modułem
Zworka GPIO0-GND potrzebna jest tylko do programowania (ESP32 wchodzi w tryb flashowania) i po zaprogramowaniu należy ją usunąć.
Skoro już mamy wszystko podłączone to możemy spróbować z pierwszym oprogramowaniem, to jest bardzo duży plus dla Arduino IDE gdyż są odpowiednie przykłady. Zatem wybierzmy jeden z nich;
Oczywiście aby przykład zadziałał musimy go lekko zmodyfikować, tj. podać nazwę i hasło naszej sieci WiFi oraz wybrać dokładny rodzaj modułu;
Kompilujemy nasz sketch i wgrywamy do ESP32;
MAC oczywiście zamazałem
Odłączamy konwerter z portu USB i zdejmujemy zworkę łączącą GPIO0 i GND, podłączamy ponownie do USB i uruchamiamy Monitor portu szeregowego. Po naciśnięciu przycisku reset na module powinniśmy dostać po UART'cie informację o połączeniu z siecią oraz nr IP modułu;
Skoro znamy już adres IP naszego modułu zatem wpiszmy go w adres przeglądarki;
Ukaże nam się strona naszego WebCam serwera z elementami kontrolnymi, klikając dolny przycisk "Start Stream" otrzymujemy obraz"live" z naszego modułu;
Po kliknięciu równocześnie na port UART są wysyłane informacje na temat ilości klatek/s itp;
Oczywiście WebSerwer pozwala na interaktywną zmianę ustawień, np. rozdzielczości;
Efektów;
Czy też dobranie warunków oświetlenia (balansu bieli z ang. White Balance);
Do tego oczywiście standardowo jasność, nasycenie barw, kontrast etc. Przy okazji programowania wyszedł na jaw typ układu a jest to ESP32-DOWDQ6 co daje dwa rdzenie o Fmax 240MHz. Pobór prądu mocno mnie zaskoczył, po włączeniu zasilania było to około 60mA a po nawiązaniu połączenia WiFi następował wzrost do blisko 100mA. Po uruchomieniu strumieniowania obrazu w porywach przekraczał 400mA z zasilania 5V. Framerate też mocno się wahała, od około 50kl/s przy najniższej rozdzielczości(160x120px QQVGA) do około 5-6kl/s dla najwyższej (1600x1200px UXGA). Sam moduł ESP32 dość znacząco się nagrzewa po kilkunastu minutach pracy i może wymagać chłodzenia (moduł kamery a jednocześnie przetwornik CMOS na pewno).
W kolejnej części spróbuję pokazać jak wykonać fotopułapkę (zapis na kartę SD oraz usypianie modułu) a także kilka innych rzeczy.
Ciąg dalszy nastąpi...
Fajne? Ranking DIY

staram się. Taki pomysł jeszcze mi przychodzi do głowy aby wykorzystać moduł do zdjęć astro-foto, co prawda matryca niewielka i wymagałoby to trochę prac z mechanicznym dopasowaniem sensownego obiektywu ale dostęp bezpośrednio do matrycy daje do myślenia.