Gateway për UDP ndërmjet Wi-Fi dhe LoRa

Krijojmë një kalim mes Wi-Fi dhe LoRa për UDP

Gateway për UDP ndërmjet Wi-Fi dhe LoRa

Kisha një ëndërr fëmijërore - t'u jepja çdo pajisjeje 'pa Wi-Fi' një biletë në rrjet, dmth. një IP adresë dhe port. Pas një kohe, kuptova se nuk duhej ta shtyja. Duhej ta merrja dhe ta krijoja.

Detyra teknike

Të bëjmë një kalim M5Stack me Modulin e instaluar LoRa (figura 1). Kalimi do të lidhet me rrjetin Wi-Fi, duke marrë një IP adresë lokale përmes DHCP. Kalimi do të transmetojë me një cikël të caktuar emrin e tij në 'LoRa-sferë' (analog e SSID për Wi-Fi) dhe gamën e portave të lejuara, në mënyrë që pajisjet e tjera të dinë se ekziston një rrjet të cilit mund t'i bashkohen dhe në cilën gamë mund të zgjedhin një port të lirë. Duke qenë se ky do të jetë një prototip, autentifikimi nuk do të bëhet këtë herë. Pajisjet kliente të reja do të gjejnë rrjetin LoRa të disponueshëm dhe do t'i dërgojnë atij portin e zgjedhur. Pas marrëveshjes nga klienti i ri për portin, kalimi verifikon nëse është i lirë, dhe nëse po, regjistron klientin e ri dhe fillon të dëgjojë portin e caktuar në serverin e tij asinkron UDP. Pas regjistrimit, klienti do të marrë një miratim ose refuzim për përdorimin e portit të deklaruar. Rendi i punës është i paraqitur në Tabelën 1.

Gateway për UDP ndërmjet Wi-Fi dhe LoRa
Figura 1

Tabela 1

anë
drejtim dhe të dhëna
anë
seancë

[ klient ]
<— sinjal-fajk —
[ kalim ]
0xA1

[ klient ]
— porti i zgjedhur —>
[ kalim ]
0xB1

[ klient ]
<— miratim ose refuzim —
[ kalim ]
0xA2

[ klient ]
— paketa UPD —>
[ kalim ]
0xB2

[ klient ]
<— paketa UPD —
[ kalim ]
0xA3

[ rrjet ]
<— paketa UPD —
[ kalim ]
0xC1

Para meje nĂ« tavolinĂ« janĂ« disa Module pĂ«r M5Stack dhe po e presin. Le tĂ« marrim LoR’ën dhe tĂ« argĂ«tohemi me tĂ«. Koncepti i moduleve Ă«shtĂ« i shkĂ«lqyer! ÇfarĂ« mund tĂ« them? Por, modulat e mia janĂ« tĂ« revizionit tĂ« parĂ«, me njĂ« antenĂ« tĂ« integruar tĂ« tmerrshme, tĂ« bĂ«rĂ« nĂ« njĂ« bord fleksibil dhe tĂ« vendosur nĂ« anĂ«n anĂ«sore tĂ« korpusit. NjĂ«herĂ« kam zhvilluar teste nĂ« terrenin e kĂ«tyre moduleve (mund ta shihni nĂ« kanalin rus nĂ« YouTube):

Luaj videon

Natyrisht, duhet ta hiqja këtë ruden dhe të bashkëngjita antena spirale standarde, që vijnë me Ra-01. Pas kësaj personalizimi, distanca e lidhjes u përmirësua ndjeshëm, por ndodhi një moment anësor - antena ka një diametër më të madh se distanca e lejuar midis moduleve. Duhej të hiqja modulin përfundimtar për kohëzgjatjen e projektit.

Vështirësitë e para nga ngurrimi sinkron

Duket se, merr librarinĂ« WiFiUdp.h, ku gjithçka Ă«shtĂ« nĂ« disponim pĂ«r ekzistencĂ«n e rehatshme tĂ« serverit UDP, por ashtu siç Ă«shtĂ«. Libraria Ă«shtĂ« e dizajnuar pĂ«r ngritjen e njĂ« serveri sinkron, i cili, me keqardhje tĂ« thellĂ«, nuk mund tĂ« shĂ«rbejĂ« njĂ«kohĂ«sisht disa lidhjeve nĂ« njĂ« rrjedhĂ«. NjĂ« bibliotekĂ« e tillĂ« nuk Ă«shtĂ« e pĂ«rshtatshme pĂ«r detyrĂ«n aktuale. MĂ« duhej tĂ« pija shumĂ« kupa çaji dhe tĂ« kĂ«rkoja njĂ« bibliotekĂ« qĂ« do tĂ« mundĂ«sonte ngritjen e njĂ« serveri UDP asinkron tĂ« aftĂ« tĂ« mbante shumĂ« lidhje njĂ«kohĂ«sisht. NjĂ« bibliotekĂ« e tillĂ« u gjet - AsyncUDP.h.ÇfarĂ« Ă«shtĂ« ndryshimi midis serverit sinkron dhe atij asinkron? Le tĂ« shqyrtojmĂ« gjashtĂ« episode nĂ« figurĂ«n 2, nĂ« tĂ« cilat janĂ« shfaqur nĂ« mĂ«nyrĂ« triviale variantet e funksionimit tĂ« soketĂ«ve.

Gateway për UDP ndërmjet Wi-Fi dhe LoRa

Figura 2

NĂ« rolin kryesor:

Njeriu në rolin e Soketit;

Paupau në rolin e Lidhjet;

Letra në rolin e Të dhënat.

Episode A. Soket sinkron pa kohë pritjeje

Njeriu do të qëndrojë derisa Paupau t'i sjellë atij Letra.

Episode B. Soket sinkron me kohë pritjeje

Njeriu pret kohën e diskutuar me Paupau, dhe nëse ai nuk vjen në kohë, Njeriu do të largohet.

Episode C. Soket sinkron me shumë rrjedha

Njeriu është duke u mërzitur dhe vëzhgon si Paupau vetë sjell Letra.

Episode D. Soket asinkron (kur nuk ka asgjë për të marrë)

Njeriu merret me aktivitete që i pëlqejnë, por nuk e harron Paupaun.

Episode E. Soket asinkron (kur ka diçka për të marrë)

Njeriu u shqetësua pak nga veprimet e tij, për të marrë një letër nga Paupau.

Episode F. Soket asinkron me shumë rrjedha

Njeriu merret me veprimtaritë e tij dhe vëzhgon si Paupau vetë sjell Letra.

Nëse keni qenë të vëmendshëm, me siguri keni vënë re se mëngëzët në Paupau në çdo episod kanë një ngjyrë të caktuar. Dhe kjo nuk është rastësi. Në episodet A dhe B në server punon vetëm një soket dhe gjithçka. Në episodin C punojnë tashmë dy soketë. Në episodet D, E dhe F ka nga tre soketë. "Pse atje janë dy, ndërsa këtu janë tre?" - do të pyesni. Kjo është për të treguar se soketët asinkronë nuk dëmtojnë harduerin sa soketët sinkronë.

Cila është kapaciteti i çdo gjëje?

Le të shqyrtojmë Tabelën 1, e cila tregon strukturën e paketës UDP dhe të mendojmë se çfarë mund të bëjmë me të.

Tabela 1. Struktura e paketës UDP

Bitët
0 — 15
16 — 31

0-31
Porti i dërguesit (Source port)
Porti i marrësit (Destination port)

32-63
Gjatësia e datagramit (Length)
Kontrolli i shumës (Checksum)

64-

Të dhënat (Data)

Do të shtojmë një fushë tjetër në fillim të kësaj tabele Seanca (1 Byte). Kjo është e mjaftueshme për këtë projekt. Bazuar në Sesion, pajisja do të dijë se çfarë të bëjë me paketën më pas. Tani do të krijojmë kode për sesionet dhe do t'i regjistrojmë ato në tabelën 2.

Tabela 2. Shpjegimi i sesioneve

Kodi
Emri
Shpjegim

0xA1
Baj
Porti i kalimtarit transmeton emrin e rrjetit LoRa dhe gamën e porta të lejuara me një rregullsi të caktuar. Kjo është e nevojshme që klientët e rinj të shohin rrjetin e disponueshëm, dhe klientët aktualë, kur nuk ka transmetime, mund të përcaktojnë nivelin e sinjalit.

0xB1
Kërkesa
Kur klienti zb ushtron rrjetin, ai dërgon portin e preferuar.

0xA2
Miratimi ose refuzimi
Nëse porta e kërkuar nga klienti është e lirë, serveri përgjigjet me miratim, nd otherwise refuzim.

0xB2
Up-link
Kur klienti dërgon paketën UDP në kalimtar.

0xA3
Down-link
Kur kalimtari dërgon paketën UDP tek klienti.

0xC1
Vazhdimi i Up-link
Kur kalimtari dërgon paketa UDP në rrjetin lokal.

Mirë. Tani le të diskutojmë për përbërjen e sesioneve në tabelën 3.

Tabela 3. Sesionet

Emri i sesionit
Përbërja

Baj
Kodi i sesionit (1 Byte) + Emri i rrjetit LoRa (4 Byte) + Porta fillestare (2 Byte) + Porta e fundit (2 Byte)

Kërkesa
Kodi i dërgimit (1 Byte) + Emri i rrjetit LoRa (4 Byte) + Porta e preferuar (2 Byte)

Miratimi ose refuzimi
Kodi i dërgimit (1 Byte) + Emri i rrjetit LoRa (4 Byte) + Porta e preferuar (2 Byte) + Rezultati (1 Byte)

Up-link
Kodi i dërgimit (1 Byte) + Emri i rrjetit LoRa (4 Byte) + Adresa e IP të largët (4 Byte) + Porta e largët (2 Byte) + Adresa e IP lokale (4 Byte) + Porta lokale (2 Byte) + Madhësia e të dhënave (2 Byte) + Të dhënat

Down-link
Kodi i dërgimit (1 Byte) + Emri i rrjetit LoRa (4 Byte) + Adresa e IP të largët (4 Byte) + Porta e largët (2 Byte) + Adresa e IP lokale (4 Byte) + Porta lokale (2 Byte) + Madhësia e të dhënave (2 Byte) + Të dhënat

Vazhdimi i Up-link
Adresa e IP të largët (4 Byte) + Porta e largët (2 Byte) + Madhësia e të dhënave (2 Byte) + Të dhënat

Kam shkruar dy klientë për Arduino dhe për M5Stack. Në video mund të shihni se si funksionon. Brenda apartamentit nuk ka asnjë problem, testet mbi terren akoma nuk i kam bërë.

Kodi burimor është i disponueshëm në GitHub në lidhjes

Mëso më shumë rreth Pajisjes Bazë M5Stack dhe mund ta blesh këtu

Zgjidhni modulët e pa gjithmbarshëm LoRa për Pajisjen Bazë këtu

Do të isha i lumtur nëse ky projekt do të ishte i dobishëm për ju. Faleminderit shumë për kohën e dhënë!

Lista e literaturës dhe (ose) burimeve:

Burimi: habr.com

Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster