Tartalomjegyzék:

LoRa 3–8 km vezeték nélküli kommunikáció alacsony költségű E32 (sx1278/sx1276) eszközzel Arduino, Esp8266 vagy Esp32 esetén: 15 lépés
LoRa 3–8 km vezeték nélküli kommunikáció alacsony költségű E32 (sx1278/sx1276) eszközzel Arduino, Esp8266 vagy Esp32 esetén: 15 lépés

Videó: LoRa 3–8 km vezeték nélküli kommunikáció alacsony költségű E32 (sx1278/sx1276) eszközzel Arduino, Esp8266 vagy Esp32 esetén: 15 lépés

Videó: LoRa 3–8 km vezeték nélküli kommunikáció alacsony költségű E32 (sx1278/sx1276) eszközzel Arduino, Esp8266 vagy Esp32 esetén: 15 lépés
Videó: Обзор и конфигурация модуля EBYTE LoRa 2024, Július
Anonim
LoRa 3–8 km vezeték nélküli kommunikáció alacsony költségű E32 (sx1278/sx1276) eszközzel Arduino, Esp8266 vagy Esp32 készülékekhez
LoRa 3–8 km vezeték nélküli kommunikáció alacsony költségű E32 (sx1278/sx1276) eszközzel Arduino, Esp8266 vagy Esp32 készülékekhez

Létrehozok egy könyvtárat az EBYTE E32 kezelésére, a SemRech sorozatú LoRa eszközök alapján, nagyon erős, egyszerű és olcsó eszköz.

A 3 km -es verziót itt, a 8 km -es verziót itt találod

3000–8000 m távolságon dolgozhatnak, és sok funkcióval és paraméterrel rendelkeznek. Ezért ezt a könyvtárat azért hozom létre, hogy egyszerűsítsem a használatot.

Ez egy megoldás az adatok lekérésére a nagyvárosi szenzorokból vagy a drónok vezérlésére.

Kellékek

Arduino UNO

Wemos D1 mini

LoRa E32 TTL 100 3Km verzió

LoRa E32 TTL 1W 8Km verzió

1. lépés: Könyvtár

Könyvtár
Könyvtár

A könyvtáramat itt találod.

Letölteni.

Kattintson a LETÖLTÉS gombra a jobb felső sarokban, nevezze át a tömörítetlen mappát LoRa_E32.

Ellenőrizze, hogy a LoRa_E32 mappa tartalmazza -e a LoRa_E32.cpp és a LoRa_E32.h fájlokat.

Helyezze a LoRa_E32 könyvtármappát a / libraries / mappába. Előfordulhat, hogy létre kell hoznia a könyvtárak almappáját, ha ez az első könyvtára.

Indítsa újra az IDE -t.

2. lépés: Pinout

Kitűz
Kitűz
Kitűz
Kitűz
Kitűz
Kitűz

Amint láthatja, különféle módokat állíthat be az M0 és M1 érintkezőkkel.

Vannak olyan tűk, amelyeket statikusan lehet használni, de ha csatlakoztatja a mikrokontrollerhez, és konfigurálja azokat a könyvtárban, akkor teljesítményre tesz szert, és minden módot szoftveren keresztül vezérelhet, de a következőkben jobban elmagyarázzuk.

3. lépés: AUX tű

AUX tű
AUX tű
AUX tű
AUX tű
AUX tű
AUX tű

Mint már mondtam, nem fontos, hogy minden tűt a mikrokontroller kimenetéhez csatlakoztasson, az M0 és M1 érintkezőket HIGH vagy LOW értékre állíthatja a deszervezett konfiguráció eléréséhez, és ha nem csatlakoztatja az AUX -ot, a könyvtár ésszerű késleltetést határoz meg hogy a művelet befejeződött.

AUX tű

Az adatok átvitelénél fel lehet ébreszteni a külső MCU -t, és az adatátvitel befejezésekor HIGH értékkel tér vissza.

Amikor az AUX vétel alacsony, és visszatér a HIGH értékre, ha a puffer üres.

Önellenőrzésre is használható a normál működés helyreállításához (bekapcsoláskor és alvó/program módban).

4. lépés: Teljesen összekapcsolt séma Esp8266

Teljesen összekapcsolt séma Esp8266
Teljesen összekapcsolt séma Esp8266
Teljesen összekapcsolt séma Esp8266
Teljesen összekapcsolt séma Esp8266

Az esp8266 csatlakozási séma egyszerűbb, mert a logikai kommunikáció ugyanazon feszültségén működik (3.3v).

Fontos, hogy adjunk hozzá felhúzó ellenállást (4, 7Kohm) a jó stabilitás érdekében.

5. lépés: Teljesen csatlakoztatott séma Arduino

Teljesen összekapcsolt séma Arduino
Teljesen összekapcsolt séma Arduino
Teljesen összekapcsolt séma Arduino
Teljesen összekapcsolt séma Arduino

Az Arduino üzemi feszültsége 5v, ezért hozzá kell adnunk egy feszültségosztót a LoRa modul R0 és M1 RX csapjaihoz a sérülések elkerülése érdekében, további információkat itt találhat Feszültségosztó: számológép és alkalmazás.

Használhat 2Kohm ellenállást a GND -hez és 1Kohm -ot a jelből, mint az RX -en.

6. lépés: Könyvtár: Konstruktor

Elég sok konstruktőrt készítettem, mert több lehetőséget és helyzetet kezelhetünk.

LoRa_E32 (bájt rxPin, bájt 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);

Az első konstruktorkészlet a Serial és más pin -k kezelését delegálja a könyvtárba.

Az rxPin és a txPin a PIN -kód az UART -hoz való csatlakozáshoz, és ezek kötelezőek.

Az auxPin egy tű, amely ellenőrzi a működést, az átvitelt és a fogadás állapotát (a következőkben jobban elmagyarázzuk), ez a pin Nem kötelező, ha nem állítja be, akkor késleltetést alkalmazok a művelet befejezéséhez (késéssel).

Az m0pin és az m1Pin azok a csapok, amelyek megváltoztatják az ÜZEMMÓD működését (lásd a táblázat felső részét), úgy gondolom, hogy ezek a „termelési” csapok közvetlenül HIGH vagy LOW csatlakozni fognak, de tesztelésre hasznosak, ha a könyvtár kezeli őket.

A bpsRate a SoftwareSerial budrátja, általában 9600 (az egyetlen átviteli sebesség programmin/alvó módban)

Egy egyszerű példa

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

A SoftwareSerial -t közvetlenül használhatjuk egy másik konstruktorral

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

LoRa_E32 (HardwareSerial* soros, byte auxPin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);

LoRa_E32 (HardwareSerial* soros, bájt auxPin, bájt m0Pin, bájt m1Pin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);

A felső példa ezzel a konstruktorral így is megtehető.

#include #include "LoRa_E32.h"

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

LoRa_E32 e32ttl100 (& mySerial);

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

Az utolsó konstruktorkészlet lehetővé teszi a HardwareSerial használatát a SoftwareSerial helyett.

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

LoRa_E32 (SoftwareSerial* soros, byte auxPin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);

LoRa_E32 (SoftwareSerial* soros, bájt auxPin, bájt m0Pin, bájt m1Pin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);

7. lépés: Kezdje

A start parancs a Serial és a pin indítására szolgál bemeneti és kimeneti módban.

void begin ();

végrehajtásban van

// Minden csap és az UART indítása

e32ttl100.begin ();

8. lépés: Konfigurációs és információs módszer

Van egy sor módszer a konfiguráció kezelésére és az eszközre vonatkozó információk beszerzésére.

ResponseStructContainer getConfiguration ();

ResponseStatus setConfiguration (Konfigurációs konfiguráció, PROGRAM_COMMAND saveType = WRITE_CFG_PWR_DWN_LOSE);

ResponseStructContainer getModuleInformation ();

void printParameters (szerkezet konfigurációs konfiguráció);

ResponseStatus resetModule ();

9. lépés: Válasz -tároló

A válasz kezelésének egyszerűsítése érdekében létrehozok egy tárolókészletet, amely nagyon hasznos a hibák kezeléséhez és az általános adatok visszaadásához.

ResponseStatus

Ez egy állapot tároló és 2 egyszerű belépési ponttal rendelkezik, ezzel megkaphatja az állapotkódot és az állapotkód leírását

Serial.println (c.getResponseDescription ()); // A kód leírása

Serial.println (c.code); // 1 ha sikeres

A kódok

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

Ez a tároló a String válasz kezelésére szolgál, és 2 belépési ponttal rendelkezik.

az üzenet és az állapot visszaadott karakterlánccal rendelkező adatok a RepsonseStatus példánya.

ResponseContainer rs = e32ttl.receivedMessage ();

String üzenet = rs.data;

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

Serial.println (üzenet);

ResponseStructContainer

Ez a "bonyolultabb" tároló, ezt a struktúra kezelésére használom, ugyanaz a belépési pontja a ResponseContainer -nek, de az adatok üres mutatók az összetett struktúra kezelésére.

ResponseStructContainer c;

c = e32ttl100.getConfiguration (); // Fontos, hogy minden más művelet előtt szerezze be a konfigurációs mutatót

Konfigurációs konfiguráció = *(Konfiguráció *) c.data;

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

Serial.println (c.status.code);

getConfiguration és setConfiguration

Az első módszer a getConfiguration, amellyel az eszközön tárolt összes adatot visszakeresheti.

ResponseStructContainer getConfiguration ();

Itt egy használati példa.

ResponseStructContainer c;

c = e32ttl100.getConfiguration (); // Fontos, hogy minden más művelet előtt szerezze be a konfigurációs mutatót

Konfigurációs konfiguráció = *(Konfiguráció *) c.data;

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

Serial.println (c.status.code);

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

A konfiguráció felépítése tartalmazza a beállítások összes adatát, és egy sor funkciót adok hozzá, hogy minden adatot leírhassak.

konfiguráció. ADDL = 0x0; // A címkonfiguráció első része. ADDH = 0x1; // A címkonfiguráció második része. CHAN = 0x19; // Csatorna konfiguráció. OPTION.fec = FEC_0_OFF; // Továbbítja a hibajavító kapcsoló konfigurációját. OPTION.fixedTransmission = FT_TRANSPARENT_TRANSMISSION; // Átviteli mód konfigurálása. OPTION.ioDriveMode = IO_D_MODE_PUSH_PULLS_PULL_UPS; // Felhúzáskezelési konfiguráció. OPTION.transmissionPower = POWER_17; // dBm átviteli teljesítmény konfiguráció. OPTION.wirelessWakeupTime = WAKE_UP_1250; // Várási idő az ébresztési konfigurációra. SPED.airDataRate = AIR_DATA_RATE_011_48; // Levegő adatsebesség konfigurálása. SPED.uartBaudRate = UART_BPS_115200; // Kommunikációs baud rate konfiguráció. SPED.uartParity = MODE_00_8N1; // Paritás bit

Az összes attribútumnak megfelelő funkciója van az összes leírás eléréséhez:

Serial.print (F ("Chan:")); Serial.print (konfiguráció. 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 ());

Ugyanígy a setConfiguration konfigurációs struktúrát is szeretne, ezért úgy gondolom, hogy a konfiguráció kezelésének legjobb módja, ha lekéri az aktuálisat, végrehajtja az egyetlen szükséges módosítást, és újra beállítja.

ResponseStatus setConfiguration (Konfigurációs konfiguráció, PROGRAM_COMMAND saveType = WRITE_CFG_PWR_DWN_LOSE);

a konfiguráció az előzetes megjelenítés, a saveType engedélyezi a választást, ha a módosítás véglegesen csak az aktuális munkamenetre vonatkozik.

ResponseStructContainer c; c = e32ttl100.getConfiguration (); // Fontos, hogy minden más művelet előtt szerezze be a konfigurációs mutatót Configuration configuration = *(Configuration *) c.data; Serial.println (c.status.getResponseDescription ()); Serial.println (c.status.code); printParameters (konfiguráció); konfiguráció. ADDL = 0x0; konfiguráció. ADDH = 0x1; konfiguráció. 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; // A konfiguráció beállítása megváltozott, és a beállítás nem áll meg ResponseStatus rs = e32ttl100.setConfiguration (konfiguráció, WRITE_CFG_PWR_DWN_LOSE); Serial.println (rs.getResponseDescription ()); Soros.println (rs.kód); printParameters (konfiguráció);

A paramétereket állandóan kezelik:

10. lépés: Alapvető konfigurációs lehetőség

Alapvető konfigurációs lehetőség
Alapvető konfigurációs lehetőség

11. lépés: Vételi üzenet küldése

Először be kell vezetnünk egy egyszerű, de hasznos módszert annak ellenőrzésére, hogy van -e valami a fogadó pufferben

int elérhető ();

Egyszerűen visszaadja, hogy hány bájt van az aktuális folyamban.

12. lépés: Normál átviteli mód

Normál átviteli mód
Normál átviteli mód

A normál/átlátszó átviteli módot használjuk üzenetek küldésére minden eszközre, ugyanazzal a címmel és csatornával.

Az üzenetek küldésének/fogadásának számos módja van, részletesen elmagyarázzuk:

ResponseStatus sendMessage (const String üzenet);

ResponseContainer ReceiveMessage ();

Az első módszer a sendMessage, és arra szolgál, hogy karakterláncot küldjön egy eszközre normál módban.

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

A másik eszköz egyszerűen a hurok

if (e32ttl.available ()> 1) {ResponseContainer rs = e32ttl.receivedMessage (); String üzenet = rs.data; // Először szerezze be az adatokat Serial.println (rs.status.getResponseDescription ()); Serial.println (üzenet); }

13. lépés: A struktúra kezelése

Ha komplex szerkezetet szeretne küldeni, használhatja ezt a módszert

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

Strucutre küldésére használják, például:

struk Messaggione {char type [5]; char üzenet [8]; bool mitico; }; szerkezet Messaggione messaggione = {"TEMP", "Peple", true}; ResponseStatus rs = e32ttl.sendMessage (& messaggione, sizeof (Messaggione)); Serial.println (rs.getResponseDescription ());

a másik oldalon pedig megkaphatja az üzenetet úgy

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

Részleges szerkezet olvasása

Ha azt szeretné, hogy az üzenet első része több típusú struktúrát kezeljen, használja ezt a módszert.

ResponseContainer ReceiveInitialMessage (const uint8_t size);

Azért hozom létre, hogy olyan típusú karakterláncot kapjon, amely azonosítja a betöltendő struktúrát.

struk Messaggione {// Részleges strucutre gépelési üzenet nélkül [8]; bool mitico; }; char típus [5]; // a ResponseContainer struktúra első része rs = e32ttl.receptInitialMessage (sizeof (típus)); // Tegyen karakterláncot egy char tömbbe (nem szükséges) memcpy (type, rs.data.c_str (), sizeof (type)); Serial.println ("OLVASÁSI TÍPUS:"); Serial.println (rs.status.getResponseDescription ()); Serial.println (típus); // Olvassa el a ResponseStructContainer szerkezet többi részét rsc = e32ttl.receptMessage (sizeof (Messaggione)); szerkezet Messaggione messaggione = *(Messaggione *) rsc.data;

14. lépés: Rögzített mód a normál mód helyett

Ugyanezen a módon hozok létre egy sor metódust, amelyet rögzített átvitelhez használok

Rögzített sebességváltó

Csak a küldési módszert kell megváltoztatnia, mert a céleszköz nem fogadja a bevezető címet és a csatorna quando settato il rögzített módját.

Tehát a String üzenethez

ResponseStatus sendFixedMessage (byte ADDL, byte ADDH, byte CHAN, const String üzenet); ResponseStatus sendBroadcastFixedMessage (bájt CHAN, const String üzenet);

és a felépítéshez

ResponseStatus sendFixedMessage (byte ADDL, byte ADDH, byte CHAN, const void *message, const uint8_t size); ResponseStatus sendBroadcastFixedMessage (byte CHAN, const void *message, const uint8_t size);

Itt egy egyszerű példa

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

A fix átvitelnek több forgatókönyve van

Ha egy adott eszközre küld (második forgatókönyv Fix átvitel), akkor hozzá kell adnia az ADDL, ADDH és CHAN elemeket a közvetlen azonosításhoz.

ResponseStatus rs = e32ttl.sendFixedMessage (2, 2, 0x17, "Üzenet egy eszköznek");

Ha üzenetet szeretne küldeni egy adott csatorna összes eszközére, használhatja ezt a módszert.

ResponseStatus rs = e32ttl.sendBroadcastFixedMessage (0x17, "Üzenet egy csatorna eszközeihez");

Ha meg szeretné kapni a hálózat összes sugárzott üzenetét, akkor az ADDH -t és az ADDL -t állítsa be a BROADCAST_ADDRESS használatával.

ResponseStructContainer c; c = e32ttl100.getConfiguration (); // Fontos, hogy minden más művelet előtt szerezze be a konfigurációs mutatót Configuration configuration = *(Configuration *) c.data; Serial.println (c.status.getResponseDescription ()); Serial.println (c.status.code); printParameters (konfiguráció); konfiguráció. ADDL = BROADCAST_ADDRESS; konfiguráció. ADDH = BROADCAST_ADDRESS; // A konfiguráció beállítása megváltozott, és a beállítás nem áll fenn ResponseStatus rs = e32ttl100.setConfiguration (konfiguráció, WRITE_CFG_PWR_DWN_LOSE); Serial.println (rs.getResponseDescription ()); Soros.println (rs.kód); printParameters (konfiguráció);

15. lépés: Köszönöm

Most már minden információja megvan a munkájához, de fontosnak tartok néhány reális példát mutatni, hogy jobban megértsük az összes lehetőséget.

  1. LoRa E32 eszköz Arduino, esp32 vagy esp8266 számára: beállítások és alapvető használat
  2. LoRa E32 eszköz Arduino, esp32 vagy esp8266 számára: könyvtár
  3. LoRa E32 eszköz Arduino, esp32 vagy esp8266 számára: konfiguráció
  4. LoRa E32 eszköz Arduino, esp32 vagy esp8266 számára: rögzített átvitel
  5. LoRa E32 eszköz Arduino, esp32 vagy esp8266 készülékekhez: energiatakarékos és strukturált adatok küldése

Ajánlott: