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.
struct meshConnectionType {
espconn *esp_conn;
uint32_t chipId = 0;
String subConnections;
timeSync time;
uint32_t lastRecieved = 0;
bool newConnection = true;
(...)
};
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:
- Harus ada server AP dan simpul pertama (hanya simpul pertama yang akan dinyalakan) yang harus terhubung, ini akan menjadi simpul root.
- Server harus memiliki alamat (
destId
) yang akan digunakan dalam jaringan mesh saat mengirim pesan ke server. Informasi ini harus tersedia untuk semua node secara default.
- Node root harus tahu bahwa itu terhubung "langsung" ke server / internet. Ini dapat dicapai dengan menambahkan catatan koneksi dengan server
destId
ke daftar koneksi node root.
- Node root mengetahui bahwa itu terhubung ke server dapat meneruskan pesan dengan tepat melalui Internet.
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?".