Tartalomjegyzék:
- Kellékek
- 1. lépés: Könyvtár
- 2. lépés: Pinout
- 3. lépés: AUX tű
- 4. lépés: Teljesen összekapcsolt séma Esp8266
- 5. lépés: Teljesen csatlakoztatott séma Arduino
- 6. lépés: Könyvtár: Konstruktor
- 7. lépés: Kezdje
- 8. lépés: Konfigurációs és információs módszer
- 9. lépés: Válasz -tároló
- 10. lépés: Alapvető konfigurációs lehetőség
- 11. lépés: Vételi üzenet küldése
- 12. lépés: Normál átviteli mód
- 13. lépés: A struktúra kezelése
- 14. lépés: Rögzített mód a normál mód helyett
- 15. lépés: Köszönöm
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
2024 Szerző: John Day | [email protected]. Utoljára módosítva: 2024-01-30 09:39
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
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
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ű
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
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
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
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
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.
- LoRa E32 eszköz Arduino, esp32 vagy esp8266 számára: beállítások és alapvető használat
- LoRa E32 eszköz Arduino, esp32 vagy esp8266 számára: könyvtár
- LoRa E32 eszköz Arduino, esp32 vagy esp8266 számára: konfiguráció
- LoRa E32 eszköz Arduino, esp32 vagy esp8266 számára: rögzített átvitel
- LoRa E32 eszköz Arduino, esp32 vagy esp8266 készülékekhez: energiatakarékos és strukturált adatok küldése
Ajánlott:
Vezeték nélküli Arduino robot a HC12 vezeték nélküli modul használatával: 7 lépés
Vezeték nélküli Arduino robot a HC12 vezeték nélküli modul használatával: Hé srácok, üdv újra. Korábbi hozzászólásomban elmagyaráztam, hogy mi az a H -híd áramkör, az L293D motorvezérlő IC, a malackalapú L293D motorvezérlő IC a nagyáramú motorvezérlők vezetéséhez, és hogyan tervezheti meg és készítheti el saját L293D motorvezérlő tábláját
Távirányítású autó - Vezeték nélküli vezeték nélküli Xbox 360 vezérlővel: 5 lépés
Távirányítású autó - vezérelhető a vezeték nélküli Xbox 360 vezérlő használatával: Ezek az utasítások saját távirányítású autó létrehozásához, vezeték nélküli Xbox 360 vezérlővel vezérelhetők
Ötven méter hatótávolságú vezeték nélküli hozzáférési pont TP Link WN7200ND USB vezeték nélküli adapterrel Raspbian Stretch -en: 6 lépés
Ötven méter hatótávolságú vezeték nélküli hozzáférési pont TP Link WN7200ND USB vezeték nélküli adapterrel a Raspbian Stretch -en: A Raspberry Pi kiválóan alkalmas biztonságos vezeték nélküli hozzáférési pontok létrehozására, de nem rendelkezik jó hatótávolsággal, TP Link WN7200ND USB vezeték nélküli adaptert használtam annak kiterjesztéséhez. Szeretném megosztani, hogyan kell csinálniMiért akarok málna pi -t használni router helyett? T
DIY vezeték nélküli mikrofon vezeték nélküli gitárrendszerhez: 4 lépés
DIY Wireless Mic to Wireless Guitar System: Néztem néhány videót és néhány zenekart, és szinte közülük vezeték nélküli rendszert használ a gitáron. Megőrülök, mozogok, sétálok, és azt csinálok, amit akarnak, anélkül, hogy a zsinórt használnám, ezért arról álmodozom, hogy lesz egy .. De .. nekem ez most túl drága, ezért erre jutottam
Hackeljen be egy vezeték nélküli kaputelefont egy vezeték nélküli riasztókapcsolóba vagy be/ki kapcsolóba: 4 lépés
Hackeljen be egy vezeték nélküli kaputelefont egy vezeték nélküli riasztókapcsolóba vagy be/ki kapcsolóba: Nemrég építettem egy riasztórendszert, és telepítettem a házamba. Mágneses kapcsolókat használtam az ajtókon, és bekötöttem a padláson. Az ablakok egy másik történet, és a kemény huzalozás nem volt lehetőség. Szükségem volt egy vezeték nélküli megoldásra, és ez