ESP-MESH dengan ESP32 dan ESP8266: Memulai (library painlessMesh)

Pelajari cara menggunakan protokol jaringan ESP-MESH untuk membangun jaringan mesh dengan papan NodeMCU ESP32 dan ESP8266. ESP-MESH memungkinkan beberapa perangkat (node) untuk berkomunikasi satu sama lain di bawah satu jaringan area lokal nirkabel. Ini didukung pada papan ESP32 dan ESP8266. Dalam panduan ini, kami akan menunjukkan cara memulai ESP-MESH menggunakan inti Arduino.

Artikel ini mencakup topik-topik berikut :

    Memperkenalkan ESP-MESH

    Contoh Dasar ESP-MESH (Pesan siaran)

    Pembacaan Sensor Pertukaran menggunakanESP-MESH (broadcast)

Arduino IDE

Jika Anda ingin memprogram papan ESP32 dan ESP8266 menggunakan Arduino IDE, Anda harus menginstal add-on ESP32 atau ESP8266. Ikuti panduan selanjutnya :

    Memasang Board ESP32 di Arduino IDE(Windows, Mac OS X, dan Linux)

    Memasang Papan ESP8266 di Arduino IDE(Windows, Mac OS X, Linux)

Jika Anda ingin memprogram ESP32/ESP8266 menggunakan VS Code + PlatformIO, ikuti tutorial selanjutnya :

    Memulai dengan Kode VS dan PlatformIO IDEuntuk ESP32 dan ESP8266 (Windows, Mac OS X, Linux Ubuntu)

Memperkenalkan ESP-MESH

Sesuai dengan dokumentasi Espressif :

“ESP-MESH adalah protokol jaringan yang dibangun di atas protokol Wi-Fi. ESP-MESH memungkinkan banyak perangkat (disebut sebagai node) tersebar di area fisik yang besar (baik di dalam maupun di luar ruangan) untuk saling berhubungan di bawah satu WLAN (Wireless Local-Area Network).

ESP-MESH adalah pengorganisasian diri dan penyembuhan diri yang berarti jaringan dapat dibangun dan dipelihara secara mandiri.” Untuk informasi lebih lanjut, kunjungi dokumentasi resmi ESP-MESH.

Arsitektur Jaringan Wi-Fi Tradisional

Dalam arsitektur jaringan Wi-Fi tradisional, satu node (titik akses – biasanya router) terhubung ke semua node (stasiun) lainnya. Setiap node dapat berkomunikasi satu sama lain menggunakan access point. Namun, ini terbatas pada cakupan titik akses wi-fi. Setiap stasiun harus berada dalam jangkauan untuk terhubung langsung ke titik akses. Ini tidak terjadi dengan ESP-MESH.

Arsitektur Jaringan ESP-MESH

Dengan ESP-MESH, node tidak perlu terhubung ke node pusat. Node bertanggung jawab untuk menyampaikan transmisi satu sama lain. Hal ini memungkinkan beberapa perangkat untuk tersebar di area fisik yang besar. Node dapat mengatur sendiri dan secara dinamis berbicara satu sama lain untuk memastikan bahwa paket mencapai tujuan akhir node. Jika ada simpul yang dihapus dari jaringan, ia dapat mengatur dirinya sendiri untuk memastikan bahwa paket mencapai tujuannya.

Library painlessMesh

Pustaka painlessMesh memungkinkan kita membuat jaringan mesh dengan papan ESP8266 atau/dan ESP32 dengan cara yang mudah.

“painlessMesh adalah jaringan ad-hoc sejati, artinya tidak diperlukan perencanaan, pengontrol pusat, atau router. Setiap sistem dari 1 atau lebih node akan mengatur dirinya sendiri menjadi mesh yang berfungsi penuh. Ukuran maksimum mesh dibatasi (menurut kami) oleh jumlah memori di heap yang dapat dialokasikan ke buffer sub-koneksi dan karenanya harus sangat tinggi.” Informasi lebih lanjut tentang perpustakaan painlessMesh.

Memasang Pustaka Mesh yang tidak menyakitkan

Anda dapat menginstal painlessMesh melalui manajer Perpustakaan Arduino. Buka Tools > Manage Libraries. Manajer Perpustakaan harus terbuka.

Cari "painlessmesh" dan instal perpustakaan. Kami menggunakan Versi 1.4.5

Perpustakaan ini membutuhkan beberapa dependensi perpustakaan lainnya. Sebuah jendela baru akan muncul meminta Anda untuk menginstal dependensi yang hilang. Pilih "Instal semua".

Jika jendela ini tidak muncul, Anda harus menginstal dependensi perpustakaan berikut :

    ArduinoJson (oleh bblanchon)

    Penjadwal Tugas

    ESPAsyncTCP (ESP8266)

    AsyncTCP (ESP32)

Jika Anda menggunakan PlatformIO, tambahkan baris berikut ke file platformio.ini untuk menambahkan perpustakaan dan mengubah kecepatan monitor.

Untuk ESP32 :

Untuk ESP8266 :

Contoh Dasar ESP-MESH (Pesan siaran)

Untuk memulai dengan ESP-MESH, pertama-tama kita akan bereksperimen dengan contoh dasar library. Contoh ini membuat jaringan mesh di mana semua papan menyiarkan pesan ke semua papan lainnya.

Kami telah bereksperimen dengan contoh ini dengan empat papan (dua ESP32 dan dua ESP8266). Anda dapat menambah atau menghapus papan. Kode ini kompatibel dengan papan ESP32 dan ESP8266.

Kode – Contoh Dasar Pustaka PainlessMesh

Salin kode berikut ke Arduino IDE Anda (kode dari contoh perpustakaan). Kode ini kompatibel dengan papan ESP32 dan ESP8266.

Sebelum mengupload kode, Anda dapat mengatur MESH_PREFIX (seperti nama jaringan MESH) dan variabel MESH_PASSWORD (Anda dapat mengaturnya sesuka Anda).

Kemudian, kami menyarankan Anda mengubah baris berikut untuk setiap papan agar mudah mengidentifikasi node yang mengirim pesan. Misalnya, untuk node 1, ubah pesannya sebagai berikut:

Cara Kerja Kode

Mulailah dengan menyertakan perpustakaan painlessMesh.

Detail MESH

Kemudian, tambahkan detail mesh. MESH_PREFIX mengacu pada nama mesh. Anda dapat mengubahnya menjadi apa pun yang Anda suka.

MESH_PASSWORD, seperti namanya adalah kata sandi mesh. Anda dapat mengubahnya menjadi apa pun yang Anda suka.

Semua node di mesh harus menggunakan MESH_PREFIX dan MESH_PASSWORD yang sama.

MESH_PORT mengacu pada port TCP yang Anda inginkan untuk menjalankan server mesh. Standarnya adalah 5555.

Penjadwal

Disarankan untuk menghindari penggunaan delay() dalam kode jaringan mesh. Untuk mempertahankan mesh, beberapa tugas perlu dilakukan di latar belakang. Menggunakan delay() akan menghentikan tugas-tugas ini terjadi dan dapat menyebabkan mesh kehilangan stabilitas/hancur.

Sebagai gantinya, disarankan untuk menggunakan TaskScheduler untuk menjalankan tugas Anda yang digunakan di painlessMesh itu sendiri.

Baris berikut membuat Penjadwal baru bernama userScheduler.

painlessMesh

Buat objek painlessMesh yang disebut mesh untuk menangani jaringan mesh.

Buat tugas

Buat tugas bernama taskSendMessage yang bertanggung jawab untuk memanggil fungsi sendMessage() setiap detik selama program berjalan.

Kirim Pesan ke Mesh

Fungsi sendMessage() mengirim pesan ke semua node di jaringan pesan (broadcast).

Pesan tersebut berisi teks "Hai dari simpul 1" diikuti dengan ID chip papan.

Untuk menyiarkan pesan, cukup gunakan metode sendBroadcast() pada objek mesh dan berikan pesan (msg) yang ingin Anda kirim sebagai argumen.

Setiap kali pesan baru dikirim, kode mengubah interval antar pesan (satu hingga lima detik).

Fungsi Panggilan Balik Mesh

Selanjutnya, beberapa fungsi panggilan balik dibuat yang akan dipanggil ketika peristiwa tertentu terjadi di mesh.

Fungsi ReceiveCallback() mencetak pengirim pesan (dari) dan isi pesan (msg.c_str()).

Fungsi newConnectionCallback() berjalan setiap kali node baru bergabung dengan jaringan. Fungsi ini hanya mencetak ID chip dari node baru. Anda dapat memodifikasi fungsi untuk melakukan tugas lain.

Fungsi ChangeConnectionCallback() berjalan setiap kali koneksi berubah di jaringan (ketika sebuah node bergabung atau meninggalkan jaringan).

Fungsi nodeTimeAdjustedCallback() berjalan ketika jaringan menyesuaikan waktu, sehingga semua node disinkronkan. Ini mencetak offset.

setup()

Dalam setup(), inisialisasi monitor serial.

Pilih jenis pesan debug yang diinginkan:

Inisialisasi mesh dengan detail yang ditentukan sebelumnya.

Tetapkan semua fungsi panggilan balik ke acara terkait.

Terakhir, tambahkan fungsi taskSendMessage ke userScheduler. Penjadwal bertanggung jawab untuk menangani dan menjalankan tugas pada waktu yang tepat.

Terakhir, aktifkan taskSendMessage, sehingga program mulai mengirim pesan ke mesh.

Agar mesh tetap berjalan, tambahkan mesh.update() ke loop().

Demonstrasi

Unggah kode yang diberikan ke semua papan Anda. Jangan lupa untuk mengubah pesan agar mudah mengidentifikasi node pengirim

Dengan papan yang terhubung ke komputer Anda, buka koneksi serial dengan setiap papan. Anda dapat menggunakan Serial Monitor, atau Anda dapat menggunakan perangkat lunak seperti Putty dan membuka banyak jendela untuk semua papan.

Anda harus melihat bahwa semua papan menerima pesan satu sama lain. Misalnya, ini adalah pesan yang diterima oleh Node 1. Ini menerima pesan dari Node 2, 3 dan 4.

Anda juga akan melihat pesan lain saat ada perubahan pada mesh: saat papan keluar atau bergabung dengan jaringan.

Pertukaran Pembacaan Sensor menggunakan ESP-MESH

Dalam contoh berikut ini, kami akan menukar pembacaan sensor antara 4 papan (Anda dapat menggunakan jumlah papan yang berbeda). Setiap papan menerima bacaan papan lainnya.

Sebagai contoh, kami akan menukar pembacaan sensor dari sensor BME280, tetapi Anda dapat menggunakan sensor lain.

Bagian yang Diperlukan

Inilah bagian yang diperlukan untuk contoh ini:

    • 4x papan ESP (ESP32 atau ESP8266)

    • 4x BME280

    Breadboard

    Kabel Jumper

Library Arduino_JSON

Dalam contoh ini, kami akan menukar pembacaan sensor dalam format JSON. Untuk mempermudah menangani variabel JSON, kita akan menggunakan library Arduino_JSON.

Anda dapat menginstal perpustakaan ini di Manajer Perpustakaan Arduino IDE. Masuk saja ke Sketch > Include Library > Manage Libraries dan cari nama library sebagai berikut:

Jika Anda menggunakan Kode VS dengan PlatformIO, sertakan perpustakaan di file platformio.ini sebagai berikut:

ESP32


ESP8266

Diagram Sirkuit

Hubungkan sensor BME280 ke pin I2C default ESP32 atau ESP8266 seperti yang ditunjukkan pada diagram skematik berikut.

Kode – Pembacaan Sensor Siaran ESP-MESH

Unggah kode berikut ke setiap papan Anda. Kode ini membaca dan menyiarkan pembacaan suhu, kelembaban, dan tekanan saat ini ke semua papan di jaringan mesh. Pembacaan dikirim sebagai string JSON yang juga berisi nomor node untuk mengidentifikasi papan pengirim.








Kode ini kompatibel dengan papan ESP32 dan ESP8266.

Cara Kerja Kode

Lanjutkan membaca bagian ini untuk mempelajari cara kerja kode.

Libraries

Mulailah dengan menyertakan pustaka yang diperlukan: Adafruit_Sensor dan Adafruit_BME280 untuk berinteraksi dengan sensor BME280; perpustakaan painlessMesh untuk menangani jaringan mesh dan Arduino_JSON untuk membuat dan menangani string JSON dengan mudah.

Detail Jaring

Masukkan detail jala di baris berikut.

MESH_PREFIX mengacu pada nama mesh. Anda dapat mengubahnya menjadi apa pun yang Anda suka. MESH_PASSWORD, seperti namanya adalah kata sandi mesh. Anda dapat mengubahnya menjadi apa pun yang Anda suka. Semua node di mesh harus menggunakan MESH_PREFIX dan MESH_PASSWORD yang sama.

MESH_PORT mengacu pada port TCP yang Anda inginkan untuk menjalankan server mesh. Standarnya adalah 5555.

BME280

Buat objek Adafruit_BME280 bernama bme pada pin ESP32 atau ESP8266 default.

Dalam variabel nodeNumber masukkan nomor node untuk papan Anda. Itu harus menjadi nomor yang berbeda untuk setiap papan.

Variabel pembacaan akan digunakan untuk menyimpan bacaan yang akan dikirim ke papan lain.

Penjadwal

Baris berikut membuat Penjadwal baru bernama userScheduler.

painlessMesh

Buat objek painlessMesh yang disebut mesh untuk menangani jaringan mesh.

Buat tugas

Buat tugas bernama taskSendMessage yang bertanggung jawab untuk memanggil fungsi sendMessage() setiap lima detik selama program berjalan.

getReadings()

Fungsi getReadings() mendapatkan pembacaan suhu, kelembaban dan tekanan dari sensor BME280 dan menggabungkan semua informasi, termasuk nomor node pada variabel JSON yang disebut jsonReadings.

Baris berikut menunjukkan struktur variabel jsonReadings dengan nilai arbitrer.

Variabel jsonReadings kemudian diubah menjadi string JSON menggunakan metode stringify() dan disimpan pada variabel readings.

Variabel ini kemudian dikembalikan oleh fungsi.

Kirim Pesan ke Mesh

Fungsi sendMessage() mengirimkan string JSON dengan pembacaan dan nomor node (getReadings()) ke semua node dalam jaringan (broadcast).

Init sensor BME280

Fungsi initBME() menginisialisasi sensor BME280.

Fungsi Panggilan Balik Mesh

Selanjutnya, beberapa fungsi panggilan balik dibuat yang akan dipanggil ketika beberapa peristiwa di mesh terjadi.

Fungsi ReceiveCallback() mencetak pengirim pesan (dari) dan isi pesan (msg.c_str()).

Pesan datang dalam format JSON, jadi, kita dapat mengakses variabel sebagai berikut :

Terakhir, cetak semua informasi di Serial Monitor.

Fungsi newConnectionCallback() berjalan setiap kali node baru bergabung dengan jaringan. Fungsi ini hanya mencetak ID chip dari node baru. Anda dapat memodifikasi fungsi untuk melakukan tugas lain.

Fungsi ChangeConnectionCallback() berjalan setiap kali koneksi berubah pada jaringan (ketika sebuah node bergabung atau meninggalkan jaringan).

Fungsi nodeTimeAdjustedCallback() berjalan ketika jaringan menyesuaikan waktu, sehingga semua node disinkronkan. Ini mencetak offset.

setup()

Dalam setup(), inisialisasi monitor serial.

Panggil fungsi initBME() untuk menginisialisasi sensor BME280.

Pilih jenis pesan debug yang diinginkan:

Inisialisasi mesh dengan detail yang ditentukan sebelumnya.

Tetapkan semua fungsi panggilan balik ke acara terkait.

Terakhir, tambahkan fungsi taskSendMessage ke userScheduler. Penjadwal bertanggung jawab untuk menangani dan menjalankan tugas pada waktu yang tepat.

Terakhir, aktifkan taskSendMessage, sehingga program mulai mengirim pesan ke mesh.

Agar mesh tetap berjalan, tambahkan mesh.update() ke loop().

Demonstrasi

Setelah mengunggah kode ke semua papan Anda (setiap papan dengan nomor simpul yang berbeda), Anda akan melihat bahwa setiap papan menerima pesan papan lainnya.

Tangkapan layar berikut menunjukkan pesan yang diterima oleh node 1. Ini menerima pembacaan sensor dari node 2, 3 dan 4.

Membungkus

Kami harap Anda menyukai pengenalan singkat tentang protokol jaringan ESP-MESH ini. Anda dapat melihat perpustakaan painlessMesh untuk lebih banyak contoh.

Kami bermaksud untuk membuat lebih banyak tutorial tentang subjek ini dalam waktu dekat. Jadi, tulis saran Anda di bagian komentar.

Anda mungkin juga menyukai artikel berikut :

    Memulai dengan ESP-NOW (ESP32 denganArduino IDE)

    Memulai dengan ESP-NOW (ESP8266 NodeMCUdengan Arduino IDE)

    ESP32: Dasbor Sensor Server Web ESP-NOW(ESP-NOW + Wi-Fi)

Pelajari lebih lanjut tentang ESP32 dan ESP8266 dengan sumber daya kami :

    Belajar ESP32 dengan Arduino IDE

    Otomatisasi Rumah menggunakan ESP8266

    Lebih Banyak Proyek dan Tutorial ESP32

    Lebih Banyak Proyek dan Tutorial ESP8266

 Sumber : randomnerdtutorials.com

Posting Komentar

0 Komentar