Innholdsfortegnelse:
- Rekvisita
- Trinn 1: Bibliotek
- Trinn 2: Pinout
- Trinn 3: AUX Pin
- Trinn 4: Fullt tilkoblet skjema Esp8266
- Trinn 5: Fullt tilkoblet skjema Arduino
- Trinn 6: Bibliotek: Konstruktør
- Trinn 7: Start
- Trinn 8: Konfigurasjons- og informasjonsmetode
- Trinn 9: Svarbeholder
- Trinn 10: Grunnleggende konfigurasjonsalternativ
- Trinn 11: Send mottaksmelding
- Trinn 12: Normal overføringsmodus
- Trinn 13: Administrer struktur
- Trinn 14: Fast modus i stedet for normal modus
- Trinn 15: Takk
Video: LoRa 3 km til 8 km trådløs kommunikasjon med lavpris E32 (sx1278/sx1276) enhet for Arduino, Esp8266 eller Esp32: 15 trinn
2024 Forfatter: John Day | [email protected]. Sist endret: 2024-01-30 11:21
Jeg lager et bibliotek for å administrere EBYTE E32 basert på Semtech -serien av LoRa -enheter, veldig kraftig, enkel og billig enhet.
Du finner 3Km versjon her, 8Km versjon her
De kan arbeide over en avstand på 3000m til 8000m, og de har mange funksjoner og parametere. Så jeg lager dette biblioteket for å forenkle bruken.
Det er en løsning for å hente data fra storbyens sensorer eller for å kontrollere drone.
Rekvisita
Arduino UNO
Wemos D1 mini
LoRa E32 TTL 100 3 km versjon
LoRa E32 TTL 1W 8Km versjon
Trinn 1: Bibliotek
Du finner biblioteket mitt her.
For å laste ned.
Klikk på DOWNLOADS -knappen øverst til høyre, gi nytt navn til den ukomprimerte mappen LoRa_E32.
Kontroller at LoRa_E32 -mappen inneholder LoRa_E32.cpp og LoRa_E32.h.
Plasser LoRa_E32 bibliotekmappen din / biblioteker / mappen. Du må kanskje opprette undermappen biblioteker hvis det er ditt første bibliotek.
Start IDE på nytt.
Trinn 2: Pinout
Som du kan se kan du stille inn forskjellige moduser via M0 og M1 pins.
Det er noen pins som kan brukes på en statisk måte, men hvis du kobler den til mikrokontrolleren og konfigurerer de i biblioteket får du ytelse, og du kan kontrollere all modus via programvare, men vi skal forklare bedre neste.
Trinn 3: AUX Pin
Som jeg allerede sier Det er ikke viktig å koble alle pinnene til utgangen til mikrokontrolleren, kan du sette M0 og M1 pinner til HØY eller LAV for å få ønsket konfigurasjon, og hvis du ikke kobler til AUX, kan biblioteket sette en rimelig forsinkelse for å være sikker at operasjonen er fullført.
AUX -pinne
Når overføring av data kan brukes til å vekke ekstern MCU og returnere HØYT når dataoverføring er ferdig.
Når du mottar AUX, går LOW og returnerer HIGH når bufferen er tom.
Den brukes også til selvkontroll for å gjenopprette normal drift (ved oppstart og hvilemodus/programmodus).
Trinn 4: Fullt tilkoblet skjema Esp8266
esp8266 tilkoblingsskjema er mer enkelt fordi det fungerer med samme spenning for logisk kommunikasjon (3.3v).
Det er viktig å legge til opptrekksmotstand (4, 7Kohm) for å få god stabilitet.
Trinn 5: Fullt tilkoblet skjema Arduino
Arduino arbeidsspenning er 5v, så vi må legge til en spenningsdeler på RX -pinne M0 og M1 på LoRa -modulen for å forhindre skade, du kan få mer informasjon her Spenningsdeler: kalkulator og applikasjon.
Du kan bruke en 2Kohm -motstand til GND og 1Kohm fra signal enn satt sammen på RX.
Trinn 6: Bibliotek: Konstruktør
Jeg laget et sett med ganske mange konstruktører, fordi vi kan ha flere alternativer og situasjoner å håndtere.
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);
Det første settet med konstruktører er opprettet for å delegere administrasjonen av Serial og andre pins til biblioteket.
rxPin og txPin er pinnen for å koble til UART, og de er obligatoriske.
auxPin er en pinne som kontrollerer driften, overføringen og mottaksstatusen (vi skal forklare bedre neste), den pinnen Det er ikke obligatorisk, hvis du ikke setter det, bruker jeg en forsinkelse for å tillate operasjonen å fullføre seg selv (med latens).
m0pin og m1Pin er pinnene for å endre driftsmodus (se tabellen øverst), jeg tror at disse pinnene i “produksjon” kommer til å koble direkte til HØY eller LAV, men for test er de nyttig å administrere av biblioteket.
bpsRate er boudrate for SoftwareSerial som normalt er 9600 (den eneste overføringshastigheten i programmin/hvilemodus)
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 bruke en SoftwareSerial direkte med en annen konstruktør
LoRa_E32 (HardwareSerial* seriell, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
LoRa_E32 (HardwareSerial* seriell, byte auxPin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
LoRa_E32 (HardwareSerial* seriell, byte auxPin, byte m0Pin, byte m1Pin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
Eksemplet øvre med denne konstruktøren kan gjøre slik.
#include #include "LoRa_E32.h"
SoftwareSerial mySerial (2, 3); // RX, TX
LoRa_E32 e32ttl100 (& mySerial);
// LoRa_E32 e32ttl100 (& mySerial, 5, 7, 6);
Det siste settet med konstruktør er å tillate å bruke en HardwareSerial i stedet for SoftwareSerial.
LoRa_E32 (SoftwareSerial* seriell, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
LoRa_E32 (SoftwareSerial* seriell, byte auxPin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
LoRa_E32 (SoftwareSerial* seriell, byte auxPin, byte m0Pin, byte m1Pin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
Trinn 7: Start
Start -kommandoen brukes til å starte Serial og pins i input- og output -modus.
ugyldig start ();
i utførelse er
// Start alle pins og UART
e32ttl100.begin ();
Trinn 8: Konfigurasjons- og informasjonsmetode
Det er et sett med metoder for å administrere konfigurasjon og få informasjon om enheten.
ResponseStructContainer getConfiguration ();
ResponseStatus setConfiguration (konfigurasjonskonfigurasjon, PROGRAM_COMMAND saveType = WRITE_CFG_PWR_DWN_LOSE);
ResponseStructContainer getModuleInformation ();
void printParameters (strukturkonfigurasjonskonfigurasjon);
ResponseStatus resetModule ();
Trinn 9: Svarbeholder
For å forenkle håndteringen av respons lager jeg et sett med containere, for meg veldig nyttig for å håndtere feil og returnere generiske data.
ResponseStatus
Dette er en statusbeholder og har 2 enkle inngangspunkter, med denne kan du få statuskoden og beskrivelsen av statuskoden
Serial.println (c.getResponseDescription ()); // Beskrivelse av kode
Serial.println (c.code); // 1 hvis Suksess
Koden er
SUKSESS = 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 beholderen er opprettet for å administrere strengrespons og ha 2 inngangspunkter.
data med strengen returnerte fra melding og status en forekomst av RepsonseStatus.
ResponseContainer rs = e32ttl.receiveMessage ();
String melding = rs.data;
Serial.println (rs.status.getResponseDescription ());
Serial.println (melding);
ResponseStructContainer
Dette er den mer "komplekse" beholderen, jeg bruker denne til å administrere struktur. Den har det samme inngangspunktet for ResponseContainer, men data er en ugyldig peker for å administrere kompleks struktur.
ResponseStructContainer c;
c = e32ttl100.getConfiguration (); // Det er viktig å få konfigurasjonspekeren før all annen operasjon
Konfigurasjonskonfigurasjon = *(Konfigurasjon *) c.data;
Serial.println (c.status.getResponseDescription ());
Serial.println (c.status.code);
getConfiguration og setConfiguration
Den første metoden er getConfiguration, du kan bruke Den til å hente alle data som er lagret på enheten.
ResponseStructContainer getConfiguration ();
Her er et eksempel på bruk.
ResponseStructContainer c;
c = e32ttl100.getConfiguration (); // Det er viktig å få konfigurasjonspekeren før all annen operasjon
Konfigurasjonskonfigurasjon = *(Konfigurasjon *) c.data;
Serial.println (c.status.getResponseDescription ());
Serial.println (c.status.code);
Serial.println (konfigurasjon. SPED.getUARTBaudRate ());
Konfigurasjonsstrukturen har alle data for innstillinger, og jeg legger til en serie funksjoner for å få all beskrivelse av enkeltdata.
konfigurasjon. ADDL = 0x0; // Første del av adressekonfigurasjon. ADDH = 0x1; // Andre del av adressekonfigurasjon. CHAN = 0x19; // Kanalkonfigurasjon. OPTION.fec = FEC_0_OFF; // Videresend feilkorrigeringsbryter konfigurasjon. OPTION.fixedTransmission = FT_TRANSPARENT_TRANSMISSION; // Konfigurasjon av overføringsmodus. OPTION.ioDriveMode = IO_D_MODE_PUSH_PULLS_PULL_UPS; // Pull-up administrasjonskonfigurasjon. OPTION.transmissionPower = POWER_17; // konfigurasjon for overføringseffekt dBm. OPTION.wirelessWakeupTime = WAKE_UP_1250; // Ventetid for konfigurering av vekking. SPED.airDataRate = AIR_DATA_RATE_011_48; // Konfigurasjon av luftdatahastighet. SPED.uartBaudRate = UART_BPS_115200; // Konfigurasjon av overføringshastighet for kommunikasjon. SPED.uartParity = MODE_00_8N1; // Paritetsbit
Du har den tilsvarende funksjonen for alle attributter for å få all beskrivelse:
Serial.print (F ("Chan:")); Serial.print (konfigurasjon. CHAN, DEC); Serial.print (" ->"); Serial.println (configuration.getChannelDescription ()); Serial.println (F ("")); Serial.print (F ("SpeedParityBit:")); Serial.print (konfigurasjon. SPED.uartParity, BIN); Serial.print (" ->"); Serial.println (konfigurasjon. SPED.getUARTParityDescription ()); Serial.print (F ("SpeedUARTDatte:")); Serial.print (konfigurasjon. SPED.uartBaudRate, BIN); Serial.print (" ->"); Serial.println (konfigurasjon. SPED.getUARTBaudRate ()); Serial.print (F ("SpeedAirDataRate:")); Serial.print (configuration. SPED.airDataRate, BIN); Serial.print (" ->"); Serial.println (configuration. SPED.getAirDataRate ()); Serial.print (F ("OptionTrans:")); Serial.print (configuration. OPTION.fixedTransmission, BIN); Serial.print (" ->"); Serial.println (configuration. OPTION.getFixedTransmissionDescription ()); Serial.print (F ("OptionPullup:")); Serial.print (konfigurasjon. OPTION.ioDriveMode, BIN); Serial.print (" ->"); Serial.println (konfigurasjon. OPTION.getIODroveModeDescription ()); Serial.print (F ("OptionWakeup:")); Serial.print (konfigurasjon. OPTION.wirelessWakeupTime, BIN); Serial.print (" ->"); Serial.println (konfigurasjon. OPTION.getWirelessWakeUPTimeDescription ()); Serial.print (F ("OptionFEC:")); Serial.print (konfigurasjon. OPTION.fec, BIN); Serial.print (" ->"); Serial.println (konfigurasjon. OPTION.getFECDescription ()); Serial.print (F ("OptionPower:")); Serial.print (konfigurasjon. OPTION.transmissionPower, BIN); Serial.print (" ->"); Serial.println (konfigurasjon. OPTION.getTransmissionPowerDescription ());
På samme måte vil setConfiguration ha en konfigurasjonsstruktur, så jeg tror den bedre måten å administrere konfigurasjonen er å hente den nåværende, bruke den eneste endringen du trenger og sette den på nytt.
ResponseStatus setConfiguration (konfigurasjonskonfigurasjon, PROGRAM_COMMAND saveType = WRITE_CFG_PWR_DWN_LOSE);
konfigurasjonen er strukturen som tidligere vises, saveType tillater deg å velge hvis endringen blir permanent for bare den gjeldende økten.
ResponseStructContainer c; c = e32ttl100.getConfiguration (); // Det er viktig å få konfigurasjonspekeren før all annen operasjon Konfigurasjonskonfigurasjon = *(Konfigurasjon *) c.data; Serial.println (c.status.getResponseDescription ()); Serial.println (c.status.code); printParameters (konfigurasjon); konfigurasjon. ADDL = 0x0; konfigurasjon. ADDH = 0x1; konfigurasjon. CHAN = 0x19; konfigurasjon. OPTION.fec = FEC_0_OFF; configuration. OPTION.fixedTransmission = FT_TRANSPARENT_TRANSMISSION; konfigurasjon. OPTION.ioDriveMode = IO_D_MODE_PUSH_PULLS_PULL_UPS; configuration. OPTION.transmissionPower = POWER_17; configuration. 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; // Angi konfigurasjon endret og satt til å ikke beholde konfigurasjonen ResponseStatus rs = e32ttl100.setConfiguration (konfigurasjon, WRITE_CFG_PWR_DWN_LOSE); Serial.println (rs.getResponseDescription ()); Serial.println (rs.code); printParameters (konfigurasjon);
Parameteren administreres alle som konstante:
Trinn 10: Grunnleggende konfigurasjonsalternativ
Trinn 11: Send mottaksmelding
Først må vi introdusere en enkel, men nyttig metode for å sjekke om noe er i mottaksbufferen
int tilgjengelig ();
Det er ganske enkelt å returnere hvor mange byte du har i den nåværende strømmen.
Trinn 12: Normal overføringsmodus
Normal/Transparent overføringsmodus brukes til å sende meldinger til alle enheter med samme adresse og kanal.
Det er mange metoder for å sende/motta melding, vi skal forklare i detalj:
ResponseStatus sendMessage (const String melding);
ResponseContainer receiveMessage ();
Den første metoden er sendMessage og brukes til å sende en streng til en enhet i normal modus.
ResponseStatus rs = e32ttl.sendMessage ("Prova"); Serial.println (rs.getResponseDescription ());
Den andre enheten gjør ganske enkelt på loop
if (e32ttl.available ()> 1) {ResponseContainer rs = e32ttl.receiveMessage (); String melding = rs.data; // Først får du dataene Serial.println (rs.status.getResponseDescription ()); Serial.println (melding); }
Trinn 13: Administrer struktur
Hvis du vil sende en kompleks struktur kan du bruke denne metoden
ResponseStatus sendMessage (const void *melding, const uint8_t størrelse); ResponseStructContainer mottaMessage (const uint8_t størrelse);
Den brukes til å sende strucutre, for eksempel:
struct Messaggione {char type [5]; røyemelding [8]; bool mitico; }; struct Messaggione messaggione = {"TEMP", "Peple", true}; ResponseStatus rs = e32ttl.sendMessage (& messaggione, sizeof (Messaggione)); Serial.println (rs.getResponseDescription ());
og den andre siden kan du motta meldingen
ResponseStructContainer rsc = e32ttl.receiveMessage (sizeof (Messaggione)); struct Messaggione messaggione = *(Messaggione *) rsc.data; Serial.println (messaggione.message); Serial.println (messaggione.mitico);
Les delvis struktur
Hvis du vil lese den første delen av meldingen for å administrere flere typer strucutre, kan du bruke denne metoden.
ResponseContainer receiveInitialMessage (konstant uint8_t størrelse);
Jeg lager den for å motta en streng med type eller annen for å identifisere strukturen som skal lastes inn.
struct Messaggione {// Delvis strucutre uten typechar melding [8]; bool mitico; }; røye type [5]; // første del av strukturen ResponseContainer rs = e32ttl.receiveInitialMessage (sizeof (type)); // Legg streng i en char array (ikke nødvendig) memcpy (type, rs.data.c_str (), sizeof (type)); Serial.println ("LES TYPE:"); Serial.println (rs.status.getResponseDescription ()); Serial.println (type); // Les resten av strukturen ResponseStructContainer rsc = e32ttl.receiveMessage (sizeof (Messaggione)); struct Messaggione messaggione = *(Messaggione *) rsc.data;
Trinn 14: Fast modus i stedet for normal modus
På samme måte lager jeg et sett med metoder som skal brukes med fast overføring
Fast overføring
Du trenger bare å endre sendemetoden, fordi destinasjonsenheten ikke mottar innledningen med adresse og Channel quando settato il fixed mode.
Så for String -melding har du
ResponseStatus sendFixedMessage (byte ADDL, byte ADDH, byte CHAN, const String melding); ResponseStatus sendBroadcastFixedMessage (byte CHAN, const String melding);
og for struktur du har
ResponseStatus sendFixedMessage (byte ADDL, byte ADDH, byte CHAN, const void *melding, const uint8_t størrelse); ResponseStatus sendBroadcastFixedMessage (byte CHAN, const void *melding, 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 overføring har flere scenarier
Hvis du sender til en bestemt enhet (andre scenarier Fixed transmission) må du legge til ADDL, ADDH og CHAN for å identifisere den direkte.
ResponseStatus rs = e32ttl.sendFixedMessage (2, 2, 0x17, "Melding til en enhet");
Hvis du vil sende en melding til alle enheter i en spesifisert kanal, kan du bruke denne metoden.
ResponseStatus rs = e32ttl.sendBroadcastFixedMessage (0x17, "Melding til en enhet på en kanal");
Hvis du vil motta all kringkastingsmelding i nettverket, må du angi ADDH og ADDL med BROADCAST_ADDRESS.
ResponseStructContainer c; c = e32ttl100.getConfiguration (); // Det er viktig å få konfigurasjonspekeren før all annen operasjon Konfigurasjonskonfigurasjon = *(Konfigurasjon *) c.data; Serial.println (c.status.getResponseDescription ()); Serial.println (c.status.code); printParameters (konfigurasjon); configuration. ADDL = BROADCAST_ADDRESS; konfigurasjon. ADDH = BROADCAST_ADDRESS; // Angi konfigurasjon endret og angitt for å ikke beholde konfigurasjonen ResponseStatus rs = e32ttl100.setConfiguration (konfigurasjon, WRITE_CFG_PWR_DWN_LOSE); Serial.println (rs.getResponseDescription ()); Serial.println (rs.code); printParameters (konfigurasjon);
Trinn 15: Takk
Nå har du all informasjon for å gjøre jobben din, men jeg tror det er viktig å vise noen realistiske eksempler for å bedre forstå muligheten.
- LoRa E32 -enhet for Arduino, esp32 eller esp8266: innstillinger og grunnleggende bruk
- LoRa E32 -enhet for Arduino, esp32 eller esp8266: bibliotek
- LoRa E32 -enhet for Arduino, esp32 eller esp8266: konfigurasjon
- LoRa E32 -enhet for Arduino, esp32 eller esp8266: fast overføring
- LoRa E32 -enhet for Arduino, esp32 eller esp8266: strømsparing og sending av strukturerte data
Anbefalt:
Lang rekkevidde, 1,8 km, Arduino til Arduino Trådløs kommunikasjon med HC-12 .: 6 trinn (med bilder)
Lang rekkevidde, 1,8 km, Arduino til Arduino Trådløs kommunikasjon med HC-12 .: I denne instruksen lærer du hvordan du kommuniserer mellom Arduinos over en lang avstand opp til 1,8 km i friluft. HC-12 er en trådløs seriell port kommunikasjonsmodul som er veldig nyttig, ekstremt kraftig og enkel å bruke. Først vil du lære
Trådløs kommunikasjon ved bruk av NRF24L01 transceivermodul for Arduino -baserte prosjekter: 5 trinn (med bilder)
Trådløs kommunikasjon ved bruk av NRF24L01 transceivermodul for Arduino-baserte prosjekter: Dette er min andre instruerbare opplæring om roboter og mikrokontrollere. Det er virkelig fantastisk å se roboten din i live og fungere som forventet, og tro meg det vil bli morsommere hvis du styrer roboten eller andre ting trådløst med rask og
E32-433T LoRa-modulopplæring - DIY Breakout Board for E32 -modul: 6 trinn
E32-433T LoRa-modulopplæring | DIY Breakout Board for E32 -modul: Hei, hva skjer, gutter! Akarsh her fra CETech. Dette prosjektet mitt er mer en læringskurve for å forstå hvordan E32 LoRa-modulen fungerer fra eByte, som er en 1-watts transceivermodul med høy effekt. Når vi forstår arbeidet, har jeg design
Trådløs kommunikasjon ved bruk av billige 433MHz RF -moduler og Pic -mikrokontrollere. Del 2: 4 trinn (med bilder)
Trådløs kommunikasjon ved bruk av billige 433MHz RF -moduler og Pic -mikrokontrollere. Del 2: På den første delen av denne instruksjonsboken demonstrerte jeg hvordan jeg programmerer en PIC12F1822 ved hjelp av MPLAB IDE og XC8 -kompilatoren, for å sende en enkel streng trådløst ved hjelp av billige TX/RX 433MHz -moduler. Mottakermodulen ble koblet via en USB til UART TTL kabelannonse
Hack en trådløs dørklokke til en trådløs alarmbryter eller av/på -bryter: 4 trinn
Hack en trådløs dørklokke til en trådløs alarmbryter eller på/av -bryter: Jeg har nylig bygget et alarmsystem og installert det i huset mitt. Jeg brukte magnetiske brytere på dørene og koblet dem gjennom loftet. Vinduene var en annen historie, og harde ledninger var ikke et alternativ. Jeg trengte en trådløs løsning, og dette er