Isi kandungan:

DuvelBot - Robot Servis Bir ESP32-CAM: 4 Langkah (dengan Gambar)
DuvelBot - Robot Servis Bir ESP32-CAM: 4 Langkah (dengan Gambar)

Video: DuvelBot - Robot Servis Bir ESP32-CAM: 4 Langkah (dengan Gambar)

Video: DuvelBot - Robot Servis Bir ESP32-CAM: 4 Langkah (dengan Gambar)
Video: Голубая стрела (1958) фильм 2024, Jun
Anonim
DuvelBot - Robot Servis Bir ESP32-CAM
DuvelBot - Robot Servis Bir ESP32-CAM

Setelah seharian bekerja keras, tidak ada yang menghirup bir kegemaran anda di sofa. Dalam kes saya, itulah ale berambut perang Belgia "Duvel". Walau bagaimanapun, setelah runtuh, kita berhadapan dengan masalah yang paling serius: peti sejuk yang mengandungi Duvel saya adalah 20 kaki yang tidak dapat dibakar yang dikeluarkan dari sofa tersebut.

Walaupun beberapa pemaksaan ringan dari pihak saya mungkin menggerakkan pemulung peti sejuk remaja sekali-sekala untuk mencurahkan kelonggaran Duvel minggu saya, tugas untuk benar-benar menyerahkannya kepada leluhurnya yang hampir habis jelas satu langkah terlalu jauh.

Masa untuk memecahkan solder dan papan kekunci…

DuvelBot adalah kamera web pemanduan berasaskan AI-Thinker ESP32-CAM tanpa kemudahan tambahan, yang boleh anda kendalikan dari telefon pintar, penyemak imbas atau tablet anda.

Sangat mudah untuk menyesuaikan atau mengembangkan platform ini ke penggunaan yang kurang alkoholik (fikir SpouseSpy, NeighbourWatch, KittyCam…).

Saya membina robot ini terutamanya untuk mengetahui sedikit mengenai keseluruhan pengaturcaraan web dan perkara IoT, yang mana saya tidak tahu apa-apa. Jadi pada akhir Instructable ini adalah penjelasan yang terperinci tentang bagaimana ia berfungsi.

Banyak bahagian dari Instructable ini berdasarkan penjelasan yang sangat baik yang terdapat di Random Nerd Tutorials, jadi sila lawati mereka!

Bekalan

Apa yang kamu perlu:

Senarai alat ganti tidak diukir dengan batu dan banyak bahagian boleh didapati dalam banyak versi dan dari pelbagai tempat. Saya membeli paling banyak dari Ali-Express. Seperti kata Machete: improvisasi.

Perkakasan:

  • Modul AI Thinker ESP32-CAM. Mungkin berfungsi dengan modul ESP32-CAM yang lain tetapi itulah yang saya gunakan
  • Papan pemandu motor L298N,
  • Platform robotik roda 4 yang murah,
  • Perumahan dengan permukaan rata yang besar seperti Hammond Electronics 1599KGY,
  • Penukar USB-ke-3.3V-TTL untuk pengaturcaraan.
  • Untuk pencahayaan: 3 LED putih, BC327 atau transistor NPN tujuan umum lain (Ic = 500mA), perintang 4k7k, perintang 3 82Ohm, papan wangi, kabel (lihat skema dan gambar).
  • Suis togol hidup / mati dan butang tekan yang biasanya terbuka untuk pengaturcaraan.

Pilihan:

  • Kamera fisheye dengan fleksibel lebih lama daripada kamera OV2460 standard yang disediakan dengan modul ESP32-CAM,
  • Antena WiFi dengan kabel panjang yang sesuai dan Ultra Miniature Coax Connector, seperti ini. ESP32-CAM mempunyai antena onboard dan perumahannya plastik, jadi antena tidak benar-benar diperlukan, namun saya fikir ia kelihatan sejuk, jadi…
  • Kertas pelekat yang boleh dicetak Inkjet untuk reka bentuk penutup atas.

Alat perkakasan yang biasa: besi pematerian, gerudi, pemutar skru, tang …

Langkah 1: Membina Platform Robot

Membina Platform Robot
Membina Platform Robot
Membina Platform Robot
Membina Platform Robot
Membina Platform Robot
Membina Platform Robot

Skema:

Skema tidak ada yang istimewa. ESP32-cam mengawal motor melalui papan pemacu motor L298N, yang mempunyai dua saluran. Motor sebelah kiri dan kanan diletakkan selari dan setiap sisi menempati satu saluran. Empat kapasitor seramik 10..100nF kecil yang dekat dengan pin motor adalah seperti biasa untuk mengatasi gangguan RF. Juga, penutup elektrolitik besar (2200… 4700uF) pada bekalan papan motor seperti yang ditunjukkan dalam skema, walaupun tidak diperlukan secara ketat, dapat membatasi sedikit riak voltan bekalan (jika anda ingin menonton filem seram, kemudian siasat Vbat dengan osiloskop semasa motor aktif).

Perhatikan bahawa kedua-dua saluran motor pin ENABLE didorong oleh pin modulasi lebar denyut (PWM) yang sama pada ESP32 (IO12). Ini kerana modul ESP32-CAM tidak mempunyai banyak GPIO (skema modul disertakan untuk rujukan). LED robot didorong oleh IO4, yang juga menggerakkan LED flash onboard, jadi lepaskan Q1 untuk mengelakkan lampu kilat LED menyala di perumahan tertutup.

Butang pengaturcaraan, suis hidup / mati, penyambung pengecasan dan penyambung pengaturcaraan dapat diakses di bawah robot. Saya boleh melakukan pekerjaan yang lebih baik untuk penyambung pengaturcaraan (bicu 3.5mm?), Tetapi bir tidak sabar lagi. Juga kemas kini melalui udara (OTA) lebih baik untuk disiapkan.

Untuk meletakkan robot dalam mod pengaturcaraan, tekan butang pengaturcaraan (ini menarik IO0 rendah) dan kemudian hidupkan.

Penting: untuk mengecas bateri NiMH robot, gunakan set bekalan makmal (dibongkar) hingga sekitar 14V dan arus terhad kepada 250mA. Voltan akan menyesuaikan diri dengan voltan bateri. Putuskan sambungan sekiranya robot terasa panas atau voltan bateri mencapai sekitar 12.5V. Peningkatan yang jelas di sini adalah dengan mengintegrasikan pengecas bateri yang betul, tetapi itu di luar ruang lingkup Instructable ini.

Perkakasan:

Sila lihat juga nota dalam gambar. Perumahan dipasang di pangkalan robot menggunakan baut 4 M4 dan mur terkunci sendiri. Perhatikan tabung getah yang digunakan sebagai jarak jarak. Mudah-mudahan, ini juga memberikan sedikit penggantungan kepada Duvel, sekiranya perjalanannya terbukti bergelombang. Modul ESP32-CAM dan papan motor L298N dipasang di perumahan menggunakan kaki melekit plastik (tidak pasti dengan nama yang betul dalam bahasa Inggeris), untuk mengelakkan daripada perlu mengebor lubang tambahan. ESP32 juga dipasang pada papan wangi sendiri dan pinheaders yang dapat dipasang. Ini memudahkan pertukaran ESP32.

Jangan lupa: jika anda menggunakan antena WiFi luaran dan bukan antena terpasang, kemudian pasangkan pelompat pemilihan antena di bahagian bawah papan ESP32-CAM.

Cetak logo teratas dalam fail DuvelBot.svg pada kertas pelekat inkjet (atau reka bentuk sendiri), dan anda sudah bersedia!

Langkah 2: Programkan Robot

Atur Cara Robot
Atur Cara Robot

Sebaiknya atur cara robot sebelum anda menutupnya, untuk memastikan semuanya berfungsi dan tidak ada asap sihir yang muncul.

Anda memerlukan alat perisian berikut:

  • The Arduino IDE,
  • Perpustakaan ESP32, SPIFFS (sistem fail flash periferi bersiri), perpustakaan ESPAsync Webserver.

Yang terakhir ini boleh dipasang dengan mengikuti rutut rawak ini hingga dan termasuk bahagian "mengatur fail anda". Saya tidak dapat menerangkannya dengan lebih baik.

Kodnya:

Kod saya boleh didapati di:

  • Sketsa Arduino DuvelBot.ino,
  • Subfolder data yang menyimpan fail yang akan dimuat ke flash ESP menggunakan SPIFFS. Folder ini mengandungi halaman web yang akan disajikan oleh ESP (index.html), gambar logo yang merupakan sebahagian dari halaman web (duvel.png) dan helaian gaya bertingkat atau fail CSS (style.css).

Untuk memprogram robot:

  • Sambungkan penukar USB-TTL seperti yang ditunjukkan dalam skema,
  • Fail -> Buka -> pergi ke folder di mana DuvelBot.ino berada.
  • Ubah kelayakan rangkaian anda dalam lakaran:

const char * ssid = "yourNetworkSSIDHere"; const char * kata laluan = "yourPassword Here";

  • Tools -> Board -> "AI-Thinker ESP-32 CAM" dan pilih port bersiri yang sesuai untuk komputer anda (Tools -> Port -> sesuatu seperti / dev / ttyUSB0 atau COM4),
  • Buka monitor bersiri di Arduino IDE, Sambil menekan butang PROG (yang menarik IO0 rendah), hidupkan robot,
  • Periksa pada monitor bersiri bahawa ESP32 siap dimuat turun,
  • Tutup monitor bersiri (jika tidak, muat naik SPIFFS gagal),
  • Tools -> "ESP32 Sketch Data Upload" dan tunggu sehingga selesai,
  • Matikan dan hidupkan lagi dengan menahan butang PROG untuk kembali ke mod pengaturcaraan,
  • Tekan anak panah "Muat Naik" untuk memprogram lakaran dan tunggu hingga selesai,
  • Buka monitor bersiri dan tetapkan semula ESP32 dengan mematikan / menghidupkan,
  • Setelah boot, catat alamat ip (seperti 192.168.0.121) dan cabut robot dari penukar USB-TTL,
  • Buka penyemak imbas di alamat ip ini. Anda harus melihat antara muka seperti dalam gambar.
  • Pilihan: tetapkan alamat mac ESP32 ke alamat ip tetap di penghala anda (bergantung kepada cara melakukannya oleh penghala).

Itu sahaja! Baca terus jika anda ingin mengetahui cara kerjanya…

Langkah 3: Bagaimana Ia Berfungsi

Sekarang kita sampai pada bahagian yang menarik: bagaimana semuanya berfungsi bersama?

Saya akan cuba menerangkannya langkah demi langkah tetapi perlu diingat bahawa Kajnjaps bukan pakar pengaturcaraan web. Sebenarnya, belajar sedikit pengaturcaraan web adalah keseluruhan premis untuk membina DuvelBot. Sekiranya saya melakukan kesalahan yang jelas, sila tinggalkan komen!

Ok, setelah ESP32 dihidupkan, seperti biasa dalam penyediaan ia menginisialisasi GPIO, mengaitkannya dengan pemasa PWM untuk kawalan motor dan LED. Lihat di sini untuk maklumat lebih lanjut mengenai kawalan motor, ia cukup standard.

Kemudian kamera dikonfigurasikan. Saya sengaja mengekalkan resolusi agak rendah (VGA atau 640x480) untuk mengelakkan tindak balas yang perlahan. Perhatikan bahawa papan AI-Thinker ESP32-CAM mempunyai cip ram bersiri (PSRAM) yang digunakannya untuk menyimpan bingkai kamera dengan resolusi yang lebih besar:

if (psramFound ()) {Serial.println ("PSRAM dijumpai."); config.frame_size = FRAMESIZE_VGA; config.jpg_quality = 12; config.fb_count = 2; // bilangan framebuffers lihat: https://github.com/espressif/esp32-camera} yang lain {Serial.println ("tidak dijumpai PSRAM."); config.frame_size = FRAMESIZE_QVGA; config.jpg_quality = 12; config.fb_count = 1; }

Kemudian sistem fail flash periferal bersiri (SPIFFS) dimulakan:

// memulakan SPIFFS jika (! SPIFFS.begin (benar)) {Serial.println ("Ralat telah berlaku semasa memasang SPIFFS!"); kembali; }

SPIFFS bertindak seperti sistem fail kecil pada ESP32. Di sini ia digunakan untuk menyimpan tiga fail: laman web itu sendiri index.html, styleheet file style.css, dan logo gambar-p.webp

Seterusnya ESP32 menyambung ke penghala anda (jangan lupa untuk menetapkan kelayakan anda sebelum memuat naik):

// ubah kelayakan penghala anda di sini char * ssid = "yourNetworkSSID Here"; const char * password = "yourPassword Here"; … // sambungkan ke WiFi Serial.print ("Menyambung ke WiFi"); WiFi.begin (ssid, kata laluan); sementara (WiFi.status ()! = WL_CONNECTED) {Serial.print ('.'); kelewatan (500); } // kini disambungkan ke penghala: ESP32 kini mempunyai alamat ip

Untuk benar-benar melakukan sesuatu yang berguna, kami memulakan pelayan web tidak segerak:

// buat objek AsyncWebServer pada port 80AsyncWebServer server (80); … Server.begin (); // mula mendengar sambungan

Sekarang, jika anda memasukkan alamat ip yang diberikan ke ESP32 oleh penghala di bar alamat penyemak imbas, ESP32 mendapat permintaan. Ini bermaksud ia harus memberi respons kepada klien (anda, atau penyemak imbas anda) dengan memberikan sesuatu, misalnya laman web.

ESP32 tahu bagaimana untuk bertindak balas, kerana dalam penyediaan respons terhadap semua kemungkinan permintaan yang dibenarkan telah didaftarkan menggunakan server.on (). Contohnya, laman web utama atau indeks (/) dikendalikan seperti ini:

server.on ("/", HTTP_GET, (permintaan AsyncWebServerRequest *) {Serial.println ("/ permintaan diterima!"); request-> send (SPIFFS, "/index.html", String (), false, pemproses);});

Oleh itu, jika pelanggan menyambung, ESP32 bertindak balas dengan menghantar index.html fail dari sistem fail SPIFFS. Pemproses parameter adalah nama fungsi yang memproses html dan menggantikan sebarang tag khas:

// Mengganti tempat letak di html seperti% DATA% // dengan pemboleh ubah yang ingin anda tunjukkan //

Data:% DATA%

Pemproses tali (const String & var) {if (var == "DATA") {//Serial.println("in pemproses! "); kembali String (dutyCycleNow); } kembali String ();}

Sekarang, mari kita lumpuhkan laman web index.html itu sendiri. Secara amnya selalu ada tiga bahagian:

  1. kod html: elemen apa yang harus ditunjukkan (butang / teks / slider / gambar dll),
  2. kod gaya, sama ada dalam fail.css yang berasingan atau di bahagian…: seperti apa elemennya,
  3. javascript a… bahagian: bagaimana laman web harus bertindak.

Setelah index.html dimuat ke dalam penyemak imbas (yang tahu ia adalah html kerana baris DOCTYPE), ia berjalan ke baris ini:

Itu adalah permintaan untuk helaian gaya css. Lokasi helaian ini diberikan dalam href = "…". Oleh itu, apa yang dilakukan oleh penyemak imbas anda? Betul, ia melancarkan permintaan lain ke pelayan, kali ini untuk style.css. Pelayan menangkap permintaan ini, kerana telah didaftarkan:

server.on ("/ style.css", HTTP_GET, (permintaan AsyncWebServerRequest *) {Serial.println ("permintaan css diterima"); request-> send (SPIFFS, "/style.css", "text / css ");});

Rapi ya? Secara kebetulan, mungkin href = "/ some / file / on / the / other / side / of / the / moon", untuk semua penyemak imbas anda dijaga. Ia akan mengambil fail itu dengan senang hati. Saya tidak akan menerangkan tentang helaian gaya kerana ia hanya mengawal penampilan sehingga tidak begitu menarik di sini, tetapi jika anda ingin mengetahui lebih lanjut, periksa tutorial ini.

Bagaimana logo DuvelBot muncul? Di index.html kami mempunyai:

yang mana ESP32 bertindak balas dengan:

server.on ("/ duvel", HTTP_GET, (permintaan AsyncWebServerRequest *) {Serial.println ("permintaan logo duvel diterima!"); request-> hantar (SPIFFS, "/duvel.png", "image /-p.webp

..lain fail SPIFFS, kali ini gambar lengkap, seperti yang ditunjukkan oleh "gambar / png" dalam respons.

Sekarang kita sampai pada bahagian yang sangat menarik: kod butang. Mari fokus pada butang FORWARD:

KE DEPAN

Nama class = "…" hanyalah nama untuk menghubungkannya ke helaian gaya untuk menyesuaikan ukuran, warna, dan lain-lain. Bahagian pentingnya adalah onmousedown = "toggleCheckbox ('forward')" dan onmouseup = "toggleCheckbox ('stop') ". Ini merupakan tindakan butang (sama untuk ontouchstart / ontouchend tetapi untuk itu adalah skrin sentuh / telefon). Di sini, tindakan butang memanggil fungsi toggleCheckbox (x) di bahagian javascript:

fungsi toggleCheckbox (x) {var xhr = XMLHttpRequest baru (); xhr.open ("DAPATKAN", "/" + x, benar); xhr.send (); // dapat melakukan sesuatu dengan respons juga ketika siap, tetapi kami tidak}

Oleh itu, menekan butang ke hadapan, dengan segera menyebabkan toggleCheckbox ('maju') dipanggil. Fungsi ini kemudian melancarkan XMLHttpRequest "GET", dari lokasi "/ maju" yang bertindak sama seperti jika anda mengetik 192.168.0.121/teruskan di bar alamat penyemak imbas anda. Setelah permintaan ini sampai di ESP32, permintaan ini akan dikendalikan oleh:

server.on ("/ forward", HTTP_GET, (permintaan AsyncWebServerRequest *) {Serial.println ("diterima / maju"); actionNow = FORWARD; request-> send (200, "text / plain", "OK forward. ");});

Sekarang ESP32 hanya membalas dengan teks "OK ke hadapan". Perhatikan toggleCheckBox () tidak melakukan apa-apa dengan (atau tunggu) respons ini, namun seperti yang ditunjukkan kemudian dalam kod kamera.

Dengan sendirinya semasa tindak balas ini, program hanya menetapkan tindakan berubahNow = FORWARD, sebagai tindak balas untuk menekan butang. Sekarang di mainloop program, pemboleh ubah ini dipantau dengan tujuan untuk menaikkan / menurunkan PWM motor. Logiknya adalah: selagi kita melakukan tindakan yang tidak BERHENTI, naikkan motor ke arah itu sehingga nombor tertentu (dutyCycleMax) tercapai. Kemudian tegakkan kelajuan itu, selagi tindakanNow tidak berubah:

gelung kosong () {currentMillis = millis (); if (currentMillis - previousMillis> = dutyCycleStepDelay) {// simpan kali terakhir anda menjalankan gelung sebelumnyaMillis = currentMillis; // mainloop bertanggungjawab untuk menaikkan / menurunkan motor jika (actionNow! = sebelumnyaAction) {// turun ke bawah, kemudian berhenti, kemudian ubah tindakan dan naikkan dutyCycleNow = dutyCycleNow-dutyCycleStep; if (dutyCycleNow <= 0) {// jika setelah menaikkan dc adalah 0, tetapkan ke arah baru, mulakan pada min dutycycle setDir (actionNow); sebelumnyaAction = actionNow; dutyCycleNow = dutyCycleMin; }} lain // actionNow == sebelumnyaTindakan tindakan meningkat, kecuali apabila arahnya BERHENTI {if (actionNow! = STOP) {dutyCycleNow = dutyCycleNow + dutyCycleStep; jika (dutyCycleNow> dutyCycleMax) dutyCycleNow = dutyCycleMax; } duty dutyCycleNow = 0; } ledcWrite (pwmChannel, dutyCycleNow); // sesuaikan kitaran motor}}

Ini perlahan-lahan meningkatkan kelajuan motor, bukan hanya melancarkan pada kelajuan penuh dan menumpahkan Duvel yang sangat berharga. Peningkatan yang jelas ialah memindahkan kod ini ke rutin gangguan pemasa, tetapi ia berfungsi sebagaimana adanya.

Sekarang jika kita melepaskan butang ke depan, penyemak imbas anda memanggil toggleCheckbox ('stop'), menghasilkan permintaan untuk GET / stop. ESP32 menetapkan tindakan Sekarang untuk BERHENTI (dan bertindak balas dengan "OK berhenti."), Yang mengarahkan mainloop untuk memutar motor.

Bagaimana dengan LED? Mekanisme yang sama, tetapi sekarang kita mempunyai gelangsar:

Dalam javascript, pengaturan slider dipantau, sehingga pada setiap perubahan panggilan untuk mendapatkan "/ LED / xxx" terjadi, di mana xxx adalah nilai kecerahan yang harus ditetapkan LED pada:

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

Perhatikan bahawa kami menggunakan document.getElementByID ('slaid') untuk mendapatkan objek slaid itu sendiri, yang dinyatakan dengan dan nilainya dikeluarkan ke elemen teks dengan setiap perubahan.

Penangan dalam lakaran menangkap semua permintaan kecerahan dengan menggunakan "/ LED / *" dalam pendaftaran pengendali. Kemudian bahagian terakhir (nombor) dibahagi dan dilancarkan ke int:

server.on ("/ LED / *", HTTP_GET, (permintaan AsyncWebServerRequest *) {Serial.println ("permintaan dipimpin diterima!"); setLedBrightness ((request-> url ()). substring (5).toInt ()); request-> send (200, "text / plain", "OK Leds.");});

Sama seperti yang dijelaskan di atas, butang radio mengawal pemboleh ubah yang menetapkan lalai PWM, sehingga DuvelBot dapat memandu perlahan-lahan kepada anda dengan bir, berhati-hati untuk tidak menumpahkan emas cair itu, dan cepat kembali ke dapur untuk mengambil lagi.

… Jadi bagaimana gambar kamera dapat diperbaharui tanpa anda perlu memuat semula halaman? Untuk itu kami menggunakan teknik yang dipanggil AJAX (Asynchronous JavaScript and XML). Masalahnya ialah biasanya sambungan pelanggan-pelayan mengikuti prosedur tetap: klien (penyemak imbas) membuat permintaan, pelayan (ESP32) bertindak balas, kes ditutup. Selesai. Tiada apa yang berlaku lagi. Kalaulah entah bagaimana kita dapat memperdayakan penyemak imbas agar selalu meminta kemas kini dari ESP32 … dan itulah yang akan kita lakukan dengan sekeping javascript ini:

setInterval (function () {var xhttp = new XMLHttpRequest (); xhttp.open ("GET", "/ CAMERA", true); xhttp.responseType = "blob"; xhttp.timeout = 500; xhttp.ontimeout = fungsi () {}; xhttp.onload = function (e) {if (this.readyState == 4 && this.status == 200) {// lihat: 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); // buat objek dari gumpalan document.querySelector ("# camimage"). src = imageUrl; urlCreator.revokeObjectURL (imageurl)}}; xhttp.send ();}, 250);

setInterval mengambil fungsi sebagai parameter dan melaksanakannya sesering mungkin (di sini sekali setiap 250ms menghasilkan 4 bingkai / saat). Fungsi yang dilaksanakan membuat permintaan untuk "gumpalan" binari di alamat / KAMERA. Ini dikendalikan oleh ESP32-CAM dalam lakaran sebagai (dari Randomnerdtutorials):

server.on ("/ CAMERA", HTTP_GET, (permintaan AsyncWebServerRequest *) {Serial.println ("permintaan kamera diterima!"); camera_fb_t * fb = NULL; // esp_err_t res = ESP_OK; size_t _jpg_buf_len = 0; uint8 * _jpg_buf = NULL; // tangkap bingkai fb = esp_camera_fb_get (); if (! fb) {Serial.println ("Penyangga bingkai tidak dapat diperoleh"); kembali;} jika (fb-> format! = PIXFORMAT_JPEG) / / sudah dalam format ini dari config {bool jpeg_converted = frame-j.webp

Bahagian penting ialah mendapatkan bingkai fb = esp_camera_fb_get () menukarnya menjadi-j.webp

Fungsi javascript kemudian menunggu gambar ini tiba. Maka hanya memerlukan sedikit kerja untuk mengubah "gumpalan" yang diterima menjadi url yang dapat digunakan sebagai sumber untuk mengemas kini gambar dengan di halaman html.

phew, kita sudah selesai!

Langkah 4: Idea & Sisa

Idea & Tinggalan
Idea & Tinggalan

Matlamat projek ini bagi saya adalah untuk belajar pengaturcaraan web yang cukup untuk menghubungkan perkakasan ke web. Terdapat beberapa sambungan untuk projek ini. Berikut adalah beberapa idea:

  • Laksanakan streaming kamera 'nyata' seperti yang dijelaskan di sini dan di sini dan pindahkan ke pelayan ke-2 seperti yang dijelaskan di sini pada ESP32 yang sama, tetapi pada teras CPU yang lain, kemudian import camerastream ke dalam html yang dilayan oleh pelayan ke-1 menggunakan…. Ini akan menghasilkan kemas kini kamera yang lebih pantas.
  • Gunakan mod titik akses (AP) agar robot lebih mandiri seperti yang dijelaskan di sini.
  • Kembangkan dengan pengukuran voltan bateri, keupayaan tidur nyenyak dll. Ini agak sukar pada masa ini kerana AI-Thinker ESP32-CAM tidak mempunyai banyak GPIO; memerlukan pengembangan melalui uart dan sebagai contoh hamba arduino.
  • Tukar ke robot mencari kucing yang mengeluarkan rawatan kucing dari semasa ke semasa dengan menekan butang besar, mengalirkan banyak gambar kucing yang bagus pada siang hari…

Sila komen jika anda suka atau ada pertanyaan dan terima kasih kerana membaca!

Disyorkan: