ESP-NOW Komunikasi Dua Arah Antara Papan ESP32

Pada artikel ini, kami akan menunjukkan cara membangun komunikasi dua arah antara dua papan ESP32 menggunakan protokol komunikasi ESP-NOW. Sebagai contoh, dua papan ESP32 akan bertukar pembacaan sensor (dengan jangkauan di lapangan terbuka hingga 220 meter ~ 722 kaki).

Tonton Video Pengenalannya

 

Untuk pengenalan protokol ESP-NOW, Anda dapat menonton video berikut:


Memperkenalkan ESP-NOW

 

ESP-NOW adalah protokol komunikasi tanpa koneksi yang dikembangkan oleh Espressif yang menampilkan transmisi paket pendek. Protokol ini memungkinkan beberapa perangkat untuk berbicara satu sama lain tanpa menggunakan Wi-Fi.

Ini adalah protokol komunikasi cepat yang dapat digunakan untuk bertukar pesan kecil (hingga 250 byte) antara papan ESP32. ESP-NOW sangat fleksibel dan Anda dapat memiliki komunikasi satu arah atau dua arah dalam pengaturan yang berbeda. Dalam tutorial ini, kami akan menunjukkan cara membangun komunikasi dua arah antara dua papan ESP32.

Catatan: baca Panduan Memulai ESP-NOW kami untuk pengenalan lengkap protokol ESP-NOW dengan ESP32.

 

Ulasan Proyek

 

Diagram berikut menunjukkan gambaran umum tingkat tinggi dari proyek yang akan kita bangun.


• Dalam proyek ini kami akan memiliki dua papan ESP32. Setiap papan terhubung ke layar OLED dan sensor BME280;

• Setiap papan mendapatkan pembacaan suhu, kelembaban dan tekanan dari sensor yang sesuai;

• Setiap papan mengirimkan bacaannya ke papan lain melalui ESP-NOW;

• Ketika sebuah papan menerima pembacaan, ia menampilkannya di layar OLED;

• Setelah mengirim bacaan, papan ditampilkan di OLED jika pesan berhasil dikirim;

• Setiap papan perlu mengetahui alamat MAC papan lainnya untuk mengirim pesan.

Dalam contoh ini, kami menggunakan komunikasi dua arah antara dua papan, tetapi Anda dapat menambahkan lebih banyak papan ke pengaturan ini, dan membuat semua papan berkomunikasi satu sama lain.

ESP32 add-on Arduino IDE

Kami akan memprogram ESP32 menggunakan Arduino IDE, jadi sebelum melanjutkan dengan tutorial ini Anda harus menginstal add-on ESP32 di Arduino IDE Anda.  

 

Instal Libraries

 

Instal perpustakaan berikut di Arduino IDE Anda. Library ini dapat diinstal melalui Arduino Library Manager. Buka Sketsa > Sertakan Perpustakaan > Library Manager dan cari nama library.

Bagian yang Diperlukan

Untuk tutorial ini Anda memerlukan bagian-bagian berikut:

• 2x papan pengembangan ESP32

• 2x sensor BME280

Layar OLED 2x 0,96 inci

Breadboard

Kabel Jumper

Mendapatkan Papan Alamat MAC

Untuk mengirim pesan di antara setiap papan, kita perlu mengetahui alamat MAC mereka. Setiap papan memiliki alamat MAC yang unik (pelajari cara Mendapatkan dan Mengubah Alamat MAC ESP32).

Unggah kode berikut ke setiap papan Anda untuk mendapatkan alamat MAC mereka.


Setelah mengupload kode, tekan tombol RST/EN, dan alamat MAC akan ditampilkan di Serial Monitor.

Tuliskan alamat MAC dari setiap papan untuk mengidentifikasi mereka dengan jelas.

Diagram Skematik

 

Hubungkan layar OLED dan sensor BME280 ke setiap papan ESP32. Ikuti diagram skema berikutnya.

Anda dapat menggunakan tabel berikut sebagai referensi saat memasang kabel sensor BME280.

Anda juga dapat mengikuti tabel berikutnya untuk menyambungkan layar OLED ke ESP32.

ESP32 Komunikasi Dua Arah Kode ESP-NOW

 

Unggah kode berikut ke setiap papan Anda. Sebelum mengunggah kode, Anda harus memasukkan alamat MAC papan lain (papan tempat Anda mengirim data).









Cara Kerja Kode

 

Kami telah membahas dengan sangat rinci cara berinteraksi dengan layar OLED dan dengan sensor BME280 di tutorial sebelumnya. Di sini, kita hanya akan melihat bagian-bagian yang relevan dalam hal ESP-NOW.

 

Kode dikomentari dengan baik sehingga Anda memahami apa yang dilakukan setiap baris kode.

Untuk menggunakan ESP-NOW, Anda perlu menyertakan perpustakaan berikutnya.


Di baris berikutnya, masukkan alamat MAC papan penerima:


Buat variabel untuk menyimpan pembacaan suhu, kelembaban dan tekanan dari sensor BME280. Bacaan ini akan dikirim ke papan lain:

Buat variabel untuk menyimpan pembacaan sensor yang berasal dari papan lain:

Variabel berikut akan menyimpan pesan sukses jika pembacaan berhasil dikirim ke papan lain.

Buat struktur yang menyimpan pembacaan kelembaban, suhu dan tekanan.

Kemudian, Anda perlu membuat dua contoh struktur itu. Satu untuk menerima bacaan dan satu lagi untuk menyimpan bacaan yang akan dikirim.

 

BME280Readings akan menyimpan bacaan yang akan dikirim.

IncomingReadings akan menyimpan data yang berasal dari board lain.

Buat variabel tipe esp_now_peer_info_t untuk menyimpan informasi tentang rekan.

Kemudian, kita perlu membuat dua fungsi panggilan balik. Satu akan dipanggil saat data dikirim, dan yang lain akan dipanggil saat data diterima. 

 

Fungsi panggilan balik OnDataSent()

 

Fungsi OnDataSent() akan dipanggil saat data baru dikirim. Fungsi ini hanya mencetak jika pesan berhasil terkirim atau tidak. Jika pesan berhasil terkirim, variabel status mengembalikan 0, sehingga kami dapat mengatur pesan sukses kami ke “Delivery Success”:


Jika pesan sukses mengembalikan 1, berarti pengiriman gagal:

Fungsi panggilan balik OnDataRecv()

 

Fungsi OnDataRecv() akan dipanggil saat paket baru tiba.

Kami menyimpan paket baru dalam struktur IncomingReadings yang telah kami buat sebelumnya:

Kami mencetak panjang pesan pada monitor serial. Anda hanya dapat mengirim 250 byte dalam setiap paket.

Kemudian, simpan pembacaan yang masuk dalam variabel yang sesuai. Untuk mengakses variabel temperatur di dalam struktur incomingReadings, Anda hanya perlu melakukan panggilan incomingReadings.temp sebagai berikut:

Proses yang sama dilakukan untuk variabel lainnya:

setup()

 

Di setup(), inisialisasi ESP-NOW.

 

Kemudian, daftar untuk fungsi panggilan balik OnDataSent.

Untuk mengirim data ke papan lain, Anda harus memasangkannya sebagai rekan. Baris berikut mendaftar dan menambahkan rekan baru.

Daftar untuk fungsi panggilan balik OnDataRecv.

loop()

 

Dalam loop(), kita memanggil fungsi getReadings() yang bertanggung jawab untuk mendapatkan pembacaan suhu baru dari sensor. Fungsi itu dibuat setelah loop().

 

Setelah mendapatkan pembacaan suhu, kelembaban, dan tekanan baru, kami memperbarui struktur BME280Reading kami dengan nilai-nilai baru tersebut:


Kemudian, kami dapat mengirim struktur BME280Readings melalui ESP-NOW:

Terakhir, panggil fungsi updateDisplay() yang akan memperbarui tampilan OLED dengan pembacaan yang berasal dari papan ESP32 lainnya.

Loop() dijalankan setiap 10 detik.

Kurang lebih seperti itulah cara kerja kode. Anda harus mengunggah kode ke kedua papan Anda. Anda hanya perlu memodifikasi kode dengan alamat MAC dari papan tempat Anda mengirim data.

 

Demonstrasi

 

Setelah mengunggah kode ke kedua papan, Anda akan melihat OLED menampilkan pembacaan sensor dari papan lain, serta pesan pengiriman sukses.

Seperti yang Anda lihat, ini berfungsi seperti yang diharapkan:

Kami menguji jangkauan komunikasi antara dua papan, dan kami bisa mendapatkan komunikasi yang stabil hingga 220 meter (sekitar 722 kaki) di lapangan terbuka. Dalam percobaan ini kedua antena on-board ESP32 saling menunjuk.

Sumber: randomnerdtutorials.com


 

 

 

 

 

Siap Belajar & Bangun Proyek IoT?

KLIK GAMBAR DI BAWAH INI UNTUK BELI TRAINER KIT ESP32


Klik gambar untuk pembelian

Dalam praktik, hasil dan kendala yang ditemui bisa berbeda tergantung perangkat, konfigurasi, versi library, dan sistem yang digunakan.

 

Posting Komentar

0 Komentar