Sadržaj:
- Pribor
- Korak 1: Knjižnica
- Korak 2: Pinout
- Korak 3: AUX pin
- Korak 4: Potpuno povezana shema Esp8266
- Korak 5: Potpuno povezana shema Arduino
- Korak 6: Knjižnica: Konstruktor
- Korak 7: Počnite
- Korak 8: Konfiguracija i način informiranja
- Korak 9: Spremnik za odgovore
- Korak 10: Opcija osnovne konfiguracije
- 11. korak: pošaljite poruku primanja
- Korak 12: Normalni način prijenosa
- Korak 13: Upravljajte strukturom
- Korak 14: Fiksni način rada umjesto normalnog načina
- 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 promjena: 2024-01-30 09:32
Ja stvaram knjižnicu za upravljanje EBYTE E32 na temelju Semtech serije LoRa uređaja, vrlo snažnog, jednostavnog i jeftinog uređaja.
Ovdje možete pronaći verziju od 3 km, verziju od 8 km ovdje
Mogu raditi na udaljenosti od 3000m do 8000m, a imaju puno mogućnosti i parametara. Stoga stvaram ovu knjižnicu kako bih pojednostavio upotrebu.
To je rješenje za dohvaćanje podataka sa gradskih senzora ili za upravljanje dronom.
Pribor
Arduino UNO
Wemos D1 mini
Verzija LoRa E32 TTL 100 3 km
Verzija LoRa E32 TTL 1W 8Km
Korak 1: Knjižnica
Moju biblioteku možete pronaći ovdje.
Preuzeti.
Pritisnite gumb DOWNLOADS u gornjem desnom kutu, preimenujte nekomprimiranu mapu LoRa_E32.
Provjerite sadrži li mapa LoRa_E32 LoRa_E32.cpp i LoRa_E32.h.
Postavite mapu knjižnice LoRa_E32 u svoju / knjižnice / mapu. Možda ćete morati stvoriti podmapu knjižnica ako je to vaša prva knjižnica.
Ponovo pokrenite IDE.
Korak 2: Pinout
Kao što vidite, možete postaviti različite načine rada preko 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 u knjižnici, dobit ćete performanse i možete upravljati svim načinom rada putem softvera, ali sljedeće ćemo objasniti.
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, knjižnica postavlja razumno kašnjenje kako bi bili sigurni da je operacija dovršena.
AUX pin
Prilikom prijenosa podataka može se koristiti za buđenje vanjskog MCU -a i vraćanje HIGH na kraju prijenosa podataka.
Prilikom primanja AUX -a ide NIZO i vraća se VISOKO kad je međuspremnik prazan.
Također se koristi 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 jednostavnija je 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 pinu M0 i M1 LoRa modula kako bismo spriječili oštećenja. Više informacija možete dobiti ovdje. Djelitelj napona: kalkulator i aplikacija.
Možete upotrijebiti 2Kohm otpornik na GND i 1Kohm od signala nego spojiti na RX.
Korak 6: Knjižnica: Konstruktor
Napravio sam niz prilično brojnih konstruktora, jer možemo imati više mogućnosti 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 s UART -om i obavezni su.
auxPin je pin koji provjerava rad, prijenos i status primanja (dalje ćemo objasniti bolje), taj pin nije obavezan, ako ga ne postavite, primjenjujem odgodu kako bih dopustio da se operacija dovrši sama (s latencijom).
m0pin i m1Pin su pinovi za promjenu načina rada (pogledajte gornju tablicu), mislim da će se ti pinovi u "proizvodnji" povezati izravno VISOKO ili NISKO, ali za testiranje njima korisno upravlja knjižnica.
bpsRate je prijenos SoftwareSerial -a normalno 9600 (jedina brzina prijenosa u programskom načinu rada/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
Softversku seriju možemo izravno koristiti s drugim konstruktorom
LoRa_E32 (HardwareSerial* 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 tako.
#include #include "LoRa_E32.h"
SoftwareSerial mySerial (2, 3); // RX, TX
LoRa_E32 e32ttl100 (& mySerial);
// LoRa_E32 e32ttl100 (& mySerial, 5, 7, 6);
Posljednji skup konstruktora dopušta korištenje 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
Naredba begin koristi se 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 niz 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 struct konfiguracije);
ResponseStatus resetModule ();
Korak 9: Spremnik za odgovore
Kako bih pojednostavio upravljanje odgovorom, stvaram skup spremnika, za mene vrlo korisno za upravljanje pogreš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 (k.kod); // 1 ako je 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 odzivom Stringa i ima 2 ulazne točke.
podaci s 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, ali su podaci prazni pokazivač za upravljanje složenom strukturom.
ResponseStructContainer c;
c = e32ttl100.getConfiguration (); // Važno je nabaviti pokazivač konfiguracije prije svih ostalih 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 ostalih 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 za dobivanje svih opisa pojedinačnih podataka.
konfiguracija. ADDL = 0x0; // Prvi dio konfiguracije adrese. ADDH = 0x1; // Drugi dio konfiguracije adrese. CHAN = 0x19; // Konfiguracija kanala. OPTION.fec = FEC_0_OFF; // Konfiguracija prekidača za ispravljanje pogrešaka prema naprijed. OPTION.fixedTransmission = FT_TRANSPARENT_TRANSMISSION; // Konfiguracija načina prijenosa. OPTION.ioDriveMode = IO_D_MODE_PUSH_PULLS_PULL_UPS; // Pull-up management configuration. 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 upravljanja konfiguracijom dohvaćanje 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 dopušta da odaberete ako promjena postane trajno samo za trenutnu sesiju.
ResponseStructContainer c; c = e32ttl100.getConfiguration (); // Važno je dobiti pokazivač konfiguracije prije svih ostalih operacija Configuration configuration = *(Configuration *) c.data; Serial.println (c.status.getResponseDescription ()); Serial.println (c.status.code); printParameters (konfiguracija); konfiguracija. ADDL = 0x0; konfiguracija. ADDH = 0x1; konfiguracija. 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; konfiguracija. 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
11. korak: pošaljite poruku primanja
Prvo moramo uvesti jednostavnu, ali korisnu metodu za provjeru ima li nešto u međuspremniku za primanje
int dostupan ();
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 tako
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);
Ja ga stvaram 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)); // Stavi niz u niz znakova (nije potreban) 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 = *(Messaggione *) rsc.data;
Korak 14: Fiksni način rada umjesto normalnog načina
Na isti način stvaram skup metoda za korištenje s 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 poruku string 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 uređajima s kanala");
Ako želite primati sve emitirane poruke u mreži, morate postaviti ADDH i ADDL s BROADCAST_ADDRESS.
ResponseStructContainer c; c = e32ttl100.getConfiguration (); // Važno je dobiti pokazivač konfiguracije prije svih ostalih operacija Configuration configuration = *(Configuration *) c.data; Serial.println (c.status.getResponseDescription ()); Serial.println (c.status.code); printParameters (konfiguracija); konfiguracija. ADDL = BROADCAST_ADDRESS; konfiguracija. 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 svoj posao, 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: knjižnica
- 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čeni:
Daleki domet, 1,8 km, bežična komunikacija Arduino do Arduino s HC-12 .: 6 koraka (sa slikama)
Bežična komunikacija na daljinu, 1,8 km, bežična komunikacija između Arduina i Arduina 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 priključak komunikacijski modul koji je vrlo koristan, izuzetno moćan i jednostavan za korištenje. Prvo ćete napustiti
E32-433T Vodič za modul LoRa - DIY razbijačka ploča za modul E32: 6 koraka
E32-433T Vodič za modul LoRa | DIY ploča za razbijanje za E32 modul: Hej, što ima, dečki! 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
Mikroskop: Interaktivni mikroskop s niskim troškovima: 12 koraka (sa slikama)
Mikroskop: Interaktivni mikroskop s niskim cijenama: Pozdrav i dobrodošli! Moje ime je Picroscope. Ja sam pristupačan, uradi sam, mikroskop na RPi koji vam omogućuje stvaranje i interakciju s vlastitim mikro svijetom. Ja sam izvrstan praktični projekt za nekoga tko je zainteresiran za biotehnologiju i zanimanja
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 u ovaj mikrokontroler staviti do osam priključaka za proširenje. U našem krugu, y
Senzor protoka vode s niskim troškovima i ambijentalni zaslon: 8 koraka (sa slikama)
Senzor protoka vode s niskim troškovima i ambijentalni zaslon: Voda je dragocjen resurs. Milijuni ljudi nemaju pristup čistoj vodi za piće, a čak 4000 djece svakodnevno umire od zagađenih voda. Ipak, i dalje smo rasipni sa svojim resursima. Sveobuhvatni cilj