Sisukord:

LoRa 3–8 km traadita side ja odav E32 (sx1278/sx1276) seade Arduino, Esp8266 või Esp32 jaoks: 15 sammu
LoRa 3–8 km traadita side ja odav E32 (sx1278/sx1276) seade Arduino, Esp8266 või Esp32 jaoks: 15 sammu

Video: LoRa 3–8 km traadita side ja odav E32 (sx1278/sx1276) seade Arduino, Esp8266 või Esp32 jaoks: 15 sammu

Video: LoRa 3–8 km traadita side ja odav E32 (sx1278/sx1276) seade Arduino, Esp8266 või Esp32 jaoks: 15 sammu
Video: Обзор и конфигурация модуля EBYTE LoRa 2024, Juuli
Anonim
LoRa 3–8 km traadita side madala hinnaga E32 (sx1278/sx1276) Arduino, Esp8266 või Esp32 seadme jaoks
LoRa 3–8 km traadita side madala hinnaga E32 (sx1278/sx1276) Arduino, Esp8266 või Esp32 seadme jaoks

Loon EBYTE E32 haldamiseks raamatukogu, mis põhineb LoRa seadme Semtech seerial, mis on väga võimas, lihtne ja odav seade.

3Km versiooni leiate siit, 8Km versiooni siit

Nad võivad töötada 3000–8000 m kaugusel ning neil on palju funktsioone ja parameetreid. Nii et loon selle teegi kasutamise lihtsustamiseks.

See on lahendus suurlinna anduritelt andmete hankimiseks või drooni juhtimiseks.

Tarvikud

Arduino UNO

Wemos D1 mini

LoRa E32 TTL 100 3Km versioon

LoRa E32 TTL 1W 8Km versioon

Samm: raamatukogu

Raamatukogu
Raamatukogu

Minu raamatukogu leiate siit.

Alla laadida.

Klõpsake paremas ülanurgas nuppu DOWNLOADS, laadige tihendamata kaust ümber LoRa_E32.

Veenduge, et kaust LoRa_E32 sisaldab LoRa_E32.cpp ja LoRa_E32.h.

Asetage LoRa_E32 raamatukogu kaust oma / libraries / kausta. Teil võib tekkida vajadus luua raamatukogude alamkaust, kui see on teie esimene kogu.

Taaskäivitage IDE.

Samm 2: Pinout

Pinout
Pinout
Pinout
Pinout
Pinout
Pinout

Nagu näete, saate M0 ja M1 tihvtide kaudu määrata erinevaid režiime.

On mõned nööpnõelad, mida saab kasutada staatilisel viisil, kuid kui ühendate selle mikrokontrolleriga ja konfigureerite need raamatukogus, saate jõudluse ja saate kõiki režiime tarkvara abil juhtida, kuid me selgitame järgnevalt paremini.

3. samm: AUX -tihvt

AUX tihvt
AUX tihvt
AUX tihvt
AUX tihvt
AUX tihvt
AUX tihvt

Nagu ma juba ütlen, ei ole oluline ühendada kogu tihvti mikrokontrolleri väljundiga, saate seadistada konfiguratsiooni saamiseks M0 ja M1 kontaktid HIGH või LOW ja kui te ei ühenda AUX -d, määrake raamatukogu mõistliku viivituse et toiming on lõpule viidud.

AUX tihvt

Andmete edastamisel saab äratada välise MCU ja naasta andmete edastamise lõppedes HIGH.

AUX vastuvõtmisel läheb LOW ja naaseb HIGH, kui puhver on tühi.

Seda kasutatakse ka enesekontrolliks normaalse töö taastamiseks (sisselülitamisel ja unerežiimis/programmirežiimis).

4. samm: täielikult ühendatud skeem Esp8266

Täielikult ühendatud skeem Esp8266
Täielikult ühendatud skeem Esp8266
Täielikult ühendatud skeem Esp8266
Täielikult ühendatud skeem Esp8266

esp8266 ühendusskeem on lihtsam, kuna see töötab loogilise side sama pingega (3.3v).

Hea stabiilsuse saavutamiseks on oluline lisada tõmbetakisti (4, 7Kohm).

Samm: täielikult ühendatud skeem Arduino

Täielikult ühendatud skeem Arduino
Täielikult ühendatud skeem Arduino
Täielikult ühendatud skeem Arduino
Täielikult ühendatud skeem Arduino

Arduino tööpinge on 5v, seega peame kahjustuste vältimiseks lisama LoRa mooduli RX -pin M0 ja M1 pingejaguri, lisateavet leiate siit Pingejagur: kalkulaator ja rakendus.

Võite kasutada 2Kohm takisti GND -le ja 1Kohm signaalilt kui RX -il kokku panna.

6. samm: raamatukogu: konstruktor

Tegin päris paljude konstruktorite komplekti, sest meil on rohkem võimalusi ja olukordi hallata.

LoRa_E32 (bait rxPin, bait txPin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);

LoRa_E32 (bait rxPin, bait txPin, bait auxPin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600); LoRa_E32 (bait rxPin, bait txPin, bait auxPin, bait m0Pin, bait m1Pin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);

Esimene konstruktorikomplekt luuakse, et delegeerida jada- ja muude tihvtide haldamine kogule.

rxPin ja txPin on tihvt UART -iga ühenduse loomiseks ja need on kohustuslikud.

auxPin on tihvt, mis kontrollib toimimist, edastamist ja vastuvõtmist (me selgitame järgnevalt paremini), see tihvt See pole kohustuslik, kui te seda ei määra, rakendan viivitust, et toiming saaks ennast lõpule viia (latentsusega).

m0pin ja m1Pin on tihvtid, mis muudavad töörežiimi MODE (vt tabeli ülaosa), ma arvan, et need tootmises olevad tihvtid ühendavad otse HIGH või LOW, kuid testimiseks on neid kasulik raamatukogu hallata.

bpsRate on SoftwareSeriali boudraat tavaliselt 9600 (ainus edastuskiirus programmin/unerežiimis)

Lihtne näide on

#include "LoRa_E32.h" LoRa_E32 e32ttl100 (2, 3); // RX, TX // LoRa_E32 e32ttl100 (2, 3, 5, 6, 7); // RX, TX

Võime kasutada tarkvarakonsooli otse teise konstruktoriga

LoRa_E32 (HardwareSerial* seeria, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);

LoRa_E32 (HardwareSerial* jada, bait auxPin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);

LoRa_E32 (HardwareSerial* jada, bait auxPin, bait m0Pin, bait m1Pin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);

Selle konstruktori ülemine näide võib olla nii tehtud.

#include #include "LoRa_E32.h"

SoftwareSerial mySerial (2, 3); // RX, TX

LoRa_E32 e32ttl100 (& mySerial);

// LoRa_E32 e32ttl100 (& mySerial, 5, 7, 6);

Viimane konstruktorikomplekt lubab kasutada SoftwareSeriali asemel HardwareSerialit.

LoRa_E32 (SoftwareSerial* jada, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);

LoRa_E32 (SoftwareSerial* jada, bait auxPin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);

LoRa_E32 (SoftwareSerial* jada, bait auxPin, bait m0Pin, bait m1Pin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);

Samm: alustage

Käsklust Start kasutatakse seeria ja nööpnõelte käivitamiseks sisend- ja väljundrežiimis.

tühine algus ();

täitmisel on

// Käivitamine kõik tihvtid ja UART

e32ttl100.begin ();

8. samm: seadistamis- ja teabemeetod

Seadete haldamiseks ja seadme kohta teabe hankimiseks on olemas mitmeid meetodeid.

ResponseStructContainer getConfiguration ();

ResponseStatus setConfiguration (konfiguratsiooni konfiguratsioon, PROGRAM_COMMAND saveType = WRITE_CFG_PWR_DWN_LOSE);

ResponseStructContainer getModuleInformation ();

void printParameters (struktuuri konfiguratsiooni konfiguratsioon);

ResponseStatus resetModule ();

9. toiming: reageerimiskonteiner

Vastuse haldamise lihtsustamiseks loon konteineri komplekti, mis on minu jaoks väga kasulik vigade haldamiseks ja üldandmete tagastamiseks.

ResponseStatus

See on olekukonteiner ja sellel on kaks lihtsat sisenemispunkti, mille abil saate olekukoodi ja olekukirjelduse

Serial.println (c.getResponseDescription ()); // Koodi kirjeldus

Serial.println (c.code); // 1 kui edu

Kood on

EDU = 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

See konteiner on loodud Stringi vastuse haldamiseks ja sellel on 2 sisenemispunkti.

andmed, mille string tagastab sõnumi ja oleku RepsonseStatus eksemplari.

ResponseContainer rs = e32ttl.receptMessage ();

String sõnum = rs.data;

Serial.println (rs.status.getResponseDescription ());

Serial.println (sõnum);

ResponseStructContainer

See on keerulisem konteiner, ma kasutan seda struktuuri haldamiseks, sellel on sama ResponseContaineri sisenemispunkt, kuid andmed on tühi osuti keeruka struktuuri haldamiseks.

ResponseStructContainer c;

c = e32ttl100.getConfiguration (); // Oluline on enne kõiki muid toiminguid hankida konfiguratsiooninäit

Konfiguratsiooni konfiguratsioon = *(Configuration *) c.data;

Serial.println (c.status.getResponseDescription ());

Serial.println (c.status.code);

getConfiguration ja setConfiguration

Esimene meetod on getConfiguration, saate selle abil hankida kõik seadmesse salvestatud andmed.

ResponseStructContainer getConfiguration ();

Siin on näide kasutamisest.

ResponseStructContainer c;

c = e32ttl100.getConfiguration (); // Oluline on enne kõiki muid toiminguid hankida konfiguratsiooninäit

Konfiguratsiooni konfiguratsioon = *(Configuration *) c.data;

Serial.println (c.status.getResponseDescription ());

Serial.println (c.status.code);

Serial.println (configuration. SPED.getUARTBaudRate ());

Konfiguratsioonistruktuuril on kõik seadete andmed ja lisan üksikute andmete kirjeldamiseks terve rea funktsioone.

konfiguratsioon. ADDL = 0x0; // Aadressikonfiguratsiooni esimene osa. ADDH = 0x1; // Aadressi konfiguratsiooni teine osa. CHAN = 0x19; // Kanali konfiguratsioon. OPTION.fec = FEC_0_OFF; // Edasi veaparanduslüliti konfiguratsioon. OPTION.fixedTransmission = FT_TRANSPARENT_TRANSMISSION; // Ülekanderežiimi konfiguratsioon. OPTION.ioDriveMode = IO_D_MODE_PUSH_PULLS_PULL_UPS; // Tõmbehalduse konfiguratsioon. OPTION.transmissionPower = POWER_17; // dBm edastusvõimsuse konfiguratsioon. OPTION.wirelessWakeupTime = WAKE_UP_1250; // Ooteaeg ärkamise seadistamiseks. SPED.airDataRate = AIR_DATA_RATE_011_48; // Õhu andmeedastuskiiruse seadistamine. SPED.uartBaudRate = UART_BPS_115200; // Side edastuskiiruse konfiguratsioon. SPED.uartParity = MODE_00_8N1; // Paarsuse bitt

Kõigi kirjelduste saamiseks on teil kõigi atribuutide jaoks samaväärne funktsioon:

Serial.print (F ("Chan:")); Serial.print (konfiguratsioon. 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 ());

Samamoodi soovib setConfiguration konfiguratsioonistruktuuri, seega arvan, et parem viis konfiguratsiooni haldamiseks on praeguse hankimine, ainsa vajaliku muudatuse rakendamine ja uuesti seadistamine.

ResponseStatus setConfiguration (konfiguratsiooni konfiguratsioon, PROGRAM_COMMAND saveType = WRITE_CFG_PWR_DWN_LOSE);

konfiguratsioon on eelvaates näidatud, saveType lubab teil valida, kui muudatus muutub püsivalt ainult praeguse seansi jaoks.

ResponseStructContainer c; c = e32ttl100.getConfiguration (); // Oluline on hankida konfiguratsiooninäit enne kõiki muid toiminguid Configuration configuration = *(Configuration *) c.data; Serial.println (c.status.getResponseDescription ()); Serial.println (c.status.code); printParameters (konfiguratsioon); konfiguratsioon. ADDL = 0x0; konfiguratsioon. ADDH = 0x1; konfiguratsioon. 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; // Määra konfiguratsiooni muudetud ja seadista konfiguratsiooni mitte hoidma ResponseStatus rs = e32ttl100.setConfiguration (konfiguratsioon, WRITE_CFG_PWR_DWN_LOSE); Serial.println (rs.getResponseDescription ()); Serial.println (rs.code); printParameters (konfiguratsioon);

Kõiki parameetreid hallatakse konstantsena:

Samm 10: põhikonfiguratsiooni valik

Põhikonfiguratsiooni valik
Põhikonfiguratsiooni valik

Samm 11: Saada vastuvõtu sõnum

Kõigepealt peame tutvustama lihtsat, kuid kasulikku meetodit, et kontrollida, kas vastuvõtvas puhvris on midagi

int saadaval ();

See lihtsalt tagastab, mitu baiti teil praeguses voos on.

12. samm: tavaline edastusrežiim

Tavaline edastusrežiim
Tavaline edastusrežiim

Tavalist/läbipaistvat edastusrežiimi kasutatakse sõnumite saatmiseks kõigile sama aadressi ja kanaliga seadmetele.

Sõnumite saatmiseks/vastuvõtmiseks on palju meetodeid, me selgitame üksikasjalikult:

ResponseStatus sendMessage (const String sõnum);

ResponseContainer ReceiveMessage ();

Esimene meetod on sendMessage ja seda kasutatakse stringi saatmiseks seadmesse tavarežiimis.

ResponseStatus rs = e32ttl.sendMessage ("Prova"); Serial.println (rs.getResponseDescription ());

Teine seade teeb seda lihtsalt silmuse peal

if (e32ttl.available ()> 1) {ResponseContainer rs = e32ttl.receptionMessage (); String sõnum = rs.data; // Hankige esmakordselt andmed Serial.println (rs.status.getResponseDescription ()); Serial.println (sõnum); }

13. samm: struktuuri haldamine

Kui soovite saata keeruka struktuuri, saate seda meetodit kasutada

ResponseStatus sendMessage (const void *message, const uint8_t size); ResponseStructContainer ReceiveMessage (const uint8_t size);

Seda kasutatakse strucutre saatmiseks, näiteks:

struktuuri Sõnumid {char tüüp [5]; char sõnum [8]; bool mitico; }; structure Messaggione messaggione = {"TEMP", "Peple", true}; ResponseStatus rs = e32ttl.sendMessage (& messaggione, sizeof (Messaggione)); Serial.println (rs.getResponseDescription ());

ja teisel poolel saate sõnumi vastu võtta

ResponseStructContainer rsc = e32ttl.receptMessage (sizeof (Messaggione)); struk Messaggione messaggione = *(Messaggione *) rsc.data; Serial.println (messaggione.message); Serial.println (messaggione.mitico);

Lugege osalist struktuuri

Kui soovite lugeda sõnumi esimest osa, et hallata rohkem tüüpi struktuure, saate seda meetodit kasutada.

ResponseContainer ReceiveInitialMessage (const uint8_t size);

Loon selle, et saada string või muud tüüpi, et tuvastada laaditav struktuur.

strukt Messaggione {// Osaline strucutre ilma trükikirjata [8]; bool mitico; }; sümbolitüüp [5]; // struktuuri esimene osa ResponseContainer rs = e32ttl.receptInitialMessage (sizeof (tüüp)); // Pane string char massiivi (pole vaja) memcpy (type, rs.data.c_str (), sizeof (type)); Serial.println ("LUGEGE TÜÜP:"); Serial.println (rs.status.getResponseDescription ()); Serial.println (tüüp); // Loe ülejäänud struktuuri ResponseStructContainer rsc = e32ttl.receptMessage (sizeof (Messaggione)); structure Messaggione messaggione = *(Messaggione *) rsc.data;

14. samm: tavarežiimi asemel fikseeritud režiim

Samal viisil loon fikseeritud ülekandega kasutatava meetodi

Fikseeritud ülekanne

Peate muutma ainult saatmismeetodit, kuna sihtkoha seade ei saa preambulit aadressi ja kanali fikseeritud režiimis.

Nii et teil on Stringi sõnum

ResponseStatus sendFixedMessage (bait ADDL, bait ADDH, bait CHAN, const String sõnum); ResponseStatus sendBroadcastFixedMessage (bait CHAN, const String sõnum);

ja teie struktuuri jaoks

ResponseStatus sendFixedMessage (bait ADDL, bait ADDH, bait CHAN, const void *sõnum, const uint8_t suurus); ResponseStatus sendBroadcastFixedMessage (bait CHAN, const void *message, const uint8_t size);

Siin on lihtne näide

ResponseStatus rs = e32ttl.sendFixedMessage (0, 0, 0x17, & messaggione, sizeof (Messaggione)); // ResponseStatus rs = e32ttl.sendFixedMessage (0, 0, 0x17, "Ciao");

Fikseeritud edastusel on rohkem stsenaariume

Kui saadate kindlale seadmele (teise stsenaariumi fikseeritud edastus), peate selle otse tuvastamiseks lisama ADDL, ADDH ja CHAN.

ResponseStatus rs = e32ttl.sendFixedMessage (2, 2, 0x17, "Sõnum seadmesse");

Kui soovite sõnumi saata kõigile määratud kanali seadmetele, saate seda meetodit kasutada.

ResponseStatus rs = e32ttl.sendBroadcastFixedMessage (0x17, "Sõnum kanali seadmetele");

Kui soovite saada kõiki võrgus edastatavaid sõnumeid, peate määrama oma ADDH ja ADDL väärtuseks BROADCAST_ADDRESS.

ResponseStructContainer c; c = e32ttl100.getConfiguration (); // Oluline on hankida konfiguratsiooninäit enne kõiki muid toiminguid Configuration configuration = *(Configuration *) c.data; Serial.println (c.status.getResponseDescription ()); Serial.println (c.status.code); printParameters (konfiguratsioon); configuration. ADDL = BROADCAST_ADDRESS; konfiguratsioon. ADDH = BROADCAST_ADDRESS; // Määra konfiguratsiooni muudetud ja seadista konfiguratsiooni mitte hoidma ResponseStatus rs = e32ttl100.setConfiguration (konfiguratsioon, WRITE_CFG_PWR_DWN_LOSE); Serial.println (rs.getResponseDescription ()); Serial.println (rs.code); printParameters (konfiguratsioon);

Samm: aitäh

Nüüd on teil oma töö tegemiseks kogu teave, kuid minu arvates on oluline näidata mõningaid realistlikke näiteid, et kõiki võimalusi paremini mõista.

  1. LoRa E32 seade Arduino, esp32 või esp8266 jaoks: seaded ja põhikasutus
  2. LoRa E32 seade Arduino, esp32 või esp8266 jaoks: kogu
  3. LoRa E32 seade Arduino, esp32 või esp8266 jaoks: konfiguratsioon
  4. LoRa E32 seade Arduino, esp32 või esp8266 jaoks: fikseeritud ülekanne
  5. LoRa E32 seade Arduino, esp32 või esp8266 jaoks: energiasääst ja struktureeritud andmete saatmine

Soovitan: