Indholdsfortegnelse:
- Forbrugsvarer
- Trin 1: Bibliotek
- Trin 2: Pinout
- Trin 3: AUX Pin
- Trin 4: Fuldt tilsluttet skema Esp8266
- Trin 5: Fuldt tilsluttet skema Arduino
- Trin 6: Bibliotek: Konstruktør
- Trin 7: Start
- Trin 8: Konfigurations- og informationsmetode
- Trin 9: Svarbeholder
- Trin 10: Grundlæggende konfigurationsindstilling
- Trin 11: Send modtagelsesbesked
- Trin 12: Normal transmissionstilstand
- Trin 13: Administrer struktur
- Trin 14: Fast tilstand i stedet for normal tilstand
- Trin 15: Tak
Video: LoRa 3 km til 8 km trådløs kommunikation med lavpris E32 (sx1278/sx1276) enhed til Arduino, Esp8266 eller Esp32: 15 trin
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:25
Jeg opretter et bibliotek til at styre EBYTE E32 baseret på Semtech -serien af LoRa -enheder, meget kraftfuld, enkel og billig enhed.
Du kan finde 3 km version her, 8 km version her
De kan arbejde over en afstand på 3000m til 8000m, og de har mange funktioner og parametre. Så jeg opretter dette bibliotek for at forenkle brugen.
Det er en løsning til at hente data fra storbyens sensorer eller til at styre drone.
Forbrugsvarer
Arduino UNO
Wemos D1 mini
LoRa E32 TTL 100 3Km version
LoRa E32 TTL 1W 8Km version
Trin 1: Bibliotek
Du kan finde mit bibliotek her.
At downloade.
Klik på knappen DOWNLOADS i øverste højre hjørne, omdøb den ukomprimerede mappe LoRa_E32.
Kontroller, at mappen LoRa_E32 indeholder LoRa_E32.cpp og LoRa_E32.h.
Placer biblioteksmappen LoRa_E32 din / biblioteker / mappe. Du skal muligvis oprette bibliotekernes undermappe, hvis det er dit første bibliotek.
Genstart IDE.
Trin 2: Pinout
Som du kan se, kan du indstille forskellige tilstande via M0 og M1 ben.
Der er nogle stifter, der kan bruges på en statisk måde, men hvis du tilslutter det til mikrokontrolleren og konfigurerer dem i biblioteket, opnår du ydeevne, og du kan styre alle tilstande via software, men vi vil forklare bedre næste gang.
Trin 3: AUX Pin
Som jeg allerede siger Det er ikke vigtigt at tilslutte alle stifter til output fra mikrokontroller, kan du sætte M0 og M1 ben til HØJ eller LAV for at få den ønskede konfiguration, og hvis du ikke tilslutter AUX, indstillede biblioteket en rimelig forsinkelse for at være sikker at operationen er fuldført.
AUX pin
Når overførsel af data kan bruges til at vække ekstern MCU og returnere HØJ ved dataoverførsel.
Når du modtager AUX, går LOW og returnerer HIGH, når bufferen er tom.
Det bruges også til selvkontrol for at gendanne normal drift (ved opstart og søvn/programtilstand).
Trin 4: Fuldt tilsluttet skema Esp8266
esp8266 -tilslutningsskema er mere enkelt, fordi det fungerer ved den samme spænding af logisk kommunikation (3.3v).
Det er vigtigt at tilføje pull-up modstand (4, 7Kohm) for at få god stabilitet.
Trin 5: Fuldt tilsluttet skema Arduino
Arduino arbejdsspænding er 5v, så vi skal tilføje en spændingsdeler på RX pin M0 og M1 i LoRa modulet for at forhindre skader, du kan få flere oplysninger her Spændingsdeler: lommeregner og applikation.
Du kan bruge en 2Kohm -modstand til GND og 1Kohm fra signal end sat sammen på RX.
Trin 6: Bibliotek: Konstruktør
Jeg lavede et sæt af ganske mange konstruktører, fordi vi kan have flere muligheder og situationer at styre.
LoRa_E32 (byte rxPin, byte txPin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
LoRa_E32 (byte rxPin, byte txPin, byte auxPin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600); LoRa_E32 (byte rxPin, byte txPin, byte auxPin, byte m0Pin, byte m1Pin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
Første sæt konstruktører er oprettet for at delegere administrationen af Serial og andre pins til biblioteket.
rxPin og txPin er stiften til at oprette forbindelse til UART, og de er obligatoriske.
auxPin er en pin, der kontrollerer driften, transmissionen og modtagelsesstatus (vi vil forklare bedre næste), den pin Det er ikke obligatorisk, hvis du ikke indstiller det, anvender jeg en forsinkelse for at tillade operationen at fuldføre sig selv (med latenstid).
m0pin og m1Pin er stifterne til at ændre driftstilstand (se tabellen øverst), jeg tror, at disse ben i "produktion" kommer til at forbinde direkte HØJ eller LAV, men til test skal de med fordel administreres af biblioteket.
bpsRate er boudrate for SoftwareSerial er normalt 9600 (den eneste baudhastighed i programmin/dvaletilstand)
Et enkelt eksempel er
#include "LoRa_E32.h" LoRa_E32 e32ttl100 (2, 3); // RX, TX // LoRa_E32 e32ttl100 (2, 3, 5, 6, 7); // RX, TX
Vi kan bruge en SoftwareSerial direkte med en anden konstruktør
LoRa_E32 (HardwareSerial* seriel, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
LoRa_E32 (HardwareSerial* seriel, byte auxPin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
LoRa_E32 (HardwareSerial* seriel, byte auxPin, byte m0Pin, byte m1Pin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
Eksemplet øvre med denne konstruktør kan gøre som det.
#include #include "LoRa_E32.h"
SoftwareSerial mySerial (2, 3); // RX, TX
LoRa_E32 e32ttl100 (& mySerial);
// LoRa_E32 e32ttl100 (& mySerial, 5, 7, 6);
Det sidste sæt konstruktør er at tillade at bruge et HardwareSerial i stedet for SoftwareSerial.
LoRa_E32 (SoftwareSerial* seriel, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
LoRa_E32 (SoftwareSerial* seriel, byte auxPin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
LoRa_E32 (SoftwareSerial* seriel, byte auxPin, byte m0Pin, byte m1Pin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
Trin 7: Start
Start -kommandoen bruges til at starte Serial og pins i input- og output -tilstand.
ugyldig start ();
i udførelse er
// Start alle pins og UART
e32ttl100.begin ();
Trin 8: Konfigurations- og informationsmetode
Der er et sæt metoder til at styre konfiguration og få oplysninger om enheden.
ResponseStructContainer getConfiguration ();
ResponseStatus setConfiguration (konfigurationskonfiguration, PROGRAM_COMMAND saveType = WRITE_CFG_PWR_DWN_LOSE);
ResponseStructContainer getModuleInformation ();
void printParameters (strukturkonfigurationskonfiguration);
ResponseStatus resetModule ();
Trin 9: Svarbeholder
For at forenkle håndteringen af svar opretter jeg et sæt containere, for mig meget nyttigt at styre fejl og returnere generiske data.
ResponseStatus
Dette er en statusbeholder og har 2 enkle indgangspunkter, med dette kan du få statuskoden og beskrivelsen af statuskoden
Serial.println (c.getResponseDescription ()); // Beskrivelse af kode
Serial.println (c.code); // 1 hvis succes
Koden er
SUCCES = 1, ERR_UNKNOWN, ERR_NOT_SUPPORT, ERR_NOT_IMPLEMENT, ERR_NOT_INITIAL, ERR_INVALID_PARAM, ERR_DATA_SIZE_NOT_MATCH, ERR_BUF_TOO_SMALL, ERR_TIMEOUT, ERR_HARDWARE, ERR_HEAD_NOT_RECOGNIZED
ResponsContainer
Denne beholder er oprettet for at styre strengrespons og have 2 indgangspunkter.
data med strengen returneret fra besked og status en forekomst af RepsonseStatus.
ResponseContainer rs = e32ttl.receiveMessage ();
Stringbesked = rs.data;
Serial.println (rs.status.getResponseDescription ());
Serial.println (besked);
ResponseStructContainer
Dette er den mere "komplekse" beholder, jeg bruger denne til at styre struktur. Den har det samme indgangspunkt for ResponseContainer, men data er en tomrumspeger til at styre kompleks struktur.
ResponseStructContainer c;
c = e32ttl100.getConfiguration (); // Det er vigtigt at få konfigurationsmarkøren før al anden operation
Konfigurationskonfiguration = *(Konfiguration *) c.data;
Serial.println (c.status.getResponseDescription ());
Serial.println (c.status.code);
getConfiguration og setConfiguration
Den første metode er getConfiguration, du kan bruge den til at hente alle data, der er gemt på enheden.
ResponseStructContainer getConfiguration ();
Her et brugseksempel.
ResponseStructContainer c;
c = e32ttl100.getConfiguration (); // Det er vigtigt at få konfigurationsmarkøren før al anden operation
Konfigurationskonfiguration = *(Konfiguration *) c.data;
Serial.println (c.status.getResponseDescription ());
Serial.println (c.status.code);
Serial.println (konfiguration. SPED.getUARTBaudRate ());
Konfigurationsstrukturen har alle indstillinger for indstillinger, og jeg tilføjer en række funktioner for at få alle beskrivelser af enkeltdata.
konfiguration. ADDL = 0x0; // Første del af adressekonfiguration. ADDH = 0x1; // Anden del af adressekonfiguration. CHAN = 0x19; // Kanalkonfiguration. OPTION.fec = FEC_0_OFF; // Videresend fejlkorrektion switch -konfiguration. OPTION.fixedTransmission = FT_TRANSPARENT_TRANSMISSION; // Konfiguration af transmissionstilstand. OPTION.ioDriveMode = IO_D_MODE_PUSH_PULLS_PULL_UPS; // Pull-up management konfiguration. OPTION.transmissionPower = POWER_17; // konfiguration af transmissionseffekt dBm. OPTION.wirelessWakeupTime = WAKE_UP_1250; // Ventetid på konfiguration til vågning. SPED.airDataRate = AIR_DATA_RATE_011_48; // Konfiguration af luftdatahastighed. SPED.uartBaudRate = UART_BPS_115200; // Kommunikation baud rate konfiguration. SPED.uartParity = MODE_00_8N1; // Paritetsbit
Du har den tilsvarende funktion for alle attributter for at få alle beskrivelser:
Serial.print (F ("Chan:")); Serial.print (konfiguration. CHAN, DEC); Serial.print (" ->"); Serial.println (configuration.getChannelDescription ()); Serial.println (F ("")); Serial.print (F ("SpeedParityBit:")); Serial.print (konfiguration. SPED.uartParity, BIN); Serial.print (" ->"); Serial.println (konfiguration. SPED.getUARTParityDescription ()); Serial.print (F ("SpeedUARTDatte:")); Serial.print (konfiguration. SPED.uartBaudRate, BIN); Serial.print (" ->"); Serial.println (konfiguration. SPED.getUARTBaudRate ()); Serial.print (F ("SpeedAirDataRate:")); Serial.print (configuration. SPED.airDataRate, BIN); Serial.print (" ->"); Serial.println (konfiguration. SPED.getAirDataRate ()); Serial.print (F ("OptionTrans:")); Serial.print (konfiguration. OPTION.fixedTransmission, BIN); Serial.print (" ->"); Serial.println (konfiguration. OPTION.getFixedTransmissionDescription ()); Serial.print (F ("OptionPullup:")); Serial.print (konfiguration. OPTION.ioDriveMode, BIN); Serial.print (" ->"); Serial.println (konfiguration. OPTION.getIODroveModeDescription ()); Serial.print (F ("OptionWakeup:")); Serial.print (konfiguration. OPTION.wirelessWakeupTime, BIN); Serial.print (" ->"); Serial.println (konfiguration. OPTION.getWirelessWakeUPTimeDescription ()); Serial.print (F ("OptionFEC:")); Serial.print (konfiguration. OPTION.fec, BIN); Serial.print (" ->"); Serial.println (konfiguration. OPTION.getFECDescription ()); Serial.print (F ("OptionPower:")); Serial.print (konfiguration. OPTION.transmissionPower, BIN); Serial.print (" ->"); Serial.println (konfiguration. OPTION.getTransmissionPowerDescription ());
På samme måde ønsker setConfiguration en konfigurationsstruktur, så jeg tror, at den bedre måde at styre konfigurationen på er at hente den aktuelle, anvende den eneste ændring, du har brug for, og indstille den igen.
ResponseStatus setConfiguration (konfigurationskonfiguration, PROGRAM_COMMAND saveType = WRITE_CFG_PWR_DWN_LOSE);
konfiguration er den struktur, der tidligere vises, gemmer SaveType tilladelse til at vælge, hvis ændringen kun bliver permanent for den aktuelle session.
ResponseStructContainer c; c = e32ttl100.getConfiguration (); // Det er vigtigt at få konfigurationsmarkøren før al anden operation Konfigurationskonfiguration = *(Konfiguration *) c.data; Serial.println (c.status.getResponseDescription ()); Serial.println (c.status.code); printParameters (konfiguration); konfiguration. ADDL = 0x0; konfiguration. ADDH = 0x1; konfiguration. CHAN = 0x19; konfiguration. OPTION.fec = FEC_0_OFF; konfiguration. OPTION.fixedTransmission = FT_TRANSPARENT_TRANSMISSION; konfiguration. OPTION.ioDriveMode = IO_D_MODE_PUSH_PULLS_PULL_UPS; konfiguration. OPTION.transmissionPower = POWER_17; konfiguration. OPTION.wirelessWakeupTime = WAKE_UP_1250; configuration. SPED.airDataRate = AIR_DATA_RATE_011_48; configuration. SPED.uartBaudRate = UART_BPS_115200; configuration. SPED.uartParity = MODE_00_8N1; // Indstil konfiguration ændret og indstillet til ikke at holde konfigurationen ResponseStatus rs = e32ttl100.setConfiguration (konfiguration, WRITE_CFG_PWR_DWN_LOSE); Serial.println (rs.getResponseDescription ()); Serial.println (rs.code); printParameters (konfiguration);
Parameteren administreres alle som konstante:
Trin 10: Grundlæggende konfigurationsindstilling
Trin 11: Send modtagelsesbesked
Først skal vi introducere en enkel, men nyttig metode til at kontrollere, om der er noget i den modtagende buffer
int tilgængelig ();
Det er ganske enkelt at returnere, hvor mange bytes du har i den aktuelle strøm.
Trin 12: Normal transmissionstilstand
Normal/Transparent transmissionstilstand bruges til at sende meddelelser til alle enheder med samme adresse og kanal.
Der er mange metoder til at sende/modtage beskeder, vi vil forklare detaljeret:
ResponseStatus sendMessage (const String -besked);
ResponseContainer modtageMessage ();
Den første metode er sendMessage og bruges til at sende en streng til en enhed i normal tilstand.
ResponseStatus rs = e32ttl.sendMessage ("Prova"); Serial.println (rs.getResponseDescription ());
Den anden enhed gør simpelthen på sløjfen
hvis (e32ttl.available ()> 1) {ResponseContainer rs = e32ttl.receiveMessage (); Stringbesked = rs.data; // Hent først nogensinde dataene Serial.println (rs.status.getResponseDescription ()); Serial.println (besked); }
Trin 13: Administrer struktur
Hvis du vil sende en kompleks struktur kan du bruge denne metode
ResponseStatus sendMessage (const void *meddelelse, const uint8_t størrelse); ResponseStructContainer modtageMessage (const uint8_t størrelse);
Det bruges til at sende strucutre, for eksempel:
struct Messaggione {char type [5]; forkælelsesmeddelelse [8]; bool mitico; }; struct Messaggione messaggione = {"TEMP", "Peple", true}; ResponseStatus rs = e32ttl.sendMessage (& messaggione, sizeof (Messaggione)); Serial.println (rs.getResponseDescription ());
og den anden side kan du modtage beskeden så
ResponseStructContainer rsc = e32ttl.receiveMessage (sizeof (Messaggione)); struct Messaggione messaggione = *(Messaggione *) rsc.data; Serial.println (messaggione.message); Serial.println (messaggione.mitico);
Læs delvis struktur
Hvis du vil læse den første del af meddelelsen til at styre flere typer strucutre, kan du bruge denne metode.
ResponseContainer modtageInitialMessage (konstant uint8_t størrelse);
Jeg opretter det for at modtage en streng med type eller andet for at identificere den struktur, der skal indlæses.
struct Messaggione {// Delvis strucutre uden typechar -besked [8]; bool mitico; }; rødtype [5]; // første del af strukturen ResponseContainer rs = e32ttl.receiveInitialMessage (sizeof (type)); // Sæt streng i et char -array (ikke nødvendigt) memcpy (type, rs.data.c_str (), sizeof (type)); Serial.println ("LÆS TYPE:"); Serial.println (rs.status.getResponseDescription ()); Serial.println (type); // Læs resten af strukturen ResponseStructContainer rsc = e32ttl.receiveMessage (sizeof (Messaggione)); struct Messaggione messaggione = *(Messaggione *) rsc.data;
Trin 14: Fast tilstand i stedet for normal tilstand
På samme måde opretter jeg et sæt metoder til brug med fast transmission
Fast transmission
Du skal kun ændre afsendelsesmetoden, fordi destinationsenheden ikke modtager præamblen med adresse og kanal quando -indstilling i fast tilstand.
Så for String -besked har du
ResponseStatus sendFixedMessage (byte ADDL, byte ADDH, byte CHAN, const String meddelelse); ResponseStatus sendBroadcastFixedMessage (byte CHAN, const String meddelelse);
og for struktur du har
ResponseStatus sendFixedMessage (byte ADDL, byte ADDH, byte CHAN, const void *meddelelse, const uint8_t størrelse); ResponseStatus sendBroadcastFixedMessage (byte CHAN, const void *meddelelse, const uint8_t størrelse);
Her et enkelt eksempel
ResponseStatus rs = e32ttl.sendFixedMessage (0, 0, 0x17, & messaggione, sizeof (Messaggione)); // ResponseStatus rs = e32ttl.sendFixedMessage (0, 0, 0x17, "Ciao");
Fast transmission har flere scenarier
Hvis du sender til en bestemt enhed (andre scenarier Fixed transmission), skal du tilføje ADDL, ADDH og CHAN for at identificere den direkte.
ResponseStatus rs = e32ttl.sendFixedMessage (2, 2, 0x17, "Besked til en enhed");
Hvis du vil sende en besked til alle enheder i en bestemt kanal, kan du bruge denne metode.
ResponseStatus rs = e32ttl.sendBroadcastFixedMessage (0x17, "Besked til en enhed i en kanal");
Hvis du vil modtage al udsendelsesmeddelelse på netværket, skal du indstille din ADDH og ADDL med BROADCAST_ADDRESS.
ResponseStructContainer c; c = e32ttl100.getConfiguration (); // Det er vigtigt at få konfigurationsmarkøren før al anden operation Konfigurationskonfiguration = *(Konfiguration *) c.data; Serial.println (c.status.getResponseDescription ()); Serial.println (c.status.code); printParameters (konfiguration); konfiguration. ADDL = BROADCAST_ADDRESS; konfiguration. ADDH = BROADCAST_ADDRESS; // Indstil konfiguration ændret og indstillet til ikke at holde konfigurationen ResponseStatus rs = e32ttl100.setConfiguration (konfiguration, WRITE_CFG_PWR_DWN_LOSE); Serial.println (rs.getResponseDescription ()); Serial.println (rs.code); printParameters (konfiguration);
Trin 15: Tak
Nu har du alle oplysninger til at udføre dit arbejde, men jeg synes, det er vigtigt at vise nogle realistiske eksempler for bedre at forstå muligheden.
- LoRa E32 -enhed til Arduino, esp32 eller esp8266: indstillinger og grundlæggende brug
- LoRa E32 -enhed til Arduino, esp32 eller esp8266: bibliotek
- LoRa E32 -enhed til Arduino, esp32 eller esp8266: konfiguration
- LoRa E32 -enhed til Arduino, esp32 eller esp8266: fast transmission
- LoRa E32 -enhed til Arduino, esp32 eller esp8266: strømbesparelse og afsendelse af strukturerede data
Anbefalede:
Lang rækkevidde, 1,8 km, Arduino til Arduino trådløs kommunikation med HC-12 .: 6 trin (med billeder)
Lang rækkevidde, 1,8 km, Arduino til Arduino Trådløs kommunikation med HC-12 .: I denne instruktør vil du lære at kommunikere mellem Arduinos over en lang afstand op til 1,8 km i det fri. HC-12 er en trådløs seriel port kommunikationsmodul, der er meget nyttigt, ekstremt kraftfuldt og let at bruge. Først vil du lære
Trådløs kommunikation ved hjælp af NRF24L01 -transceivermodul til Arduino -baserede projekter: 5 trin (med billeder)
Trådløs kommunikation ved hjælp af NRF24L01 Transceiver-modul til Arduino-baserede projekter: Dette er min anden instruerbare vejledning om robotter og mikro-controllere. Det er virkelig fantastisk at se din robot i live og fungere som forventet, og tro mig, det vil være sjovere, hvis du styrer din robot eller andre ting trådløst med hurtig og
ESP32 Med E32-433T LoRa-modul Tutorial - LoRa Arduino -grænseflade: 8 trin
ESP32 Med E32-433T LoRa-modul Tutorial | LoRa Arduino Interfacing: Hey, hvad sker der, fyre! Akarsh her fra CETech.This project of my interfaces the E32 LoRa module from eByte which is a high-power 1-watt transceiver module with an ESP32 using Arduino IDE.We forstod funktionen af E32 i vores sidste tutoria
E32-433T LoRa-modul Tutorial - DIY Breakout Board til E32 -modul: 6 trin
E32-433T LoRa-modul Tutorial | DIY Breakout Board til E32 -modul: Hey, hvad sker der, fyre! Akarsh her fra CETech.Dette projekt af mig er mere en indlæringskurve for at forstå, hvordan E32 LoRa-modulet fungerer fra eByte, som er et 1-watts transceivermodul med høj effekt. Når vi forstår arbejdet, har jeg design
Ekstern nedlukning eller genstart af en computer med ESP8266 -enhed: 10 trin (med billeder)
Ekstern nedlukning eller genstart af en computer med ESP8266 -enhed: For at være klar her lukker vi din computer ned, ikke en andens computer. flok matematik, men hver morgen klokken 3 om morgenen låser de. S