Gateway fir UDP tëscht Wi-Fi a LoRa

Maacht e Paart tëscht Wi-Fi a LoRa fir UDP

Gateway fir UDP tëscht Wi-Fi a LoRa

Ech hat e Kandheet Dram - all Stot "ouni WiFi" Apparat e Reseau Ticket erausginn, dh eng IP Adress an port. No enger Zäit hunn ech gemierkt datt et kee Sënn huet fir auszestellen. Mir mussen et huelen an et maachen.

Technesch Aufgab

Maacht et e M5Stack Paart mat dem LoRa Modul installéiert (Figur 1). De Paart gëtt mam Wi-Fi Netz verbonnen, wou et eng lokal IP Adress iwwer DHCP kritt. De Paart wäert säin Numm (analog zum SSID fir Wi-Fi) an d'Gamme vu gültege Ports an d'LoRa Sendung mat enger gewësser Frequenz iwwerdroen, sou datt aner Geräter wëssen datt et e Netzwierk ass, mat deem se kënne verbannen an a wéi engem Beräich si kënnen eng fräi port auswielen. Well dëst e Prototyp wäert sinn, ass d'Authentifikatioun dës Kéier net erfuerderlech. Nei Clientsgeräter fannen e verfügbare LoRa Netz an iwwerdroen de gewielten Hafen un. Nodeems de Paart e Port vun engem neie Client kritt huet, kontrolléiert se ob et gratis ass; wann jo, registréiert en den neie Client a fänkt un dësen Hafen op sengem eegenen asynchronen UDP Server ze lauschteren. No Aschreiwung kritt de Client Zoustëmmung oder Refus fir den deklaréierten Hafen ze benotzen. D'Operatiounsprozedur gëtt an der Tabell 1 gewisen.

Gateway fir UDP tëscht Wi-Fi a LoRa
1 Figur

1 Dësch

der Säit
Richtung an daten
der Säit
Sëtzung

[ клиент ]
<— сигнал-маяк —
[ шлюз ]
0xA 1

[ клиент ]
— выбранный порт —>
[ шлюз ]
0xb1 fir

[ клиент ]
<— согласие или отказ —
[ шлюз ]
0xA 2

[ клиент ]
— UPD-пакет —>
[ шлюз ]
0xb2 fir

[ клиент ]
<— UPD-пакет —
[ шлюз ]
0xA 3

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

Et ginn all Zorte vu Moduler fir M5Stack op den Dësch virun mir leien a si langweileg. Loosst eis LoR huelen a Spaass hunn. D'Konzept vun de Moduler selwer ass wonnerbar! Wat soll ech soen? Awer, ech hunn déi éischt Revisiounsmoduler, déi déi schrecklechst agebauter Antenne hunn, op engem flexiblen gedréckte Circuit Board gemaach an op d'Säitmauer vum Fall gekollt. Ech hunn eemol Feldtester vun esou Moduler gemaach (Dir kënnt se op de russeschsproochege Kanal op YouTube kucken):

Spillt Video

Natierlech hu mir dës Rudimenter a Solder an de Standard helical Antennen ze läschen, déi mat der Ra-01 kommen. No esou Personnalisatioun huet d'Kommunikatiounsberäich däitlech verbessert, awer e Säitprobleem ass erschéngt - d'Antenne huet en Duerchmiesser méi wéi déi zulässlech Distanz tëscht de Moduler. Ech hu missen de Finale Modul fir d'Dauer vum Projet opginn.

Déi éischt Schwieregkeeten aus Synchron- Dichtheet

Et géif schéngen, huelt d'Bibliothéik WiFiUdp.h, wou alles do ass fir déi bequem Existenz vun engem UDP-Server, dat ass net de Fall. D'Bibliothéik ass entworf fir e Synchron-Server z'erhéijen, deen leider net gläichzäiteg verschidde Verbindungen an engem Thread kann servéieren. Esou eng Bibliothéik ass net gëeegent fir déi aktuell Aufgab. Ech hu misse vill Taass Téi drénken a sichen no enger Bibliothéik, déi mir erlaabt en asynchronen UDP-Server ze bauen, dee gläichzäiteg vill Verbindungen ënnerstëtzen kann. Sou eng Bibliothéik gouf fonnt - AsyncUDP.h. Wat ass den Ënnerscheed tëscht engem synchronen Server an engem asynchronen? Loosst eis déi sechs Episoden an der Figur 2 kucken, déi trivial weisen wéi Sockets funktionnéieren.

Gateway fir UDP tëscht Wi-Fi a LoRa

2 Figur

Starring:

'Persoun an der Roll Socket;

Pigeon an der Roll Connections;

Pismo an der Roll Daten.

Episod A. Synchron- Socket ouni Timeout

De Mann wäert stoen bis d'Dove him de Bréif bréngt.

Episod B. Synchron- Socket mat Timeout

De Mann waart op d'Zäit, déi mat der Dove ausgemaach ass, a wann et net zu Zäit ukomm ass, geet de Mann fort.

Episod C. Synchron- Socket mat multithreading

De Mann setzt sech zréck a kuckt wéi d'Pigeons d'Bréiwer eleng liwweren.

Episod D. Asynchronous Socket (wann et näischt anescht ze kréien ass)

Eng Persoun mécht seng Liiblingssaachen, awer vergiesst net iwwer Pigeons.

Episod E. Asynchronous Socket (wann et eppes ze gewannen ass)

De Mann huet eng kuerz Paus vu sengen Affären gemaach fir e Bréif vun der Dove ze kréien.

Episod F. Asynchronous Socket mat multithreading

De Mann geet iwwer säi Geschäft a kuckt wéi d'Pigeons d'Bréiwer selwer liwweren.

Wann Dir opgepasst hutt, musst Dir wahrscheinlech gemierkt hunn datt d'Halsbanden op de Pigeons an all Episod eng gewësse Faarf hunn. An dat ass net ouni Grond. An der Episod A a B funktionnéiert nëmmen ee Socket um Server an dat ass et. An Episod C, zwee Sockets schaffen schonn. Episoden D, E an F hu schonn dräi Sockets. "Firwat sinn et zwee do an dräi hei?" - Dir frot. Dës sinn bedingt 2 an 3, tatsächlech, amplaz vun 2 kann et 20 sinn, an amplaz vun dräi 200. D'Zil ass et ze weisen datt asynchrone Sockets d'Eisen net sou vill erhëtzen wéi Synchron.

Wou passt wéi vill vun eppes?

Loosst eis d'Tabelle 1 kucken, déi d'Struktur vun engem UDP Paket weist an iwwerdenken wat mir domat maache kënnen.

Dësch 1. UDP Paket Struktur

Stécker
0 - 15
16 - 31

0-31
Source port
Destinatioun port

32-63
Datagram Längt (Längt)
Checksum

64- ...
Daten

Loosst eis en anert Feld ganz am Ufank vun dëser Tabelle addéieren. Sessioun (1 Byte). Dëst ass genuch fir dëse Projet. Baséierend op der Sessioun, wäert den Apparat wëssen wat nächst mam Paket ze maachen. Loosst eis elo mat Coden fir d'Sessiounen kommen a se an der Tabell 2 opschreiwen.

Dësch 2. Erklärung vun Sëtzungen

Code
Titelen
Erklärung

0xA 1
Lighthouse
De Paart schéckt den Numm vum LoRa Netzwierk an d'Gamme vu gültege Ports mat enger gewësser Frequenz. Dëst ass néideg fir datt nei Clienten de verfügbaren Netzwierk gesinn, an déi aktuell Clienten, wa keng Transmissioune sinn, kënnen den Signalniveau bestëmmen.

0xb1 fir
Applikatioun
Wann de Client d'Netzwierk entdeckt huet, schéckt se säi gewënschte Hafen.

0xA 2
Zoustëmmung oder Refus
Wann den Hafen, dee vum Client gefrot gëtt, gratis ass, da reagéiert de Server mat Zoustëmmung, an soss mat Refus.

0xb2 fir
Link erop
Wann de Client en UDP Paket un de Paart schéckt.

0xA 3
Down Link
Wann de Paart en UDP Paket un de Client iwwerdréit.

0xC1
Fortsetzung vun Up-Link
Wann de Paart en UDP Paket an de lokalen Netzwierk schéckt.

Gutt. Loosst eis elo d'Zesummesetzung vun de Sessiounen an der Tabell 3 diskutéieren.

Dësch 3. Sëtzungen

Sëtzung Numm
Kreatioun

Lighthouse
Sessiounscode (1 Byte) + LoRa Netzwierknumm (4 Bytes) + Startport (2 Bytes) + Endport (2 Bytes)

Applikatioun
Iwwerdroungscode (1 Byte) + LoRa Netzwierknumm (4 Bytes) + Preferenzport (2 Bytes)

Zoustëmmung oder Refus
Iwwerdroungscode (1 Byte) + LoRa Netzwierknumm (4 Byte) + Preferenzport (2 Byte) + Resultat (1 Byte)

Link erop
Iwwerdroungscode (1 Byte) + LoRa Netzwierknumm (4 Bytes) + Remote IP Adress (4 Bytes) + Remote Port (2 Bytes) + Lokal IP Adress (4 Bytes) + Lokal Port (2 Bytes) + Dategréisst (2 Bytes) ) + Daten

Down-Link
Iwwerdroungscode (1 Byte) + LoRa Netzwierknumm (4 Bytes) + Remote IP Adress (4 Bytes) + Remote Port (2 Bytes) + Lokal IP Adress (4 Bytes) + Lokal Port (2 Bytes) + Dategréisst (2 Bytes) ) + Daten

Fortsetzung vun Up-Link
Remote IP Adress (4 Bytes) + Remote Port (2 Bytes) + Dategréisst (2 Bytes) + Data

Ech hunn zwee Cliente fir Arduino a fir M5Stack geschriwwen. Op видео Dir kënnt gesinn wéi et funktionnéiert. Et gi keng Probleemer am Appartement; Ech hunn nach keng Feldtester gemaach.

De Quellcode ass verfügbar op GitHub op Link

Dir kënnt méi iwwer de M5Stack Base Device léieren a kaafen hei hei

Dir kënnt LoRa Wireless Moduler fir de Base Device auswielen hei

Ech wäert frou sinn wann dëse Projet fir Iech nëtzlech ass. Villmools Merci fir Är Zäit!

Lëscht vun Referenzen an (oder) Quellen:

Source: will.com

Kaaft zouverlässeg Hosting fir Site mat DDoS Schutz, VPS VDS Server 🔥 Kaaft zouverléissegt Websäithosting mat DDoS-Schutz, VPS VDS Server | ProHoster