Gateway për UDP midis Wi-Fi dhe LoRa

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

Gateway për UDP midis Wi-Fi dhe LoRa

Ishte njĂ« Ă«ndĂ«rr e fĂ«mijĂ«risĂ« time — t'i jepja çdo pajisjeje "paWiFi" njĂ« biletĂ« nĂ« rrjet, dmth. njĂ« adresĂ« IP dhe port. Pas njĂ« kohe, kuptova se nuk duhej ta shtyja. Duhet tĂ« marr e ta bĂ«j.

Detyra teknike

Të bëjmë kalim M5Stack me Modul LoRa të instaluar (ilustrimi 1). Kalimi do të lidhet me rrjetin Wi-Fi, ku do të marrë një adresë IP lokale përmes DHCP. Kalimi do të transmetojë në "LoRa-etër" emrin e tij (analog SSID për Wi-Fi) dhe gamën e portave të lejuara, në mënyrë që pajisjet e tjera të dinë se ka një rrjet të tillë, në të cilin mund të lidhen dhe në cilën gamë mund të zgjedhin një port të lirë. Duke qenë se kjo do të jetë një prototip, autentifikimi nuk do të ndodhë këtë herë. Pajisjet e reja-klientë do të gjejnë rrjetin e disponueshëm LoRa dhe do t'i dërgojnë atij portin e zgjedhur. Pasi kalimi të marrë nga klienti i ri portin, verifikon nëse ai është i lirë, nëse po, regjistron klientin e ri dhe fillon të dëgjojë portin në serverin e tij asinkron UDP. Pas regjistrimit, klienti do të marrë miratimin ose refuzimin për përdorimin e portit të shpallur. Rendi i funksionimit është paraqitur në tabelën 1.

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

Tabela 1

anë
direksioni dhe të dhënat
anë
seancë

[ klient ]
<— sinjali i majĂ«s —
[ kalim ]
0xA1

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

[ klient ]
<— miratimi ose refuzimi —
[ 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 ndihen tĂ« mĂ«rzitur. Le ta marrim LoR'Ă«n dhe tĂ« argĂ«tohemi me tĂ«. Koncepti i moduleve Ă«shtĂ« i mrekullueshĂ«m! ÇfarĂ« tĂ« them? Por, modulet qĂ« kam janĂ« tĂ« revizionit tĂ« parĂ«, ku antena e integruar Ă«shtĂ« mjaft e keqe, e bĂ«rĂ« nĂ« njĂ« pllakĂ« tĂ« fleksibĂ«l qarku dhe e ngjitur nĂ« anĂ«n e trupit. NjĂ« herĂ« bĂ«ra teste nĂ« terren me kĂ«to module (mund tĂ« shihni nĂ« kanalin rus nĂ« YouTube):

Luaj videon

Natyrisht, mĂ« duhej tĂ« hiqja kĂ«to mbetje dhe tĂ« ngjisja antena spirale qĂ« vijnĂ« me Ra-01. Pas njĂ« personalizimi tĂ« tillĂ«, distanca e lidhjes u pĂ«rmirĂ«sua ndjeshĂ«m, por u shfaq njĂ« moment anĂ«sor — antena ka njĂ« diametĂ«r mĂ« tĂ« madh se distanca e lejuar midis moduleve. MĂ« duhej tĂ« heq dorĂ« nga Moduli pĂ«rfundimtar pĂ«r njĂ« kohĂ« gjatĂ« projektit.

Vështirësitë e para nga ngurtësia e sinkronizimit

Duket se duhet tĂ« marr librarinĂ« WiFiUdp.h, ku ku gjithçka Ă«shtĂ« pĂ«r ekzistencĂ«n e rehatshme tĂ« serverit UDP, nuk ka. Biblioteka Ă«shtĂ« menduar pĂ«r ngritjen e njĂ« serveri sinhron, i cili, pĂ«r 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. Duhej tĂ« pija shumĂ« filxhane çaji dhe tĂ« kĂ«rkoja njĂ« bibliotekĂ« qĂ« do tĂ« lejonte ngritjen e njĂ« serveri asinkron UDP qĂ« Ă«shtĂ« nĂ« gjendje tĂ« mbĂ«shtesĂ« shumĂ« lidhje nĂ« tĂ« njĂ«jtĂ«n kohĂ«. NjĂ« bibliotekĂ« e tillĂ« u gjend — AsyncUDP.h. Cila Ă«shtĂ« ndarja mes njĂ« serveri sinhron dhe njĂ« asinkron? Le tĂ« shqyrtojmĂ« gjashtĂ« episode nĂ« figurĂ«n 2, ku janĂ« thjesht paraqitur opsionet e funksionimit tĂ« soketeve.

Gateway për UDP midis Wi-Fi dhe LoRa

Figura 2

NĂ« rolet kryesore:

Njeriu në rol Socketi;

Peli në rol Lidhjet;

Letra në rol Të Dhënat.

Epizodi A. Socketi sinhron pa kohë të caktuar

Njeriu do të qëndrojë derisa Peli të sjellë Letra.

Epizodi B. Socketi sinhron me kohë të caktuar

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

Epizodi C. Socketi sinhron me shumë rrjedha

Njeriu po kalon kohën dhe vëzhgon sesi Pelit vetë sjellin Letra.

Epizodi D. Socketi asinkron (kur nuk ka çfarë të merrni)

Njeriu merret me aktivitetet e tij të preferuara, por nuk e harron Pelin.

Epizodi E. Socketi asinkron (kur ka çfarë të merrni)

Njeriu u shpërqendrua për një moment nga aktivitetet e tij për të marrë një letër nga Peli.

Epizodi F. Socketi asinkron me shumë rrjedha

Njeriu është duke u marrë me punët e tij dhe vëzhgon sesi Peli vetë sjellin Letra.

Nëse ishit të vëmendshëm, patjetër që keni vënë re se byrekët në Pelit në çdo epizod kanë një ngjyrë të caktuar. Dhe kjo nuk është përndryshe. Në epizodet A dhe B në server punon vetëm një socket dhe mjafton. Në epizodin C punojnë tashmë dy socketë. Në epizodet D, E dhe F janë tre socketë. "Pse atje janë dy, e këtu janë tre?" do të pyesni. Këto janë kushtimisht 2 dhe 3, në të vërtetë për 2 mund të jetë 20, dhe për tre 200. Qëllimi është të tregohet se socketët asinkronë nuk e ngarkojnë harduerin ashtu si socketët sinhron.

Sa dhe çfarë kap?

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

Tabelë 1. Struktura e paketës UDP

Bits
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 Sesioni (1 Byte). Kjo është e mjaftueshme për këtë projekt. Sipas Sesionit, pajisja do të dijë se çfarë të bëjë me paketën më pas. Tani do të konceptojmë kodet për sesionet dhe do t'i regjistrojmë ato në tabelën 2.

Tabela 2. Shpjegimi i sesioneve

Kodi
Emri
Shpjegimi

0xA1
Far
Gateway-i transmeton emrin e rrjetit LoRa dhe gamën e porteve të pranuara me një periudhë të caktuar. Kjo është e nevojshme që klientët e rinj të shohin rrjetin e disponueshëm, ndërsa klientët aktualë, kur nuk ka transmetimesh, të përcaktojnë nivelin e sinjalit.

0xB1
Aplikimi
Kur klienti zbulohet rrjeti, ai dërgon portin e preferuar.

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

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

0xA3
Down-link
Kur gateway-i dërgon një paketë UDP te klienti.

0xC1
Vazhdimi i Up-link
Kur gateway-i dërgon një paketë 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

Far
Kodi i sesionit (1 Byte) + Emri i rrjetit LoRa (4 Byte) + Porta fillestare (2 Byte) + Porta përfundimtare (2 Byte)

Aplikimi
Kodi i transferimit (1 Byte) + Emri i rrjetit LoRa (4 Byte) + Porta e preferuar (2 Byte)

Konsenti ose refuzimi
Kodi i transferimit (1 Byte) + Emri i rrjetit LoRa (4 Byte) + Porta e preferuar (2 Byte) + Rezultati (1 Byte)

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

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

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

Krijova dy klientë për Arduino dhe për M5Stack. Në video mund të shihni se si funksionon kjo. Brenda apartamentit nuk ka ndonjë problem, testet në terren nuk i kam bërë ende.

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

Mësoni më shumë rreth Pajisjes Bazë M5Stack dhe mund ta blini këtu

Zgjidhni modulët pa tel LoRa për Pajisjen Bazë këtu

Do të jem i lumtur nëse ky projekt do t'ju ndihmojë. Faleminderit shumë për kohën tuaj!

Lista e literaturës dhe (ose) burimeve:

Burimi: habr.com

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