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-д зориулсан гарц
1 зураг

Хүснэгт 1

тал
чиглэл ба өгөгдөл
тал
сесс

[үйлчлүүлэгч]
<— дохионы дохио —
[ гарц ]
0xA1

[үйлчлүүлэгч]
— сонгосон порт —>
[ гарц ]
0xB1 хувилбартай

[үйлчлүүлэгч]
<— зөвшөөрөл эсвэл татгалзал —
[ гарц ]
0xA2

[үйлчлүүлэгч]
— UPD багц —>
[ гарц ]
0xB2 хувилбартай

[үйлчлүүлэгч]
<— UPD-багц —
[ гарц ]
0xA3

[ цэвэр ]
<— UPD-багц —
[ гарц ]
0xC1 хувилбартай

Миний урд ширээн дээр M5Stack-д зориулсан бүх төрлийн модулиуд байгаа бөгөөд тэд уйтгартай байдаг. LoR-г аваад хөгжилтэй байцгаая. Модулиудын үзэл баримтлал нь өөрөө гайхалтай юм! Би юу хэлж чадах вэ? Гэхдээ надад уян хатан хэвлэмэл хэлхээний самбар дээр хийгдсэн, хэргийн хажуугийн хананд наасан хамгийн аймшигтай суурилуулсан антентай анхны засварын модулиуд бий. Би нэг удаа ийм модулиудын хээрийн туршилт хийсэн (та тэдгээрийг YouTube дээрх орос хэл дээрх сувгаас үзэх боломжтой):

Видео тоглуулна уу

Мэдээжийн хэрэг, бид Ra-01-тэй хамт ирдэг стандарт мушгиа антеннуудад эдгээр үндсэн элементүүдийг арилгаж, гагнах шаардлагатай болсон. Ийм тохируулсны дараа холбооны хүрээ мэдэгдэхүйц сайжирсан боловч хажуугийн асуудал гарч ирэв - антен нь модулиудын хоорондох зөвшөөрөгдөх зайнаас том диаметртэй байна. Төслийн хугацаанд би эцсийн модулийг орхих шаардлагатай болсон.

Синхрон битүүмжлэлийн эхний хүндрэлүүд

Номын сангаа авчих шиг боллоо WiFiUdp.h, UDP серверийг тав тухтай байлгахын тулд бүх зүйл байгаа бол энэ нь тийм биш юм. Номын сан нь синхрон серверийг бий болгоход зориулагдсан бөгөөд харамсалтай нь нэг хэлхээнд хэд хэдэн холболтыг нэгэн зэрэг хийх боломжгүй юм. Ийм номын сан одоогийн даалгаварт тохиромжгүй. Би маш олон аяга цай ууж, олон холболтыг нэгэн зэрэг дэмжих чадвартай асинхрон UDP сервер бүтээх боломжтой номын сан хайх хэрэгтэй болсон. Ийм номын сан олдсон - AsyncUDP.h. Синхрон сервер ба асинхрон серверийн хооронд ямар ялгаа байдаг вэ? Зураг 2-т залгуурууд хэрхэн ажилладагийг бага зэрэг харуулсан зургаан ангийг харцгаая.

Wi-Fi болон LoRa хооронд UDP-д зориулсан гарц

2 зураг

Одоор тэмдэглэж байна:

Тэр хүн дүрдээ Сокет;

Pigeon дүрдээ Холболтууд;

Писмо дүрдээ Өгөгдөл.

Episode A. Хугацаа хэтрээгүй синхрон залгуур

Тагтаа түүнд захидал авчрах хүртэл тэр хүн зогсох болно.

Episode B. Хугацаа хэтэрсэн синхрон залгуур

Хүн Тагтаатай тохиролцсон цагийг хүлээдэг бөгөөд хэрэв цагтаа ирэхгүй бол Хүн явах болно.

Episode C. Олон урсгалтай синхрон залгуур

Тэр хүн хойш суугаад тагтаанууд бие даан захидал хүргэхийг харна.

Анги D. Асинхрон залгуур (хүлээн авах өөр зүйл байхгүй үед)

Хүн дуртай зүйлээ хийдэг ч тагтаа мартдаггүй.

Episode E. Асинхрон залгуур (олох зүйл байгаа үед)

Тэр хүн Тагтаагаас захидал хүлээн авахын тулд ажлаасаа хэсэг хугацаанд завсарлав.

Episode 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 байт). Энэ төсөлд энэ нь хангалттай. Session дээр үндэслэн төхөөрөмж дараа нь пакеттай юу хийхээ мэдэх болно. Одоо хичээлийн кодуудыг гаргаж ирээд 2-р хүснэгтэд бичье.

Хүснэгт 2. Хичээлийн тайлбар

Хууль
Гарчиг
Тайлбар

0xA1
Гэрлийн цамхаг
Уг гарц нь LoRa сүлжээний нэр болон хүчинтэй портуудын хүрээг тодорхой давтамжтайгаар дамжуулдаг. Энэ нь шинэ үйлчлүүлэгчид боломжтой сүлжээг харахын тулд шаардлагатай бөгөөд дамжуулалт байхгүй үед одоогийн үйлчлүүлэгчид дохионы түвшинг тодорхойлох боломжтой болно.

0xB1 хувилбартай
Өргөдөл
Үйлчлүүлэгч сүлжээг олж мэдсэний дараа өөрийн сонгосон портоо илгээдэг.

0xA2
Зөвшөөрөх эсвэл татгалзах
Хэрэв үйлчлүүлэгчийн хүссэн порт үнэгүй бол сервер нь зөвшөөрч, татгалзсан хариу өгнө.

0xB2 хувилбартай
Дээш холбоос
Үйлчлүүлэгч UDP пакетийг гарц руу илгээх үед.

0xA3
Доош холбоос
Гарц нь UDP пакетыг үйлчлүүлэгч рүү дамжуулах үед.

0xC1 хувилбартай
Дээш холбоосын үргэлжлэл
Гарц нь дотоод сүлжээнд 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 байт) ) + Өгөгдөл

Дээш холбоосын үргэлжлэл
Алсын IP хаяг (4 байт) + алсын порт (2 байт) + өгөгдлийн хэмжээ (2 байт) + өгөгдөл

Би Arduino болон M5Stack-д зориулж хоёр үйлчлүүлэгч бичсэн. Асаалттай видео хэрхэн ажилладагийг та харж болно. Орон сууцанд ямар ч асуудал байхгүй, би хээрийн туршилт хийгээгүй байна.

Эх кодыг GitHub дээрээс авах боломжтой холбоос

Та M5Stack үндсэн төхөөрөмж болон худалдан авалтын талаар илүү ихийг мэдэх боломжтой энд

Та үндсэн төхөөрөмжид LoRa утасгүй модулиудыг сонгож болно энд

Энэ төсөл танд хэрэгтэй бол би баяртай байх болно. Цаг зав гаргасанд маш их баярлалаа!

Лавлагаа ба (эсвэл) эх сурвалжийн жагсаалт:

Эх сурвалж: www.habr.com

DDoS хамгаалалт, VPS VDS сервер бүхий сайтуудад найдвартай хостинг худалдаж аваарай 🔥 DDoS хамгаалалттай, VPS VDS сервертэй найдвартай вэбсайт хостинг худалдаж аваарай | ProHoster