Orodha ya maudhui:

DuvelBot - Bia ya Kuhudumia Bia ya ESP32-CAM: Hatua 4 (na Picha)
DuvelBot - Bia ya Kuhudumia Bia ya ESP32-CAM: Hatua 4 (na Picha)

Video: DuvelBot - Bia ya Kuhudumia Bia ya ESP32-CAM: Hatua 4 (na Picha)

Video: DuvelBot - Bia ya Kuhudumia Bia ya ESP32-CAM: Hatua 4 (na Picha)
Video: РЕЦЕПТ ГРУЗИНСКОГО ЧАШУШУЛИ. Готовим самый вкусный ужин 2024, Juni
Anonim
DuvelBot - Bia ya Kuhudumia Robot ya ESP32-CAM
DuvelBot - Bia ya Kuhudumia Robot ya ESP32-CAM

Kufuatia kazi ya siku ngumu, hakuna kinachokaribia kunywa bia yako uipendayo kwenye kochi. Kwa upande wangu, hiyo ni blond ya Ubelgiji "Duvel". Walakini, baada ya yote lakini kuanguka tunakabiliwa na shida kubwa zaidi: friji iliyo na Duvel yangu ni miguu isiyofunguliwa 20 iliyoondolewa kwenye kochi.

Wakati kulazimishwa kidogo kutoka upande wangu kunaweza kusonga mtapeli wa jokofu wa vijana kumwaga posho ya wiki ya Duvel, jukumu la kuipeleka kwa babu yake aliyechoka ni wazi hatua moja sana.

Wakati wa kuvunja chuma na kibodi …

DuvelBot ni no-frills AI-Thinker ESP32-CAM inayoendesha kamera ya wavuti, ambayo unaweza kudhibiti kutoka kwa smartphone yako, kivinjari au kompyuta kibao.

Ni rahisi kubadilisha au kupanua jukwaa hili kwa matumizi kidogo ya pombe (fikiria SpouseSpy, NeighbourWatch, KittyCam…).

Niliunda roboti hii haswa ili kujifunza kidogo juu ya programu nzima ya wavuti na vitu vya IOT, ambavyo sikuwa najua chochote. Kwa hivyo, mwisho wa hii ya Maagizo kuna maelezo ya kufafanua jinsi inavyofanya kazi.

Sehemu nyingi za hii inayoweza kufundishwa zinatokana na maelezo bora yanayopatikana katika Mafunzo ya Random Nerd, kwa hivyo tafadhali nenda kuwatembelea!

Vifaa

Unachohitaji:

Orodha ya sehemu haijachongwa kwa jiwe na sehemu nyingi zinaweza kupatikana kwa tani ya matoleo tofauti na kutoka sehemu nyingi tofauti. Nilinunua zaidi kutoka kwa Ali-Express. Kama Machete alisema: tengeneza.

Vifaa:

  • Moduli ya AI Thinker ESP32-CAM. Labda inaweza kufanya kazi na moduli zingine za ESP32-CAM lakini ndivyo nilivyotumia
  • L298N bodi ya dereva wa gari,
  • Jukwaa la roboti lenye magurudumu manne,
  • Nyumba iliyo na uso mkubwa wa gorofa kama vile Hammond Electronics 1599KGY,
  • USB-to-3.3V-TTL-converter kwa programu.
  • Kwa taa: LED 3 nyeupe, BC327 au transistor nyingine ya jumla NPN (Ic = 500mA), 4k7k resistor, 3 82Ohm resistors, perfboard, nyaya (angalia picha na picha).
  • Kitufe cha kuwasha / kuzima na kitufe cha kawaida cha kufungua programu.

Hiari:

  • Kamera ya fisheye yenye laini ndefu kuliko kamera ya kawaida ya OV2460 iliyotolewa na moduli ya ESP32-CAM,
  • Antenna ya WiFi na kebo ndefu inayofaa na Kiunganishi cha Kokox cha Mini Miniature, kama hii. ESP32-CAM ina antena ya ndani na nyumba ni ya plastiki, kwa hivyo antena haihitajiki sana, hata hivyo nilifikiri ilikuwa nzuri, kwa hivyo…
  • Karatasi ya stika inayoweza kuchapishwa ya Inkjet kwa muundo wa jalada la juu.

Vifaa vya kawaida vya vifaa: chuma cha kutengenezea, visima, bisibisi, koleo…

Hatua ya 1: Kuunda Jukwaa la Robot

Kujenga Jukwaa la Robot
Kujenga Jukwaa la Robot
Kujenga Jukwaa la Robot
Kujenga Jukwaa la Robot
Kujenga Jukwaa la Robot
Kujenga Jukwaa la Robot

Mpangilio:

Mpangilio sio kitu maalum. ESP32-cam inadhibiti motors kupitia bodi ya dereva ya L298N, ambayo ina njia mbili. Motors za upande wa kushoto na kulia zimewekwa sawa na kila upande unachukua kituo kimoja. Vipimo vinne vya kauri 10..100nF kauri karibu na pini za magari ni vyema kila wakati kukabiliana na kuingiliwa kwa RF. Pia, kofia kubwa ya umeme (2200… 4700uF) kwenye usambazaji wa bodi ya magari kama inavyoonekana katika mpango, ingawa hauhitajiki kabisa, inaweza kupunguza kasi ya usambazaji wa voltage kidogo (ikiwa unataka kuona sinema ya kutisha, kisha uchunguzi Vbat na oscilloscope wakati motors zinafanya kazi).

Kumbuka kuwa njia zote mbili za kuwezesha pini zinaendeshwa na pini sawa ya upana wa mpigo (PWM) ya ESP32 (IO12). Hii ni kwa sababu moduli ya ESP32-CAM haina tani ya GPIOs (mpango wa moduli umejumuishwa kwa kumbukumbu). LED za roboti zinaendeshwa na IO4, ambayo pia huendesha mwangaza wa onboard, kwa hivyo ondoa Q1 ili kuzuia mwangaza wa LED kwenye nyumba iliyofungwa.

Kitufe cha programu, kuwasha / kuzima, kontakt ya kuchaji na kontakt ya programu zinapatikana chini ya roboti. Ningekuwa nimefanya kazi bora zaidi kwa kiunganishi cha programu (3.5mm jack?), Lakini bia haikuweza kusubiri tena. Pia sasisho-za-hewani (OTA) zingekuwa nzuri kusanidi.

Ili kuweka robot katika hali ya programu, bonyeza kitufe cha programu (hii inavuta IO0 chini) na kisha uiwasha.

Muhimu: kuchaji betri za NiMH za roboti, tumia seti ya ugavi wa maabara (isiyopakuliwa) kwa karibu 14V na sasa imepunguzwa hadi 250mA. Voltage itaendana na voltage ya betri. Tenganisha ikiwa roboti inahisi moto au voltage ya betri inafikia karibu 12.5V. Uboreshaji dhahiri hapa itakuwa kuunganisha chaja sahihi ya betri, lakini hiyo iko nje ya wigo wa hii inayoweza kufundishwa.

Vifaa:

Tafadhali pia angalia maelezo kwenye picha. Nyumba hiyo imewekwa kwenye msingi wa roboti kwa kutumia bolts 4 M4 na karanga za kujifunga. Kumbuka neli ya mpira inayotumiwa kama spacers za umbali. Tunatumahi, hii pia inatoa kusimamishwa kwa Duvel, ikiwa safari itathibitisha kuwa na gumu. Moduli ya ESP32-CAM na bodi ya magari ya L298N imewekwa kwenye nyumba kwa kutumia miguu ya plastiki iliyonata (haijulikani jina sahihi kwa Kiingereza), kuzuia kulazimika kuchimba mashimo ya ziada. Pia ESP32 imewekwa kwenye ubao wake wa kibinafsi na vichwa vya pini vinavyoweza kuziba. Hii inafanya iwe rahisi kubadilisha ESP32.

Usisahau: ikiwa unaenda na antena ya nje ya WiFi badala ya iliyojengwa, basi pia tengeneza jumper ya uteuzi wa antena chini ya ubao wa ESP32-CAM.

Chapisha nembo ya juu kwenye faili DuvelBot.svg kwenye karatasi ya stika ya inkjet (au ubuni yako mwenyewe), na uko tayari kwenda!

Hatua ya 2: Panga Robot

Mpango wa Robot
Mpango wa Robot

Inashauriwa kupanga roboti kabla ya kuifunga, kuhakikisha kila kitu kinafanya kazi na hakuna moshi wa uchawi unaonekana.

Unahitaji zana zifuatazo za programu:

  • IDE ya Arduino,
  • Maktaba za ESP32, SPIFFS (mfumo wa faili ya pembeni ya pembeni), maktaba ya ESPAsync Webserver.

Mwisho unaweza kusanikishwa kwa kufuata mafunzo haya bila mpangilio hadi pamoja na sehemu ya "kuandaa faili zako". Kwa kweli sikuweza kuelezea vizuri zaidi.

Nambari:

Nambari yangu inaweza kupatikana kwa:

  • Mchoro wa Arduino DuvelBot.ino,
  • Kijitabu kidogo cha data ambacho kinashikilia faili ambazo zitapakiwa kwenye mwangaza wa ESP ukitumia SPIFFS. Folda hii ina ukurasa wa wavuti ambao ESP itatumikia (index.html), picha ya nembo ambayo ni sehemu ya ukurasa wa wavuti (duvel.png) na karatasi ya mtindo iliyoshinishwa au faili ya CSS (style.css).

Kupanga roboti:

  • Unganisha kibadilishaji cha USB-TTL kama inavyoonekana katika mpango,
  • Faili -> Fungua -> nenda kwenye folda ambapo DuvelBot.ino iko.
  • Badilisha sifa za mtandao wako kwenye mchoro:

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

  • Zana -> Bodi -> "AI-Thinker ESP-32 CAM" na uchague bandari inayofaa ya pc yako (Zana -> Port -> kitu kama / dev / ttyUSB0 au COM4),
  • Fungua mfuatiliaji wa serial katika IDE ya Arduino, Wakati unabonyeza kitufe cha PROG (kinachovuta IO0 chini), washa roboti,
  • Angalia mfuatiliaji wa serial kwamba ESP32 iko tayari kupakuliwa,
  • Funga mfuatiliaji wa serial (vinginevyo upakiaji wa SPIFFS unashindwa),
  • Zana -> "ESP32 Sketch Data Pakia" na subiri imalize,
  • Zima na uendelee tena kushikilia kitufe cha PROG kurudi kwenye hali ya programu,
  • Bonyeza mshale wa "Pakia" ili kupanga mchoro na subiri imalize,
  • Fungua mfuatiliaji wa serial na uweke upya ESP32 kwa kuzima / kuwasha,
  • Mara tu inapopiga kura, angalia anwani ya ip (kitu kama 192.168.0.121) na uondoe roboti kutoka kwa kibadilishaji cha USB-TTL,
  • Fungua kivinjari kwenye anwani hii ya ip. Unapaswa kuona interface kama kwenye picha.
  • Chaguo: weka anwani ya Mac ya ESP32 kwa anwani ya ip iliyowekwa kwenye router yako (inategemea na jinsi ya kufanya).

Hiyo ndio! Soma ikiwa unataka kujua jinsi inavyofanya kazi…

Hatua ya 3: Jinsi inavyofanya kazi

Sasa tunakuja kwenye sehemu ya kupendeza: inafanyaje kazi pamoja?

Nitajaribu kuelezea hatua… kwa… hatua lakini tafadhali kumbuka Kajnjaps sio mtaalam wa programu za wavuti. Kwa kweli, kujifunza programu kidogo ya wavuti ilikuwa msingi wa kujenga DuvelBot. Ikiwa ninafanya makosa dhahiri, tafadhali acha maoni!

Sawa, baada ya ESP32 kuwashwa, kama kawaida katika usanidi inaanzisha GPIOs, inawaunganisha na vipima muda vya PWM kwa udhibiti wa gari na LED. Tazama hapa kwa zaidi juu ya udhibiti wa magari, ni sawa sana.

Kisha kamera imesanidiwa. Niliweka azimio kwa makusudi kabisa (VGA au 640x480) ili kuepuka majibu ya uvivu. Kumbuka bodi ya AI-Thinker ESP32-CAM ina chip ya ram (PSRAM) ambayo hutumia kuhifadhi muafaka wa kamera ya azimio kubwa:

ikiwa (psramFound ()) {Serial.println ("PSRAM imepatikana."); usanidi.frame_size = FRAMESIZE_VGA; usanidi.jpg_quality = 12; config.fb_count = 2; // idadi ya wachafu wa sura ona: https://github.com/espressif/esp32-camera} mwingine {Serial.println ("hakuna PSRAM iliyopatikana."); usanidi.frame_size = FRAMESIZE_QVGA; usanidi.jpg_quality = 12; config.fb_count = 1; }

Kisha mfumo wa faili ya pembeni ya pembeni (SPIFFS) imeanzishwa:

// anzisha SPIFFS ikiwa (! SPIFFS.anza (kweli)) {Serial.println ("Kosa limetokea wakati wa kuweka SPIFFS!"); kurudi; }

SPIFFS hufanya kama mfumo wa faili kidogo kwenye ESP32. Hapa hutumiwa kuhifadhi faili tatu: ukurasa wa wavuti yenyewe index.html, mtindo wa faili uliopigwa style.css, na nembo ya picha ya-p.webp

Ifuatayo ESP32 inaunganisha kwenye router yako (usisahau kuweka kitambulisho chako kabla ya kupakia):

// badilisha vitambulisho vya router yako hapa # 1 ssid = "yourNetworkSSIDHere"; const char * password = "yourPasswordHere"; … // unganisha kwa WiFi Serial.print ("Kuunganisha kwa WiFi"); Kuanza kwa WiFi (ssid, password); wakati (WiFi.status ()! = WL_CONNECTED) {Serial.print ('.'); kuchelewesha (500); } // sasa imeunganishwa na router: ESP32 sasa ina anwani ya ip

Kwa kweli kufanya kitu muhimu, tunaanza seva ya wavuti isiyopendeza:

// tengeneza kitu cha AsyncWebServer kwenye bandari ya 80AsyncWebServer server (80); … Seva.anza (); // kuanza kusikiliza kwa unganisho

Sasa, ikiwa unachapa anwani ya ip ambayo ilipewa ESP32 na router kwenye bar ya anwani ya kivinjari, ESP32 inapata ombi. Hii inamaanisha inapaswa kujibu mteja (wewe, au kivinjari chako) kwa kuitumikia kitu, kwa mfano ukurasa wa wavuti.

ESP32 inajua jinsi ya kujibu, kwa sababu kwa usanidi majibu ya maombi yote yanayoruhusiwa yamesajiliwa kwa kutumia server.on (). Kwa mfano, ukurasa kuu wa wavuti au faharisi (/) hushughulikiwa kama hii:

server.on ("/", HTTP_GET, (ombi la AsyncWebServerRequest *) {Serial.println ("/ ombi limepokea!"); msindikaji);});

Kwa hivyo ikiwa mteja ataunganisha, ESP32 hujibu kwa kutuma index index.html kutoka kwa mfumo wa faili wa SPIFFS. Prosesa ya parameter ni jina la kazi ambayo inasindika html na inachukua lebo yoyote maalum:

// Inachukua nafasi ya washika nafasi kwenye html kama% DATA% // na vigeuzi unavyotaka kuonyesha //

Takwimu:% DATA%

Kamba processor (const String & var) {if (var == "DATA") {//Serial.println("in processor! "); Rudisha Kamba (wajibuCycleNow); } Rudisha Kamba ();}

Sasa, hebu tambua index.html ya ukurasa wa wavuti yenyewe. Kwa ujumla kuna sehemu tatu kila wakati:

  1. nambari ya html: ni vitu gani vinapaswa kuonyeshwa (vifungo / maandishi / vigae / picha nk),
  2. nambari ya mtindo, iwe katika faili tofauti ya.css au katika sehemu ya…: vitu vinapaswa kuonekanaje,
  3. JavaScript… sehemu: jinsi ukurasa wa wavuti unapaswa kutenda.

Mara index.html inapopakia kwenye kivinjari (ambayo inajua ni html kwa sababu ya laini ya DOCTYPE), inaingia kwenye mstari huu:

Hilo ni ombi la karatasi ya mtindo wa css. Mahali pa karatasi hii imetolewa kwa href = "…". Kwa hivyo kivinjari chako hufanya nini? Haki, inazindua ombi lingine kwa seva, wakati huu kwa style.css. Seva inakamata ombi hili, kwa sababu ilisajiliwa:

server.on ("/ style.css", HTTP_GET, (ombi la AsyncWebServerRequest *) {Serial.println ("ombi la css limepokelewa"); ");});

Nadhifu huh? Kwa bahati mbaya, inaweza kuwa href = "/ some / file / on / the / the other / side / of / the / the moon", kwa kivinjari chako kilijali. Ingeenda kuchukua faili hiyo kwa furaha tu. Sitaelezea juu ya laida ya mitindo kwani inadhibiti tu mwonekano kwa hivyo sio ya kupendeza hapa, lakini ikiwa unataka kujifunza zaidi, angalia mafunzo haya.

Nembo ya DuvelBot inaonekanaje? Katika index.html tuna:

ambayo ESP32 inajibu na:

server.on ("/ duvel", HTTP_GET, (ombi la AsyncWebServerRequest *) {Serial.println ("ombi la nembo ya duvel limepokelewa!"); ombi-> tuma (SPIFFS, "/duvel.png", "image / png ");});

faili nyingine ya SPIFFS, wakati huu picha kamili, kama inavyoonyeshwa na "picha / png" katika jibu.

Sasa tunakuja kwenye sehemu ya kupendeza sana: nambari ya vifungo. Wacha tuangalie kitufe cha FORWARD:

MBELE

Jina la darasa = "…" ni jina tu kuliunganisha kwenye laha la mitindo ili kubadilisha ukubwa, rangi, n.k. Sehemu muhimu ni onmousedown = "toggleCheckbox ('forward')" na onmouseup = "toggleCheckbox ('stop') ". Hizi ni hatua za kitufe (sawa kwa ontouchstart / ontouchend lakini hiyo ni skrini za kugusa / simu). Hapa, kitendo cha kifungo huita kazi toggleCheckbox (x) katika sehemu ya javascript:

kazi toggleCheckbox (x) {var xhr = XMLHttpRequest mpya (); xhr. kufungua ("GET", "/" + x, kweli); xhr.tuma (); // inaweza kufanya kitu na majibu pia ikiwa tayari, lakini hatufanyi}

Kwa hivyo kubonyeza kitufe cha mbele, mara moja husababisha toggleCheckbox ('mbele') iitwe. Kazi hii kisha huzindua XMLHttpRequest "GET", ya eneo "/ mbele" ambayo hufanya tu kama ungeandika 192.168.0.121/ mbele katika bar yako ya anwani ya kivinjari. Ombi hili likiwasili tu kwa ESP32, linashughulikiwa na:

server.on ("/ mbele", HTTP_GET, (ombi la AsyncWebServerRequest *) {Serial.println ("kupokea / mbele"); hatuaNow = MBELE, ombi-> tuma (200, "maandishi / wazi", "Sawa mbele. ");});

Sasa ESP32 inajibu tu kwa maandishi "Sawa mbele". Kumbuka toggleCheckBox () haifanyi chochote na (au subiri) jibu hili, hata hivyo inaweza kama inavyoonyeshwa baadaye kwenye nambari ya kamera.

Yenyewe wakati wa jibu hili, mpango huweka tu hatua inayobadilikaNow = MBELE, kama jibu la kubonyeza kitufe. Sasa katika msingi wa programu, tofauti hii inafuatiliwa kwa lengo la kupanda juu / chini ya PWM ya motors. Mantiki ni: maadamu tuna hatua ambayo sio STOP, pandisha motors kwa mwelekeo huo hadi nambari fulani (dutyCycleMax) ifikiwe. Kisha shikilia kasi hiyo, maadamu hatuaNow haijabadilika:

kitanzi batili () {currentMillis = millis (); ikiwa (currentMillis - previousMillis> = dutyCycleStepDelay) {// kuokoa mara ya mwisho kutekeleza kitanzi previousMillis = currentMillis; // mainloop inawajibika kwa kupanda juu / chini kwa motors ikiwa (actionNow! = previousAction) {// panda chini, kisha simama, kisha ubadilishe hatua na upandishe wajibuCycleNow = wajibuCycleNow-dutyCycleStep; ikiwa (dutyCycleNow <= 0) {// ikiwa baada ya kukanyaga dc ni 0, weka mwelekeo mpya, anza saa min dutycycle setDir (actionNow); uliopitaAction = hatuaSasa; wajibuCycleNow = wajibuCycleMin; }} mwingine // actionNow == previousAction panda juu, isipokuwa wakati mwelekeo ni STOP {if (actionNow! = STOP) {dutyCycleNow = dutyCycleNow + dutyCycleStep; ikiwa (dutyCycleNow> dutyCycleMax) dutyCycleNow = dutyCycleMax; jukumu lingineCycleNow = 0; } ledcWrite (pwmChannel, dutyCycleNow); // rekebisha pikipiki}}

Hii polepole huongeza kasi ya motors, badala ya kuzindua tu kwa kasi kamili na kumwagika Duvel ya thamani. Uboreshaji dhahiri itakuwa kuhamisha nambari hii kwa utaratibu wa kukatisha timer, lakini inafanya kazi kama ilivyo.

Sasa ikiwa tutatoa kitufe cha mbele, kivinjari chako huita toggleCheckbox ('stop'), na kusababisha ombi la GET / stop. ESP32 inaweka hatua Sasa ya KUACHA (na inajibu kwa "OK stop."), Ambayo hutumia mainloop kuzunguka motors.

Je! Kuhusu LEDs? Utaratibu sawa, lakini sasa tuna slider:

Katika javascript, mipangilio ya kitelezi inafuatiliwa, kama kwamba kila wakati mabadiliko ya simu ya kupata "/ LED / xxx" hufanyika, ambapo xxx ni thamani ya mwangaza ambayo LED zinapaswa kuwekwa kwenye:

var slide = hati.getElementById ('slide'), sliderDiv = document.getElementById ("sliderAmount"); slide.onchange = kazi () {var xhr = XMLHttpRequest mpya (); xhr.open ("GET", "/ LED /" + hii.thamani, kweli); xhr.tuma (); sliderDiv.innerHTML = hii.thamani; }

Kumbuka kuwa tulitumia document.getElementByID ('slide') kupata kitu cha kutelezesha chenyewe, ambacho kilitangazwa na kwamba thamani ni pato kwa kipengee cha maandishi kwenye kila mabadiliko.

Mshughulikiaji katika mchoro huchukua maombi yote ya mwangaza kwa kutumia "/ LED / *" katika usajili wa mshughulikiaji. Kisha sehemu ya mwisho (nambari) imegawanywa na kutupwa kwa int:

server.on ("/ LED / *", HTTP_GET, (ombi la AsyncWebServerRequest *) {Serial.println ("ombi lililoongozwa limepokea!"); setLedBrightness ((ombi-> url ()). substring (5).toInt ombi)> tuma (200, "maandishi / wazi", "Sawa Leds.");});

Sawa kama ilivyoelezewa hapo juu, radiobuttons hudhibiti vigeu ambavyo huweka chaguomsingi za PWM, kama vile DuvelBot inaweza kukuendesha polepole na bia, kuwa mwangalifu usimwague dhahabu hiyo ya kioevu, na kurudi jikoni haraka kuchukua zingine.

… Kwa hivyo ni vipi picha ya kamera inasasishwa bila wewe kuburudisha ukurasa? Kwa hiyo tunatumia mbinu inayoitwa AJAX (Asynchronous JavaScript na XML). Shida ni kwamba kawaida muunganisho wa seva ya mteja hufuata utaratibu uliowekwa: mteja (kivinjari) hufanya ombi, seva (ESP32) hujibu, kesi imefungwa. Imefanywa. Hakuna kinachotokea tena. Ikiwa tu kwa njia fulani tunaweza kudanganya kivinjari kwa kuomba mara kwa mara sasisho kutoka kwa ESP32… na ndivyo tutakavyofanya na kipande hiki cha javascript:

setInterval (function () {var xhttp = XMLHttpRequest mpya (); xhttp.open ("GET", "/ CAMERA", kweli); xhttp.responseType = "blob"; xhttp.timeout = 500; xhttp.onload = function (e) {if (this.readyState == 4 && this.status == 200) {// tazama: 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); hati.querySelector ("# picha"). src = imageUrl; urlCreator.revokeObjectURL (imageurl)}}; xhttp.send ();}, 250);

setInterval inachukua kama parameter kazi na kuifanya kila mara (hapa mara moja kwa 250ms kusababisha muafaka 4 / sekunde). Kazi ambayo imetekelezwa hufanya ombi la "blob" ya binary kwenye anwani / CAMERA. Hii inashughulikiwa na ESP32-CAM kwenye mchoro kama (kutoka Randomnerdtutorials):

server.on ("/ CAMERA", HTTP_GET, (ombi la AsyncWebServerRequest *) {Serial.println ("ombi la kamera lilipokelewa!"); * _jpg_buf = NULL; / tayari katika muundo huu kutoka kwa usanidi {bool jpeg_converted = frame2jpg (fb, 80, & _jpg_buf, & _jpg_buf_len); esp_camera_fb_return (fb); fb = NULL; kama (! }} mwingine {_jpg_buf_len = fb-> len; _jpg_buf = fb-> buf;} //Serial.println(_jpg_buf_len); // tuma ombi la picha lililopangwa-> send_P (200, "image / jpg", _jpg_buf, _jpg_buf_len // kusafisha ikiwa (fb) {esp_camera_fb_return (fb); fb = NULL; _jpg_buf = NULL;} vingine ikiwa (_jpg_buf) {bure (_jpg_buf); _jpg_buf = NULL;}});

Sehemu muhimu zinapata fremu fb = esp_camera_fb_get () kuibadilisha kuwa-j.webp

Kazi ya javascript basi inasubiri picha hii ifike. Halafu inachukua kazi kidogo kubadilisha "blob" iliyopokea kuwa url ambayo inaweza kutumika kama chanzo cha kusasisha picha na kwenye ukurasa wa html.

phew, tumemaliza!

Hatua ya 4: Mawazo na Mabaki

Mawazo & Mabaki
Mawazo & Mabaki

Lengo la mradi huu kwangu lilikuwa kujifunza programu ya wavuti ya kutosha kusanikisha vifaa kwenye wavuti. Viendelezi kadhaa vya mradi huu vinawezekana. Hapa kuna maoni kadhaa:

  • Tekeleza utiririshaji wa kamera 'halisi' kama ilivyoelezewa hapa na hapa na uhamishe kwa seva ya 2 kama ilivyoelezewa hapa kwenye ESP32 sawa, lakini kwenye msingi mwingine wa CPU, kisha ingiza camerastream kwenye html inayotumiwa na seva ya 1 kwa kutumia…. Hii inapaswa kusababisha sasisho za kamera haraka.
  • Tumia hali ya ufikiaji (AP) ili roboti iwe sawa kama ilivyoelezwa hapa.
  • Panua na kipimo cha voltage ya betri, uwezo wa kulala-nk nk Hii ni ngumu kwa sasa kwa sababu AI-Thinker ESP32-CAM haina GPIO nyingi; inahitaji upanuzi kupitia uart na kwa mfano mtumwa arduino.
  • Badilisha kwa roboti inayotafuta paka ambayo inakataza chipsi za paka mara kwa mara kwenye kitufe cha kitufe cha kitufe kikubwa, mkondo wa tani za picha nzuri za paka wakati wa mchana…

Tafadhali toa maoni ikiwa umependa au una maswali na asante kwa kusoma!

Ilipendekeza: