# Aparat DIY na ESP32-CAM

Miniaturorwy aparat oparty na module AI Thinker ESP32-CAM. Po naciśnięciu przycisku
urządzenie wykonuje zdjęcie z lampą, zapisuje JPEG na karcie microSD i udostępnia
najnowsze zdjęcia w galerii działającej w lokalnej sieci Wi-Fi.

## Funkcje

- zdjęcia JPEG do 1600×1200,
- trzy profile jakości obrazu,
- automatyczne numerowanie plików `photo_N.jpg`,
- bezpieczny zapis przez plik tymczasowy `.tmp`,
- galeria WWW z podglądem i pobieraniem 200 najnowszych zdjęć,
- obsługa przycisku przez FreeRTOS,
- timeout kamery i automatyczne wyłączenie lampy,
- ponawianie inicjalizacji oraz sygnalizacja błędów lampą.

## Podłączenie

Projekt używa pinów modułu AI Thinker ESP32-CAM:

- przycisk: między GPIO 13 a GND,
- lampa: wbudowana dioda na GPIO 4,
- karta microSD: tryb SD_MMC 1-bit.

Moduł należy zasilać stabilnym napięciem 5 V. Piny GPIO pracują z logiką 3,3 V
i nie tolerują napięcia 5 V.

## Konfiguracja

Wybór jakości znajduje się w `src/esp32cam.h`:

```cpp
#define PHOTO_QUALITY PHOTO_QUALITY_HIGH
```

Dostępne profile:

- `PHOTO_QUALITY_LOW` — 640×480,
- `PHOTO_QUALITY_MEDIUM` — 800×600,
- `PHOTO_QUALITY_HIGH` — 1600×1200.

Logowanie do Serial Monitora można przełączać w `src/logging.h`:

```cpp
#define VERBOSE_LOGGING 1 // 1 = włączone, 0 = wyłączone
```

Aby uruchomić galerię, skopiuj `src/wifi_credentials.example.h` jako
`src/wifi_credentials.h` i wpisz nazwę oraz hasło swojej sieci Wi-Fi. Plik z
hasłem jest ignorowany przez Git.

## Budowanie i wgrywanie

Projekt korzysta z PlatformIO:

```powershell
pio run
pio run -t upload
pio device monitor -b 115200
```

Podczas wgrywania przez konwerter USB-UART połącz GPIO 0 z GND i zresetuj
moduł. Po zakończeniu odłącz GPIO 0 od GND i ponownie wykonaj reset.

Po uruchomieniu adres galerii zostanie wypisany w Serial Monitorze, zwykle jako
`http://esp32-camera.local/` oraz adres IP. Galeria jest przeznaczona wyłącznie
do użycia w zaufanej sieci lokalnej.

## Sygnalizacja lampą

- 2 szybkie mignięcia — urządzenie jest gotowe,
- 3 szybkie mignięcia — błąd inicjalizacji, wykonania zdjęcia lub zapisu.

Po błędzie startowym urządzenie podejmuje trzy próby inicjalizacji, a następnie
sygnalizuje problem i automatycznie się restartuje.
