Kami membuat gateway antara Wi-Fi dan LoRa untuk UDP

Saya memiliki mimpi masa kecil - untuk memberi setiap rumah tangga perangkat "bebas Wi-Fi" tiket jaringan, yaitu, alamat IP dan porta. Setelah beberapa waktu, saya menyadari bahwa saya seharusnya tidak menundanya. Kita harus mengambil dan melakukannya.
Kerangka Acuan
Jadikan sebagai gateway M5Stack dengan Modul LoRa terpasang (Gambar 1). Gateway akan terhubung ke jaringan Wi-Fi untuk mendapatkan alamat IP lokal melalui DHCP. Gateway akan menyiarkan namanya di LoRa-ether dengan frekuensi tertentu (analog SSID untuk Wi-Fi) dan rentang port yang dapat diterima, sehingga perangkat lain tahu bahwa ada jaringan yang dapat Anda sambungkan dan di mana Anda dapat memilih port gratis. Karena ini akan menjadi prototipe, otentikasi tidak kali ini. Perangkat klien baru akan menemukan jaringan LoRa yang tersedia dan mengirimkan port yang dipilih ke sana. Setelah gateway menerima port dari klien baru, ia memeriksa apakah itu gratis, jika demikian, ia mendaftarkan klien baru dan mulai mendengarkan port ini di server UDP asinkronnya sendiri. Setelah pendaftaran, klien akan menerima persetujuan atau penolakan untuk menggunakan port yang dinyatakan. Prosedur operasi ditunjukkan pada tabel 1.

Gambar 1
Tabel 1
Sebelum saya di meja ada segala macam Modul untuk M5Stack dan bosan. Mari kita ambil LoR dan bersenang-senang dengannya . Konsep modul itu sendiri sangat indah! Apa yang bisa saya katakan? Tapi, modul revisi pertama saya, di mana antena built-in yang mengerikan, dibuat pada papan sirkuit cetak yang fleksibel dan direkatkan ke dinding samping case. Saya pernah melakukan tes lapangan untuk modul-modul tersebut (Anda dapat menontonnya di saluran berbahasa Rusia di YouTube):
Secara alami, saya harus menghapus rudiments ini dan menyolder antena heliks standar yang datang dengan Ra-01. Setelah penyesuaian seperti itu, jangkauan komunikasi meningkat secara nyata, tetapi muncul titik samping - antena memiliki diameter lebih besar dari jarak yang diperbolehkan antara modul. Saya harus meninggalkan modul Final selama durasi proyek.
Kesulitan pertama dari sesak sinkronis
Tampaknya mengambil perpustakaan WiFiUdp.h , di mana semuanya untuk keberadaan nyaman server UDP, tidak. Perpustakaan dirancang untuk mengangkat server sinkron, yang, sayangnya, tidak dapat melayani beberapa koneksi secara bersamaan. Perpustakaan seperti itu tidak cocok untuk tugas saat ini. Saya harus minum banyak cangkir teh dan mencari perpustakaan yang memungkinkan kami untuk meningkatkan server UDP asinkron yang mampu mendukung banyak koneksi secara bersamaan. Perpustakaan seperti itu ditemukan - AsyncUDP.h . Apa perbedaan antara server yang sinkron dan yang tidak sinkron? Mari kita lihat enam episode pada Gambar 2, di mana opsi operasi socket ditampilkan secara sepele.

Gambar 2
Dibintangi:
Seorang pria dalam peran soket ;
Dove dalam peran Compound ;
Pismo sebagai Data .
Episode A. Soket Sinkron tanpa Batas Waktu
Seseorang akan berdiri sampai Merpati membawakannya Surat.
Episode B. Socket Sinkron dengan Timeout
Seorang pria menunggu waktu yang disepakati dengan Merpati, dan jika dia tidak tiba tepat waktu, maka Pria itu akan pergi.
Episode C. Soket Multithreading Sinkron
Seorang pria duduk dan menonton ketika Merpati mengirimkan Surat sendiri.
Episode D. Soket asinkron (ketika tidak ada lagi yang menerima)
Seorang pria melakukan hal-hal favoritnya, tetapi tidak melupakan Merpati.
Episode E. Soket asinkron (ketika ada sesuatu untuk diterima)
Pria itu sejenak mengalihkan perhatiannya dari urusannya untuk menerima surat dari Dove.
Episode F. Socket Multithreading Asynchronous
Seorang lelaki menjalankan bisnisnya dan mengawasi Merpati mengirimkan Surat sendiri.
Jika Anda berhati-hati, Anda mungkin harus memperhatikan bahwa kerah pada Merpati di setiap episode memiliki warna tertentu. Dan ini bukan kecelakaan. Dalam episode A dan B, hanya satu soket yang berfungsi di server dan hanya itu. Episode C sudah memiliki dua soket. Episode D, E, dan F sudah memiliki tiga soket. "Kenapa ada dua, tapi di sini ada tiga?" - kamu bertanya. Ini kondisional 2 dan 3, pada kenyataannya, bukannya 2 bisa 20, dan bukannya tiga 200. Tugasnya adalah untuk menunjukkan bahwa soket asinkron tidak membakar besi sebanyak yang sinkron.
Dimana yang cocok?
Mari kita lihat tabel 1, yang menunjukkan struktur paket UDP dan berpikir tentang apa yang dapat Anda lakukan.
Tabel 1. Struktur paket UDP
Tambahkan bidang Sesi lain (1 Byte) ke bagian paling awal tabel ini. Ini cukup untuk proyek ini. Berdasarkan Sesi, perangkat akan tahu apa yang harus dilakukan dengan paket selanjutnya. Sekarang kita akan membuat kode untuk sesi dan menuliskannya di tabel 2.
Tabel 2. Deskripsi Sesi
Bagus Sekarang mari kita bahas komposisi sesi pada tabel 3.
Tabel 3. Sesi
Menulis dua klien untuk Arduino dan untuk M5Stack. Anda dapat melihat cara kerjanya di video . Tidak ada masalah di dalam apartemen, saya belum melakukan tes lapangan.
Kode sumber tersedia di GitHub di
Pelajari lebih lanjut tentang M5Stack Base Unit dan beli di sini.
Anda dapat memilih modul nirkabel LoRa untuk Unit Dasar di sini
Saya akan senang jika proyek ini bermanfaat bagi Anda. Terima kasih banyak atas waktu Anda!
Referensi dan (atau) sumber: