Obsah:
- Zásoby
- Krok 1: Knižnica
- Krok 2: Pinout
- Krok 3: Pin AUX
- Krok 4: Plne prepojená schéma Esp8266
- Krok 5: Plne prepojená schéma Arduino
- Krok 6: Knižnica: Konštruktor
- Krok 7: Začnite
- Krok 8: Metóda konfigurácie a informácií
- Krok 9: Kontajner odpovede
- Krok 10: Základná možnosť konfigurácie
- Krok 11: Odoslať správu na prijatie
- Krok 12: Normálny režim prenosu
- Krok 13: Správa štruktúry
- Krok 14: Opravený režim namiesto normálneho režimu
- Krok 15: Ďakujem
Video: Bezdrôtová komunikácia LoRa 3 km až 8 km s nízkymi nákladmi na zariadenie E32 (sx1278/sx1276) pre Arduino, Esp8266 alebo Esp32: 15 krokov
2024 Autor: John Day | [email protected]. Naposledy zmenené: 2024-01-30 11:55
Vytváram knižnicu na správu EBYTE E32 na základe série Semtech zariadení LoRa, veľmi výkonného, jednoduchého a lacného zariadenia.
Verziu 3 km nájdete tu, verziu 8 km tu
Môžu pracovať na vzdialenosť 3 000 až 8 000 metrov a majú veľa funkcií a parametrov. Vytvoril som preto túto knižnicu, aby som zjednodušil používanie.
Je to riešenie na získavanie údajov z metropolitných senzorov alebo na ovládanie dronov.
Zásoby
Arduino UNO
Wemos D1 mini
Verzia LoRa E32 TTL 100 3 km
Verzia LoRa E32 TTL 1W 8Km
Krok 1: Knižnica
Moju knižnicu nájdete tu.
Stiahnuť.
Kliknite na tlačidlo STIAHNUTIE v pravom hornom rohu, premenujte nekomprimovaný priečinok LoRa_E32.
Skontrolujte, či priečinok LoRa_E32 obsahuje LoRa_E32.cpp a LoRa_E32.h.
Umiestnite priečinok knižnice LoRa_E32 do priečinka / libraries /. Ak je to vaša prvá knižnica, možno budete musieť vytvoriť podpriečinok knižníc.
Reštartujte IDE.
Krok 2: Pinout
Ako vidíte, pomocou kolíkov M0 a M1 môžete nastaviť rôzne režimy.
Existuje niekoľko pinov, ktoré je možné použiť staticky, ale ak ich pripojíte k mikrokontroléru a nakonfigurujete ich v knižnici, získate výkon a pomocou softvéru môžete ovládať všetky režimy, ale ďalej to vysvetlíme lepšie.
Krok 3: Pin AUX
Ako som už povedal Nie je dôležité pripojiť všetky kolíky k výstupu mikrokontroléra, piny M0 a M1 môžete prepnúť na HIGH alebo LOW, aby ste získali požadovanú konfiguráciu, a ak nepripojíte AUX, knižnica nastaví primerané oneskorenie, aby ste si boli istí. že operácia je dokončená.
AUX pin
Pri prenose údajov je možné použiť na prebudenie externého MCU a návrat HIGH po dokončení prenosu údajov.
Pri príjme AUX bude NÍZKY a vráti HIGH, keď je vyrovnávacia pamäť prázdna.
Používa sa tiež na samokontrolu na obnovenie normálnej prevádzky (v režime zapnutia a režimu spánku/programu).
Krok 4: Plne prepojená schéma Esp8266
Schéma pripojenia esp8266 je jednoduchšia, pretože funguje na rovnakom napätí logickej komunikácie (3,3 V).
Na dosiahnutie dobrej stability je dôležité pridať výsuvný odpor (4, 7Kohm).
Krok 5: Plne prepojená schéma Arduino
Pracovné napätie Arduino je 5v, preto musíme pridať delič napätia na vývody RX M0 a M1 modulu LoRa, aby sme predišli poškodeniu, viac informácií získate tu Delič napätia: kalkulačka a aplikácia.
Môžete použiť odpor 2Kohm na GND a 1Kohm zo signálu, ako dohromady na RX.
Krok 6: Knižnica: Konštruktor
Vytvoril som súbor pomerne početných konštruktérov, pretože môžeme mať viac možností a situácií, ktoré je možné zvládnuť.
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);
Prvá sada konštruktorov je vytvorená na delegovanie správy sériových a iných pinov do knižnice.
rxPin a txPin sú kolíky na pripojenie k UART a sú povinné.
auxPin je pin, ktorý kontroluje stav prevádzky, prenosu a príjmu (ďalej to vysvetlíme lepšie). Tento pin Nie je povinný, ak ho nenastavíte, použijem oneskorenie, aby sa operácia mohla dokončiť sama (s latenciou).
m0pin a m1Pin sú kolíky na zmenu režimu REŽIM (pozri tabuľku vyššie), myslím si, že tieto piny vo „výrobe“sa budú spájať priamo VYSOKO alebo NÍZKO, ale na testovanie sú účelne spravované knižnicou.
bpsRate je prúd softvérového servera, ktorý je bežne 9600 (jediná prenosová rýchlosť v režime programmin/spánok)
Jednoduchým príkladom je
#include "LoRa_E32.h" LoRa_E32 e32ttl100 (2, 3); // RX, TX // LoRa_E32 e32ttl100 (2, 3, 5, 6, 7); // RX, TX
Môžeme priamo použiť SoftwareSerial s iným konštruktérom
LoRa_E32 (HardwareSerial* sériový, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
LoRa_E32 (HardwareSerial* sériový, bajtový auxPin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
LoRa_E32 (HardwareSerial* sériový, bajt auxPin, bajt m0Pin, bajt m1Pin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
Príklad hore s týmto konštruktorom môže byť taký.
#include #include "LoRa_E32.h"
SoftwareSerial mySerial (2, 3); // RX, TX
LoRa_E32 e32ttl100 (& mySerial);
// LoRa_E32 e32ttl100 (& mySerial, 5, 7, 6);
Posledná sada konštruktorov je povolenie používať HardwareSerial namiesto SoftwareSerial.
LoRa_E32 (SoftwareSerial* sériový, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
LoRa_E32 (SoftwareSerial* sériový, bajtový auxPin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
LoRa_E32 (SoftwareSerial* sériový, bajt auxPin, bajt m0Pin, bajt m1Pin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
Krok 7: Začnite
Príkaz begin sa používa na spustenie sériového portu a pinov vo vstupnom a výstupnom režime.
neplatné začať ();
v exekúcii je
// Spustite všetky piny a UART
e32ttl100.begin ();
Krok 8: Metóda konfigurácie a informácií
Existuje súbor spôsobov správy konfigurácie a získavania informácií o zariadení.
ResponseStructContainer getConfiguration ();
ResponseStatus setConfiguration (Konfigurácia konfigurácie, PROGRAM_COMMAND saveType = WRITE_CFG_PWR_DWN_LOSE);
ResponseStructContainer getModuleInformation ();
void printParameters (konfigurácia konfigurácie štruktúry);
ResponseStatus resetModule ();
Krok 9: Kontajner odpovede
Na zjednodušenie správy odpovedí vytváram sadu kontajnerov, ktoré sú pre mňa veľmi užitočné na správu chýb a vracanie generických údajov.
Status reakcie
Toto je stavový kontajner s dvoma jednoduchými vstupnými bodmi, pomocou ktorých môžete získať stavový kód a popis stavového kódu
Serial.println (c.getResponseDescription ()); // Popis kódu
Serial.println (c.code); // 1 ak úspech
Kódy sú
ÚSPECH = 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
Tento kontajner je vytvorený na správu reakcie reťazca a má 2 vstupné body.
údaje s reťazcom vráteným zo správy a stav inštancie RepsonseStatus.
ResponseContainer rs = e32ttl.receiveMessage ();
Reťazcová správa = rs.data;
Serial.println (rs.status.getResponseDescription ());
Serial.println (správa);
ResponseStructContainer
Toto je „komplexnejší“kontajner, ktorý používam na správu štruktúry. Má rovnaký vstupný bod ako ResponseContainer, ale údaje sú prázdnym ukazovateľom na správu komplexnej štruktúry.
ResponseStructContainer c;
c = e32ttl100.getConfiguration (); // Pred všetkými ostatnými operáciami je dôležité získať ukazovateľ konfigurácie
Konfigurácia konfigurácie = *(Konfigurácia *) c.data;
Serial.println (c.status.getResponseDescription ());
Serial.println (c.status.code);
getConfiguration a setConfiguration
Prvá metóda je getConfiguration, pomocou ktorej môžete získať všetky údaje uložené v zariadení.
ResponseStructContainer getConfiguration ();
Tu je príklad použitia.
ResponseStructContainer c;
c = e32ttl100.getConfiguration (); // Pred všetkými ostatnými operáciami je dôležité získať ukazovateľ konfigurácie
Konfigurácia konfigurácie = *(Konfigurácia *) c.data;
Serial.println (c.status.getResponseDescription ());
Serial.println (c.status.code);
Serial.println (configuration. SPED.getUARTBaudRate ());
Štruktúra konfigurácie obsahuje všetky údaje o nastaveniach a pridávam sériu funkcií, aby som získal popis jednotlivých údajov.
configuration. ADDL = 0x0; // Prvá časť addressconfiguration. ADDH = 0x1; // Druhá časť konfigurácie adresy. CHAN = 0x19; // Konfigurácia kanála. OPTION.fec = FEC_0_OFF; // Konfigurácia prepínača korekcie chýb vpred. OPTION.fixedTransmission = FT_TRANSPARENT_TRANSMISSION; // konfigurácia režimu prenosu. OPTION.ioDriveMode = IO_D_MODE_PUSH_PULLS_PULL_UPS; // Konfigurácia správy vyťahovania. OPTION.transmissionPower = POWER_17; // Konfigurácia vysielacieho výkonu dBm. OPTION.wirelessWakeupTime = WAKE_UP_1250; // Čas čakania na konfiguráciu prebudenia. SPED.airDataRate = AIR_DATA_RATE_011_48; // konfigurácia rýchlosti prenosu dát. SPED.uartBaudRate = UART_BPS_115200; // konfigurácia prenosovej rýchlosti komunikácie. SPED.uartParity = MODE_00_8N1; // Paritný bit
Na získanie všetkého popisu máte ekvivalentnú funkciu pre všetky atribúty:
Serial.print (F ("Chan:")); Serial.print (konfigurácia. 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 ());
Rovnako tak setConfiguration chce konfiguráciu Strucutre, takže si myslím, že lepší spôsob, ako spravovať konfiguráciu, je načítať aktuálnu, použiť jedinú potrebnú zmenu a znova ju nastaviť.
ResponseStatus setConfiguration (Konfigurácia konfigurácie, PROGRAM_COMMAND saveType = WRITE_CFG_PWR_DWN_LOSE);
konfigurácia je pôvodne ukázaná, saveType vám povoľuje výber, ak sa zmena stane natrvalo iba pre aktuálnu reláciu.
ResponseStructContainer c; c = e32ttl100.getConfiguration (); // Je dôležité získať konfiguračný ukazovateľ pred všetkými ostatnými operáciami Konfigurácia konfigurácie = *(Konfigurácia *) c.data; Serial.println (c.status.getResponseDescription ()); Serial.println (c.status.code); printParameters (konfigurácia); configuration. ADDL = 0x0; konfigurácia. ADDH = 0x1; konfigurácia. 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; // Nastavená konfigurácia zmenená a nastavená tak, aby konfiguráciu neponechávala ResponseStatus rs = e32ttl100.setConfiguration (konfigurácia, WRITE_CFG_PWR_DWN_LOSE); Serial.println (rs.getResponseDescription ()); Serial.println (rs.code); printParameters (konfigurácia);
Všetky tieto parametre sú spravované ako konštantné:
Krok 10: Základná možnosť konfigurácie
Krok 11: Odoslať správu na prijatie
Najprv musíme zaviesť jednoduchú, ale užitočnú metódu na kontrolu, či sa niečo nenachádza v prijímacej vyrovnávacej pamäti
int dostupný ();
Jednoducho sa vráti, koľko bajtov máte v aktuálnom streame.
Krok 12: Normálny režim prenosu
Režim normálneho/transparentného prenosu sa používa na odosielanie správ na všetky zariadenia s rovnakou adresou a rovnakým kanálom.
Existuje mnoho spôsobov odosielania/prijímania správ, ktoré podrobne vysvetlíme:
ResponseStatus sendMessage (konštantná reťazcová správa);
ResponseContainer receiveMessage ();
Prvá metóda je sendMessage a používa sa na odoslanie reťazca do zariadenia v normálnom režime.
ResponseStatus rs = e32ttl.sendMessage ("Prova"); Serial.println (rs.getResponseDescription ());
Druhé zariadenie jednoducho urobí na slučke
if (e32ttl.available ()> 1) {ResponseContainer rs = e32ttl.receiveMessage (); Reťazcová správa = rs.data; // Vôbec prvé získanie údajov Serial.println (rs.status.getResponseDescription ()); Serial.println (správa); }
Krok 13: Správa štruktúry
Ak chcete odoslať komplexnú štruktúru, môžete použiť túto metódu
ResponseStatus sendMessage (const void *message, const uint8_t size); ResponseStructContainer receiveMessage (const uint8_t size);
Používa sa na odosielanie strucutre, napríklad:
struct Messaggione {char typ [5]; char správa [8]; bool mitico; }; struct Messaggione messaggione = {"TEMP", "Peple", true}; ResponseStatus rs = e32ttl.sendMessage (& messaggione, sizeof (Messaggione)); Serial.println (rs.getResponseDescription ());
a na druhej strane môžete správu dostať tak
ResponseStructContainer rsc = e32ttl.receiveMessage (sizeof (Messaggione)); struct Messaggione messaggione = *(Messaggione *) rsc.data; Serial.println (messaggione.message); Serial.println (messaggione.mitico);
Prečítajte si čiastočnú skratku
Ak chcete, aby si prvá časť správy mohla prečítať viac typov štruktúr, môžete použiť túto metódu.
ResponseContainer receiveInitialMessage (konšt. Veľkosť uint8_t);
Vytvorím ho na prijatie reťazca typu alebo iného na identifikáciu štruktúry, ktorá sa má načítať.
struct Messaggione {// Čiastočný strucutre bez správy typechar [8]; bool mitico; }; typ znaku [5]; // prvá časť štruktúry ResponseContainer rs = e32ttl.receiveInitialMessage (sizeof (typ)); // Vložte reťazec do poľa char (nie je potrebné) memcpy (typ, rs.data.c_str (), sizeof (typ)); Serial.println ("READ TYPE:"); Serial.println (rs.status.getResponseDescription ()); Serial.println (typ); // Prečítajte si zvyšok štruktúry ResponseStructContainer rsc = e32ttl.receiveMessage (sizeof (Messaggione)); struct Messaggione messaggione = *(Messaggione *) rsc.data;
Krok 14: Opravený režim namiesto normálneho režimu
Rovnakým spôsobom vytvorím sadu metód na použitie s pevným prenosom
Opravený prenos
Musíte zmeniť iba spôsob odosielania, pretože cieľové zariadenie nedostane preambulu s pevným režimom adries a kanálov.
Takže pre reťazcovú správu máte
ResponseStatus sendFixedMessage (byte ADDL, byte ADDH, byte CHAN, const String správa); ResponseStatus sendBroadcastFixedMessage (byte CHAN, const String správa);
a pre štruktúru, ktorú máte
ResponseStatus sendFixedMessage (bajt ADDL, bajt ADDH, bajt CHAN, const void *správa, veľkosť uint8_t); ResponseStatus sendBroadcastFixedMessage (bajt CHAN, správa const void *, veľkosť uint8_t);
Tu je jednoduchý príklad
ResponseStatus rs = e32ttl.sendFixedMessage (0, 0, 0x17, & messaggione, sizeof (Messaggione)); // ResponseStatus rs = e32ttl.sendFixedMessage (0, 0, 0x17, "Ciao");
Pevný prenos má viac scenárov
Ak odosielate na konkrétne zariadenie (druhý scenár Pevný prenos), musíte pridať ADDL, ADDH a CHAN, aby ste ho mohli priamo identifikovať.
ResponseStatus rs = e32ttl.sendFixedMessage (2, 2, 0x17, „Správa do zariadenia“);
Ak chcete odoslať správu na všetky zariadenia v určenom kanáli, môžete použiť túto metódu.
ResponseStatus rs = e32ttl.sendBroadcastFixedMessage (0x17, „Správa pre zariadenia kanála“);
Ak chcete prijímať všetky vysielané správy v sieti, musíte nastaviť ADDH a ADDL na BROADCAST_ADDRESS.
ResponseStructContainer c; c = e32ttl100.getConfiguration (); // Je dôležité získať konfiguračný ukazovateľ pred všetkými ostatnými operáciami Konfigurácia konfigurácie = *(Konfigurácia *) c.data; Serial.println (c.status.getResponseDescription ()); Serial.println (c.status.code); printParameters (konfigurácia); configuration. ADDL = BROADCAST_ADDRESS; configuration. ADDH = BROADCAST_ADDRESS; // Nastavená konfigurácia zmenená a nastavená tak, aby konfiguráciu neponechávala ResponseStatus rs = e32ttl100.setConfiguration (konfigurácia, WRITE_CFG_PWR_DWN_LOSE); Serial.println (rs.getResponseDescription ()); Serial.println (rs.code); printParameters (konfigurácia);
Krok 15: Ďakujem
Teraz máte všetky informácie potrebné na vykonanie práce, ale myslím si, že je dôležité ukázať niekoľko realistických príkladov, aby ste lepšie porozumeli všetkým možnostiam.
- Zariadenie LoRa E32 pre Arduino, esp32 alebo esp8266: nastavenia a základné použitie
- Zariadenie LoRa E32 pre Arduino, esp32 alebo esp8266: knižnica
- Zariadenie LoRa E32 pre Arduino, esp32 alebo esp8266: konfigurácia
- Zariadenie LoRa E32 pre Arduino, esp32 alebo esp8266: pevný prenos
- Zariadenie LoRa E32 pre Arduino, esp32 alebo esp8266: úspora energie a odosielanie štruktúrovaných dát
Odporúča:
Vytvorte si trasu s nízkymi nákladmi za niekoľko minút!: 10 krokov (s obrázkami)
Vytvorte nízkonákladovú trať za pár minút!: V mojom predchádzajúcom návode som vám ukázal, ako vytvoriť rozloženie modelového vlaku s automatizovaným vlečením. Použil segment trate s názvom „senzorická trať“. Je to celkom užitočná vec v usporiadaní modelovej železnice. Môžem byť použitý na nasledovné: Blokovať
Dupin-prenosný viacvlnný svetelný zdroj s mimoriadne nízkymi nákladmi: 11 krokov
Dupin-prenosný viacvlnný svetelný zdroj s mimoriadne nízkymi nákladmi: Pomenovaný po Auguste Dupinovi, považovanom za prvého fiktívneho detektíva, sa tento prenosný svetelný zdroj napája z akejkoľvek 5V USB nabíjačky telefónu alebo napájacieho zdroja. Každá LED hlava sa zapína magneticky. Pomocou lacných 3W hviezdicových LED diód, aktívne chladených malým ventilátorom,
Bezdrôtová komunikácia pomocou transceiverového modulu NRF24L01 pre projekty založené na Arduino: 5 krokov (s obrázkami)
Bezdrôtová komunikácia pomocou transceiverového modulu NRF24L01 pre projekty založené na Arduine: Toto je môj druhý návod s pokynmi k robotom a mikroovládačom. Je skutočne úžasné vidieť svojho robota nažive a pracovať podľa očakávania a verte mi, že to bude zábavnejšie, ak budete svojho robota alebo iné veci ovládať rýchlo a
Mikroskop: Interaktívny mikroskop s nízkymi nákladmi: 12 krokov (s obrázkami)
Mikroskop: Interaktívny mikroskop s nízkymi nákladmi: Dobrý deň, vitajte! Moje meno je mikroskop. Som cenovo dostupný mikroskop s vlastnými rukami a RPi, ktorý vám umožní vytvárať a interagovať s vašim vlastným mikrosvitom. Som skvelým praktickým projektom pre niekoho, koho zaujíma biotechnológia a
Ako si vyrobiť vlastnú nabíjačku do auta USB pre akékoľvek zariadenie iPod alebo iné zariadenie, ktoré sa nabíja cez USB: 10 krokov (s obrázkami)
Ako si vyrobiť vlastnú USB nabíjačku do auta pre akékoľvek iPody alebo iné zariadenia nabíjateľné cez USB: Vytvorte USB nabíjačku do auta pre akékoľvek zariadenie iPod alebo iné zariadenie, ktoré sa nabíja cez USB, spojením automobilového adaptéra s výstupom 5 V a zástrčky USB. Najdôležitejšou súčasťou tohto projektu je zaistiť, aby bol vsadený výstup na vami zvolený adaptér do auta