ESP8266 Mesh Network Root Node

11

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.

Gineer
sumber
1
Mengenai contoh 3 node, apakah Anda memiliki dan menjalankan antarmuka web, seperti yang ada di telepon dalam video ini ?
Bence Kaulics
1
@ BenceKaulics Saya belum mengujinya secara khusus karena saya pernah melakukan ini sebelumnya dan ini bukan masalah bagi saya. Kenapa kamu bertanya? Saya berpikir bahwa ini bisa menjadi opsi mundur di mana "Server" hanya dapat mengakses jaringan Mesh melalui panggilan REST yang diselenggarakan di mesh, tapi saya tertarik dengan opsi ROOT NODE, yang terdengar seperti arsitektur yang benar (IMHO).
Gineer
1
Saya melihat. Saya juga berpikir sama bahwa itu bisa menjadi opsi alternatif untuk mengakses jaringan Anda. Tidak menyarankan sebagai solusi, jadi hanya komentar apa itu. Saya tidak tahu bahwa Anda sudah memikirkannya. ;)
Bence Kaulics

Jawaban:

6

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 .

mico
sumber
5

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 meshConnectionTypedalam daftar koneksi.

Objek yang diajukan ini tidak akan ditentukan oleh pertukaran pesan antara server dan node tetapi bisa berupa nilai tetap, kecuali untuk espconnbidang. 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 chipIdakan 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 destIdke 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?".

Bence Kaulics
sumber