Wi-Fi ja LoRa vahel UDP vÀrav

Loome UDP jaoks Wi-Fi ja LoRa vahel vÀrava

Wi-Fi ja LoRa vahel UDP vÀrav

Mul oli lapsepĂ”lve unistus — anda igale kodusele "ilma Wi-Fi" seadmele pilet vĂ”rku, s.t. IP-aadress ja port. Aja jooksul sain aru, et ei tasu edasi lĂŒkata. Tuleb lihtsalt vĂ”tta ja teha.

Tehniline ĂŒlesanne

Tehke M5Stacki vĂ€rav, millel on paigaldatud LoRa moodul (joonis 1). VĂ€rav on ĂŒhendatud Wi-Fi vĂ”rku, kus see saab DHCP kaudu kohalikku IP-aadressi. VĂ€rav saadab teatud ajavahemike jĂ€rel "LoRa-eetris" oma nime (sarnane SSID-ile Wi-Fi-s) ning lubatud portide vahemiku, et teised seadmed teaksid, et selline vĂ”rk on olemas ja millises vahemikus nad saavad valida avatud pordi. Kuna see on prototĂŒĂŒp, siis autentimist seekord ei toimu. Uued kliendiseadmed leiavad saadaval oleva LoRa-vĂ”rgu ja edastavad sellele valitud pordi. Kui vĂ€rav on saanud uue kliendi porti, kontrollib ta, kas see on vaba, ja kui jah, registreerib uue kliendi ning hakkab kuulama antud porti oma asĂŒnkroonse UDP-serveri kaudu. PĂ€rast registreerimist saab klient kas jahisĂ”numi vĂ”i keeldumise valitud pordi kasutamiseks. Töökorraldus on esitatud tabelis 1.

Wi-Fi ja LoRa vahel UDP vÀrav
Joonis 1

Tabel 1

kĂŒlg
suund ja andmed
kĂŒlg
seanss

[ klient ]
<— signaal-mĂ€rkerohi —
[ vÀrav ]
0xA1

[ klient ]
— valitud port —>
[ vÀrav ]
0xB1

[ klient ]
<— nĂ”usolek vĂ”i keeldumine —
[ vÀrav ]
0xA2

[ klient ]
— UPD-pakett —>
[ vÀrav ]
0xB2

[ klient ]
<— UPD-pakett —
[ vÀrav ]
0xA3

[ vÔrk ]
<— UPD-pakett —
[ vÀrav ]
0xC1

Minu laual on igasuguseid M5Stack'i mooduleid, mis ootavad tegevust. Vaatame LoR'it ja meelelahutame end sellega. Moodulite mĂ”te on suurepĂ€rane! Mida siin öelda? Kuid mul on esimesed versioonid, milles on kohutav sisseehitatud antenn, mis on valmistatud painduvale trĂŒkkplaadile ja kleebitud korpuse kĂŒlgpinnale. Ma tegin kord nende moodulitega vĂ€litestide seeria (saate vaadata vene keelses YouTube'i kanalis):

Vaata videot

Loomulikult tuli need jÀÀnused eemaldada ja keevitada sisse standardsed spiraal antennid, mis tulevad koos Ra-01'ga. PĂ€rast sellist kohandamist paranes ĂŒhenduse ulatus mĂ€rgatavalt, kuid tekkis kĂ”rvalmĂ”ju — antenn on suurema lĂ€bimÔÔduga kui lubatud kaugus moodulite vahel. Tuli projektist loobuda LĂ”ppmodulist ajutiselt.

Alguses ilmnevad raskused synhroniseeritud jÀikusega

Tundub, et vĂ”ta raamatukogu WiFiUdp.h, kus on kĂ”ik vajalikud tingimused UDP-serveri mugavaks toimimiseks, paraku ei ole. Raamatukogu on mĂ”eldud sĂŒnkroonse serveri seadistamiseks, mis, kurvastuseks, ei suuda samal ajal hallata mitut ĂŒhendust ĂŒhes voos. Selline raamatukogu ei sobi praeguseks ĂŒlesandeks. Olin sunnitud jooma palju tassi teed ja otsima raamatukogu, mis vĂ”imaldaks seadistada asĂŒnkroonset UDP-serverit, mis suudab toetada mitut ĂŒhendust korraga. Selline raamatukogu leiti — AsyncUDP.h. Mis on siis sĂŒnkroonse ja asĂŒnkroonse serveri vahe? Vaatame kuut episoodi joonisel 2, kus on lihtsalt nĂ€idatud sokettide töövĂ”imaluste eri variandid.

Wi-Fi ja LoRa vahel UDP vÀrav

Joonis 2

Peaosades:

Inimene rollis Soket;

Tuvi rollis Ühendus;

Kiri rollis Andmed.

Episood A. SĂŒnkroonne soket ilma ajaĂŒlevaatuseta

Inimene seisab, kuni Tuvi toob talle Kirja.

Episood B. SĂŒnkroonne soket ajaĂŒlevaatuseta

Inimene ootab koos Tuvi kokkulepitud aega ja, kui Tuvi ei tule Ôigeks ajaks, siis Inimene lahkub.

Episood C. SĂŒnkroonne soket mitme lĂ”imega

Inimene laiskleb ja jÀlgib, kuidas Tuvid ise toovad Kirju.

Episode D. AsĂŒnkroonne sokket (kui pole veel midagi vastuvĂ”tta)

Inimene tegeleb oma lemmiktegevustega, kuid ei unusta Tuvisid.

Episode E. AsĂŒnkroonne sokket (kui on, mida vastu vĂ”tta)

Inimene eemaldas korraks oma tegemistest, et saada kiri Tuvalt.

Episode F. AsĂŒnkroonne sokket koos mitme toiminguga

Inimene tegeleb oma asjadega ja jÀlgib, kuidas Tuvid toovad Kirjat ise.

Kui olete tĂ€helepanelik olnud, siis kindlasti olete mĂ€rganud, et Tuvidel on igas episoodis kindel kaelarihmade vĂ€rv. Ja see pole juhuslik. Episoodides A ja B töötab serveris vaid ĂŒks sokket. Episoodis C töötab juba kaks sokket. Episoodides D, E ja F on juba kolm sokket. "Miks seal on kaks ja siin kolm?" — kĂŒsite teie. Need on tinglikud 2 ja 3, tegelikult vĂ”ib 2 asemel olla 20 ja kolme asemel 200. EesmĂ€rk on nĂ€idata, et asĂŒnkroonsed soketid ei koorma riistvara nii, nagu sĂŒnkroonsed.

Kuhu, kui palju, mida mahub?

Vaatame tabelit 1, kus on toodud UDP-paketi struktuur ja mÔtleme, mida sellega teha.

Tabel 1. UDP-paketi struktuur

Bitid
0 — 15
16 — 31

0-31
Saatja port (Source port)
Saaja port (Destination port)

32-63
Datagrammi pikkus (Length)
Kontrollsumma (Checksum)

64-

Andmed (Data)

Lisame selles tabelis veel ĂŒhe vĂ€liku algusesse Sessioon (1 bait). Seda on selle projekti jaoks piisavalt. Sessioonist lĂ€htuvalt teab seade, kuidas paketiga edasi tegutseda. NĂŒĂŒd mĂ”tleme vĂ€lja sessioonikoodid ja kanname need tabelisse 2.

Tabel 2. Sessioonide selgitus

Kood
Nimi
Selgitus

0xA1
Majakas
VĂ€rav edastab LoRa vĂ”rgu nime ja lubatud portide vahemikku teatud sagedusega. See on vajalik, et uued kliendid nĂ€eksid saadaolevat vĂ”rku, ja juba registreeritud kliendid, kui ĂŒlegandeid ei toimu, saaksid mÀÀrata signaali taset.

0xB1
PĂŒsikĂŒsimus
Kui klient on vÔrgu avastanud, saadab ta soovitud porta.

0xA2
NÔusolek vÔi keeld
Kui klient soovitud port on vaba, vastab server nÔusolekuga, muul juhul toimub keeld.

0xB2
ÜlesĂŒlekande
Kui klient edastab UDP-paketti vÀravale.

0xA3
AllasĂŒlekande
Kui vÀrav edastab UDP-paketti kliendile.

0xC1
ÜlesĂŒlekande jĂ€tk
Kui vÀrav saadab UDP-paketti kohaliku vÔrku.

Hea. NĂŒĂŒd arutame sessioonide koostist tabelis 3.

Tabel 3. Sessioonid

Sessiooni nimi
Koostis

Majakas
Sessioonikood (1 bait) + LoRa vÔrgu nimi (4 baiti) + Algne port (2 baiti) + LÔpp-port (2 baiti)

PĂŒsikĂŒsimus
Edastuskoodeks (1 bait) + LoRa vÔrgu nimi (4 bait) + Eelistatud port (2 bait)

NÔusolek vÔi keeld
Edastuskoodeks (1 bait) + LoRa vÔrgu nimi (4 bait) + Eelistatud port (2 bait) + Tulem (1 bait)

ÜlesĂŒlekande
Edastuskoodeks (1 bait) + LoRa vÔrgu nimi (4 bait) + Kaug IP-aadress (4 bait) + Kaug port (2 bait) + Kohalik IP-aadress (4 bait) + Kohalik port (2 bait) + Andmete suurus (2 bait) + Andmed

Down-link
Edastuskoodeks (1 bait) + LoRa vÔrgu nimi (4 bait) + Kaug IP-aadress (4 bait) + Kaug port (2 bait) + Kohalik IP-aadress (4 bait) + Kohalik port (2 bait) + Andmete suurus (2 bait) + Andmed

ÜlesĂŒlekande jĂ€tk
Kaug IP-aadress (4 bait) + Kaug port (2 bait) + Andmete suurus (2 bait) + Andmed

Olen loonud kaks klienti Arduino ja M5Stack jaoks. Saate vaadata video kuidas see töötab. Korteris pole probleeme, aga ma pole veel vÀlitestimist teinud.

LĂ€htekood on saadaval GitHubis aadressil lingi kaudu

Rohkem teavet M5Stack Basic seadme kohta ning selle ostmine on saadaval siin

Valige LoRa traadita moodulid M5Stack Basic seadme jaoks siin

Olen rÔÔmus, kui see projekt on teile kasulik. Suur tÀnu, et leidsite aega!

Kirjanduse ja (vÔi) allikate nimekiri:

Allikas: habr.com

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster