3 poin oleh GN⁺ 2025-02-03 | 1 komentar | Bagikan ke WhatsApp
  • ESP32 RC Cars adalah sistem kamera kendali jarak jauh berbasis ESP32-CAM yang menggabungkan streaming video real-time dan kontrol motor·servo melalui WebSocket
  • Aplikasi server Python mengelola komunikasi WebSocket dan menyediakan antarmuka web untuk melihat video dari perangkat ESP32 serta mengendalikannya lewat browser
  • Fitur utamanya mencakup streaming video langsung dari ESP32-CAM, kontrol motor·servo berbasis perintah WebSocket, timeout otomatis yang mengembalikan perangkat ke status default saat tidak ada perintah kontrol, serta kanvas video multi-klien
  • Perangkat keras yang dibutuhkan adalah AI Thinker atau ESP32-CAM kompatibel, motor·servo yang terhubung ke GPIO, catu daya 5V yang stabil, dan jaringan Wi‑Fi; kartu SD bersifat opsional
  • Perintah kontrol menggunakan format MOTOR:<speed>, SERVO:<angle>, CONTROL:<speed>:<angle>, dan server menata frame video dari beberapa klien ESP32 dalam bentuk grid lalu menyiarkannya ke antarmuka web

Gambaran proyek

  • ESP32 RC Cars adalah contoh sistem kamera kendali jarak jauh berbasis ESP32
  • ESP32-CAM mengirim video real-time melalui WebSocket, dan motor serta servo dikendalikan dengan perintah WebSocket
  • Aplikasi server Python mengelola komunikasi WebSocket dan memungkinkan perangkat ESP32 dilihat serta dikendalikan dari antarmuka web
  • Video demo: https://youtu.be/OubYFXmvA1E

Fitur utama

  • Mengirim streaming video langsung dari ESP32-CAM ke server web
  • Mengendalikan motor dan servo dari jarak jauh melalui perintah WebSocket
  • Jika tidak ada perintah kontrol selama jangka waktu tertentu, motor dan servo otomatis kembali ke status default
  • Server menempatkan feed video dari beberapa klien secara dinamis ke dalam kanvas

Perangkat keras dan bahan

  • Perangkat keras yang diperlukan
    • ESP32-CAM, modul AI Thinker, atau board yang kompatibel
    • Motor dan servo yang terhubung ke pin GPIO yang sesuai
    • Catu daya 5V yang stabil untuk ESP32-CAM
    • Jaringan Wi‑Fi untuk komunikasi
    • Kartu SD opsional jika diperlukan untuk fungsi lain
  • Bahan yang digunakan adalah komponen kit yang dibeli dari AliExpress
    • Sasis mobil
    • Electronic speed controller
      • Menggunakan versi 30A, dan output BEC 5V 3A tampak cukup untuk menyediakan arus bagi ESC dan servo
    • Dudukan baterai
    • 2 sel 18650 3.6V atau paket baterai 7.4V
      • Keduanya pernah digunakan, dan sel lebih fleksibel untuk dipakai di proyek lain
    • ESP32-CAM
      • Model dengan antena eksternal sangat penting, dan digunakan kamera fisheye 170 derajat
    • Bluetooth Gamepad
      • Menggunakan kontroler PS4

Skema pengkabelan

  • Adaptor JST 3-pin pada servo yang disertakan di sasis mobil dilepas, lalu dipindahkan ke plug JST 4-pin agar bisa dihubungkan ke ESP32
  • Kabel positif dan negatif servo disambungkan, lalu ditambahkan plug JST betina 3-pin menggunakan alat crimping
  • Kabel kontrol putih dari ESC dihubungkan ke plug JST 4-pin dan plug betina 3-pin

Susunan perangkat lunak

  • Library yang digunakan dalam kode ESP32
    • WiFi.h: koneksi Wi‑Fi
    • ArduinoWebsockets.h: komunikasi WebSocket
    • esp_camera.h: kontrol kamera ESP32-CAM
    • ServoControl.h, Esc.h: kontrol servo dan motor
    • Arduino.h: fungsi Arduino standar
  • Dependensi server Python diinstal dengan perintah berikut
sudo apt install python3-aiohttp python3-opencv python3-numpy

Konfigurasi dan menjalankan

  • Konfigurasi firmware ESP32
    • Atur kredensial Wi‑Fi dan URL server WebSocket di secrets.h
#define WIFI_SSID "YourWiFiSSID"
#define WIFI_PASSWORD "YourWiFiPassword"
#define WS_SERVER_URL "ws://YourServerIP:Port"
  • Pin GPIO kamera sudah dikonfigurasi sebelumnya untuk board AI Thinker ESP32-CAM
  • Jika perlu, ubah pin motor dan servo agar sesuai dengan konfigurasi perangkat keras
  • Konfigurasi server Python
    • Letakkan skrip server di direktori yang sama dengan file index.html untuk antarmuka web
    • Jalankan server dengan perintah berikut
python3 app.py

Cara penggunaan dan perintah WebSocket

  • Prosedur penggunaan ESP32
    • Unggah sketch yang disediakan ke ESP32-CAM menggunakan Arduino IDE atau platform kompatibel
    • Periksa output serial untuk memastikan koneksi ke Wi‑Fi dan server WebSocket berhasil
  • Prosedur penggunaan server
    • Jalankan skrip server Python
    • Buka antarmuka web di browser untuk melihat streaming video langsung
    • Kirim perintah kontrol melalui koneksi WebSocket
  • Perintah yang didukung
    • MOTOR:<speed>: mengatur kecepatan motor, rentang -255 sampai 255
    • SERVO:<angle>: mengatur sudut servo, rentang 0 sampai 180
    • CONTROL:<speed>:<angle>: mengendalikan kecepatan motor dan sudut servo secara bersamaan

Detail operasi dan pemecahan masalah

  • Tahap inisialisasi ESP32
    • Terhubung ke jaringan Wi‑Fi yang ditentukan
    • Mengonfigurasi ESP32-CAM untuk streaming video
    • Membangun koneksi WebSocket dengan server
  • Penanganan timeout mengembalikan kecepatan motor ke 0 dan sudut servo ke 90 saat tidak ada perintah kontrol selama jangka waktu tertentu
  • Server Python berkomunikasi dengan beberapa klien ESP32 melalui WebSocket
  • Server memproses frame video yang masuk, menatanya secara dinamis dalam bentuk grid, lalu menyiarkannya ke antarmuka web
  • Jika ada masalah koneksi, periksa kredensial Wi‑Fi di secrets.h, lalu pastikan server WebSocket berjalan dan dapat diakses
  • Jika ada masalah pada stream video, periksa apakah catu daya ESP32-CAM memadai dan apakah konfigurasi inisialisasi kamera sudah benar
  • Proyek ini dirilis dengan MIT License

1 komentar

 
GN⁺ 2025-02-03
Komentar Hacker News
  • Saya pernah membuat sesuatu yang mirip 12 tahun lalu, saat Arduino sudah ada tetapi ESP32 belum: https://newton-net-pl.translate.goog/2012/01/robot/?_x_tr_sl...
    Saya memakai ponsel HTC Magic lama sebagai kamera + pemancar Wi-Fi, lalu menghubungkannya ke Arduino lewat port serial dan level shifter untuk mengendalikan servo dan LED RGB.
    Koneksinya tidak terlalu stabil, tetapi cukup menyenangkan, dan mungkin sekarang saatnya menghidupkan kembali proyek ini dengan generasi mikrokontroler berikutnya.
  • Terima kasih atas umpan balik untuk proyek ini; saya ingin terus melanjutkannya dan juga ingin menerima PR.
    Jika Anda menyukai proyek ini, bantuan terbesar adalah mengenalkannya kepada orang yang sedang mencari developer remote.
    Pekerjaan utama saya adalah developer Ruby on Rails, tetapi saya juga bisa mempertimbangkan pekerjaan di bidang robotika.
  • Sebelum membeli ESP32 CAM, sebaiknya pertimbangkan model yang memiliki antena eksternal.
    Artikel ini layak dibaca: https://www.reddit.com/r/esp32/comments/r7kqtt/esp32cam_supe...
    Sebelum menerapkan beberapa saran, frame rate-nya cukup buruk.
    • Berdasarkan halaman admin router, begitu saya menyolder ulang resistor dan memasang antena, koneksinya langsung naik dari 1Mbps yang tidak stabil menjadi 20Mbps yang stabil.
      Menyolder ulang resistor 0Ω terasa hampir seperti petualangan, tetapi akhirnya tersambung ke pin yang benar, dan hasilnya seperti ini: https://imgur.com/a/LJflZ80
    • Dari pengalaman saya mengerjakan proyek ini, antena eksternal nyaris wajib.
      Saya sudah menambahkan tautan antena yang digunakan ke README.
    • Bisa merekomendasikan model yang tepat?
  • Keren. Saya membuat tank RC berantai yang digerakkan ESP32, lalu menghubungkannya ke controller PlayStation 4 lewat Bluetooth untuk dikendalikan.
    Software dasarnya bisa dimulai dengan mudah, sekitar 20 baris kode C jika memakai library controller Bluetooth.
    Setelah itu saya menambahkan fitur agar lebih mudah dikendalikan. Cara mengontrol dua track dengan dua stik memang oke pada kecepatan rendah, tetapi karena memakai dua motor drone dan bisa melaju hampir 20km/h, saya butuh skema kontrol lain.
    Pada akhirnya, saya membuat kontrol track langsung dengan pembatas RPM memakai trigger di controller DualShock, dan untuk melaju cepat saya memakai stik kiri atas/bawah sebagai akselerasi serta stik kanan kiri/kanan sebagai kemudi, sehingga bisa dikendarai seperti mobil RC biasa.
    Ini video dari model 3D print yang sama yang saya jadikan basis; kecepatannya terlihat jelas mulai 00:50: https://www.youtube.com/watch?v=3Mv_tDY89Zw
    • Benar-benar mengesankan.
      Saya tidak begitu paham pembuatan RC; biasanya dikendalikan seperti apa? Apakah controller PS4 dihubungkan langsung ke ESP?
  • Masalah besar FPV, dan alasan mengapa ia lama bertahan di teknologi analog, adalah latensi.
    Saya penasaran berapa latensi proyek ini.
    • FPV saat ini umumnya memakai ExpressLRS[0], protokol terbuka untuk link kontrol quadcopter FPV, dan biasanya juga menggunakan ESP32.
      Sementara itu, video pada quadcopter FPV terpisah. Sebagian orang memakai analog karena saat sinyal melemah kualitasnya memburuk secara bertahap, bukan putus total lalu tersambung ulang; sebagian lain memakai komunikasi berbasis 802.11, yang sebenarnya cukup kompetitif.
      Misalnya, Walksnail Goggles memakai 802.11 untuk link video, dan meski tidak terlalu terbuka atau terdokumentasi dengan baik, ada juga orang-orang yang membedah bagian dalamnya seperti dalam karya Chris Rosser.
      Latensi konfigurasi seperti ini tampaknya cukup baik bahkan untuk balap quadcopter cepat yang kompetitif.
      [0] https://www.expresslrs.org
    • Proyek terkait: https://github.com/wooky/esp32-analog-video-over-wifi
      Dan: https://github.com/gyrex/CrystalVideo
    • Saya tidak punya patokan pembanding seperti pengalaman dengan drone FPV, tetapi di jaringan nirkabel rumah, latensi tidak menjadi masalah meski semua perangkat rumah tangga lain juga tersambung.
      Frame rate tampaknya terutama dibatasi oleh seberapa cepat ESP32 bisa menangkap gambar.
      Saat mengukur FPS dengan skrip Python, saya menerima sekitar 50fps dari ESP32, dan baru-baru ini saya membeli router perjalanan untuk mencobanya di luar rumah.
  • Saya sedang mempertimbangkan proyek serupa, jadi penasaran dengan pengalaman terkait latensi.
    Apakah bisa dikendalikan jarak jauh sambil melihat feed video? Kekhawatiran terbesar saya adalah feed itu mungkin terlalu lambat untuk menghindari rintangan pada sebagian besar kecepatan.
  • Tahun lalu saya membeli kit yang sama, dan baru-baru ini juga membeli controller game ESP32 dengan display kecil: https://github.com/01studio-lab/pyController
    Kalau ada waktu, saya ingin menggabungkan keduanya agar bisa mengendalikan mobil sambil melihat feed kamera di display.
  • Jika hasil akhir lebih penting dan keseruan membuatnya tidak terlalu penting, sekarang di AliExpress mobil RC 2,5 inci yang lumayan bisa dibeli seharga 30 dolar, dan kamera analog 5,8GHz standalone seharga 25 dolar.
    • Jika yang dimaksud standalone adalah kamera all-in-one, kamera dengan VTX bawaan biasanya bahkan lebih buruk daripada analog biasa dan tetap membutuhkan goggles analog.
      Bagi orang yang tidak perlu kacamata minus/plus atau memakai lensa kontak, kombinasi DJI O4 ‘lite’ dan goggles N3 adalah pilihan yang jauh lebih baik.
  • Jika ingin mengotomatisasi mobil RC, ini bacaan yang menarik.
    Karena artikelnya dari beberapa tahun lalu, sekarang mungkin ada cara yang lebih mudah atau lebih baik untuk mendapatkan hasil serupa: https://hackaday.com/2021/10/25/fast-indoor-robot-watches-ce...
  • Semua orang tahu quadcopter FPV yang dipakai di medan perang, tetapi minat terhadap kendaraan darat juga makin besar.
    Bentuknya sama sekali tidak seperti campuran anjing robot Boston Dynamics dan Terminator di film, tetapi sangat berguna untuk pekerjaan “membosankan” yang kurang mencolok, seperti memasang ranjau, meledakkan ranjau, atau mengantar sedikit perbekalan kepada prajurit yang bersembunyi di suatu tempat di garis depan.