ESP32 CAM webcam server RTSP

Wprowadzenie

ESP32 to tani i energooszczędny mikrokontroler opracowany przez Espressif. ESP32 jest ceniony za swoją niewielkie rozmiary, solidną konstrukcje, wszechstronności zastosowań, wbudowane Wi-Fi, Bluetooth no i za bardzo przystępną cenę :money_with_wings:

Jedna z płytek z ESP32 ma zintegrowany moduł kamery, zwany ESP32-cam, całość można kupić w Chinach za zaledwie kilka Amerykańskich dolarów.

Dzięki takim projektą jak Tamota/AIS-Tasmota można zbudować tanią alternatywę dla komercyjnych kamer bezprzewodowych przy użyciu oprogramowania typu open source, które można łatwo kontrolować za pośrednictwem protokołu HTTP lub MQTT i zintegrować z wielofunkcyjnym serwer automatyzacji działającym na bramce AIS dom.
Dzięki Tasmota i AIS :+1:

Jeżeli nie masz doświadczenia z ESP32 to warto zacząć od tego filmu:

Dlaczego wybrałem AIS-Tasmota?

AIS-Tasmota to 100% kodu Tasmota i kilka fajnych dodatków ułatwiających działanie urządzeń z bramką AIS dom.
To oprogramowanie to jest wg mnie solidna alternatywa dla komercyjnego oprogramowania w różnych urządzeniach z ESP. AIS team dobrze to wykombinował, żeby nie pisać swojego softu a skorzystać z tego, co jest napisane i działa - cwaniaczki :wink:

Dodatkowa motywacja w przypadku kamery to fakt, że AIS-Tasmota jest skompilowane z flagą ENABLE_RTSPSERVER bez tego nie działa serwer RTSP na kamerze.

Jak ja to robie?

To nie będzie opis krok po kroku dla tych co nie potrafią programować ESP32. Takich opisów w sieci jest sporo. Na tym forum użytkownik @Tomasz zrobił bardzo dobre opisy, od których można zacząć. Kierujcie się takmi obrazkami jak poniżej :wink:

Opiszę tu jak ja programuje ESP32 oprogramowaniem AIS-Tasmota.

Instalacja

  1. Kody pobieram z repozytorium AIS-Tasmota taką komendą:
wget -P AIS_ESP32_CAM/ https://github.com/sviete/AIS-Tasmota/raw/firmware/firmware/tasmota32/languages/tasmota32-ais-webcam.bin  \ 
wget -P AIS_ESP32_CAM/ https://github.com/sviete/AIS-Tasmota/raw/release-firmware/firmware/tasmota32/ESP32_needed_files/boot_app0.bin  \
wget -P AIS_ESP32_CAM/ https://github.com/sviete/AIS-Tasmota/raw/release-firmware/firmware/tasmota32/ESP32_needed_files/bootloader_dout_40m.bin  \
wget -P AIS_ESP32_CAM/ https://github.com/sviete/AIS-Tasmota/raw/release-firmware/firmware/tasmota32/ESP32_needed_files/partitions.bin 
  1. Usuwam bieżące oprogramowanie / czyszczę dane

wprowadzam kamerę w tryb programowania (zwieram na stałe GPIO 0 z GND) i podłączam do USB, u mnie kamera ESP32 jest na ttyUSB0 więc ją kasuje tym poleceniem

esptool.py --port /dev/ttyUSB0 erase_flash
  1. Wgranie nowego oprogramowania
    jak esptool.py zakończy kasowanie to naciskam przycisk resetowania na płytce ESP32 i wgrywam oprogramowanie tą komendą
esptool.py --chip esp32 --port /dev/ttyUSB0 --baud 921600 --before default_reset --after hard_reset write_flash -z --flash_mode dout --flash_freq 40m --flash_size detect 0x1000 bootloader_dout_40m.bin 0x8000 partitions.bin 0xe000 boot_app0.bin 0x10000 tasmota32-ais-webcam.bin

Konfiguracja wstępna urządzenia

jak programowanie się zakończy to rozłączam zworkę GPIO 0 z GND i naciskam przycisk resetowania na płytce ESP32

Podłączam się terminalem do ESP32 (ja to robię programem CoolTerm - polecam)

ustawienia mam takie
image

i wydaje komendę która przełącza urządzenie w tryb AP

WifiConfig 2

Dodatkowe opcje konfiguracji serwera kamery

Po podłączeniu kamery do WiFi pytam o jej ustawienia komendą

status 0

tu widać jej IP

image

Resztę konfiguracji robie już z przeglądarki ale zostawiam sobie połączenie szeregowe żeby podczas konfiguracji widzieć logi.

Konfiguracja wideo

Tu ważna jest komenda WcRtsp tym włączamy serwer RTSP

image

następnie możemy sprwadzić np w VLC czy serwer działa pod takim linkiem:

rtsp://[ip-kamery]:8554/mjpeg/1

Ustawienia kamer w Tasmota

Wszyskie parametry dotyczące ustawień kamery które udało mi się ustalić:

Komenda Definicja Wartości
WcBrightness Image brightness -2, -1, 0, 1, 2
WcContrast Image contrast -2, -1, 0, 1, 2
WCFlip Flips the image vertically 1, 0
WcInit Initializes the webcam server
WCMirror Flips the image horizontally 1, 0
WcResolution Image resolution 0: FRAMESIZE 96x96
1: FRAMESIZE 160x120
2: FRAMESIZE 176x144
3: FRAMESIZE 240x176
4: FRAMESIZE 240x240
5: FRAMESIZE 320x240
6: FRAMESIZE 400x256
7: FRAMESIZE 480x320
8: FRAMESIZE 640x480
9: FRAMESIZE 800x600
10: FRAMESIZE 1024x768
WcSaturation Image saturation -2, -1, 0, 1, 2
WcStream Controls the video streaming 0: stop, 1: start
WcRtsp Control RTSP Server 0=disable, 1=enable (forces restart) (if defined ENABLE_RTSPSERVER)

u mnie działa (czego i Wam żeyczę :wink: )

PS
Przepraszam, ale nie będę mógł za bardzo aktywnie uczestniczyć w dyskusji “u mnie nie działa”, “napisz mi co mam zrobić krok po kroku”, “kupiłem inną kamerę i też nie działa”, itd…
Wybaczcie, ale mam teraz jak by to powiedzieć sianokosy i są inne priorytety :slight_smile:

Jeżeli komuś ten opis pomoże to będzie mi miło. Jeżeli nie, to może trzeba poświecić więcej czasu na czytanie ze zrozumieniem :wink: Lub zainwestować w jakiś bardziej komercyjny produkt.
Podsumowując wińcie za niedziałanie kogo chcecie: Espressif, Tasmotę, AIS i Jolkę… ale proszę nie mieszjcie w to moją osobę za mocno … bo mi to działa :peace_symbol:

7 polubień

Wielkie dzięki za ten opis, osobiście gubi mnie rutyna, a diabeł tkwi w szczegółach.

2 polubienia