Sadržaj:
- Supplies
- Korak 1: Biblioteka
- Korak 2: Pinout
- Korak 3: AUX pin
- Korak 4: Potpuno povezana shema Esp8266
- Korak 5: Potpuno povezana shema Arduino
- Korak 6: Biblioteka: Konstruktor
- Korak 7: Počnite
- Korak 8: Konfiguracija i način informiranja
- Korak 9: Spremnik za odgovore
- Korak 10: Opcija osnovne konfiguracije
- Korak 11: Pošaljite poruku primanja
- Korak 12: Normalni način prijenosa
- Korak 13: Upravljajte strukturom
- Korak 14: Fiksni način rada umjesto normalnog načina rada
- Korak 15: Hvala
Video: LoRa bežična komunikacija od 3 do 8 km s niskim troškovima E32 (sx1278/sx1276) uređaj za Arduino, Esp8266 ili Esp32: 15 koraka
2024 Autor: John Day | [email protected]. Zadnja izmjena: 2024-01-30 08:04
Kreiram biblioteku za upravljanje EBYTE E32 baziranom na Semtech seriji LoRa uređaja, vrlo moćnom, jednostavnom i jeftinom uređaju.
Ovdje možete pronaći verziju od 3 km, verziju od 8 km ovdje
Mogu raditi na udaljenosti od 3000m do 8000m, a imaju mnogo mogućnosti i parametara. Zato stvaram ovu biblioteku kako bih pojednostavio upotrebu.
To je rješenje za preuzimanje podataka sa gradskih senzora ili za upravljanje dronom.
Supplies
Arduino UNO
Wemos D1 mini
LoRa E32 TTL 100 3Km verzija
Verzija LoRa E32 TTL 1W 8Km
Korak 1: Biblioteka
Moju biblioteku možete pronaći ovdje.
Preuzimanje.
Pritisnite dugme DOWNLOADS u gornjem desnom kutu, preimenujte nekomprimiranu mapu LoRa_E32.
Proverite da li fascikla LoRa_E32 sadrži LoRa_E32.cpp i LoRa_E32.h.
Postavite mapu biblioteke LoRa_E32 u vašu / knjižnice / mapu. Možda ćete morati stvoriti podmapu biblioteka ako je to vaša prva biblioteka.
Ponovo pokrenite IDE.
Korak 2: Pinout
Kao što vidite, možete postaviti različite načine rada pomoću pinova M0 i M1.
Postoje neki pinovi koji se mogu koristiti na statički način, ali ako ga povežete s mikrokontrolerom i konfigurirate ih u biblioteci, dobit ćete performanse i možete kontrolirati sav način rada putem softvera, ali sljedeće ćemo objasniti bolje.
Korak 3: AUX pin
Kao što sam već rekao Nije važno spojiti sve pinove na izlaz mikrokontrolera, možete postaviti pinove M0 i M1 na HIGH ili LOW kako biste dobili željenu konfiguraciju, a ako ne povežete AUX, biblioteka postavlja razumno kašnjenje kako bi bili sigurni da je operacija završena.
AUX pin
Prilikom prijenosa podataka može se koristiti za buđenje vanjskog MCU -a i vraćanje HIGH na kraju prijenosa podataka.
Pri primanju AUX -a ide NIZO i vraća se VISOKO kada je bafer prazan.
Koristi se i za samoprovjeru za vraćanje normalnog rada (pri uključivanju i mirovanju/programskom načinu rada).
Korak 4: Potpuno povezana shema Esp8266
Shema povezivanja esp8266 je jednostavnija jer radi na istom naponu logičke komunikacije (3,3 V).
Važno je dodati otpornik (4, 7Kohm) kako biste postigli dobru stabilnost.
Korak 5: Potpuno povezana shema Arduino
Radni napon Arduina je 5v, pa moramo dodati razdjelnik napona na RX pinove M0 i M1 LoRa modula kako bismo spriječili oštećenja. Više informacija možete dobiti ovdje Volter razdjelnik: kalkulator i aplikacija.
Možete upotrijebiti 2Kohm otpornik za GND i 1Kohm od signala nego spojiti na RX.
Korak 6: Biblioteka: Konstruktor
Napravio sam niz prilično brojnih konstruktora, jer možemo imati više opcija i situacija za upravljanje.
LoRa_E32 (bajt rxPin, bajt txPin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
LoRa_E32 (bajt rxPin, bajt txPin, bajt auxPin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600); LoRa_E32 (bajt rxPin, bajt txPin, bajt auxPin, bajt m0Pin, bajt m1Pin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
Prvi skup konstruktora je kreiran za delegiranje upravljanja serijskim i drugim pinovima u biblioteku.
rxPin i txPin su pin za povezivanje na UART i oni su obavezni.
auxPin je pin koji provjerava stanje rada, prijenosa i primanja (dalje ćemo objasniti bolje), taj pin nije obavezan, ako ga ne postavite, primjenjujem odgodu da dozvolim da se operacija dovrši sama (sa kašnjenjem).
m0pin i m1Pin su pinovi za promjenu načina rada (pogledajte gornju tablicu), mislim da će se ti pinovi u "produkciji" povezati izravno VISOKO ili NISKO, ali za testiranje njima korisno upravlja biblioteka.
bpsRate je prijenos SoftwareSerial -a normalno 9600 (jedina brzina prijenosa u programskom režimu/načinu mirovanja)
Jednostavan primjer je
#include "LoRa_E32.h" LoRa_E32 e32ttl100 (2, 3); // RX, TX // LoRa_E32 e32ttl100 (2, 3, 5, 6, 7); // RX, TX
Možemo izravno koristiti SoftwareSerial s drugim konstruktorom
LoRa_E32 (Hardverski serijski* serijski, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
LoRa_E32 (HardwareSerial* serijski, bajt auxPin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
LoRa_E32 (HardwareSerial* serijski, bajt auxPin, bajt m0Pin, bajt m1Pin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
Gornji primjer s ovim konstruktorom može se učiniti ovako.
#include #include "LoRa_E32.h"
SoftwareSerial mySerial (2, 3); // RX, TX
LoRa_E32 e32ttl100 (& mojaSerijska);
// LoRa_E32 e32ttl100 (& mySerial, 5, 7, 6);
Posljednji skup konstruktora dopušta upotrebu HardwareSerial umjesto SoftwareSerial.
LoRa_E32 (SoftwareSerial* serijski, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
LoRa_E32 (SoftwareSerial* serijski, bajt auxPin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
LoRa_E32 (SoftwareSerial* serijski, bajt auxPin, bajt m0Pin, bajt m1Pin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
Korak 7: Počnite
Komanda begin se koristi za pokretanje serijskog i pinova u načinu ulaza i izlaza.
void begin ();
u izvršenju je
// Pokretanje svih pinova i UART -a
e32ttl100.begin ();
Korak 8: Konfiguracija i način informiranja
Postoji skup metoda za upravljanje konfiguracijom i dobivanje informacija o uređaju.
ResponseStructContainer getConfiguration ();
ResponseStatus setConfiguration (Konfiguracija konfiguracije, PROGRAM_COMMAND saveType = WRITE_CFG_PWR_DWN_LOSE);
ResponseStructContainer getModuleInformation ();
void printParameters (konfiguracija konfiguracije konstrukcije);
ResponseStatus resetModule ();
Korak 9: Spremnik za odgovore
Da bih pojednostavio upravljanje odgovorom, stvaram skup spremnika, za mene vrlo korisno za upravljanje greškama i vraćanje generičkih podataka.
ResponseStatus
Ovo je spremnik statusa i ima 2 jednostavne ulazne točke, pomoću kojih možete dobiti statusni kod i opis statusnog koda
Serial.println (c.getResponseDescription ()); // Opis koda
Serial.println (c.code); // 1 ako uspjeh
Kod su
USPJEH = 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
ResponseContainer
Ovaj spremnik je kreiran za upravljanje String odgovorom i ima 2 ulazne točke.
podaci sa nizom vraćenim iz poruke i statusom instanca RepsonseStatus.
ResponseContainer rs = e32ttl.receiveMessage ();
Niz poruka = rs.data;
Serial.println (rs.status.getResponseDescription ());
Serial.println (poruka);
ResponseStructContainer
Ovo je složeniji spremnik, koristim ga za upravljanje strukturom, ima istu ulaznu točku ResponseContainer -a, ali su podaci prazni pokazivač za upravljanje složenom strukturom.
ResponseStructContainer c;
c = e32ttl100.getConfiguration (); // Važno je nabaviti pokazivač konfiguracije prije svih drugih operacija
Konfiguracija konfiguracije = *(Konfiguracija *) c.data;
Serial.println (c.status.getResponseDescription ());
Serial.println (c.status.code);
getConfiguration i setConfiguration
Prva metoda je getConfiguration, možete je koristiti za ponovno preuzimanje svih podataka pohranjenih na uređaju.
ResponseStructContainer getConfiguration ();
Evo primjera upotrebe.
ResponseStructContainer c;
c = e32ttl100.getConfiguration (); // Važno je nabaviti pokazivač konfiguracije prije svih drugih operacija
Konfiguracija konfiguracije = *(Konfiguracija *) c.data;
Serial.println (c.status.getResponseDescription ());
Serial.println (c.status.code);
Serial.println (configuration. SPED.getUARTBaudRate ());
Struktura konfiguracije ima sve podatke o postavkama, a ja dodajem niz funkcija da dobijem sav opis pojedinačnih podataka.
configuration. ADDL = 0x0; // Prvi dio addressconfiguration. ADDH = 0x1; // Drugi dio konfiguracije adrese. CHAN = 0x19; // Konfiguracija kanala. OPTION.fec = FEC_0_OFF; // Prosljeđivanje konfiguracije prekidača za ispravljanje grešaka. OPTION.fixedTransmission = FT_TRANSPARENT_TRANSMISSION; // Konfiguracija načina prijenosa. OPTION.ioDriveMode = IO_D_MODE_PUSH_PULLS_PULL_UPS; // Pull-up konfiguracija upravljanja. OPTION.transmissionPower = POWER_17; // konfiguracija snage prijenosa dBm. OPTION.wirelessWakeupTime = WAKE_UP_1250; // Vrijeme čekanja za konfiguraciju buđenja. SPED.airDataRate = AIR_DATA_RATE_011_48; // Konfiguracija brzine prijenosa zraka. SPED.uartBaudRate = UART_BPS_115200; // Konfiguracija brzine prijenosa komunikacije. SPED.uartParity = MODE_00_8N1; // Paritetni bit
Imate ekvivalentnu funkciju za sve atribute da biste dobili sav opis:
Serial.print (F ("Chan:")); Serial.print (configuration. CHAN, DEC); Serial.print (" ->"); Serial.println (configuration.getChannelDescription ()); Serial.println (F ("")); Serial.print (F ("SpeedParityBit:")); Serial.print (configuration. SPED.uartParity, BIN); Serial.print (" ->"); Serial.println (configuration. SPED.getUARTParityDescription ()); Serial.print (F ("SpeedUARTDatte:")); Serial.print (configuration. SPED.uartBaudRate, BIN); Serial.print (" ->"); Serial.println (configuration. 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 (configuration. OPTION.ioDriveMode, BIN); Serial.print (" ->"); Serial.println (configuration. OPTION.getIODroveModeDescription ()); Serial.print (F ("OptionWakeup:")); Serial.print (configuration. OPTION.wirelessWakeupTime, BIN); Serial.print (" ->"); Serial.println (configuration. OPTION.getWirelessWakeUPTimeDescription ()); Serial.print (F ("OptionFEC:")); Serial.print (configuration. OPTION.fec, BIN); Serial.print (" ->"); Serial.println (configuration. OPTION.getFECDescription ()); Serial.print (F ("OptionPower:")); Serial.print (configuration. OPTION.transmissionPower, BIN); Serial.print (" ->"); Serial.println (configuration. OPTION.getTransmissionPowerDescription ());
Na isti način setConfiguration želi konfiguracijsku strukturu, pa mislim da je bolji način za upravljanje konfiguracijom preuzimanje trenutne, primijeniti jedinu promjenu koja vam je potrebna i postaviti je ponovo.
ResponseStatus setConfiguration (Konfiguracija konfiguracije, PROGRAM_COMMAND saveType = WRITE_CFG_PWR_DWN_LOSE);
konfiguracija je prethodno prikazana struktura, saveType vam dozvoljava da odaberete ako promjena postane trajno samo za trenutnu sesiju.
ResponseStructContainer c; c = e32ttl100.getConfiguration (); // Važno je dobiti konfiguracijski pokazivač prije svih ostalih operacija Configuration configuration = *(Configuration *) c.data; Serial.println (c.status.getResponseDescription ()); Serial.println (c.status.code); printParameters (konfiguracija); configuration. ADDL = 0x0; configuration. ADDH = 0x1; configuration. CHAN = 0x19; configuration. OPTION.fec = FEC_0_OFF; configuration. OPTION.fixedTransmission = FT_TRANSPARENT_TRANSMISSION; configuration. 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; // Postavi konfiguraciju promijenjenu i postavi da ne drži konfiguraciju ResponseStatus rs = e32ttl100.setConfiguration (konfiguracija, WRITE_CFG_PWR_DWN_LOSE); Serial.println (rs.getResponseDescription ()); Serial.println (rs.code); printParameters (konfiguracija);
Parametrima se upravlja kao konstantno:
Korak 10: Opcija osnovne konfiguracije
Korak 11: Pošaljite poruku primanja
Prvo moramo uvesti jednostavnu, ali korisnu metodu za provjeru ima li nešto u međuspremniku za prijem
int available ();
To je jednostavno vraćanje koliko bajtova imate u trenutnom toku.
Korak 12: Normalni način prijenosa
Normalni/transparentni način prijenosa koristi se za slanje poruka na sve uređaje s istom adresom i kanalom.
Postoji mnogo načina slanja/primanja poruke, detaljno ćemo ih objasniti:
ResponseStatus sendMessage (poruka const String);
ResponseContainer receiveMessage ();
Prva metoda je sendMessage i koristi se za slanje niza na uređaj u normalnom načinu rada.
ResponseStatus rs = e32ttl.sendMessage ("Prova"); Serial.println (rs.getResponseDescription ());
Drugi uređaj jednostavno radi na petlji
if (e32ttl.available ()> 1) {ResponseContainer rs = e32ttl.receiveMessage (); Niz poruka = rs.data; // Prvi put nabavite podatke Serial.println (rs.status.getResponseDescription ()); Serial.println (poruka); }
Korak 13: Upravljajte strukturom
Ako želite poslati složenu strukturu, možete koristiti ovu metodu
ResponseStatus sendMessage (poruka const void *, veličina const uint8_t); ResponseStructContainer receiveMessage (veličina const uint8_t);
Koristi se za slanje strucutre, na primjer:
struct Messaggione {char tip [5]; char poruka [8]; bool mitico; }; struct Messaggione messaggione = {"TEMP", "Peple", istina}; ResponseStatus rs = e32ttl.sendMessage (& messaggione, sizeof (Messaggione)); Serial.println (rs.getResponseDescription ());
a s druge strane možete primiti poruku
ResponseStructContainer rsc = e32ttl.receiveMessage (sizeof (Messaggione)); struct Messaggione messaggione = *(Messaggione *) rsc.data; Serial.println (messaggione.message); Serial.println (messaggione.mitico);
Pročitajte djelomični strucure
Ako želite pročitati prvi dio poruke za upravljanje više vrsta strukture, možete koristiti ovu metodu.
ResponseContainer receiveInitialMessage (veličina const uint8_t);
Kreirao sam ga za primanje niza s tipom ili drugim za identifikaciju strukture za učitavanje.
struct Messaggione {// Djelomična struktura bez poruke typechar [8]; bool mitico; }; tip char [5]; // prvi dio strukture ResponseContainer rs = e32ttl.receiveInitialMessage (sizeof (type)); // Stavljanje niza u niz znakova (nije potrebno) memcpy (type, rs.data.c_str (), sizeof (type)); Serial.println ("READ TYPE:"); Serial.println (rs.status.getResponseDescription ()); Serial.println (tip); // Pročitajte ostatak strukture ResponseStructContainer rsc = e32ttl.receiveMessage (sizeof (Messaggione)); struct Messaggione messaggione = *(Poruka *) rsc.data;
Korak 14: Fiksni način rada umjesto normalnog načina rada
Na isti način stvaram skup metoda za korištenje sa fiksnim prijenosom
Fiksni prijenos
Morate promijeniti samo način slanja, jer odredišni uređaj ne prima preambulu s postavkama adrese i kanala za fiksni način rada.
Dakle, za string poruku imate
ResponseStatus sendFixedMessage (bajt ADDL, bajt ADDH, bajt CHAN, poruka const String); ResponseStatus sendBroadcastFixedMessage (bajt CHAN, poruka const String);
a za strukturu koju imate
ResponseStatus sendFixedMessage (bajt ADDL, bajt ADDH, bajt CHAN, const void *poruka, const uint8_t veličina); ResponseStatus sendBroadcastFixedMessage (bajt CHAN, const void *poruka, const uint8_t veličina);
Evo jednostavnog primjera
ResponseStatus rs = e32ttl.sendFixedMessage (0, 0, 0x17, & messaggione, sizeof (Messaggione)); // ResponseStatus rs = e32ttl.sendFixedMessage (0, 0, 0x17, "Ciao");
Fiksni prijenos ima više scenarija
Ako šaljete na određeni uređaj (drugi scenariji Fiksni prijenos), morate dodati ADDL, ADDH i CHAN da biste ga izravno identificirali.
ResponseStatus rs = e32ttl.sendFixedMessage (2, 2, 0x17, "Poruka uređaju");
Ako želite poslati poruku svim uređajima na određenom kanalu, možete koristiti ovu metodu.
ResponseStatus rs = e32ttl.sendBroadcastFixedMessage (0x17, "Poruka do uređaja kanala");
Ako želite primati sve emitirane poruke na mreži, morate postaviti ADDH i ADDL sa BROADCAST_ADDRESS.
ResponseStructContainer c; c = e32ttl100.getConfiguration (); // Važno je nabaviti pokazivač konfiguracije prije svih ostalih operacija Configuration configuration = *(Configuration *) c.data; Serial.println (c.status.getResponseDescription ()); Serial.println (c.status.code); printParameters (konfiguracija); configuration. ADDL = BROADCAST_ADDRESS; configuration. ADDH = BROADCAST_ADDRESS; // Postavi konfiguraciju promijenjenu i postavi da ne drži konfiguraciju ResponseStatus rs = e32ttl100.setConfiguration (konfiguracija, WRITE_CFG_PWR_DWN_LOSE); Serial.println (rs.getResponseDescription ()); Serial.println (rs.code); printParameters (konfiguracija);
Korak 15: Hvala
Sada imate sve informacije za obavljanje svog posla, ali mislim da je važno pokazati neke realne primjere kako biste bolje razumjeli sve mogućnosti.
- LoRa E32 uređaj za Arduino, esp32 ili esp8266: postavke i osnovna upotreba
- LoRa E32 uređaj za Arduino, esp32 ili esp8266: biblioteka
- LoRa E32 uređaj za Arduino, esp32 ili esp8266: konfiguracija
- LoRa E32 uređaj za Arduino, esp32 ili esp8266: fiksni prijenos
- LoRa E32 uređaj za Arduino, esp32 ili esp8266: ušteda energije i slanje strukturiranih podataka
Preporučuje se:
Pametna kuća s niskim troškovima - kontrola s bilo kojeg mjesta u SVIJETU: 6 koraka
Povoljna pametna kuća - kontrola s bilo kojeg mjesta u SVIJETU: OOdavno oba roditelja rade na tome da imaju ugodan život za porodicu. Tako da u svom domu imamo puno elektroničkih uređaja poput grijača, klima uređaja, perilice rublja itd. Kada se vrate kući trebali bi se osjećati vrlo ugodno u ter
Daleki domet, 1,8 km, bežična komunikacija Arduino do Arduino s HC-12 .: 6 koraka (sa slikama)
Bežična komunikacija na velike udaljenosti, 1,8 km, bežična komunikacija Arduino-Arduino s HC-12 .: U ovom uputstvu naučit ćete kako komunicirati između Arduinosa na velike udaljenosti do 1,8 km na otvorenom. HC-12 je bežični serijski port komunikacijski modul koji je vrlo koristan, izuzetno moćan i jednostavan za korištenje. Prvo ćete napustiti
LM317 Napajanje sa niskim troškovima: 6 koraka
LM317 Namjensko napajanje sa niskim troškovima: Zdravo momci, ovo je moj prvi projekt s uputama. ovdje ću vam pokazati kako sam napravio svoje jeftino napajanje LM317 za klupu. Nadam se da ćete uživati
E32-433T Vodič za LoRa modul - DIY razbijačka ploča za modul E32: 6 koraka
E32-433T Vodič za LoRa modul | Uradi sam Breakout Board za E32 modul: Hej, šta ima, momci! Akarsh ovdje iz CETech-a. Ovaj moj projekt je više krivulja učenja za razumijevanje rada E32 LoRa modula iz eBytea, koji je primopredajnički modul velike snage 1 W. Kad shvatimo rad, imam dizajn
Automatizacija s niskim troškovima s ESP01: 19 koraka
Automatizacija s niskim troškovima S ESP01: Danas ćemo razgovarati o automatizaciji pomoću ESP01 sa 16 releja. Ovo je super jeftin model dizajna u kojem možete pomnožiti module i dobiti do 128 releja, jer je moguće staviti do osam proširivača portova u ovaj mikrokontroler. U našem krugu, y