Orodha ya maudhui:

LoRa 3Km hadi 8Km Mawasiliano isiyo na waya na Gharama ya chini E32 (sx1278 / sx1276) Kifaa cha Arduino, Esp8266 au Esp32: 15 Hatua
LoRa 3Km hadi 8Km Mawasiliano isiyo na waya na Gharama ya chini E32 (sx1278 / sx1276) Kifaa cha Arduino, Esp8266 au Esp32: 15 Hatua

Video: LoRa 3Km hadi 8Km Mawasiliano isiyo na waya na Gharama ya chini E32 (sx1278 / sx1276) Kifaa cha Arduino, Esp8266 au Esp32: 15 Hatua

Video: LoRa 3Km hadi 8Km Mawasiliano isiyo na waya na Gharama ya chini E32 (sx1278 / sx1276) Kifaa cha Arduino, Esp8266 au Esp32: 15 Hatua
Video: Lora cloud control system 2024, Novemba
Anonim
LoRa 3Km hadi 8Km Mawasiliano isiyo na waya na Gharama ya chini E32 (sx1278 / sx1276) Kifaa cha Arduino, Esp8266 au Esp32
LoRa 3Km hadi 8Km Mawasiliano isiyo na waya na Gharama ya chini E32 (sx1278 / sx1276) Kifaa cha Arduino, Esp8266 au Esp32

Ninaunda maktaba ya kusimamia EBYTE E32 kulingana na safu ya Semtech ya kifaa cha LoRa, yenye nguvu sana, kifaa rahisi na cha bei rahisi.

Unaweza kupata toleo la 3Km hapa, toleo la 8Km hapa

Wanaweza kufanya kazi kwa umbali wa 3000m hadi 8000m, na wana huduma na vigezo vingi. Kwa hivyo ninaunda maktaba hii ili kurahisisha matumizi.

Ni suluhisho la kupata data kutoka kwa sensorer za mji mkuu au kudhibiti drone.

Vifaa

Arduino UNO

Wemos D1 mini

Toleo la LoRa E32 TTL 100 3Km

Toleo la LoRa E32 TTL 1W 8Km

Hatua ya 1: Maktaba

Maktaba
Maktaba

Unaweza kupata maktaba yangu hapa.

Ili kupakua.

Bonyeza kitufe cha DOWNLOADS kwenye kona ya juu kulia, ipatie jina tena folda isiyoshinikizwa ya LoRa_E32.

Angalia kama folda ya LoRa_E32 ina LoRa_E32.cpp na LoRa_E32.h.

Weka folda ya maktaba ya LoRa_E32 yako / maktaba / folda. Unaweza kuhitaji kuunda folda ndogo ya maktaba ikiwa ni maktaba yako ya kwanza.

Anzisha tena IDE.

Hatua ya 2: pinout

Kujifunga
Kujifunga
Kujifunga
Kujifunga
Kujifunga
Kujifunga

Kama unaweza kuona unaweza kuweka njia anuwai kupitia pini za M0 na M1.

Kuna pini ambazo zinaweza kutumika kwa njia tuli, lakini Ukiiunganisha kwa microcontroller na usanidi kwenye maktaba unayopata katika utendaji na unaweza kudhibiti hali zote kupitia programu, lakini tutaelezea vizuri zaidi.

Hatua ya 3: AUX Pin

Pin ya AUX
Pin ya AUX
Pin ya AUX
Pin ya AUX
Pin ya AUX
Pin ya AUX

Kama nilivyosema tayari sio muhimu kuunganisha pini zote kwenye pato la microcontroller, unaweza kuweka pini za M0 na M1 kwa HIGH au LOW kupata usanidi uliopangwa, na ikiwa hautaunganisha AUX maktaba iliweka ucheleweshaji mzuri ili kuwa na uhakika kwamba operesheni imekamilika.

Pini ya AUX

Wakati wa kupeleka data inaweza kutumika kuamsha MCU ya nje na kurudi Juu kwenye kumaliza uhamishaji wa data.

Wakati wa kupokea AUX kwenda CHINI na kurudi Juu wakati bafa haina kitu.

Inatumika pia kwa kukagua kibinafsi ili kurudisha operesheni ya kawaida (kwenye hali ya kuwasha umeme na kulala / mpango).

Hatua ya 4: Schema Esp8266 iliyounganishwa kikamilifu

Schema iliyounganishwa kikamilifu Esp8266
Schema iliyounganishwa kikamilifu Esp8266
Schema iliyounganishwa kikamilifu Esp8266
Schema iliyounganishwa kikamilifu Esp8266

esp8266 schema ya unganisho ni rahisi zaidi kwa sababu inafanya kazi kwa voltage sawa ya mawasiliano ya kimantiki (3.3v).

Ni muhimu kuongeza kontena la kuvuta (4, 7Kohm) ili kupata utulivu mzuri.

Hatua ya 5: Schema Arduino iliyounganishwa kikamilifu

Schema Arduino iliyounganishwa kikamilifu
Schema Arduino iliyounganishwa kikamilifu
Schema Arduino iliyounganishwa kikamilifu
Schema Arduino iliyounganishwa kikamilifu

Voltage ya kazi ya Arduino ni 5v, kwa hivyo tunahitaji kuongeza mgawanyiko wa voltage kwenye RX pin M0 na M1 ya moduli ya LoRa kuzuia uharibifu, unaweza kupata habari zaidi hapa Mgawanyiko wa Voltage: kikokotoo na matumizi.

Unaweza kutumia kipingaji cha 2Kohm kwa GND na 1Kohm kutoka kwa ishara kuliko kuweka pamoja kwenye RX.

Hatua ya 6: Maktaba: Mjenzi

Nilifanya seti ya waundaji kadhaa, kwa sababu tunaweza kuwa na chaguzi zaidi na hali za kusimamia.

LoRa_E32 (byte rxPin, byte 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);

Seti ya kwanza ya wajenzi ni kuunda kukabidhi usimamizi wa pini za siri na zingine kwenye maktaba.

rxPin na txPin ni pini ya kuungana na UART na ni lazima.

auxPin ni pini inayoangalia hali ya operesheni, usafirishaji na upokeaji (tutaelezea vizuri baadaye), pini hiyo sio lazima, ikiwa hautaiweka mimi hutumia kuchelewesha ruhusa ya shughuli kukamilisha yenyewe (na latency).

m0pin na m1Pin ni pini za kubadilisha operesheni ya MODE (tazama jedwali juu), nadhani pini hizi katika "uzalishaji" zitaunganisha moja kwa moja JUU au LOW, lakini kwa jaribio ni muhimu kusimamiwa na maktaba.

bpsRate ni boudrate ya SoftwareSerial kawaida ni 9600 (kiwango pekee cha baud katika hali ya programu / hali ya kulala)

Mfano rahisi ni

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

Tunaweza kutumia moja kwa moja SoftwareSerial na mjenzi mwingine

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

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

LoRa_E32 (HardwareSerial * serial, byte auxPin, byte m0Pin, byte m1Pin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);

Mfano wa juu na mjenzi huyu anaweza kufanya kama hivyo.

# pamoja na # pamoja na "LoRa_E32.h"

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

LoRa_E32 e32ttl100 (& mySerial);

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

Seti ya mwisho ya mjenzi ni kuruhusu kutumia HardwareSerial badala ya SoftwareSerial.

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

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

LoRa_E32 (SoftwareSerial * serial, byte auxPin, byte m0Pin, byte m1Pin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);

Hatua ya 7: Anza

Amri ya kuanza hutumiwa kuanzisha Serial na pini katika hali ya kuingiza na kutoa.

tupu kuanza ();

katika utekelezaji ni

// Anzisha pini zote na UART

e32ttl100. anza ();

Hatua ya 8: Usanidi na Njia ya Habari

Kuna seti ya njia za kudhibiti usanidi na kupata habari ya kifaa.

ResponseStructContainer getConfiguration ();

Hali ya kujibu imewekwaUsanidi (Usanidi wa usanidi, PROGRAM_COMMAND saveType = WRITE_CFG_PWR_DWN_LOSE);

ResponseStructContainer getModuleInformation ();

uchapishaji batiliParameters (muundo Usanidi wa usanidi);

ResponseStatus resetModule ();

Hatua ya 9: Chombo cha majibu

Ili kurahisisha usimamizi wa jibu ninaunda seti ya kontena, kwangu kwa faida sana kusimamia makosa na kurudisha data ya kawaida.

Hali ya Majibu

Hii ni kontena la hali na ina sehemu 2 rahisi ya kuingia, na hii unaweza kupata nambari ya hali na maelezo ya nambari ya hali

Serial.println (c.getResponseDescription ()); // Maelezo ya nambari

Serial.println (c.code); // 1 ikiwa Mafanikio

Nambari ni

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

Jibu la Kontena

Chombo hiki kimeundwa kusimamia majibu ya Kamba na kuwa na sehemu 2 ya kuingia.

data na kamba iliyorudishwa kutoka kwa ujumbe na hadhi mfano wa RepsonseStatus.

ResponseContainer rs = e32ttl.receiveMessage ();

Ujumbe wa kamba = rs.data;

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

Serial.println (ujumbe);

JibuKuundaKontena

Hii ndio kontena "ngumu" zaidi, ninatumia hii kudhibiti muundo, ina sehemu sawa ya kuingia ya ResponseContainer lakini data ni pointer tupu ya kusimamia muundo tata.

MajibuStructContainer c;

c = e32ttl100.getConfiguration (); // Ni muhimu kupata pointer ya usanidi kabla ya shughuli nyingine zote

Usanidi wa usanidi = * (Usanidi *) c.data;

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

Serial.println (c.status.code);

pataConfiguration na setConfiguration

Njia ya kwanza ni kupata usanidi, unaweza kuitumia kurudisha data zote zilizohifadhiwa kwenye kifaa.

ResponseStructContainer getConfiguration ();

Hapa ni mfano wa matumizi.

ResponseStructContainer c;

c = e32ttl100.getConfiguration (); // Ni muhimu kupata pointer ya usanidi kabla ya shughuli nyingine zote

Usanidi wa usanidi = * (Usanidi *) c.data;

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

Serial.println (c.status.code);

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

Muundo wa usanidi una data zote za mipangilio, na ninaongeza safu ya kazi kupata maelezo yote ya data moja.

usanidi. ADDL = 0x0; // Sehemu ya kwanza ya usanidi wa anwani. ADDH = 0x1; // Sehemu ya pili ya usanidi wa anwani. CHAN = 0x19; // Usanidi wa Kituo. OPTION.fec = FEC_0_OFF; // Usanidi wa mbele wa kurekebisha urekebishaji wa makosa. OPTION.fixedTransmission = FT_TRANSPARENT_TRANSMISSION; // Usanidi wa hali ya usambazaji. OPTION.ioDriveMode = IO_D_MODE_PUSH_PULLS_PULL_UPS; // Usanidi wa usimamizi wa kuvuta. OPTION.transmissionPower = POWER_17; // usanidi wa umeme wa dBm. OPTION.wirelessWakeupTime = WAKE_UP_1250; // Wakati wa kusubiri usanidi wa kuamka. SPED.airDataRate = AIR_DATA_RATE_011_48; // Usanidi wa kiwango cha data ya hewa. SPED.uartBaudRate = UART_BPS_115200; // Usanidi wa kiwango cha baud ya mawasiliano. SPED.uartParity = MODE_00_8N1; // Usawa kidogo

Una kazi sawa kwa sifa zote kupata maelezo yote:

Printa ya serial (F ("Chan:")); Serial.print (usanidi. CHAN, DEC); Serial.print ("->"); Serial.println (Configuration.getChannelDescription ()); Serial.println (F ("")); Serial.print (F ("SpeedParityBit:")); Serial.print (usanidi. SPED.uartParity, BIN); Serial.print ("->"); Serial.println (usanidi. SPED.getUARTParityDescription ()); Serial.print (F ("SpeedUARTDatte:")); Serial.print (usanidi. SPED.uartBaudRate, BIN); Serial.print ("->"); Serial.println (usanidi. SPED.getUARTBaudRate ()); Serial.print (F ("SpeedAirDataRate:")); Serial.print (usanidi. SPED.airDataRate, BIN); Serial.print ("->"); Serial.println (usanidi. SPED.getAirDataRate ()); Serial.print (F ("ChaguoTrans:")); Serial.print (Configuration. OPTION.fixedTransmission, BIN); Serial.print ("->"); Serial.println (usanidi. OPTION.getFixedTransmissionDescription ()); Serial.print (F ("ChaguoPullup:")); Serial.print (usanidi. OPTION.ioDriveMode, BIN); Serial.print ("->"); Serial.println (usanidi. OPTION.getIODroveModeDescription ()); Serial.print (F ("ChaguoWakeup:")); 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 (usanidi. OPTION.getFECDescription ()); Serial.print (F ("Nguvu ya Chaguo:")); Serial.print (Configuration. OPTION.transmissionPower, BIN); Serial.print ("->"); Serial.println (usanidi. OPTION.getTransmissionPowerDescription ());

Kwa njia ile ile setConfiguration inataka strucutre ya usanidi, kwa hivyo nadhani njia bora ya kudhibiti usanidi ni kupata ile ya sasa, tumia mabadiliko pekee unayohitaji na uiweke tena.

Hali ya kujibu imewekwaUsanidi (Usanidi wa usanidi, PROGRAM_COMMAND saveType = WRITE_CFG_PWR_DWN_LOSE);

usanidi ni onyesho la previsouly, C = e32ttl100.getConfiguration (); ResponseStructContainer c; // Ni muhimu kupata pointer ya usanidi kabla ya usanidi mwingine wote wa usanidi wa usanidi = * (Usanidi *) c.data; Serial.println (c.status.getResponseDescription ()); Serial.println (c.status.code); PrintParameters (usanidi); usanidi. ADDL = 0x0; usanidi. ADDH = 0x1; usanidi. CHAN = 0x19; usanidi. OPTION.fec = FEC_0_OFF; usanidi. OPTION.fixedTransmission = FT_TRANSPARENT_TRANSMISSION; usanidi. OPTION.ioDriveMode = IO_D_MODE_PUSH_PULLS_PULL_UPS; usanidi. OPTION.transmissionPower = POWER_17; usanidi. OPTION.wirelessWakeupTime = WAKE_UP_1250; usanidi. SPED.airDataRate = AIR_DATA_RATE_011_48; usanidi. SPED.uartBaudRate = UART_BPS_115200; usanidi. SPED.uartParity = MODE_00_8N1; // Kuweka usanidi umebadilishwa na kuweka kushikilia usanidi ResponseStatus rs = e32ttl100.setConfiguration (Configuration, WRITE_CFG_PWR_DWN_LOSE); Serial.println (rs.getResponseDescription ()); Serial.println (rs.code); PrintParameters (usanidi);

Vigezo vyote vinasimamiwa kama kawaida:

Hatua ya 10: Chaguo la Usanidi wa Msingi

Chaguo la Usanidi wa Msingi
Chaguo la Usanidi wa Msingi

Hatua ya 11: Tuma Pokea Ujumbe

Kwanza lazima tuanzishe njia rahisi lakini yenye faida ya kuangalia ikiwa kuna kitu katika bafa ya kupokea

int inapatikana ();

Ni kurudi tu ni kaiti ngapi unazo katika mkondo wa sasa.

Hatua ya 12: Njia ya Maambukizi ya Kawaida

Njia ya Maambukizi ya Kawaida
Njia ya Maambukizi ya Kawaida

Njia ya kawaida ya uambukizi / uwazi hutumiwa kutuma ujumbe kwa kifaa chochote kilicho na anwani na kituo sawa.

Kuna njia nyingi za kutuma / kupokea ujumbe, tutaelezea kwa undani:

ResponseStatus sendMessage (const String message);

ResponseContainer kupokeaMessage ();

Njia ya kwanza ni kutumaMessage na hutumiwa kutuma Kamba kwenye kifaa kwa hali ya Kawaida.

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

Kifaa kingine hufanya tu kwenye kitanzi

ikiwa (e32ttl haipatikani ()> 1) {ResponseContainer rs = e32ttl.receiveMessage (); Ujumbe wa kamba = rs.data; // Kwanza pata data Serial.println (rs.status.getResponseDescription ()); Serial.println (ujumbe); }

Hatua ya 13: Simamia Muundo

Ikiwa unataka kutuma mkato tata unaweza kutumia njia hii

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

Inatumika kutuma strucutre, kwa mfano:

muundo Messaggione {char aina [5]; ujumbe wa char [8]; mitico ya bool; }; muundo Messaggione messaggione = {"TEMP", "Pilipili", kweli}; ResponseStatus rs = e32ttl.sendMessage (& messaggione, sizeof (Messaggione)); Serial.println (rs.getResponseDescription ());

na upande wa pili unaweza kupokea ujumbe hivyo

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

Soma sehemu ndogo

Ikiwa unataka kusoma sehemu ya kwanza ya ujumbe ili kudhibiti aina zaidi ya strucutre unaweza kutumia njia hii.

ResponseContainer receiveInitialMessage (const uint8_t size);

Ninaiunda ili ipokee kamba na aina au nyingine kutambua mkato wa kupakia.

muundo Messaggione {// Sehemu ndogo bila ujumbe wa aina [8]; mitico ya bool; }; aina ya char [5]; // sehemu ya kwanza ya muundo ResponseContainer rs = e32ttl.ceceInitialMessage (sizeof (type)); // Weka kamba katika safu ya char (haihitajiki) memcpy (aina, rs.data.c_str (), sizeof (aina)); Serial.println ("SOMA AINA:"); Serial.println (rs.status.getResponseDescription ()); Serial.println (aina); // Soma muundo uliobaki ResponseStructContainer rsc = e32ttl.receiveMessage (sizeof (Messaggione)); muundo Messaggione messaggione = * (Messaggione *) rsc.data;

Hatua ya 14: Njia iliyosasishwa Badala ya Njia ya Kawaida

Vivyo hivyo ninaunda njia ya kutumia na usambazaji wa kudumu

Uhamisho uliowekwa

Unahitaji kubadilisha njia tu ya kutuma, kwa sababu kifaa cha marudio hakipati utangulizi na Anwani na Kituo cha hali ya kudumu.

Kwa hivyo kwa ujumbe wa String unayo

ResponseStatus sendFixedMessage (byte ADDL, byte ADDH, byte CHAN, const String message); ResponseStatus sendBroadcastFixedMessage (baiti CHAN, ujumbe wa Kamba);

na kwa muundo ulio nao

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);

Hapa ni mfano rahisi

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

Uhamisho wa kudumu una matukio zaidi

Ikiwa utatuma kwa kifaa maalum (matukio ya pili Uhamisho uliowekwa) lazima uongeze ADDL, ADDH na CHAN ili kuitambua moja kwa moja.

ResponseStatus rs = e32ttl.sendFixedMessage (2, 2, 0x17, "Ujumbe kwa kifaa");

Ikiwa unataka kutuma ujumbe kwa kifaa chochote kwenye Kituo maalum unaweza kutumia njia hii.

ResponseStatus rs = e32ttl.sendBroadcastFixedMessage (0x17, "Ujumbe kwa vifaa vya kituo");

Ikiwa unataka kupokea ujumbe wote wa matangazo kwenye mtandao lazima uweke ADDH yako na ADDL na BROADCAST_ADDRESS.

C = e32ttl100.getConfiguration (); ResponseStructContainer c; // Ni muhimu kupata pointer ya usanidi kabla ya usanidi mwingine wote wa usanidi wa usanidi = * (Usanidi *) c.data; Serial.println (c.status.getResponseDescription ()); Serial.println (c.status.code); PrintParameters (usanidi); usanidi. ADDL = BROADCAST_ADDRESS; usanidi. ADDH = BROADCAST_ADDRESS; // Kuweka usanidi umebadilishwa na kuweka kushikilia usanidi ResponseStatus rs = e32ttl100.setConfiguration (Configuration, WRITE_CFG_PWR_DWN_LOSE); Serial.println (rs.getResponseDescription ()); Serial.println (rs.code); PrintParameters (usanidi);

Hatua ya 15: Asante

Sasa unayo habari yote ya kufanya kazi yako, lakini nadhani ni muhimu kuonyesha mifano halisi ili kutafakari uwezekano wote.

  1. Kifaa cha LoRa E32 cha Arduino, esp32 au esp8266: mipangilio na matumizi ya kimsingi
  2. Kifaa cha LoRa E32 cha Arduino, esp32 au esp8266: maktaba
  3. Kifaa cha LoRa E32 cha Arduino, esp32 au esp8266: usanidi
  4. Kifaa cha LoRa E32 cha Arduino, esp32 au esp8266: usafirishaji uliowekwa
  5. Kifaa cha LoRa E32 cha Arduino, esp32 au esp8266: kuokoa nguvu na kutuma data iliyopangwa

Ilipendekeza: