Tartalomjegyzék:

DuvelBot - ESP32 -CAM sörkiszolgáló robot: 4 lépés (képekkel)
DuvelBot - ESP32 -CAM sörkiszolgáló robot: 4 lépés (képekkel)

Videó: DuvelBot - ESP32 -CAM sörkiszolgáló robot: 4 lépés (képekkel)

Videó: DuvelBot - ESP32 -CAM sörkiszolgáló robot: 4 lépés (képekkel)
Videó: Голубая стрела (1958) фильм 2024, Június
Anonim
DuvelBot - ESP32 -CAM sör kiszolgáló robot
DuvelBot - ESP32 -CAM sör kiszolgáló robot

Egy kemény munkanap után semmi sem közelíti meg a kedvenc sörök kortyolását a kanapén. Az én esetemben ez a belga szőke ale "Duvel". Az összeomlás után azonban egy legsúlyosabb problémával szembesülünk: a párnámat tartalmazó hűtőszekrény áthidalhatatlan 20 lábnyi távolságra van a kanapétől.

Bár enyhe kényszerítés az oldalamról arra késztethet egy alkalmi tinédzser hűtőszekrényt, hogy kiönthesse a heti Duvel -juttatásomat, a feladat, hogy ténylegesen eljuttassa a majdnem kimerült utódjához, egy lépéssel túl messze van.

Ideje kitörni a forrasztópáka és a billentyűzet közül …

A DuvelBot egy egyszerű AI-Thinker ESP32-CAM alapú vezetési webkamera, amelyet okostelefonjáról, böngészőjéről vagy táblagépéről vezérelhet.

Könnyen adaptálható vagy bővíthető ez a platform kevesebb alkoholtartalmú felhasználásra (gondoljunk a SpouseSpy, NeighbourWatch, KittyCam …).

Ezt a robotot elsősorban azért építettem, hogy megismerjek egy kicsit a webes programozásról és az IoT dolgokról, amelyekről semmit sem tudtam. Tehát ennek az utasításnak a végén van egy részletes magyarázat arról, hogy ez hogyan működik.

Ennek az utasításnak számos része a Random Nerd Tutorials kiváló magyarázatán alapul, ezért kérjük, látogasson el hozzájuk!

Kellékek

Amire szükséged van:

Az alkatrészlista nincs kőbe vésve, és sok alkatrész rengeteg különböző változatban és sok helyről beszerezhető. A legtöbbet az Ali-Express-től szereztem be. Ahogy Machete mondta: improvizáljon.

Hardver:

  • AI Thinker ESP32-CAM modul. Valószínűleg működhet más ESP32-CAM modulokkal, de ezt használtam
  • L298N motorvezérlő tábla,
  • Olcsó négykerekű robotplatform,
  • Egy nagy sík felületű ház, például a Hammond Electronics 1599KGY,
  • USB-3.3V-TTL átalakító a programozáshoz.
  • A világításhoz: 3 fehér LED, BC327 vagy más általános célú NPN tranzisztor (Ic = 500mA), 4k7k ellenállás, 3 82 Ohm ellenállás, perfboard, kábelek (lásd az ábrát és a képeket).
  • Be/ki kapcsoló és egy normálisan nyitott nyomógomb a programozáshoz.

Választható:

  • Halszem kamera hosszabb hajlítással, mint az ESP32-CAM modullal szállított szabványos OV2460 kamera,
  • WiFi antenna megfelelően hosszú kábellel és Ultra Miniature Coax csatlakozóval, mint ez. Az ESP32-CAM beépített antennával rendelkezik, és a ház műanyag, így nincs igazán szükség antennára, de azt gondoltam, hogy jól néz ki, így…
  • Tintasugaras nyomtatható matricapapír a felső borító kialakításához.

A szokásos hardver eszközök: forrasztópáka, fúrók, csavarhúzók, fogók…

1. lépés: A robotplatform építése

A robotplatform építése
A robotplatform építése
A robotplatform építése
A robotplatform építése
A robotplatform építése
A robotplatform építése

A sematikus:

A vázlat nem különleges. Az ESP32-bütyök vezérli a motorokat az L298N motorvezérlő táblán keresztül, amely két csatornával rendelkezik. A bal és a jobb oldali motorok párhuzamosan vannak elhelyezve, és mindegyik oldal egy csatornát foglal el. Négy kicsi 10..100nF kerámia kondenzátor a motorcsapok közelében, mint mindig tanácsos az RF interferencia ellen. Ezenkívül egy nagy elektrolitsapka (2200… 4700uF) a motorlap tápellátásán, ahogyan az a rajzon látható, bár nem feltétlenül szükséges, kissé korlátozhatja a tápfeszültség hullámzását (ha horrorfilmet szeretne látni, próbálja meg a Vbat szondát) oszcilloszkóppal, miközben a motorok aktívak).

Vegye figyelembe, hogy mindkét motorcsatorna ENABLE csapját az ESP32 (IO12) azonos impulzusszélességű modulált (PWM) csapja hajtja. Ennek az az oka, hogy az ESP32-CAM modul nem rendelkezik rengeteg GPIO-val (a modul vázlata referenciaként szerepel). A robot LED -jeit az IO4 vezérli, amely a fedélzeti vaku LED -jét is hajtja, ezért távolítsa el a Q1 -et, hogy a vaku LED -je ne világítson zárt házban.

A programozó gomb, a ki/be kapcsoló, a töltőcsatlakozó és a programozó csatlakozó elérhető a robot alatt. Sokkal jobb munkát végezhettem volna a programozó csatlakozónál (3,5 mm -es jack?), De a sör már nem várt. Szintén jó lenne beállítani az OTA-t.

A robot programozási módba állításához nyomja meg a programozó gombot (ez alacsony IO0 -t von le), majd kapcsolja be.

Fontos: A robot NiMH akkumulátorainak feltöltéséhez használjon laboratóriumi tápegységet (lemerült) körülbelül 14 V feszültségre, és az áramerősség legfeljebb 250 mA. A feszültség alkalmazkodik az akkumulátorok feszültségéhez. Válassza le, ha a robot forrónak érzi magát, vagy ha az akkumulátor feszültsége eléri a 12,5 V -ot. Nyilvánvaló előrelépés lenne a megfelelő akkumulátortöltő integrálása, de ez kívül esik az utasításban.

A hardver:

Kérjük, tekintse meg a képeken található megjegyzéseket is. A ház 4 M4 csavar és önzáró anya segítségével rögzíthető a robot talpára. Vegye figyelembe a távolságtartóként használt gumicsövet. Remélhetőleg ez némi felfüggesztést is ad a Duvelnek, ha az út rögösnek bizonyul. Az ESP32-CAM modul és az L298N motortábla műanyag ragadós lábakkal van felszerelve a házba (nem biztos a megfelelő angol névben), hogy ne kelljen további lyukakat fúrni. Az ESP32 szintén saját perforációs táblájára és dugaszolható tűhegyekre van felszerelve. Ez megkönnyíti az ESP32 cseréjét.

Ne felejtse el: ha külső beépített WiFi antennával készül a beépített helyett, akkor forrasztja be az antenna-kiválasztó jumpert az ESP32-CAM kártya alján.

Nyomtassa ki a felső logót a DuvelBot.svg fájlban tintasugaras matricapapírra (vagy tervezzen sajátot), és máris indulhat!

2. lépés: Programozza be a robotot

Programozza be a robotot
Programozza be a robotot

Célszerű beprogramozni a robotot, mielőtt bezárja, hogy megbizonyosodjon arról, hogy minden működik, és nem jelenik meg varázslatos füst.

A következő szoftvereszközökre van szüksége:

  • Az Arduino IDE,
  • Az ESP32 könyvtárak, SPIFFS (soros perifériás flash fájlrendszer), ESPAsync Webserver könyvtár.

Ez utóbbi telepíthető úgy, hogy követi ezt a randomnerdtutorial -t a "fájlok rendszerezése" szakaszig bezárólag. Tényleg nem tudnám jobban megmagyarázni.

A kód:

A kódom megtalálható:

  • Egy Arduino vázlat DuvelBot.ino,
  • Adatok almappája, amely tartalmazza azokat a fájlokat, amelyeket SPIFFS használatával tölt fel az ESP flash -re. Ez a mappa tartalmazza az ESP által kiszolgált weboldalt (index.html), a weboldal részét képező logóképet (duvel.png) és egy lépcsőzetes stíluslapot vagy CSS -fájlt (style.css).

A robot programozása:

  • Csatlakoztassa az USB-TTL átalakítót a vázlat szerint,
  • Fájl -> Megnyitás -> menjen a DuvelBot.ino mappába.
  • Módosítsa hálózati hitelesítő adatait a vázlatban:

const char* ssid = "yourNetworkSSIDHere"; const char* password = "yourPasswordHere";

  • Eszközök -> Tábla -> "AI -Thinker ESP -32 CAM", és válassza ki a megfelelő soros portot a számítógépéhez (Eszközök -> Port -> valami hasonló /dev /ttyUSB0 vagy COM4),
  • Nyissa meg a soros monitort az Arduino IDE -ben. Miközben lenyomja a PROG gombot (ez alacsony IO0 -t húz), kapcsolja be a robotot,
  • Ellenőrizze a soros monitoron, hogy az ESP32 készen áll -e a letöltésre,
  • Zárja be a soros monitort (különben az SPIFFS feltöltése sikertelen),
  • Eszközök -> "ESP32 Sketch Data Upload", és várja meg, amíg befejeződik,
  • A programozási módba való visszatéréshez kapcsolja ki és be a PROG gombot,
  • Nyomja meg a „Feltöltés” nyilat a vázlat programozásához, és várja meg, amíg befejeződik,
  • Nyissa ki a soros monitort, és kapcsolja ki/be az ESP32 -t,
  • Miután elindult, jegyezze fel az ip-címet (például 192.168.0.121), és válassza le a robotot az USB-TTL átalakítóról,
  • Nyisson meg egy böngészőt ezen az IP -címen. Látnia kell a felületet, mint a képen.
  • Választható: állítsa az ESP32 mac-címét rögzített IP-címre az útválasztóban (az útválasztótól függően).

Ez az! Olvassa el, ha szeretné tudni, hogyan működik…

3. lépés: Hogyan működik?

Most elérkeztünk az érdekes részhez: hogyan működik mindez együtt?

Lépésről lépésre megpróbálom elmagyarázni, de ne feledje, Kajnjaps nem webprogramozási szakember. Valójában egy kis webes programozás megtanulása volt a DuvelBot építésének alapfeltétele. Ha nyilvánvaló hibákat követek el, írjon megjegyzést!

Oké, miután az ESP32 be van kapcsolva, a beállításoknál megszokott módon inicializálja a GPIO -kat, és társítja őket a motor- és LED -vezérléshez használt PWM időzítőkkel. A motorvezérlésről bővebben itt olvashat, ez eléggé szabványos.

Ezután a kamera konfigurálva van. Szándékosan tartottam meglehetősen alacsony felbontást (VGA vagy 640x480), hogy elkerüljem a lassú választ. Megjegyzés: Az AI-Thinker ESP32-CAM kártya soros ram chipet (PSRAM) tartalmaz, amelyet a nagyobb felbontású kamerakockák tárolására használ:

if (psramFound ()) {Serial.println ("PSRAM megtalálva."); config.frame_size = FRAMESIZE_VGA; config.jpg_quality = 12; config.fb_count = 2; // a keretbufferek száma lásd: https://github.com/espressif/esp32-camera} else {Serial.println ("nem található PSRAM."); config.frame_size = FRAMESIZE_QVGA; config.jpg_quality = 12; config.fb_count = 1; }

Ezután inicializálja a soros perifériás flash fájlrendszert (SPIFFS):

// inicializálja a SPIFFS if (! SPIFFS.begin (true)) {Serial.println ("Hiba történt a SPIFFS telepítése közben!"); Visszatérés; }

A SPIFFS úgy működik, mint egy kis fájlrendszer az ESP32 -en. Itt három fájl tárolására szolgál: maga a weboldal index.html, egy lépcsős fájlstílus -stílus style.css és egy-p.webp

Ezután az ESP32 csatlakozik az útválasztóhoz (ne felejtse el megadni hitelesítő adatait a feltöltés előtt):

// az útválasztó hitelesítési adatainak módosítása itt: char* ssid = "yourNetworkSSIDHere"; const char* password = "yourPasswordHere"; … // csatlakozás a WiFi Serial.print -hez ("Csatlakozás a WiFi -hez"); WiFi.begin (ssid, jelszó); while (WiFi.status ()! = WL_CONNECTED) {Serial.print ('.'); késleltetés (500); } // most csatlakozik az útválasztóhoz: az ESP32 most már rendelkezik IP -címmel

Ahhoz, hogy valami hasznosat tegyünk, elindítunk egy aszinkron webszervert:

// hozzon létre egy AsyncWebServer objektumot a 80 -as portonAsyncWebServer szerver (80); … Server.begin (); // kezdje el figyelni a kapcsolatokat

Ha most beírja azt az ip -címet, amelyet az útválasztó rendelt az ESP32 -hez a böngésző címsorába, az ESP32 kérést kap. Ez azt jelenti, hogy az ügyfélnek (Önnek vagy a böngészőjének) úgy kell válaszolnia, hogy szolgáltat neki valamit, például egy weboldalt.

Az ESP32 tudja, hogyan kell válaszolni, mert a beállítás során az összes lehetséges engedélyezett kérésre adott választ regisztrálták a server.on () használatával. Például a fő weboldal vagy index (/) a következőképpen kezelhető:

server.on ("/", HTTP_GET, (AsyncWebServerRequest *kérés) {Serial.println ("/kérés megérkezett!"); request-> send (SPIFFS, "/index.html", String (), false, processzor);});

Tehát ha az ügyfél csatlakozik, az ESP32 válaszol az index.html fájl elküldésével a SPIFFS fájlrendszerből. A paraméterfeldolgozó egy olyan funkció neve, amely előfeldolgozza a html -t, és lecseréli a speciális címkéket:

// Helyettesítőket cserél a html -ben, mint %DATA %// a megjeleníteni kívánt változókkal //

Adatok: %DATA %

String processzor (const String & var) {if (var == "DATA") {//Serial.println("in processzor! "); visszatérési karakterlánc (dutyCycleNow); } visszatérési karakterlánc ();}

Most hagyjuk, hogy a weboldal index.html magát. Általában mindig három részből áll:

  1. html kód: milyen elemeket kell megjeleníteni (gombok/szöveg/csúszkák/képek stb.),
  2. stíluskód, akár külön.css fájlban, akár… részben: hogyan kell kinézni az elemeknek,
  3. javascript a… szakasz: hogyan kell viselkednie a weboldalnak.

Miután az index.html betöltődik a böngészőbe (amely a DOCTYPE sor miatt tudja, hogy html), a következő sorba fut:

Ez egy css stíluslap kérése. Ennek a lapnak a helye href = "…". Tehát mit csinál a böngészője? Igaz, újabb kérést indít a szervernek, ezúttal a style.css fájlra. A szerver rögzíti ezt a kérést, mert regisztrálva volt:

server.on ("/style.css", HTTP_GET, (AsyncWebServerRequest *kérés) {Serial.println ("css kérés megérkezett"); request-> send (SPIFFS, "/style.css", "text/css ");});

Tiszta, mi? Egyébként a href = "/some/file/on/the/other/side/of/the moon" lehet az összes böngészője számára. Ugyanilyen boldogan hozná el azt a fájlt. Nem fogok magyarázni a stíluslapról, mivel csak a megjelenést szabályozza, így itt nem igazán érdekes, de ha többet szeretne megtudni, nézze meg ezt az oktatóanyagot.

Hogyan jelenik meg a DuvelBot logó? Az index.html fájlban a következők találhatók:

amelyre az ESP32 válaszol:

szerver.on ("/duvel", HTTP_GET, (AsyncWebServerRequest *kérés) {Serial.println ("a paplan logó kérése megérkezett!"); request-> send (SPIFFS, "/duvel.png", "image-p.webp

..egy másik SPIFFS fájl, ezúttal egy teljes kép, amint azt a válasz "image/png" jelzi.

Most elérkeztünk az igazán érdekes részhez: a gombok kódjához. Fókuszáljunk a FORWARD gombra:

ELŐRE

A class = "…" név csak egy név, amely a stíluslaphoz kapcsolja a méret, szín stb. Testreszabásához. A fontos részek a következők: onmousedown = "toggleCheckbox ('forward')" és onmouseup = "toggleCheckbox ('stop') ". Ezek képezik a gomb műveleteit (ugyanaz az ontouchstart/ontouchend esetében, de az érintőképernyők/telefonok esetében). Itt a gombművelet a toggleCheckbox (x) függvényt hívja meg a javascript részben:

function toggleCheckbox (x) {var xhr = new XMLHttpRequest (); xhr.open ("GET", "/" + x, true); xhr.send (); // tehetnénk valamit a válasszal is, ha készen állunk, de nem tesszük meg}

Tehát az előre gomb megnyomása azonnal a toggleCheckbox ('előre') hívását eredményezi. Ez a függvény ezután elindítja a "GET" XMLHttpRequest "/forward" helyet, amely ugyanúgy működik, mintha a 192.168.0.121/forward parancsot írta volna be a böngésző címsorába. Miután ez a kérés megérkezett az ESP32 -hez, azt a következők kezelik:

server.on ("/továbbítás", HTTP_GET, (AsyncWebServerRequest *kérés) {Serial.println ("fogadva/továbbítva"); actionNow = ELŐRE; kérés-> küldés (200, "text/plain", "OK forward. ");});

Most az ESP32 egyszerűen "OK tovább" szöveggel válaszol. Ne feledje, hogy a toggleCheckBox () semmit sem tesz ezzel a válasszal (vagy várjon vele), de ez lehetséges, amint azt a kamera kódja később mutatja.

Önmagában e válasz során a program csak egy változó actionNow = FORWARD értéket állít be a gomb megnyomására adott válaszként. Most a program fő körében ezt a változót figyelik azzal a céllal, hogy felfelé/lefelé növeljék a motorok PWM -jét. A logika a következő: amíg van olyan műveletünk, amely nem STOP, addig emelje fel a motorokat ebbe az irányba, amíg el nem ér egy bizonyos számot (dutyCycleMax). Ezután tartsa fenn ezt a sebességet, amíg a actionNow nem változik:

void loop () {currentMillis = millis (); if (currentMillis - previousMillis> = dutyCycleStepDelay) {// mentse el a ciklus legutóbbi végrehajtását előzőMillis = currentMillis; // a mainloop felelős a motorok felfelé/lefelé emelkedéséért, ha (actionNow! = previousAction) {// rámpa lefelé, majd leállítás, majd a művelet megváltoztatása és a duty up növeléseCycleNow = dutyCycleNow-dutyCycleStep; if (dutyCycleNow <= 0) {// ha a dc lecsökkentése után 0, állítsa az új irányba, kezdje min. dutycycle setDir (actionNow); previousAction = actionNow; dutyCycleNow = dutyCycleMin; }} else // actionNow == previousAction rámpa felfelé, kivéve, ha STOP irány {if (actionNow! = STOP) {dutyCycleNow = dutyCycleNow+dutyCycleStep; if (dutyCycleNow> dutyCycleMax) dutyCycleNow = dutyCycleMax; } else dutyCycleNow = 0; } ledcWrite (pwmChannel, dutyCycleNow); // a motorkerékpár beállítása}}

Ez lassan megnöveli a motorok fordulatszámát, ahelyett, hogy csak teljes sebességgel indítanánk, és kiöntenénk a drága értékes paplant. Nyilvánvaló javulás lenne, ha ezt a kódot egy időzítő megszakítási rutinba helyeznénk át, de úgy működik, ahogy van.

Most, ha elengedjük a továbbítás gombot, a böngésző toggleCheckbox ('stop') hívást kap, ami kérést kap a GET /stop számára. Az ESP32 az actionNow -t STOP -ra állítja (és "OK stop" -dal válaszol), ami a főhurkot a motorok leforgatására nyitja.

Mi a helyzet a LED -ekkel? Ugyanaz a mechanizmus, de most van egy csúszka:

A javascriptben a csúszka beállítását figyeli, hogy minden változtatáskor a "/LED/xxx" lekérdezésre kerüljön sor, ahol xxx a fényerő értéke, amelyre a LED -eket be kell állítani:

var slide = document.getElementById ('slide'), sliderDiv = document.getElementById ("sliderAmount"); slide.onchange = function () {var xhr = new XMLHttpRequest (); xhr.open ("GET", "/LED/" + this.value, true); xhr.send (); sliderDiv.innerHTML = this.value; }

Ne feledje, hogy a document.getElementByID ('slide') segítségével kaptuk meg magát a csúszkaobjektumot, amelyet a -val deklaráltunk, és hogy az érték minden változáskor egy szövegelembe kerül.

A vázlatban lévő kezelő minden fényerőre vonatkozó kérést elfog a "/LED/*" használatával a kezelő regisztrációjában. Ezután az utolsó részt (egy számot) feldaraboljuk és int -re öntjük:

server.on ("/LED/ *", HTTP_GET, (AsyncWebServerRequest *kérés) {Serial.println ("led kérés érkezett!"); setLedBrightness ((request-> url ()). (5).toInt ()); request-> send (200, "text/plain", "OK Leds.");});

A fentebb leírtakhoz hasonlóan a rádiógombok vezérlik a PWM alapértelmezett értékeit beállító változókat, így a DuvelBot lassan vezethet hozzád a sörrel, ügyelve arra, hogy ne folyjon ki a folyékony arany, és gyorsan vissza a konyhába, hogy többet hozzon.

… Tehát hogyan frissül a kamera képe anélkül, hogy frissítenie kellene az oldalt? Ehhez az AJAX (aszinkron JavaScript és XML) nevű technikát használjuk. A probléma az, hogy általában az ügyfél-szerver kapcsolat rögzített eljárást követ: az ügyfél (böngésző) kérést küld, a szerver (ESP32) válaszol, az eset lezárva. Kész. Már nem történik semmi. Ha csak valahogy becsaphatnánk a böngészőt, hogy rendszeresen kérjen frissítéseket az ESP32 -től … és pontosan ezt fogjuk tenni ezzel a javascript -részlettel:

setInterval (function () {var xhttp = new XMLHttpRequest (); xhttp.open ("GET", "/CAMERA", true); xhttp.responseType = "blob"; xhttp.timeout = 500; xhttp.ontimeout = function () {}; xhttp.onload = function (e) {if (this.readyState == 4 && this.status == 200) {// lásd: https://stackoverflow.com/questions/7650587/using… // https://www.html5rocks.com/en/tutorials/file/xhr2/ var urlCreator = window. URL || window.webkitURL; var imageUrl = urlCreator.createObjectURL (this.response); // hozzon létre egy objektumot a blobból document.querySelector ("#camimage"). src = imageUrl; urlCreator.revokeObjectURL (imageurl)}}; xhttp.send ();}, 250);

A setInterval paraméterként egy függvényt vesz fel, és oly gyakran hajtja végre (itt 250 ms -onként egyszer, ami 4 képkocka/másodpercet eredményez). A végrehajtott függvény bináris "blob" kérést kér a /CAMERA címen. Ezt az ESP32-CAM kezeli a vázlatban (Randomnerdtutorials):

server.on ("/CAMERA", HTTP_GET, (AsyncWebServerRequest * kérés) {Serial.println ("kamera kérés érkezett!"); camera_fb_t * fb = NULL; // esp_err_t res = ESP_OK; size_t _jpg_buf_len = 0; uint8 * _jpg_buf = NULL; // képkocka rögzítése fb = esp_camera_fb_get (); if (! fb) {Serial.println ("A keretpuffer nem szerezhető be"); return;} if (fb-> formátum! = PIXFORMAT_JPEG)/ /már ebben a formátumban a konfigurációból {bool jpeg_converted = frame-j.webp

A fontos részek az, hogy az fb = esp_camera_fb_get () keretet jpg-re konvertálja (az AI-Thinker esetében ez már ebben a formátumban van), és elküldi a jpeg-t: request-> send_P (200, "image/jpg", _jpg_buf, _jpg_buf_len).

A javascript függvény megvárja, amíg megérkezik ez a kép. Ezután csak egy kis munka szükséges ahhoz, hogy a kapott "blob" -ot URL -re alakítsa, amely forrásként használható a kép frissítésére a html oldalon.

huh, végeztünk!

4. lépés: Ötletek és maradékok

Ötletek és maradékok
Ötletek és maradékok

Ennek a projektnek a célja számomra az volt, hogy csak annyi webes programozást tanuljak meg, amellyel a hardvert az internethez illeszthetjük. Ennek a projektnek számos kiterjesztése lehetséges. Íme néhány ötlet:

  • Végezze el az „igazi” kamerás adatfolyamot az itt és itt leírtak szerint, és helyezze át egy második szerverre az itt leírtak szerint ugyanazon az ESP32 -n, de a másik CPU -magon, majd importálja a kamerát az 1. szerver által kiszolgált html -be…. Ennek gyorsabb kamerafrissítéseket kell eredményeznie.
  • Használja a hozzáférési pont (AP) módot, hogy a robot önállóbb legyen, ahogy az itt le van írva.
  • Bővítse az akkumulátor feszültségmérésével, a mély alvás képességeivel stb. Ez egyelőre nehézkes, mivel az AI-Thinker ESP32-CAM nem rendelkezik sok GPIO-val; bővítésre szorul uart és például egy slave arduino segítségével.
  • Váltson macskakereső robotrá, amely időről időre kiad egy macskacsemegét egy nagy gomb mancsának megnyomásával, és tonna szép macskaképeket közvetít a nap folyamán…

Kérjük, írja meg véleményét, ha tetszett, vagy kérdése van, és köszönöm, hogy elolvasta!

Ajánlott: