Izdelava prehoda med Wi-Fi in LoRa za UDP

Imel sem sanje iz otroštva - da bi vsakemu gospodinjstvu »brez WiFi« naprave izdal omrežno karto, to je naslov IP in vrata. Čez nekaj časa sem spoznal, da nima smisla odlašati. Moramo vzeti in narediti.
Tehnična naloga
Naredite ga kot prehod M5Stack z nameščenim modulom LoRa (slika 1). Prehod bo povezan z omrežjem Wi-Fi, kjer bo preko DHCP prejel lokalni naslov IP. Prehod bo oddajal svoje ime (analogno SSID-ju za Wi-Fi) in obseg veljavnih vrat v oddajanje LoRa z določeno frekvenco, tako da druge naprave vedo, da obstaja omrežje, na katerega se lahko povežejo in v kakšnem obsegu lahko izberejo prosta vrata. Ker bo to prototip, avtentikacija tokrat ni potrebna. Nove odjemalske naprave bodo našle razpoložljivo omrežje LoRa in vanj prenesle izbrana vrata. Ko prehod prejme vrata od novega odjemalca, preveri, ali so prosta, registrira novega odjemalca in začne poslušati ta vrata na lastnem asinhronem strežniku UDP. Po registraciji stranka prejme soglasje ali zavrnitev uporabe prijavljenih vrat. Postopek delovanja je prikazan v tabeli 1.

Slika 1
Tabela 1
strani
smer in podatki
strani
seja
[ prehod ] 0xA1 [ odjemalec ] - izbrana vrata ->
[ prehod ] 0xB1 [ odjemalec ] <— strinjam se ali zavrnem —
[ prehod ] 0xA2 [ odjemalec ] — paket UPD —>
[ prehod ] 0xB2 [ odjemalec ] <— Paket UPD —
[ prehod ] 0xA3 [ omrežje ] <— Paket UPD —
[prehod] 0xC1
Na mizi pred mano ležijo najrazličnejši moduli za M5Stack in so dolgočasni. Vzemimo LoR in se z njim zabavajmo. Sam koncept modulov je čudovit! Kaj naj rečem? Ampak, imam prve revizijske module, ki imajo najbolj grozno vgrajeno anteno, izdelano na upogljivem tiskanem vezju in prilepljeno na stransko steno ohišja. Nekoč sem izvedel terenske preizkuse takšnih modulov (lahko si jih ogledate na kanalu v ruskem jeziku na YouTubu):

Seveda smo morali te zametke odstraniti in spajkati standardne spiralne antene, ki so priložene Ra-01. Po takšni prilagoditvi se je doseg opazno izboljšal, vendar se je pojavila stranska težava - premer antene je večji od dovoljene razdalje med moduli. Za čas trajanja projekta sem moral opustiti zaključni modul.
Prve težave zaradi sinhronske tesnosti
Zdi se, vzemite knjižnico WiFiUdp.h, kjer je vse za udoben obstoj UDP strežnika, temu ni tako. Knjižnica je namenjena dvigu sinhronega strežnika, ki pa žal ne more hkrati servisirati več povezav v eni niti. Takšna knjižnica ni primerna za trenutno nalogo. Moral sem popiti veliko skodelic čaja in poiskati knjižnico, ki bi mi omogočila zgraditi asinhroni strežnik UDP, ki bi lahko podpiral več povezav hkrati. Takšna knjižnica je bila najdena - AsyncUDP.h. Kakšna je razlika med sinhronim strežnikom in asinhronim? Poglejmo si šest epizod na sliki 2, ki trivialno prikazujejo, kako delujejo vtičnice.

Slika 2
Igrajo:
Človek v vlogi Vtičnica;
Golob v vlogi Povezave;
Pismo v vlogi Danskih.
Epizoda A. Sinhronska vtičnica brez časovne omejitve
Človek bo stal, dokler mu Golob ne prinese Pisma.
Epizoda B. Sinhronska vtičnica s časovno omejitvijo
Človek počaka na čas, dogovorjen z Golobico, in če ta ne pride pravočasno, bo Človek odšel.
Epizoda C. Sinhronska vtičnica z večnitnostjo
Moški sedi in opazuje, kako golobi sami dostavljajo pisma.
Epizoda D. Asinhrona vtičnica (ko ni ničesar drugega za sprejem)
Oseba počne svoje najljubše stvari, vendar ne pozabi na golobe.
Epizoda E. Asinhrona vtičnica (ko lahko nekaj pridobite)
Moški si je vzel kratek odmor od svojih opravkov, da bi prejel pismo od Golobice.
Epizoda F. Asinhrona vtičnica z večnitnostjo
Človek se ukvarja s svojim poslom in opazuje, kako golobi sami dostavljajo pisma.
Če ste bili pozorni, ste verjetno opazili, da so ovratnice na golobih v vsaki epizodi določene barve. In to ni brez razloga. V epizodi A in B na strežniku deluje samo ena vtičnica in to je to. V epizodi C dve vtičnici že delujeta. Epizode D, E in F že imajo tri vtičnice. "Zakaj sta dva tam in trije tukaj?" - vprašate. To sta pogojno 2 in 3, pravzaprav je namesto 2 lahko 20, namesto treh pa 200. Cilj je pokazati, da asinhrone vtičnice ne segrejejo likalnika toliko kot sinhrone.
Kam koliko česa paše?
Poglejmo tabelo 1, ki prikazuje strukturo paketa UDP in razmislimo, kaj lahko naredimo z njim.
Tabela 1. Struktura paketa UDP
bitov
0 - 15
16 - 31
0-31
Izvorna vrata
Namembno pristanišče
32-63
Dolžina datagrama (Dolžina)
Kontrolna vsota
64- ...
podatki
Dodajmo še eno polje na sam začetek te tabele. Seja (1 bajt). To je dovolj za ta projekt. Na podlagi seje bo naprava vedela, kaj narediti s paketom. Zdaj pa si izmislimo kode za seje in jih zapišimo v tabelo 2.
Tabela 2. Razlaga sej
Koda:
Ime
pojasnilo
0xA1
Маяк
Prehod na določeni frekvenci oddaja ime omrežja LoRa in obseg veljavnih vrat. To je potrebno, da novi odjemalci vidijo razpoložljivo omrežje, trenutni odjemalci pa lahko, ko ni prenosov, določijo nivo signala.
0xB1
Uporaba
Ko odjemalec odkrije omrežje, pošlje svoja želena vrata.
0xA2
Privolitev ali zavrnitev
Če so vrata, ki jih zahteva odjemalec, prosta, potem strežnik odgovori s soglasjem, sicer pa z zavrnitvijo.
0xB2
Povezava navzgor
Ko odjemalec pošlje paket UDP na prehod.
0xA3
Povezava navzdol
Ko prehod odjemalcu pošlje paket UDP.
0xC1
Nadaljevanje Up-link
Ko prehod pošlje paket UDP v lokalno omrežje.
V redu. Zdaj pa se pogovorimo o sestavi sej v tabeli 3.
Tabela 3. Seje
Ime seje
Struktura
Маяк
Koda seje (1 bajt) + ime omrežja LoRa (4 bajta) + začetna vrata (2 bajta) + končna vrata (2 bajta)
Uporaba
Koda prenosa (1 bajt) + ime omrežja LoRa (4 bajta) + prednostna vrata (2 bajta)
Privolitev ali zavrnitev
Koda prenosa (1 bajt) + ime omrežja LoRa (4 bajt) + prednostna vrata (2 bajta) + rezultat (1 bajt)
Povezava navzgor
Koda prenosa (1 bajt) + ime omrežja LoRa (4 bajti) + oddaljeni naslov IP (4 bajti) + oddaljena vrata (2 bajta) + lokalni naslov IP (4 bajti) + lokalna vrata (2 bajta) + velikost podatkov (2 bajta) ) + podatki
Povezava navzdol
Koda prenosa (1 bajt) + ime omrežja LoRa (4 bajti) + oddaljeni naslov IP (4 bajti) + oddaljena vrata (2 bajta) + lokalni naslov IP (4 bajti) + lokalna vrata (2 bajta) + velikost podatkov (2 bajta) ) + podatki
Nadaljevanje Up-link
Oddaljeni naslov IP (4 bajti) + oddaljena vrata (2 bajta) + velikost podatkov (2 bajta) + podatki
Napisal sem dva odjemalca za Arduino in za M5Stack. Vklopljeno lahko vidite, kako deluje. Znotraj stanovanja ni nobenih težav; terenskih testov še nisem opravil.
Izvorna koda je na voljo na GitHubu na
Več o osnovni napravi M5Stack lahko izveste in jo kupite tukaj
Za osnovno napravo lahko izberete brezžične module LoRa
Vesel bom, če vam bo ta projekt koristen. Najlepša hvala za vaš čas!
Seznam referenc in (ali) virov:
Vir: www.habr.com
