Gateway voor UDP tussen Wi-Fi en LoRa

Een gateway maken tussen Wi-Fi en LoRa voor UDP

Gateway voor UDP tussen Wi-Fi en LoRa

Ik had een kinderdroom: elk huishouden ‘zonder WiFi’-apparaat een netwerkticket geven, d.w.z. een IP-adres en poort. Na een tijdje besefte ik dat het geen zin had om het uit te stellen. We moeten het nemen en doen.

Technische taak

Maak er een M5Stack-gateway van met de LoRa-module geïnstalleerd (Afbeelding 1). De gateway wordt verbonden met het Wi-Fi-netwerk, waar hij via DHCP een lokaal IP-adres ontvangt. De gateway zendt zijn naam (analoog aan de SSID voor Wi-Fi) en het bereik van geldige poorten op een bepaalde frequentie uit naar de LoRa-uitzending, zodat andere apparaten weten dat er een netwerk is waarmee ze verbinding kunnen maken en in welk bereik ze kunnen een vrije poort selecteren. Omdat dit een prototype zal zijn, is authenticatie deze keer niet vereist. Nieuwe clientapparaten zullen een beschikbaar LoRa-netwerk vinden en de geselecteerde poort ernaar verzenden. Nadat de gateway een poort van een nieuwe client heeft ontvangen, controleert hij of deze vrij is; als dat zo is, registreert hij de nieuwe client en begint hij naar deze poort te luisteren op zijn eigen asynchrone UDP-server. Na registratie ontvangt de klant toestemming of weigering om de aangegeven poort te gebruiken. De bedieningsprocedure wordt weergegeven in Tabel 1.

Gateway voor UDP tussen Wi-Fi en LoRa
Figuur 1

Tabel 1

de zijkant
richting en gegevens
de zijkant
sessie

[ klant ]
<— bakensignaal —
[gateway]
0xA1

[ klant ]
— geselecteerde poort —>
[gateway]
0xB1

[ klant ]
<— toestemming of weigering —
[gateway]
0xA2

[ klant ]
— UPD-pakket —>
[gateway]
0xB2

[ klant ]
<— UPD-pakket —
[gateway]
0xA3

[net]
<— UPD-pakket —
[gateway]
0xC1

Er liggen allerlei modules voor M5Stack voor me op tafel en ze zijn saai. Laten we LoR nemen en er plezier mee hebben. Het concept van de modules zelf is geweldig! Wat kan ik zeggen? Maar ik heb de eerste revisiemodules, die de meest verschrikkelijke ingebouwde antenne hebben, gemaakt op een flexibele printplaat en aan de zijwand van de behuizing geplakt. Ik heb ooit veldtests van dergelijke modules uitgevoerd (je kunt ze bekijken op het Russischtalige kanaal op YouTube):

Speel video

Uiteraard moesten we deze eerste beginselen verwijderen en de standaard spiraalvormige antennes solderen die bij de Ra-01 worden geleverd. Na een dergelijke aanpassing verbeterde het communicatiebereik merkbaar, maar er verscheen een bijzaak: de antenne heeft een diameter die groter is dan de toegestane afstand tussen de modules. Ik moest de laatste module voor de duur van het project opgeven.

De eerste moeilijkheden door synchrone strakheid

Het lijkt erop dat je de bibliotheek moet nemen WiFiUdp.h, waar alles aanwezig is voor het comfortabele bestaan ​​van een UDP-server, is dit niet het geval. De bibliotheek is ontworpen voor het opzetten van een synchrone server, die helaas niet tegelijkertijd meerdere verbindingen in één thread kan bedienen. Een dergelijke bibliotheek is niet geschikt voor de huidige taak. Ik moest veel koppen thee drinken en op zoek gaan naar een bibliotheek waarmee ik een asynchrone UDP-server kon bouwen die veel verbindingen tegelijkertijd kon ondersteunen. Zo'n bibliotheek werd gevonden - AsynchroneUDP.h. Wat is het verschil tussen een synchrone server en een asynchrone server? Laten we eens kijken naar de zes afleveringen in figuur 2, die op triviale wijze laten zien hoe sockets werken.

Gateway voor UDP tussen Wi-Fi en LoRa

Figuur 2

starring:

Menselijk in de rol Stopcontact;

duif in de rol verbindingen;

Pismo in de rol анных.

Aflevering A. Synchrone socket zonder time-out

De man zal blijven staan ​​totdat de Duif hem de Brief brengt.

Aflevering B. Synchrone socket met time-out

De Man wacht op de tijd die met de Duif is afgesproken, en als deze niet op tijd arriveert, zal de Man vertrekken.

Aflevering C. Synchrone socket met multithreading

De man leunt achterover en kijkt toe terwijl de Duiven de brieven zelf bezorgen.

Aflevering D. Asynchrone socket (als er niets anders te ontvangen is)

Een persoon doet zijn favoriete dingen, maar vergeet duiven niet.

Aflevering E. Asynchrone socket (als er iets te winnen valt)

De man nam een ​​korte pauze van zijn zaken om een ​​brief van de Duif te ontvangen.

Aflevering F. Asynchrone socket met multithreading

De man doet zijn werk en kijkt toe terwijl de Duiven de brieven zelf bezorgen.

Als je goed oplet, is het je waarschijnlijk opgevallen dat de halsbanden van de Duiven in elke aflevering een bepaalde kleur hebben. En dit is niet zonder reden. In aflevering A en B werkt er maar één socket op de server en dat is alles. In aflevering C werken al twee stopcontacten. Afleveringen D, E en F hebben al drie stopcontacten. "Waarom zijn er daar twee en hier drie?" - vraag je. Dit zijn voorwaardelijk 2 en 3, sterker nog, in plaats van 2 kunnen er 20 zijn, en in plaats van drie 200. Het doel is om aan te tonen dat asynchrone stopcontacten het strijkijzer niet zo veel verwarmen als synchrone.

Waar past hoeveel van wat dan ook?

Laten we naar Tabel 1 kijken, waarin de structuur van een UDP-pakket wordt weergegeven, en nadenken over wat we ermee kunnen doen.

Tabel 1. UDP-pakketstructuur

stukjes
0 - 15
16 - 31

0-31
Bronpoort
Bestemmingshaven

32-63
Datagramlengte (Lengte)
Controlesom

64- ...
Gegevens

Laten we nog een veld toevoegen aan het begin van deze tabel. Sessie (1 Byte). Dit is genoeg voor dit project. Op basis van de sessie weet het apparaat wat het vervolgens met het pakket moet doen. Laten we nu codes voor de sessies bedenken en deze in Tabel 2 opschrijven.

Tabel 2. Uitleg van sessies

code
Naam
Verduidelijking

0xA1
vuurtoren
De gateway zendt op een bepaalde frequentie de naam van het LoRa-netwerk en het bereik van geldige poorten uit. Dit is nodig zodat nieuwe klanten het beschikbare netwerk kunnen zien en huidige klanten, wanneer er geen transmissies zijn, het signaalniveau kunnen bepalen.

0xB1
Verzoek
Wanneer de client het netwerk heeft ontdekt, stuurt hij de voorkeurspoort.

0xA2
Toestemming of weigering
Als de door de client gevraagde poort vrij is, antwoordt de server met toestemming en anders met weigering.

0xB2
Link naar boven
Wanneer de client een UDP-pakket naar de gateway verzendt.

0xA3
Naar beneden link
Wanneer de gateway een UDP-pakket naar de client verzendt.

0xC1
Voortzetting van Uplink
Wanneer de gateway een UDP-pakket naar het lokale netwerk verzendt.

Prima. Laten we nu de samenstelling van de sessies in Tabel 3 bespreken.

Tabel 3. Sessies

Sessienaam
Structuur

vuurtoren
Sessiecode (1 byte) + LoRa-netwerknaam (4 bytes) + startpoort (2 bytes) + eindpoort (2 bytes)

Verzoek
Transmissiecode (1 byte) + LoRa-netwerknaam (4 bytes) + voorkeurspoort (2 bytes)

Toestemming of weigering
Transmissiecode (1 Byte) + LoRa-netwerknaam (4 Byte) + Voorkeurspoort (2 Byte) + Resultaat (1 Byte)

Link naar boven
Transmissiecode (1 byte) + LoRa-netwerknaam (4 bytes) + extern IP-adres (4 bytes) + externe poort (2 bytes) + lokaal IP-adres (4 bytes) + lokale poort (2 bytes) + gegevensgrootte (2 bytes) ) + Gegevens

Downlink
Transmissiecode (1 byte) + LoRa-netwerknaam (4 bytes) + extern IP-adres (4 bytes) + externe poort (2 bytes) + lokaal IP-adres (4 bytes) + lokale poort (2 bytes) + gegevensgrootte (2 bytes) ) + Gegevens

Voortzetting van Uplink
Extern IP-adres (4 bytes) + externe poort (2 bytes) + gegevensgrootte (2 bytes) + gegevens

Ik schreef twee clients voor Arduino en voor M5Stack. Op video je kunt zien hoe het werkt. Er zijn geen problemen in het appartement; ik heb nog geen veldtesten gedaan.

De broncode is beschikbaar op GitHub op link

U kunt meer te weten komen over het M5Stack-basisapparaat en de aankoop ervan hier

U kunt LoRa draadloze modules selecteren voor het basisapparaat hier

Ik zal blij zijn als dit project nuttig voor je is. Hartelijk dank voor uw tijd!

Lijst met referenties en (of) bronnen:

Bron: www.habr.com

Koop betrouwbare hosting voor sites met DDoS-bescherming, VPS VDS-servers 🔥 Koop betrouwbare websitehosting met DDoS-bescherming, VPS- en VDS-servers | ProHoster