Wi-Fi жана LoRa ортосундагы UDP шлюзи

UDP үчүн Wi-Fi жана LoRa ортосунда шлюз жасоо

Wi-Fi жана LoRa ортосундагы UDP шлюзи

Мен бала кезден кыялданчумун - ар бир үй-бүлөгө "WiFi жок" түзмөккө тармак билетин, б.а. IP дарегин жана портун берүү. Бир аз убакыт өткөндөн кийин, кийинкиге калтыруунун эч кандай пайдасы жок экенин түшүндүм. Биз аны алып, жасашыбыз керек.

Техникалык тапшырма

Аны LoRa модулу орнотулган M5Stack шлюзуна айлантыңыз (1-сүрөт). Шлюз Wi-Fi тармагына туташып, ал жерден DHCP аркылуу жергиликтүү IP даректи алат. Шлюз өзүнүн атын (Wi-Fi үчүн SSIDге окшош) жана жарактуу порттордун диапазонун белгилүү бир жыштыкта ​​LoRa уктуруусуна чыгарат, ошондуктан башка түзмөктөр алар туташа турган тармак бар экенин жана кайсы диапазондо экенин билишет. алар бекер портту тандай алышат. Бул прототиби болгондуктан, бул жолу аутентификация талап кылынбайт. Жаңы кардар түзмөктөрү жеткиликтүү LoRa тармагын таап, тандалган портту ага өткөрөт. Шлюз жаңы кардардан портту алгандан кийин, ал бекер экендигин текшерет, эгер андай болсо, ал жаңы кардарды каттайт жана өзүнүн асинхрондук UDP серверинде бул портту уга баштайт; Катталгандан кийин кардар жарыяланган портту колдонууга макулдук же баш тартууну алат. Иштөө тартиби 1-таблицада көрсөтүлгөн.

Wi-Fi жана LoRa ортосундагы UDP шлюзи
Figure 1

Мазмуну 1

тарап
багыт жана маалыматтар
тарап
сессия

[ кардар ]
<— маяк сигналы —
[шлюз]
0xA1

[ кардар ]
— тандалган порт —>
[шлюз]
0xB1

[ кардар ]
<— макулдук же баш тартуу —
[шлюз]
0xA2

[ кардар ]
— UPD-пакет —>
[шлюз]
0xB2

[ кардар ]
<— UPD-пакет —
[шлюз]
0xA3

[ таза ]
<— UPD-пакет —
[шлюз]
0xC1

Менин алдымда столдо M5Stack үчүн ар кандай модулдар бар жана алар кызыксыз. Келгиле, LoR алып, аны менен көңүл ачалы. Модулдардын түшүнүгү абдан сонун! Эмне десем болот? Бирок, менде эң коркунучтуу орнотулган антеннасы бар, ийкемдүү басма тактасында жасалган жана корпустун каптал дубалына чапталган биринчи ревизия модулдары бар. Мен бир жолу мындай модулдардын талаа сыноолорун өткөргөм (сиз аларды YouTube'дагы орус тилдүү каналдан көрө аласыз):

Play Video

Албетте, биз Ra-01 менен келген стандарттуу спираль антенналарда бул негиздерди алып салууга туура келди. Мындай ыңгайлаштыруудан кийин байланыш диапазону байкаларлык жакшырды, бирок каптал маселе пайда болду - антеннанын диаметри модулдардын ортосундагы жол берилген аралыктан чоңураак. Долбоордун жүрүшүндө акыркы модулдан баш тартууга туура келди.

Синхрондуу тыгылыштан биринчи кыйынчылыктар

Китепкананы алып кеткиле WiFiUdp.h, UDP серверинин ыңгайлуу болушу үчүн бардыгы бар жерде, бул андай эмес. Китепкана синхрондук серверди көтөрүү үчүн иштелип чыккан, тилекке каршы, ал бир эле учурда бир жипте бир нече байланышты тейлей албайт. Мындай китепкана учурдагы тапшырмага ылайыктуу эмес. Мен көп чөйчөкчө чай ичип, бир эле учурда көптөгөн байланыштарды колдоого жөндөмдүү асинхрондук UDP серверин курууга мүмкүндүк бере турган китепкана издөөгө туура келди. Мындай китепкана табылган - AsyncUDP.h. Синхрондуу сервер менен асинхрондук сервердин ортосунда кандай айырма бар? Келгиле, 2-сүрөттөгү розеткалардын кантип иштешин анча-мынча чагылдырган алты эпизодду карап көрөлү.

Wi-Fi жана LoRa ортосундагы UDP шлюзи

Figure 2

Башкы ролдордо:

эл ролун Розетка;

көгүчкөн ролун байланыштар;

Pismo ролун Ð "Ð ° Ð¸Ð¾Ð½Ð½Ñ <Ñ ....

Эпизод A. Тайм-аут жок синхрондуу розетка

Көгүчкөн катты алып келгиче, киши тура берет.

Эпизод B. Таймут менен синхрондуу розетка

Адам Көгүчкөн менен макулдашылган убакытты күтөт, эгер ал өз убагында келбесе, Адам кетет.

Эпизод C. Multithreading менен синхрондуу розетка

Ал киши кайра отуруп алып, көгүчкөндөрдүн каттарды өз алдынча жеткирип жатканын карап турат.

Эпизод D. Асинхрондук розетка (алууга башка эч нерсе жок болгондо)

Адам сүйүктүү иштерин жасайт, бирок Көгүчкөндөрдү унутпайт.

Эпизод E. Асинхрондук розетка (пайда ала турган нерсе болгондо)

Көгүчкөндөн кат алуу үчүн ал киши өз иштеринен бир аз тыныгуу алды.

Эпизод F. Multithreading менен асинхрондук розетка

Ал киши өз иши менен алектенип, көгүчкөндөрдүн каттарды өздөрү жеткирип жатканын карап турат.

Эгер көңүл бурсаңыз, ар бир эпизоддогу Көгүчкөндөрдүн жакасы белгилүү бир түскө ээ экенин байкаган чыгарсыз. Бул да бекеринен эмес. А жана В эпизоддорунда серверде бир гана розетка иштейт жана ушуну менен бүттү. C эпизодунда эки розетка мурунтан эле иштеп жатат. D, E жана F эпизоддорунда үч розетка бар. "Эмне үчүн ал жерде экөө, бул жерде үчөө бар?" – деп сурайсың. Булар шарттуу түрдө 2 жана 3, чындыгында 2дин ордуна 20 болушу мүмкүн, үчөөнүн ордуна 200. Максат асинхрондук розеткалар темирди синхрондуктардай эле ысытпай турганын көрсөтүү.

Кайсыл бир нерсенин канчасы туура келет?

Келгиле, UDP пакетинин түзүмүн көрсөткөн 1-таблицаны карап көрөлү жана аны менен эмне кыла аларыбызды ойлонолу.

Таблица 1. UDP пакетинин структурасы

бит
0 - 15
16 - 31

0-31
Булак порту
Көздөгөн порт

32-63
Датаграмманын узундугу (узундугу)
Текшерүү суммасы

64- ...
Маалыматтар

Бул таблицанын эң башына дагы бир талааны кошолу. Сессия (1 байт). Бул долбоор үчүн бул жетиштүү. Сессиянын негизинде аппарат пакет менен андан ары эмне кылуу керектигин билет. Эми сессиялардын коддорун ойлоп таап, аларды 2-таблицага жазалы.

Таблица 2. Сессиялардын түшүндүрмөсү

коду
ысым
тазалоо

0xA1
маяк
Шлюз LoRa тармагынын атын жана белгилүү бир жыштыктагы жарактуу порттордун диапазонун берет. Бул жаңы кардарлар жеткиликтүү тармакты көрүшү үчүн зарыл, ал эми учурдагы кардарлар, берүүлөр жок болгондо, сигналдын деңгээлин аныктай алышат.

0xB1
арыз
Кардар тармакты тапканда, ал өзүнүн каалаган портун жөнөтөт.

0xA2
Макул же баш тартуу
Эгерде кардар сураган порт бекер болсо, анда сервер макулдук менен жооп берет, башка учурда баш тартуу менен.

0xB2
Өйдө шилтеме
Кардар UDP пакетин шлюзге жөнөткөндө.

0xA3
Төмөн шилтеме
Шлюз кардарга UDP пакетин өткөргөндө.

0xC1
Up-link программасынын уландысы
Шлюз жергиликтүү тармакка UDP пакетин жөнөткөндө.

Жакшы. Эми сессиялардын курамын 3-таблицада талкуулайлы.

Таблица 3. Сессиялар

Сеанс аты
түзүлүш

маяк
Сеанс коду (1 байт) + LoRa тармагынын аталышы (4 байт) + баштоо порту (2 байт) + аягы порту (2 байт)

арыз
Өткөрүү коду (1 байт) + LoRa тармагынын аталышы (4 байт) + артыкчылыктуу порт (2 байт)

Макул же баш тартуу
Өткөрүү коду (1 байт) + LoRa тармагынын аталышы (4 байт) + артыкчылыктуу порт (2 байт) + натыйжа (1 байт)

Өйдө шилтеме
Өткөрүү коду (1 байт) + LoRa тармагынын аталышы (4 байт) + алыскы IP дареги (4 байт) + алыскы порт (2 байт) + жергиликтүү IP дареги (4 байт) + жергиликтүү порт (2 байт) + маалымат көлөмү (2 байт) ) + Маалыматтар

Төмөн шилтеме
Өткөрүү коду (1 байт) + LoRa тармагынын аталышы (4 байт) + алыскы IP дареги (4 байт) + алыскы порт (2 байт) + жергиликтүү IP дареги (4 байт) + жергиликтүү порт (2 байт) + маалымат көлөмү (2 байт) ) + Маалыматтар

Up-link программасынын уландысы
Алыскы IP дареги (4 байт) + Алыскы порт (2 байт) + маалымат көлөмү (2 байт) + маалымат

Мен Arduino жана M5Stack үчүн эки кардар жаздым. Күйүк видео анын кантип иштээрин көрө аласыз. Батирдин ичинде эч кандай көйгөй жок;

Булак коду GitHub сайтында жеткиликтүү байланыш

M5Stack базалык түзмөк жана сатып алуу жөнүндө көбүрөөк биле аласыз бул жерде

Негизги түзмөк үчүн LoRa зымсыз модулдарын тандай аласыз бул жерде

Бул долбоор сизге пайдалуу болсо кубанычтамын. Убактыңыз үчүн чоң рахмат!

Шилтемелердин жана (же) булактардын тизмеси:

Source: www.habr.com

DDoS коргоосу, VPS VDS серверлери бар сайттар үчүн ишенимдүү хостинг сатып алыңыз 🔥 DDoS коргоосу, VPS VDS серверлери бар ишенимдүү веб-сайт хостингин сатып алыңыз | ProHoster