Saya bekerja pada jaringan mesh berdasarkan ESP8266 dan semuanya tampaknya bekerja dengan baik menggunakan kode sampel dari EasyMesh oleh Coopdis . Dalam contohnya, 3 ESP8266 mendaftar di mesh dan melayani antarmuka web yang sederhana. Ini bekerja dengan baik untuk saya juga.
Namun dalam solusi saya, saya perlu salah satu dari node-node ini untuk dihubungkan ke internet sehingga seluruh Mesh dapat mengaksesnya (atau setidaknya mesh dapat diakses). Ini juga disebutkan dalam Dokumentasi Panduan Pengguna ESP8266 Mesh (halaman 4) dari Espressif . Saya juga menemukan beberapa dokumen lain yang mereka terbitkan semua membicarakan hal ini karena itu normal tetapi tanpa kode contoh yang mudah saya mengerti.
Bagaimana cara mengkonfigurasi jala untuk juga terhubung ke router. Apakah sesederhana menggunakan SSID dan kunci Pass yang sama untuk jaringan mesh seperti yang saya gunakan pada router Wi-Fi saya atau apakah saya perlu membuat sesuatu seperti Raspberry Pi bagian dari mesh Wi-Fi yang kemudian dapat dihubungkan ke router saya melalui koneksi Ethernet? Saya tidak berpikir yang terakhir harus diminta dari penelitian yang telah saya lakukan sekalipun.
Saya perlu kode contoh halo dunia untuk ini. Perintah AT tidak akan membantu saya, saya pikir.
sumber
Jawaban:
Pilihan lain untuk mesh mudah adalah dengan menggunakan painlessMesh oleh BlackEdder dan memperkenalkan jembatan untuk mengubah data ke dunia luar.
Ada masalah saat menyambung ke jaringan lain dari mesh di painlessMesh gitlab yang menjelaskan empat solusi berbeda. Solusi mungkin bekerja juga di easyMesh, karena masalah ini diangkat pada awalnya di sana, tetapi pasti di painlessMesh.
Saya melihat mereka dan solusi yang paling berfungsi membutuhkan kedua perangkat tambahan ke mesh untuk menangani koneksi aktual ke jaringan luar.
Yang pertama akan memperkenalkan esp8266 keempat untuk proyek Anda. Itu akan terhubung ke Internet dan berkomunikasi ke salah satu node Anda melalui koneksi serial.
Lain akan menggunakan perangkat Raspberry PI untuk mengumpulkan data dan terhubung dengan kartu wifi lain ke jaringan lain.
Dua lainnya tidak bagus, satu tidak disarankan oleh penulis dan yang lain sangat rumit dan terbatas dengan esp8266 sehingga saya tidak akan mencoba.
Seluruh panduan di gitlab .
sumber
Saya akan memodifikasi sedikit implementasi EasyMesh yang ada, karena saat ini tampaknya tidak mengimplementasikan peran simpul. Setiap node sama dan mereka dapat membangun koneksi hanya satu sama lain. Seperti yang saya lihat, tidak ada cara untuk menambahkan server ke tabel routing mereka atau untuk menandai catatan koneksi tertentu di tabel yang memiliki konektivitas ke server.
Node menggunakan daftar koneksi untuk perutean / penerusan pesan. Yang Anda butuhkan adalah sebuah simpul yang memiliki catatan koneksi untuk server, inilah yang menjadi simpul akar.
Sekarang, saat ini ketika sebuah node dinyalakan akan memindai AP yang tersedia (Poin Akses), menyaring yang tidak dimulai dengan awalan mesh dan kemudian menghubungkan ke AP dengan RSSI terbaik. Juga setiap node membuat AP sendiri dengan awalan nama mesh + ID chip unik .
Jika tidak ada node lain yang tersedia, itu hanya akan menunggu orang lain untuk terhubung. Dan ini adalah titik pertama di mana perubahan harus diterapkan. Anda dapat melakukan hardcode atau membuat AP yang dapat dikonfigurasi dengan entah bagaimana dengan nama seperti awalan mesh + "Server" dan jika tidak ada AP EasyMesh lain yang tersedia, node harus terhubung ke AP ini dan harus menyimpan objek yang telah ditentukan sebelumnya
meshConnectionType
dalam daftar koneksi.Objek yang diajukan ini tidak akan ditentukan oleh pertukaran pesan antara server dan node tetapi bisa berupa nilai tetap, kecuali untuk
espconn
bidang. Yang satu harus diperoleh seperti dalam kasus-kasus lain. Dalam struct berikut ini, Anda hanya perlu variabel pertama ke anggota.Ini
chipId
akan menjadi alamat server di jaringan mesh. Anda harus memilih satu nilai yang tidak bisa menjadi ID chip ESP8266.Jadi pada dasarnya simpul pertama yang dihidupkan di jaringan Anda adalah simpul "root". Jika node lain ingin mengirim pesan ke server maka pesan akan dikirim ke node "root" berdasarkan koneksi in-direct (disebut sub-koneksi dalam kode).
Node "root" kemudian akan menemukan bahwa ia memiliki koneksi langsung ke server (ke router / internet) dan karena itu adalah pesan ke server bahwa ia harus meneruskan pesan ini dengan cara lain (bukan cara seperti mesh) . Jelas diperlukan informasi tambahan di sini seperti alamat IP server dan port yang digunakan misalnya. Ini juga harus disimpan sebagai node (pada setiap node) secara default atau dengan beberapa metode konfigurasi.
Jadi akhirnya "root" node akan mengirim pesan IP ke server, ini harus diimplementasikan oleh Anda lagi.
TL; DR; Kesimpulan:
destId
) yang akan digunakan dalam jaringan mesh saat mengirim pesan ke server. Informasi ini harus tersedia untuk semua node secara default.destId
ke daftar koneksi node root.Ini hanya ide teoretis yang saya dapatkan dengan membaca implementasi EasyMesh. Saya mungkin telah melewatkan beberapa fakta penting yang akan membuat ini sulit atau tidak mungkin untuk diterapkan. Juga itu mungkin bukan cara yang paling efisien untuk menyelesaikan masalah. Saya bukan ahli jaringan mesh.
Memiliki simpul root dalam jaringan bertanya "Apa yang terjadi jika root terputus? Bagaimana root baru akan dipilih?".
sumber