aries

Moduł ESP32-CAM

zamontowany na ruchomym zdalnie sterowanym ramieniu część 2

Możliwości i funkcje oprogramowania

Sterowanie modułem kamery odbywa się za pośrednictwem przeglądarki internetowej i stron generowanych przez sam moduł. Oprogramowanie modułu powstało jako rozszerzenie szkicu dla Arduino, który z kolei oparty został na przykładowym opracowaniu producenta procesora ESP32 firmy Espressif. W porównaniu do pierwowzoru wprowadzono kilka zmian: zrezygnowano z funkcji rozpoznawania twarzy, dodano możliwość zdalnej aktualizacji nowych wersji oprogramowania drogą radiową (OTA), wprowadzono możliwość przywracania ustawień kamery, uporządkowano i uproszczono wygląd wyświetlanych w przeglądarce stron generowanych przez moduł ESP32-CAM. No i oczywiście dodano możliwość sterowania serwami użytymi do poruszania ramieniem. Można wybierać pomiędzy maksymalnie uproszczonym widokiem strony sterującej [zrzut ekranu 1], rozwinięciem z dostępem zarówno do suwaków jak i przycisków precyzyjnego ustawiania położenia ramienia z kamerą [zrzut ekranu 2]. Albo uzyskać dostęp do wielu nastaw kamery [zrzut ekranu 3].

ekran podstawowy sterowanie ESO32-CAM
×
ekran podstawowy sterowanie ESO32-CAM
zrzut ekranu 1
ekran z elementami sterującymi ramieniem
×
ekran z elementami sterującymi ramieniem
zrzut ekranu 2
ekran z elementami regulacyjnymi kamery
×
ekran z elementami regulacyjnymi kamery
zrzut ekranu 3

Przełączanie pomiędzy różnymi widokami strony z elementami sterującymi uzyskuje się po naciśnięciu elementu oznaczonego jako Menu. Klawisz Get Still powoduje kolejne wyświetlanie kilku ostatnich stop klatek. Klawisz Start/Stop Stream wznawia lub wstrzymuje transmisję strumieniową. Natomiast naciśnięcie przycisku Full spowoduje rozwinięcie ekranu z nastawami parametrów pracy kamery. Na samym dole listy nastaw dodano napis Servo będący linkiem do podstrony z ustawieniami związanymi z serwomechanizmami. W wersji obecnej można tam zaprogramować pozycję ramienia, którą przyjmie po resecie oraz ograniczenia jego ruchów w pionie i poziomie.
Dodatkową opcją jest możliwość sterowania kamerą i ramieniem przy pomocy rozkazów wpisywanych bezpośrednio w pasku przeglądarki i przesyłanych w trybie GET. Pozwala to tworzyć skrypty i zautomatyzować proces sterowania.

Kompilacja programu źródłowego

Przed zaprogramowaniem modułu trzeba skompilować pliki źródłowe z własnymi ustawieniami predefiniowanymi dla wybranego typu modułu.
dla środowiska Arduino.
Dalszy opis dotyczyć będzie ESP32-CAM AI-THINKER z kontrolerem w wersji ESP32-S z dostępem do dodatkowej zamontowanej pamięci PSRAM. Żeby móc przeprowadzić kompilację należy w środowisku Arduino mieć zainstalowaną obsługę modułów z procesorem ESP32. Jeżeli jeszcze tego nie zrobiłeś dodaj dodatkowy wpis w polu File→Preferences→Additional Board Manager URLs:
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
Następnie przejdź do Tools→Boards→ESP32 Arduino i wybierz ESP32→Dev→Module. Ustaw parametry:

Wybierz w ustawieniach port USB do którego podłączony jest interfejs USB←→Rx/Tx przy pomocy którego zaprogramujesz moduł ESP32-CAM. Pamiętaj żeby podłączyć: Pamiętaj żeby wyprowadzenia Tx i Rx interfejsu pracowały z sygnałami o maksymalnej amplitudzie 3,3V. To ważne gdyż praca z wyższymi poziomami może uszkodzić moduł.
Zanim przejdziesz do kompilacji edytuj plik myconfig.h lub stwórz nowy o takiej nazwie korzystając z szablonu myconfig.sample.h. Jest to plik z predefiniowanymi ustawieniami użytkownika. Następnie zmień wybrane pozycje pliku dostosowując predefiniowane parametry do swoich potrzeb.
Uzupełnij strukturę struct station stationList[] wpisując nazwę sieci „ssid” i hasło dostępu „password”. Można podać 2 pary parametrów dostępu do sieci lub więcej. Po włączeniu zasilania moduł zacznie szukać sieci o nazwie z pozycji 2 lub kolejnych. Jeżeli żadnej nie znajdzie i nie będzie się mógł zalogować automatycznie przejdzie w tryb pracy punktu dostępowego i stworzy własną sieć o nazwie i haśle z pierwszego miejsca listy. Żeby tak się stało należy odkomentować pozycję #define WIFI_AP_ENABLE. Możesz także zmienić domyślny adres IP punktu dostępowego edytując pozycję #define AP_ADDRESS 192,168,4,1 (zwróć uwagę, że kolejne pozycje adresu IP w tej definicji są oddzielone znakiem ‘,’).
Używając modułu AI-THINKER pamiętaj aby linia #define CAMERA_MODEL_AI_THINKER pozostała odkomentowana.
Prawdopodobnie przed kompilacją będziesz musiał w zwykły dla Arduino sposób doinstalować niektóre z wymienionych poniżej bibliotek:

Elegant OTA

W przypadku gdy moduł ESP32-CAM zalogował się do sieci, o jego numer IP w jej zasięgu należy odpytywać router zarządzający siecią. Po pierwszym zaprogramowaniu modułu, kolejne aktualizacje oprogramowania można już przeprowadzać zdalnie, drogą radiową korzystając z trybu OTA. Najpierw należy odpowiednio skompilować źródła oprogramowania korzystając z opcji Sketch→Export compilet binary. Po zakończeniu kompilacji w pasku przeglądarki wpisujemy adres IP modułu uzupełniony o numer portu 83 i rozkaz update np. tak: http://192.168.0.129:83/update. Gdy zgłosi się strona Elegant OTA należy wybrać opcję Firmware i wskazać lokalizację wygenerowanego podczas kompilacji pliku binarnego (jeżeli korzystamy ze szkicu Arduino o nazwie esp32-cam-pan-tilt.ino, plik będzie się nazywał esp32-cam-pan-tilt.ino.esp32.bin). Gdy wyświetli się informacja o sukcesie zdalnego zapisu należy nacisnąć przycisk Back i w pasku przeglądarki wpisać IP modułu bez numeru portu.

Bilans prądów

Moduł ESP32-CAM wraz z ramieniem zależnie od trybu pracy mogą pobierać różny, czasem znacząco wyższy prąd. Poniżej wartość pomiarów dla różnych sytuacji przy zasilaniu napięciem +5V:
-serwa w trybie oczekiwania: 6 mA
-1 serwo stabilne 2 pracuje: 12 mA
-moduł transmituje strumień obrazów: ok. 180 mA
-wstrzymana transmisja obrazu: 170 mA
-transmisja obrazu, lampa LED włączona na max.: 330 mA
Z pomiarów wynika, że zewnętrzny zasilacz powinien dostarczać stabilnego napięcia zasilania +5V przy wydajności co najmniej 500 mA.