ESP CAM problem brak obrazu

Teraz to nie ma znaczenia, jeśli np. nadpisałeś w konfiguracji jakieś GPIO, które jest wykorzystywane przez PSRAM to mogło nie działać, ale trudno teraz ocenić sytuację, to mógł być

  • błąd konfiguracyjny
  • problem z zasilaniem
  • tzw. zimny lut lub brak styku na złączu
    tak przy okazji - ta sama dioda nie może być na 2 różnych GPIO, to się kupy nie trzyma, by układ miała zwarcia między pinami

Dokompiluj sobie webserwer dla kamery, to ustalisz bezpośrednio czy stream jest płynny i w jakiej rozdzielczości (nie z poziomu integracji tylko bezpośrednio go obejrzysz z ESP)

Na płytce jest dodatkowy czerwony LED pod pinem 33 tylko odpala się do stanem niskim. A tak przy okazji jeśli chodzi o obraz to czy na dashboadr obraz powinien być płynny, do jeśli wejdę na kartę encji to odrazu staje się o wiele płynniejszy powiedzmy że skok ma okło 0.5s, na dashboard jest to 10s.

Tak jest przy standardowych ustawieniach.

Serwer dokompilowany, przy rozdzielczości 160x120 udało się osiągnąć 9.6 fps, przy rozdzielczości 800x600 4.2 fps, czasami te wartości spadają nawet do 1.4 fps, nic więcej nie mogę wycisnąć z modułu. Czy to jest maks możliwości tej płytki?

To ograniczenie zarówno przetwornika jak i samej budowy ESP32, oraz oczywiście sposobu obsługi - jest wykorzystywana wewnętrzna kompresja JPEG wewnątrz przetwornika, bo dysponujemy wolną szyną danych, więc nie jest przesyłany obraz RAW do dalszej obróbki programowej tylko to co przetwornik skompresuje, a w dodatku PSRAM jak sama nazwa wskazuje :stuck_out_tongue: jest czymś nieco oszukanym - to Pseudo-SRAM :stuck_out_tongue: (to taki półżart, bo kluczowym problemem jest szeregowy dostęp do tej pamięci - przypomnij sobie jak wyglądają moduły pamięci w pecetach czy dowolnych innych prawdziwych komputerach - mają dziesiątki czy wręcz setki wyprowadzeń, a PSRAM ma 8, w tym zasilanie).
Tyle teorii. OV5640 ma szybszy procek, bo ma przetwornik 5Mpix więc jest szansa na większy framerate przy niskich rozdzielczościach (ale uwaga, obsługa przez sterownik zależy od modelu modułu!).

Jak masz czas możesz poekerymentować (ja się nie wgryzałem, obecnie moje moduły espcam zalegają szufladę w oczekiwaniu na kolejny przypływ weny do wystrugania z nich czegoś fajnego), na OV260 podobno powinno się wycisnąć nawet 50fps przy niskich rozdzielczościach.
Do zmiany zegar z 20MHz na 10MHz (antyintuicyjne, ale zmniejszenie zegara podobno powoduje niedostępność niektórych trybów pracy przetwornika), możesz eksperymentować z rozdzielczością i stopniem kompresji (6 to minimalna kompresja najlepsza jakość, w pewnych sytuacjach może to być wartość 10, jeśli mniejsze są nieobsługiwane, 63 najgorszy obrazek, najmniej danych i od tego powinieneś zacząć, wartości pośrednie oczywiście są możliwe), oraz rozdzielczość - maksa fps można wycisnąć przy rozdzielczościach rzędu 320x240 lub 400x296, przy svga z pewnością będzie sporo mniej.
Jeśli chcesz przetestować to albo webserwer albo integracja w HA (łatwiej jest wykorzystać do testów stream z webserwera, więc trzeba zrezygnować wtedy z wykorzystania w HA).

Zadbaj też o doskonały sygnał WiFi.

To może inaczej, jaki moduł kamery odsłuży rozdzielczość FHD (1080x1920) w granicach 24 fps, czy to już muszą być jakieś dedykowane kamery.

To wtedy zapominasz o ESP32 i takich najtańszych przetwornikach.

TLDR - kup normalną kamerę, która spełnia takie wymagania, z g… bata nie ukręcisz :smiley:

OV2640 (to konstrukcja mniej więcej sprzed 15 lat, a nawet raczej starsza) jest sam z siebie w stanie wydusić nawet 60fps, ale w rozdzielczości CIF (i nie wiem czy w jpegu), swoją drogą ten przetwornik ma nieco ponad 1600x1200 (1632x1232), więc UXGA to jest maksymalna standardowa rozdzielczość z jaką może pracować i “full-HD” jest nieosiągalne (no bądźmy szczerzy - daje się uzyskać nieco “oszukane” full-HD z użyciem pewnego triku znanego i stosowanego w telewizji i przede wszystkim w kinie od dziesiątków lat - stosując soczewkę cylindryczną przed przetwornikiem, ale wtedy trzeba zająć się tym zniekształconym obrazkiem programowo, a w zabawkach nikt nie będzie się szarpał na specjalizowaną optykę - taniej jest wyprodukować przetwornik o wyższej rozdzielczości i korzystać tylko z jakiegoś fragmentu jego powierzchni).

Jakkolwiek trzeba mieć datasheet przed oczami (warto poczytać), niestety przy takiej rozdzielczości ESP32 może będzie w stanie wydusić z siebie może coś w okolicach 1fps góra kilka fps.
OV2640_04937_datasheet.zip (446,6 KB)

Jeśli chcesz jakieś DIY na starawych przetwornikach, to musisz mieć do obsługi kamery jakiś bardziej prawdziwy komputer, a nie próbować to opędzić mikrokontrolerem (jakiś SBC wystarczy, szczególnie, że będzie miał dedykowane złącza CSI - uwaga ze złączem ZIF w innym standardzie niż dla ESP, ale złącza w RPi stanowią standard sam w sobie - są 2 rozmiary - w zero jest mniejszy, w dużych RPi większy, inne SBC ze złączem CSI też mają ZIF zgodny z jednym z tych stosowanych w RPi, jeśli chodzi o niedrogą zabawę, to RPi zero 2W jest jakimś wyznacznikiem minimum na dziś - komuś pomagałem w odpaleniu projektu na uczelnię na bazie RPi3 i całkiem spasionej kamery CSI na IMX477 jakkolwiek nie pamiętam jakie parametry dało się z tego wycisnąć przy streamowaniu - ideą i tak był zapis lokalny, ale nie wiem czy na tanich przetwornikach można uzyskać takie parametry o jakich marzysz - po długich poszukiwaniach znalazłem jakieś pliki z dawnych eksperymentów z wykrywaniem ruchu i tam miałem obrazek 1440x960pix przy 8-10fps bodajże na OV5647 - ten przetwornik w specyfikacji spełnia wymagania “full-HD”@30fps, ale trzeba dysponować jeszcze mocą obliczeniową aby to obsłużyć, wyjąłem z szuflady RPi4 z taką kamerką i 25fps/30fps jest osiągalne dla HD720p = 1280x720 i kompresja do h264 zużywa połowę procka maliny, dla FullHD to już koło 10fps a powyżej to zupełna lipa, oczywiście można porzeźbić w kwestii kodeków, bo tu użyłem kompresji programowej, mając czas na zabawę prawdopodobnie można to zoptymalizować, mnie 720p zadowalało, bo ten przetwornik nie jest ósmym cudem świata, a optyka też nie jest wybitna).

Warto zauważyć, że HD1080p wymaga (przyjmując uproszczenie w postaci liniowej zależności od ilości makrobloków) 2,25 razy więcej mocy obliczeniowej do kompresji od HD720p więc procka (by) mi brakło, oczywiście z tego powodu jest redukowany klatkaż.

PS Ciekawostka OV2640 jest w stanie “wypluć” obrazek 30x40pix, ale tak niska rozdzielczość (i kilka innych zbliżonych) nie jest już obsługiwana w sterowniku dla ESP32.