ESP32-CAM to kompaktowy moduł z mikrokontrolerem ESP32, kamerą OV2640, gniazdem microSD oraz łącznością Wi‑Fi i Bluetooth, idealny do monitoringu, robotyki i IoT. W tym przewodniku krok po kroku poznasz instalację, programowanie i zaawansowane użycie kamery w Arduino IDE – z naciskiem na praktyczne rozwiązania.
Wstęp do modułu ESP32-CAM
ESP32-CAM łączy niską cenę z dużą funkcjonalnością – oferuje kamerę do 2 MP, zapisy na microSD i bezprzewodową transmisję danych. W robotyce sprawdzi się jako kamera bezpieczeństwa, niania elektroniczna czy oko autonomicznego robota do detekcji obiektów. Moduł nie ma wbudowanego konwertera USB–UART, dlatego do programowania potrzebny jest zewnętrzny programator, np. FT232RL lub CH340.
Kluczowe cechy
Poniżej najważniejsze parametry i interfejsy modułu:
- procesor – dual‑core Xtensa LX6 @ 240 MHz;
- kamera – OV2640 (do UXGA, JPEG);
- pamięć – 4 MB PSRAM + slot na kartę microSD;
- łączność – Wi‑Fi 802.11 b/g/n oraz BLE 4.2;
- gpio – linie do sterowania silnikami, czujnikami i serwami w robotach.
Wymagane narzędzia i podzespoły
Przygotuj poniższy zestaw, aby szybko rozpocząć pracę:
- moduł ESP32‑CAM – najlepiej wersja AI Thinker;
- programator USB–UART – FT232RL (zworka 5 V) lub dedykowany z CH340;
- przewody jumper – żeńskie–żeńskie do połączeń;
- karta microSD – do zapisu zdjęć/klatek;
- komputer z Arduino IDE – wersja 1.8+ lub 2.x;
- zasilanie 5 V / 1 A – nie używaj 3.3 V z USB bez konwertera buck.
Uwaga: zainstaluj sterowniki CH340/FT232 (pobierz ze stron producentów), aby programator był rozpoznawany przez system.
Podłączenie sprzętowe do programowania
Do wejścia w tryb programowania ustaw GPIO0 = GND. Dla FT232RL (zworka na 5 V) zastosuj poniższe połączenia:
| Pin ESP32-CAM | Pin FT232RL |
|---|---|
| GND | GND |
| 5V | VCC (5V) |
| U0R (GPIO3) | TX |
| U0T (GPIO1) | RX |
| GPIO0 | GND (tylko podczas flashowania) |
Dla dedykowanego programatora CH340: umieść ESP32‑CAM w gnieździe i podłącz przez USB. Po wgraniu oprogramowania odłącz GPIO0 od GND, podłącz zasilanie 5 V i zresetuj moduł.
Wskazówka dla robotyki: po zaprogramowaniu wykorzystaj linie GPIO12/14 do sterowania mostkiem H (np. L298N) albo do czujnika ultradźwiękowego HC‑SR04 (pamiętaj o dzielniku napięcia na linii ECHO).
Konfiguracja Arduino IDE
- Otwórz Plik > Preferencje i dodaj URL:
https://dl.espressif.com/dl/package_esp32_index.jsonlubhttps://espressif.github.io/arduino-esp32/package_esp32_index.json. - Wejdź w Narzędzia > Płytka > Menedżer płytek, wyszukaj esp32 i zainstaluj esp32 by Espressif Systems (zalecane do 2.0.17).
- Wybierz płytkę: Narzędzia > Płytka > ESP32 Arduino > AI Thinker ESP32‑CAM.
- Ustaw właściwy port (Windows: COMx, Linux: /dev/ttyUSB0).
- Wybierz Partition Scheme: Huge APP (3MB No OTA) dla projektów z kamerą.
Pierwszy program – serwer streamingu wideo
W Arduino IDE otwórz przykład: Plik > Przykłady > ESP32 > Camera > CameraWebServer.
Modyfikacje kodu
W sekcji wyboru kamery odkomentuj: #define CAMERA_MODEL_AI_THINKER, a pozostałe definicje zakomentuj.
Wprowadź dane sieci Wi‑Fi: const char* ssid = "TwojaSiec"; const char* password = "TwojeHaslo";
Przykładowy fragment inicjalizacji (pełny kod znajdziesz w przykładzie Arduino):
// Wybór modelu kamery
#define CAMERA_MODEL_AI_THINKER
#include "esp_camera.h"
// ... dalsza część kodu z przykładu
Wgrywanie: ustaw GPIO0 = GND i kliknij Wgraj. Gdy w konsoli pojawi się CONNECTING..., szybko odłącz i podłącz zasilanie 5 V. Po wgraniu odłącz GPIO0, uruchom Serial Monitor (115200), zresetuj moduł – na konsoli zobaczysz przydzielony adres IP.
Otwórz adres IP w przeglądarce i wybierz Start Stream. Najważniejsze opcje interfejsu:
- DCW (Downsize EN) – włącza skalowanie obrazu dla płynniejszego streamu;
- LED intensity – reguluje jasność lampy LED; unikaj długiej pracy na max, by nie przegrzać modułu;
- Get still – wykonuje pojedyncze zdjęcie i wyświetla kadr.
Obsługa kamery OV2640 – funkcje i API
Poniżej bazowa konfiguracja przez esp_camera.h z użyciem kompresji JPEG:
camera_config_t config;
config.ledc_channel = LEDC_CHANNEL_0;
config.ledc_timer = LEDC_TIMER_0;
config.pin_d0 = Y2_GPIO_NUM; // piny zgodne z AI Thinker
config.xclk_freq_hz = 20000000;
config.pixel_format = PIXFORMAT_JPEG; // kompresja
esp_err_t err = esp_camera_init(&config); // inicjalizacja
Pobieranie klatki
Tak pobierzesz bufor JPEG i zwolnisz pamięć:
camera_fb_t * fb = esp_camera_fb_get();
if (!fb) {
// obsłuż błąd
}
size_t fb_len = fb->len; // rozmiar bufora JPEG
// zapisz na microSD lub wyślij po Wi‑Fi
esp_camera_fb_return(fb);
Efekty i korekcje obrazu
Użyj sterownika sensora do obróbki kadru, np. odwracanie w pionie: s->set_vflip(s, 1);. W robotyce proste progi binarne na jasności/kolorze pozwalają wykrywać krawędzie, linie lub ruch.
Zapis na microSD
Aby zapisać klatkę na karcie, zainicjalizuj kartę i wyślij bufor do pliku:
// inicjalizacja (przykładowo dla SPI2)
SD.begin(PIN_NUM_CS, SPI2_HOST);
// zapis bufora klatki fb do pliku
file.write((char*)fb->buf, fb->len);
Aplikacje w robotyce i elektronice
Poniżej praktyczne scenariusze użycia, które możesz wdrożyć od razu:
- domowy monitoring – streaming po Wi‑Fi oraz detekcja ruchu przez analizę zmian pikseli;
- robot z wizją – integracja z lekkimi modelami ML (np. TensorFlow Lite Micro) do rozpoznawania obiektów;
- niania elektroniczna – powiadomienia push przez MQTT po wykryciu dźwięku/ruchu;
- oświetlenie i serwa – sterowanie GPIO i wbudowaną lampą LED na GPIO4 jako doświetleniem sceny.
Tabela porównawcza rozdzielczości OV2640
Szacunkowe rozmiary plików JPEG w zależności od rozdzielczości:
| Rozdzielczość | Szerokość × wysokość | Rozmiar JPEG (przybliżony) |
|---|---|---|
| UXGA | 1600×1200 | 100–300 KB |
| SXGA | 1280×1024 | 80–250 KB |
| VGA | 640×480 | 20–60 KB |
| QVGA | 320×240 | 5–20 KB |
Rozwiązywanie problemów
Najczęstsze kłopoty i szybkie sposoby ich usunięcia:
- błąd „Failed to connect” – sprawdź zwarcie GPIO0–GND, zworkę 5 V i prędkość 115200;
- brak obrazu – upewnij się, że wybrano CAMERA_MODEL_AI_THINKER i że moduł jest połączony z Wi‑Fi 2.4 GHz;
- przegrzewanie – obniż LED intensity, rozważ mały radiator lub krótszy czas świecenia;
- brak logów na Serial – po flashowaniu odłącz GPIO0 od GND i zresetuj moduł;
- Wi‑Fi nie łączy – używaj pasma 2.4 GHz, sprawdź SSID/hasło (bez zbędnych spacji i znaków specjalnych).
Aktualizacje OTA
Aby wgrywać firmware bezprzewodowo, skorzystaj z przykładowych szkiców OTA (np. z WiFiManager) i wybierz Huge APP, jeśli projekt wymaga dużej pamięci dla kamery.
Zaawansowane projekty i rozszerzenia
Gdy opanujesz podstawy, rozbuduj projekt o poniższe elementy:
- integracja z Home Assistant/MQTT – publikacja klatek/zdarzeń na brokerze i automatyzacje;
- AI na brzegu – biblioteka ESP‑DL do inferencji ML (np. detekcja twarzy, rozpoznawanie sceny);
- robot mobilny – sterowanie podwoziem z poziomu aplikacji (np. Blynk) + streaming wideo;
- sieć kamer – komunikacja ESP‑NOW w układzie master–slave do wielopunktowego monitoringu.
ESP32‑CAM otwiera drogę do tanich i potężnych rozwiązań w robotyce oraz IoT – łącz wizję maszynową z komunikacją bezprzewodową i buduj własne, inteligentne systemy.