Klon M5Stack Esp32 cam esphome

Kupiłem kamerkę Mikrobot | ESP32 CAM ESP-32S od M5Stack USB-C WiFi z kamerą OV2640 + złącze Grove

Próbuję podłączyć przez esphome ale mi się nie udaje. ciągle dostaję komunikaty w logach:

[11:07:24][E][esp32_camera:123]:   Setup Failed: ESP_FAIL
[11:07:24][E][component:082]:   Component esp32_camera is marked FAILED

Obecna konfiguracja:

esphome:
  name: esp32cam-1
  friendly_name: esp32cam-1

esp32:
  board: esp32dev
  framework:
    type: arduino

# Enable logging
logger:

# Enable Home Assistant API
api:
  encryption:
    key: "xxxxxxxxxxxxxxxx"

ota:
  - platform: esphome
    password: "xxxxxxxxxxxxxxxxxx"

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Esp32Cam-1 Fallback Hotspot"
    password: "xxxxxxxxx"

captive_portal:
esp32_camera:
  external_clock:
    pin: GPIO27
    frequency: 20MHz
  i2c_pins:
    sda: GPIO25
    scl: GPIO23
  data_pins: [GPIO17, GPIO35, GPIO34, GPIO5, GPIO39, GPIO18, GPIO36, GPIO19]
  vsync_pin: GPIO22
  href_pin: GPIO26
  pixel_clock_pin: GPIO21

  # Image settings
  name: My Camera
esp32_camera_web_server:
  - port: 8080
    mode: stream
  - port: 8081
    mode: snapshot    

udało mi się ustalić właściwy pinout (pod tasmota webcam działa stream):


tylko w tasmota można wpisać 2 piny więcej bo są i2c sda/scl i są CAM_SIOD i CAM_SIOC
W konfiguracji wpisywałem zarówno piny scl: GPIO4 i SDA: GPIO13 jak i taj jak teraz (zgodnie z dokumentacją esphome która mówi że SIOD to SDA a SIOC to SCL ale bez zmian. Nie widzę możliwości wpisania na raz tych 4 pinów. A może robię coś innego źle?

Musisz mieć płytkę deweloperską z PSRAM.
Komponent kamery jest bardzo “RAMożerny”.
edit
M5Stack ma PSRAM, a komponent kamery ma go w zależnościach… (więc nie musi być jawnie w YAMLu)
więc pozostaje poszukać błędu.

Zgaduję, że ta przykładowa konfiguracja (z dokumentacji) powinna pasować do sprzętu

# Example configuration entry
esp32_camera:
  external_clock:
    pin: GPIO27
    frequency: 20MHz
  i2c_pins:
    sda: GPIO25
    scl: GPIO23
  data_pins: [GPIO17, GPIO35, GPIO34, GPIO5, GPIO39, GPIO18, GPIO36, GPIO19]
  vsync_pin: GPIO22
  href_pin: GPIO26
  pixel_clock_pin: GPIO21
  reset_pin: GPIO15

  # Image settings
  name: My Camera
  # ...

widzisz czego brakuje? bo ja widzę…

esphome:
  name: esp32cam-1
  friendly_name: esp32cam-1

esp32:
  board: esp32dev
  framework:
    type: arduino

# Enable logging
logger:

# Enable Home Assistant API
api:
  encryption:
    key: "xxxxxxxxxxxxxxxxx"

ota:
  - platform: esphome
    password: "xxxxxxxxxxxxxxxxxxxxxx"

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Esp32Cam-1 Fallback Hotspot"
    password: "xxxxxxxxxx"

captive_portal:
esp32_camera:
  external_clock:
    pin: GPIO27
    frequency: 20MHz
  i2c_pins:
    sda: GPIO25
    scl: GPIO23
  data_pins: [GPIO17, GPIO35, GPIO34, GPIO5, GPIO39, GPIO18, GPIO36, GPIO19]
  vsync_pin: GPIO22
  href_pin: GPIO26
  pixel_clock_pin: GPIO21
  reset_pin: GPIO15

  # Image settings
  name: My Camera
esp32_camera_web_server:
  - port: 8080
    mode: stream
  - port: 8081
    mode: snapshot    

switch:
  - platform: gpio
    name: "LED"
    pin:
      number: GPIO16

i2c:
  sda: GPIO13
  scl: GPIO4
  scan: true

Nic to nie zmienia w ogóle:

[14:39:54][C][logger:179]:   Initial Level: DEBUG
[14:39:54][C][logger:181]:   Log Baud Rate: 115200
[14:39:54][C][logger:182]:   Hardware UART: UART0
[14:39:54][C][i2c.arduino:071]: I2C Bus:
[14:39:54][C][i2c.arduino:072]:   SDA Pin: GPIO13
[14:39:54][C][i2c.arduino:073]:   SCL Pin: GPIO4
[14:39:54][C][i2c.arduino:074]:   Frequency: 50000 Hz
[14:39:54][C][i2c.arduino:086]:   Recovery: bus successfully recovered
[14:39:54][I][i2c.arduino:096]: Results from i2c bus scan:
[14:39:54][I][i2c.arduino:102]: Found i2c device at address 0x75
[14:39:54][C][switch.gpio:068]: GPIO Switch 'LED'
[14:39:54][C][switch.gpio:091]:   Restore Mode: always OFF
[14:39:54][C][switch.gpio:031]:   Pin: GPIO16
[14:39:54][C][esp32_camera:048]: ESP32 Camera:
[14:39:54][C][esp32_camera:049]:   Name: My Camera
[14:39:54][C][esp32_camera:050]:   Internal: NO
[14:39:54][C][esp32_camera:052]:   Data Pins: D0:17 D1:35 D2:34 D3:5 D4:39 D5:18 D6:36 D7:19
[14:39:54][C][esp32_camera:053]:   VSYNC Pin: 22
[14:39:54][C][esp32_camera:054]:   HREF Pin: 26
[14:39:54][C][esp32_camera:055]:   Pixel Clock Pin: 21
[14:39:54][C][esp32_camera:056]:   External Clock: Pin:27 Frequency:20000000
[14:39:54][C][esp32_camera:060]:   I2C Pins: SDA:25 SCL:23
[14:39:54][C][esp32_camera:062]:   Reset Pin: 15
[14:39:54][C][esp32_camera:080]:   Resolution: 640x480 (VGA)
[14:39:54][E][esp32_camera:123]:   Setup Failed: ESP_FAIL
[14:39:54][E][component:082]:   Component esp32_camera is marked FAILED

Na identycznych ustawieniach Tasmota daje stream.

Nie mam tego sprzętu, nie zweryfikuję.

ale skoro komponent i2c

znajduje kamerę?? (0x75) na tym busie, to znaczy że masz inny sprzęt niż przykładowa konfiguracja

i w takim wypadku kamera NIE jest tu

więc EDIT TA KONFIGURACJA W KUBEŁ !!! jest na 100% ZŁA

esphome:
  name: esp32cam-1
  friendly_name: esp32cam-1

esp32:
  board: esp32dev
  framework:
    type: arduino

# Enable logging
logger:

# Enable Home Assistant API
api:
  encryption:
    key: "xxxxxxxxxxxxxxxxx"

ota:
  - platform: esphome
    password: "xxxxxxxxxxxxxxxxxxxxxx"

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Esp32Cam-1 Fallback Hotspot"
    password: "xxxxxxxxxx"

captive_portal:
esp32_camera:
  external_clock:
    pin: GPIO27
    frequency: 20MHz
  i2c_pins:
    sda: GPIO13
    scl: GPIO4
  data_pins: [GPIO17, GPIO35, GPIO34, GPIO5, GPIO39, GPIO18, GPIO36, GPIO19]
  vsync_pin: GPIO22
  href_pin: GPIO26
  pixel_clock_pin: GPIO21
  reset_pin: GPIO15

  # Image settings
  name: My Camera
esp32_camera_web_server:
  - port: 8080
    mode: stream
  - port: 8081
    mode: snapshot    

switch:
  - platform: gpio
    name: "LED"
    pin:
      number: GPIO16

# tu wywaliłem dodatkową szynę I2C

oczywiście mogę się mylić, ale nie znam żadnych typowych sensorów które by miały adres 0x75
na jednej z większych list adresów I2C

też nic nie widzę “podejrzanego”, ale Ty masz w ręce ten sprzęt, to ustal czy masz oprócz kamery coś jeszcze na I2C

każdy przetwornik z mi znanych ma interfejs RCP na szynie I2C (więc bez tego nie miałbyś sterowania migawką, balansem kolorów, przysłoną itd.)

Próbowałem już też na tych ustawieniach (pisałem o tym w pierwszym poscie na samym końcu - nic to nie zmienia.
Te ustawienia w esphome po prostu nie działają. czy esphome inaczej numerurje gpio niż tasmota?

[15:10:15][C][esp32_camera:048]: ESP32 Camera:
[15:10:15][C][esp32_camera:049]:   Name: My Camera
[15:10:15][C][esp32_camera:050]:   Internal: NO
[15:10:15][C][esp32_camera:052]:   Data Pins: D0:17 D1:35 D2:34 D3:5 D4:39 D5:18 D6:36 D7:19
[15:10:15][C][esp32_camera:053]:   VSYNC Pin: 22
[15:10:15][C][esp32_camera:054]:   HREF Pin: 26
[15:10:15][C][esp32_camera:055]:   Pixel Clock Pin: 21
[15:10:15][C][esp32_camera:056]:   External Clock: Pin:27 Frequency:20000000
[15:10:15][C][esp32_camera:060]:   I2C Pins: SDA:13 SCL:4
[15:10:15][C][esp32_camera:062]:   Reset Pin: 15
[15:10:15][C][esp32_camera:080]:   Resolution: 640x480 (VGA)
[15:10:15][E][esp32_camera:123]:   Setup Failed: ESP_ERR_NOT_FOUND
[15:10:15][E][component:082]:   Component esp32_camera is marked FAILED

Gdy na tasmocie ustawiałem sda13/scl4 też nie działało. Tam wisi interfejs do czujników przez złącze grove - wszystko się mi zgadzało z m5-docs

I had a very similar issue with another i2c sensor (not a camera) recently.

Have you tried to disconnect the board from your computer (I am assuming that you are programming it that way), and connect it to a different power supply?

I kept reseting and restarting it as it was connected to the computer, but nothing was working as it was intended, but once I disconnect and connected to a different power supply, everything started to working as it supposed to be.

NIE

w pracy jestem i nie mam czasu się tym zająć normalnie, może to skutki uboczne ostatnich aktualizacji ESPHome, jeśli jesteś pewien GPIO to musi działać, o ile w samym ESPHome nie zostało coś zwalone, zajrzyj w issues jeśli coś jest schrzanione, to ludzie zgłaszają błędy jeśli coś im działało i przestało

nie podałeś linka do dokumentacji swojej płytki (m5stack ma całe stado różnych modeli) to nie mam jak sprawdzić tych GPIO

a masz cokolwiek do niego podłączone? przecież to Ty masz w ręce a nie ja, nie znam czujnika z takim adresem

That should be 23 and 25. 13 and 4 are for the connector on the side, where you can connect other i2c sensors.

Wiem, ale nie wiem czy i co tam jest podłączone (a mając schemat bym to sprawdził).
dobra znalazłem, niestety to nie kamera EDIT schemat dotyczy oryginalnego m5stack, klon jest zbudowany nieco inaczej, ale ma ten sam PMIC

ESP Cam can't share I2C bus with other devices · Issue #5094 · esphome/issues · GitHub.

możesz spróbować innego frameworka (nie wiem czy to cokolwiek da, ale spróbować można, flaszować musisz kabelkiem - nie można wsadu przy zmianie frameworka wrzucać jako OTA!)

esp32:
  board: esp32dev
  framework:
    type: esp-idf

eksperyment numer 2 to wywalenie komponentu kamery, zdefiniowane tylko jednego zwykłego komponentu i2c ze skanowaniem przy starcie i na GPIO tego busa, którego używa kamera (w sumie ciekawe czy ona się w ogóle odzywa w odpowiedzi na skanowanie, bo gdzieś mi mignęło, że przetwornik ma bodajże adres 0x30)

By the way there is a warning for the M5Stack cameras in the ESPHOME documentation:

M5Stack Camera:

Warning
This camera board has insufficient cooling and will overheat over time, ESPHome does only activate the camera when Home Assistant requests an image, but the camera unit can still heat up considerably for some boards.

If the camera is not recognized after a reboot and the unit feels warm, try waiting for it to cool down and check again - if that still doesn’t work try enabling the test pattern.

Dziękuję za próbę pomocy. Niestety żadne ze wskazówek nie przyniosły dotąd pozytywnego rezultatu.
Na interfejsie i2c GPIO4/GPIO13 nie mam niczego podłączonego. Zadeklarowałem go w esphome tylko tak dla sprawdzenia czy jest wykrywany.
Zgodnie z sugestią zmieniłem na chwilę w konfiguracji i2c_pins na GPIO 23/25 ale nic nie zostało wykryte. Jeśli chodzi o link do dokumentacji to sprzedawca podał tylko ten który już podałem wcześniej: m5-docs Innego nie mam. Wizualnie te płytki się różnią, jednak wpisałem te piny podane w tabelce do tasmoty i tam zadziałało bez problemu.
Tak jak pisał @GSzabados użyłem zasilania o dobrej wydajności prądowej, poczekałem aż moduł ostygnie, użyłem test-pattern - bez efektu.
Zmiana frameworka również nie przyniosła niczego odkrywczego. Błędy w logach są takie same jak na framework “arduino”

I would try to initiate the ESPHome again, clear the chip, and flash again the code.
And just to confirm, that camera is plugged in correctly. Right? Nothing is pulling or pushing the ribbon cable or the camera.

I used a 3D printed housing recently, which was pushing force to the camera itself and rendered it useless, not working condition. Once the case was removed everything was working again as normal. (That was with ai-on-the-edge.)

Tak kontrolnie zapytam, robiłeś przed zmianą frameworka „Clean Build Files”?

To nie prawda, bo masz… chyba, że sprzedawca od którego kupiłeś płytkę jest oszustem i sprzedał Ci coś innego niż jest w dokumentacji z linka w ofercie (moim zdaniem nie ma tu żadnego oszustwa tylko nie zdajesz sobie sprawy z tego co masz na tej płytce - pusta magistrala się nie odzywa do MCU, niestety w/g opisu na schemacie na tej płytce kamera i BMS = BAT PMIC Injonic IP5306 jest na tej samej magistrali I2C co kamera, czego nie przewidziano w komponencie kamery w ESPHome skreślenie, bo podróbka jest inaczej skonstruowana od oryginału (i jeśli chodzi o kamerę to nawet lepiej, bo na tej magistrali I2C, na której jest kamera, nie ma niczego innego)

aby było weselej dokumentacja BMS wspomina o I2C ale nie ma podanego schematu połączeń
http://www.injoinic.com/wwwroot/uploads/files/20200221/0405f23c247a34d3990ae100c8b20a27.pdf

niestety nie robisz tego o co proszę więc nie ma szans na diagnostykę, przetwornik kamery musi odpowiadać na jakiejś magistrali I2C bo komunikacja z nim w ten sposób jest koniecznością by mieć kontakt RCP (a interfejs równoległy MIPI nie służy do sterowania, tylko do wysyłania streamu z kamery)

Szczerze mówiąc szkoda mi czasu na dochodzenie co autor schematu miał na myśli (mając w ręce łatwiej prześledzić przebieg ścieżek niż przekopywać pół internetu by się dowiedzieć jak jest skonstruowana płytka, którą ktoś inny ma w ręce i tego nie ogarnia) moim skromnym zdaniem mimo upływu lat nikt się na poważnie nie wziął za ulepszenie komponentu kamery w ESPHome i to jest przyczyna dla której nie uruchomisz kamery w najbliższym czasie w ten sposób, powinieneś się wziąć do roboty i naskrobać issue (no ja nie znalazłem, ale może jednak istnieje, Ty masz większą motywację to szukaj) jeśli nie ma issue, to dla programistów problem nie istnieje, podlinkowałem to issue które moim zdaniem tłumaczy sytuację, ale jak widać nie ma tam żadnego ruchu. (a tymczasem w NabuCasa obecnie kierunkiem rozwoju “na świeczniku” jest asystent głosowy, a nie obsługa kamer).

Skoro działa w Tasmocie to używaj Tasmoty.

A zgłaszając issue w ESPHome podaj tyle użytecznych informacji ile się da (linki, schematy, co już wiesz itd.), to że działa w Tasmocie (konkretna wersja też jest wskazówką) da możliwość zajrzenia w kod Tasmoty komuś kto się ewentualnie tym by zajął.


edit Czułem w kościach że I2C do BMS jest opięte na jego pinach dedykowanych do podłączenia kontrolek LED, ale nie znalazłem tego u producenta układu…

1 polubienie

Dzięki za cierpliwość. Niestety nie jestem inżynierem a ni ni posiadam wystarczającej wiedzy aby zrozumieć datasheety i schematy techniczne. Nie potrafię też prześledzić ścieżek samodzielnie na tej płytce (może jakbym spróbował mulitmetrem, ale ręce mi chyba za bardzo drżą przy tak małych wyprowadzeniach). Zrobiłem kilka zdjęć jakby kroś chciał bliżej zobaczyć to cudo. Ja raczej zrezygnuje z dalszego drążenia tego tematu.

Z tą tasmota to jest tak, że uzyskuję stream przy pomocy “tasmota webcam” ale to oprogramowanie daje tylko stream po http i tyle. Natomiast zwykła tasmota integruje się przez mqtt, matter itp ale nie obługuje kamer bo nie można tam ustawić pinów gpio na odpowiednie funkcje typu vsync, PCLK itp DATA PIN1-8

Taka uwaga odnośnie zdjęć - trzeba je robić tak aby było widać napisy elementach (w szczególności na układach scalonych).
Niestety te które zrobiłeś się na wiele nie przydadzą - nie widać kluczowych elementów (domyślam się który to BMS, ale nawet pewności nie mam, na płytce jest też w/g schematu wlutowany też żyroskop z akcelerometrem MPU6050, ale jest podłączony do kolejnej magistrali I2C).
Technologia wytwarzania tych napisów powoduje że ich widoczność jest często zależna od kąta patrzenia i kąta padania światła (więc warto porobić zdjęcia również nieco pod innym kątem niż prostopadle do płytki, poeksperymentować z włączaniem wbudowanego LEDa w aparacie itd.).


Czytając dokumentację można sobie przygotować jakieś testowe konfiguracje (np. definiując TYLKO kilka magistral I2C na GPIO podejrzanych o takie wykorzystanie lub wręcz uruchamiając po jednej magistrali i skanować urządzenia) wtedy próby śledzenia ścieżek nie będą niezbędne.

Można też szczerze usiąść do wyszukiwania informacji w sieci (ja nie mam na to czasu, a stawiam, że niejeden entuzjasta DIY miał dokładnie takie same płytki prototypowe w ręce i pewnie można znaleźć sporo więcej informacji w innych miejscach niż na oficjalnej stronie producenta płytki).


Z Tasmotą to jest tak - początkowo to było oprogramowanie “do wszystkiego” potem się okazało, że to niemożliwe, bo “wszystko na raz” znacznie przekracza możliwości nawet tak rozbudowanego MCU jak ESP32.

W szczególności obsługa samej kamery to w zasadzie już jazda po bandzie dla sprzętu pokroju ESP32.
Jeśli działa stream (i dzieje się to stabilnie) w dedykowanym buildzie dla kamer, to powinieneś się już cieszyć właśnie z tego.

Rozumiem, że liczyłeś na wyciśnięcie ostatnich soków z tej płytki pod ESPHome, ale tymczasem to niemożliwe z 2 powodów

  • niedorobionej obsługi kamer w ESPHome
  • oraz prawdopodobnie nietypowej konfiguracji sprzętowej samej płytki

Kolejny eksperyment który mógłbym zaproponować to cofnięcie ESPHome do wersji z listopada zeszłego roku (skoro jest przykładowa dedykowana właśnie dla twojej płytki konfiguracja kamery w dokumentacji, to zakładam, że w przeszłości to musiało działać, a ostatnie przewrotowe zmiany w ESPHome były w grudniu).

Sugerowałem wyżej wywalenie pozostałych magistral I2C z konfiguracji ESPHome czyli to w kubeł

i2c:
  sda: GPIO13
  scl: GPIO4
  scan: true

(jest to potencjalne źródło konflików, ale nie wiem czy to zrobiłeś)
jeśli używasz komponent kamery,

dodatkowo sugeruję wywalenie komponentu webserwera

esp32_camera_web_server:
  - port: 8080
    mode: stream
  - port: 8081
    mode: snapshot   

zasadniczo uruchamianie czegokolwiek z czym są problemy polega na uruchomieniu “najmniejszego klocka”, czyli w tym wypadku samego komponentu kamery zamiast sobie zaciemniać obraz uruchamianiem równocześnie 100 innych rzeczy, jeśli znajdę czas (nie obiecuję!) wyciągnę z okolic dna szuflady ZUPEŁNIE inną płytkę (która nie ma w ogóle innych urządzeń I2C wlutowanych na sobie) i sprawdzę czy komponent kamery w aktualnej wersji ESPHome w ogóle działa…

na 100% TA konfiguracja jest DOBRA (tzn. zgadza się 1:1 z konfiguracją Tasmoty, którą podałeś jako działającą)

esp32_camera:
  external_clock:
    pin: GPIO27
    frequency: 20MHz
  i2c_pins:
    sda: GPIO25
    scl: GPIO23
  data_pins: [GPIO17, GPIO35, GPIO34, GPIO5, GPIO39, GPIO18, GPIO36, GPIO19]
  vsync_pin: GPIO22
  href_pin: GPIO26
  pixel_clock_pin: GPIO21
  reset_pin: GPIO15

można co najwyżej wywalić wszystkie inne komponenty z YAMLa i tu poekserymentować dlaczego to nie działa jak należy
testowo można zmniejszyć częstotliwość

    frequency: 10MHz

oraz inne parametry które nie są jawnie wylistowane a mogą mieć wpływ na zasoby konieczne do pracy np. zmniejszyć rozdzielczość

  resolution: 640x480 #albo jeszcze mniejsza zgodnie z dokumentacją

upewnić się że zasilasz z solidnego zasilacza

1 polubienie

Nie jest prawdą, Tasmota w swej specyfice wymaga zapoznania się z dokumentacją komend. W tabeli jest cały dział dla ustawień kamery.

Jedna z nich uruchamia serwer RTSP:
WcRtsp (Requires defined ENABLE_RTSPSERVER)
1 = start RTSP server (forces restart) , 0 = stop server

Jest też w repozytorium binarek lista, gdzie kompilacje są pod dedykowane funkcjonalności - Tasmota ESP32 Binaries

Możesz też użyć przyjaznego projektu TasmoCompiler i zbudować własny plik ze wszystkimi specyficznymi ustawieniami.

Mało aktualny temat, ale daje pogląd na możliwości:

2 polubienia

Let’s be honest, it is quite clear that the device is NOT an M5Stack board.

Maybe try to follow the instructions on this Aliexpress advert.

But looking at the table and your settings, it is all matching.

i2c_pins for the camera are definitely 25 and 23, the other ones are connected to an IP5306.

Otherwise, what are you planning to use the camera for? Maybe better to use a different project than ESPHome or Tasmota.

2 polubienia

To tłumaczy dlaczego nie mogłem znaleźć tej konstrukcji w dokumentacji firmy M5stack…

Schemacik pokazuje jak jest podpięty BMS

Wniosek jest na teraz taki, że konstrukcja jest oszukana w porównaniu do oryginału (brak żyroskopu), ale jest coś, co jest pocieszające - to MUSI działać (BMS jest podpięty w inne piny MCU niż kamera, oczywiście jeśli w ESPHome nic nie jest obecnie skopane z komponentem kamery).

Moduł na 100% wymaga solidnego zasilania 5V.

Jeszcze jedno co bym zrobił - odłączył kamerę ze złącza i jeszcze raz podłączył solidnie, oczywiście bez włączonego zasilania!
To jest złącze ZIF trzeba otworzyć blokadę, ten czarny element jest ruchomy.

Jak dla mnie dziwne, że Tasmota pracuje poprawnie…