Përmbajtje:
- Furnizimet
- Hapi 1: Biblioteka
- Hapi 2: Pinout
- Hapi 3: Kunja AUX
- Hapi 4: Skema e lidhur plotësisht Esp8266
- Hapi 5: Skema Arduino e lidhur plotësisht
- Hapi 6: Biblioteka: Ndërtuesi
- Hapi 7: Filloni
- Hapi 8: Konfigurimi dhe Metoda e Informacionit
- Hapi 9: Enë e Përgjigjes
- Hapi 10: Opsioni bazë i konfigurimit
- Hapi 11: Dërgoni Merr Mesazh
- Hapi 12: Mënyra Normale e Transmetimit
- Hapi 13: Menaxhoni Strukturën
- Hapi 14: Mënyra Fikse në vend të Modalitetit Normal
- Hapi 15: Faleminderit
Video: Komunikim pa tela LoRa 3Km deri në 8Km me kosto të ulët E32 (sx1278/sx1276) Pajisja për Arduino, Esp8266 ose Esp32: 15 hapa
2024 Autor: John Day | [email protected]. E modifikuara e fundit: 2024-01-30 12:10
Unë krijoj një bibliotekë për të menaxhuar EBYTE E32 bazuar në serinë Semtech të pajisjes LoRa, pajisje shumë e fuqishme, e thjeshtë dhe e lirë.
Versionin 3Km mund ta gjeni këtu, versionin 8Km këtu
Ato mund të punojnë në një distancë prej 3000m deri 8000m, dhe kanë shumë veçori dhe parametra. Kështu që unë krijoj këtë bibliotekë për të thjeshtuar përdorimin.
Ashtë një zgjidhje për marrjen e të dhënave nga sensorët metropolitanë ose për të kontrolluar dronin.
Furnizimet
Arduino UNO
Wemos D1 mini
Versioni LoRa E32 TTL 100 3Km
Versioni LoRa E32 TTL 1W 8Km
Hapi 1: Biblioteka
Këtu mund të gjeni bibliotekën time.
Për të shkarkuar.
Klikoni butonin DOWNLOADS në këndin e sipërm të djathtë, riemërtoni dosjen e pakompresuar LoRa_E32.
Kontrolloni që dosja LoRa_E32 të përmbajë LoRa_E32.cpp dhe LoRa_E32.h.
Vendoseni dosjen e bibliotekës LoRa_E32 në dosjen tuaj / bibliotekat /. Ju mund të keni nevojë të krijoni nën -dosjen e bibliotekave nëse është biblioteka juaj e parë.
Rinisni IDE -në.
Hapi 2: Pinout
Siç mund ta shihni, mund të vendosni mënyra të ndryshme përmes këmbëve M0 dhe M1.
Ka disa kunja që mund të përdoren në një mënyrë statike, por nëse e lidhni atë me mikrokontrolluesin dhe i konfiguroni ato në bibliotekë ju fitoni në performancë dhe ju mund të kontrolloni të gjithë modalitetin përmes softuerit, por ne do të shpjegojmë më mirë në vijim.
Hapi 3: Kunja AUX
Siç e thashë tashmë Nuk është e rëndësishme të lidhni të gjithë pin -in me daljen e mikrokontrolluesit, mund t'i vendosni kunjat M0 dhe M1 në HIGH ose LOW për të marrë konfigurimin e dëshiruar, dhe nëse nuk e lidhni AUX biblioteka vendosni një vonesë të arsyeshme për t'u siguruar se operacioni është i plotë.
Kunja AUX
Kur transmetoni të dhëna mund të përdoret për të zgjuar MCU të jashtëm dhe për t'u kthyer LART HIGH në përfundimin e transferimit të të dhënave.
Kur merrni AUX duke shkuar LOW dhe kthehuni HIGH kur tamponi është bosh.
Përdoret gjithashtu për vetëkontroll për të rivendosur funksionimin normal (në ndezjen dhe modalitetin e gjumit/programit).
Hapi 4: Skema e lidhur plotësisht Esp8266
Skema e lidhjes esp8266 është më e thjeshtë sepse funksionon në të njëjtin tension të komunikimeve logjike (3.3v).
Importantshtë e rëndësishme të shtoni rezistencë tërheqëse (4, 7Kohm) për të marrë stabilitet të mirë.
Hapi 5: Skema Arduino e lidhur plotësisht
Tensioni i punës Arduino është 5v, kështu që ne duhet të shtojmë një ndarës të tensionit në pin RX M0 dhe M1 të modulit LoRa për të parandaluar dëmtimin, mund të merrni më shumë informacion këtu Pjestuesi i tensionit: kalkulator dhe aplikim.
Ju mund të përdorni një rezistencë 2Kohm në GND dhe 1Kohm nga sinjali sesa të vendosni së bashku në RX.
Hapi 6: Biblioteka: Ndërtuesi
Kam bërë një sërë konstruktorësh mjaft të shumtë, sepse mund të kemi më shumë mundësi dhe situata për të menaxhuar.
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);
Grupi i parë i konstruktorit janë krijuar për të deleguar menaxhimin e kunjave Serialë dhe të tjera në bibliotekë.
rxPin dhe txPin është kunja për t'u lidhur me UART dhe ato janë të detyrueshme.
auxPin është një kunj që kontrollon funksionimin, transmetimin dhe statusin e marrjes (ne do të shpjegojmë më mirë në vijim), ai pin Nuk është e detyrueshme, nëse nuk e vendosni atë, unë aplikoj një vonesë për të lejuar që operacioni të përfundojë vetë (me vonesë).
m0pin dhe m1Pin janë kunjat për të ndryshuar modalitetin e funksionimit (shiko tabelën e sipërme), mendoj se këto kunja në "prodhim" do të lidhen drejtpërdrejt LART HIGH ose ULET, por për provë ato do të menaxhohen në mënyrë të dobishme nga biblioteka.
bpsRate është boudrati i SoftwareSerial normalisht është 9600 (norma e vetme e baud -it në programmin/mode sleep)
Një shembull i thjeshtë është
#përfshi "LoRa_E32.h" LoRa_E32 e32ttl100 (2, 3); // RX, TX // LoRa_E32 e32ttl100 (2, 3, 5, 6, 7); // RX, TX
Ne mund të përdorim drejtpërdrejt një SoftwareSerial me një konstruktor tjetër
LoRa_E32 (HardwareSerial* serial, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
LoRa_E32 (seriali HardwareSerial*, byte auxPin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
LoRa_E32 (seriali HardwareSerial*, byte auxPin, byte m0Pin, byte m1Pin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
Shembulli i sipërm me këtë konstruktor mund të jetë kështu.
#përfshi #përfshi "LoRa_E32.h"
SoftwareSerial mySerial (2, 3); // RX, TX
LoRa_E32 e32ttl100 (& mySerial);
// LoRa_E32 e32ttl100 (& mySerial, 5, 7, 6);
Grupi i fundit i konstruktorit është që të lejojë përdorimin e një HardwareSerial në vend të SoftwareSerial.
LoRa_E32 (seriali SoftwareSerial*, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
LoRa_E32 (SoftwareSerial* serial, byte auxPin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
LoRa_E32 (seriali SoftwareSerial*, byte auxPin, byte m0Pin, byte m1Pin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
Hapi 7: Filloni
Komanda start përdoret për të nisur Serial dhe kunjat në modalitetin e hyrjes dhe daljes.
fillimi i zbrazëtisë ();
në ekzekutim është
// Filloni të gjitha kunjat dhe UART
e32ttl100.filloj ();
Hapi 8: Konfigurimi dhe Metoda e Informacionit
Ka një sërë metodash për menaxhimin e konfigurimit dhe marrjen e informacionit të pajisjes.
ResponseStructContainer getConfiguration ();
ResponseStatus setConfiguration (Konfigurimi i konfigurimit, PROGRAM_COMMAND saveType = WRITE_CFG_PWR_DWN_LOSE);
ResponseStructContainer getModuleInformation ();
void printParameters (struktura Konfigurimi i konfigurimit);
ResponseStatus resetModule ();
Hapi 9: Enë e Përgjigjes
Për të thjeshtuar menaxhimin e përgjigjes, unë krijoj një grup enësh, për mua shumë të dobishme për të menaxhuar gabimet dhe për të kthyer të dhëna gjenerike.
Statusi i përgjigjes
Ky është një enë statusi dhe ka 2 pika të thjeshta hyrëse, me të cilat mund të merrni kodin e statusit dhe përshkrimin e kodit të statusit
Serial.println (c.getResponseDescription ()); // Përshkrimi i kodit
Serial.println (c.code); // 1 nëse Suksesi
Kodi janë
SUKSES = 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
Përgjigje Container
Ky enë është krijuar për të menaxhuar përgjigjen String dhe të ketë 2 pika hyrëse.
të dhënat me vargun e kthyer nga mesazhi dhe statusi një shembull i RepsonseStatus.
ResponseContainer rs = e32ttl.receiveMessage ();
Mesazh vargu = rs.data;
Serial.println (rs.status.getResponseDescription ());
Serial.println (mesazh);
ResponseStructContainer
Ky është ena më "komplekse", e përdor për të menaxhuar strukturën, ka të njëjtën pikë hyrjeje të ResponseContainer, por të dhënat janë një tregues i zbrazët për të menaxhuar strukturën komplekse.
ResponseStructContainer c;
c = e32ttl100.getConfiguration (); // importantshtë e rëndësishme të merrni treguesin e konfigurimit para të gjitha operacioneve të tjera
Konfigurimi i konfigurimit = *(Konfigurimi *) c.data;
Serial.println (c.status.getResponseDescription ());
Serial.println (c.status.code);
getConfiguration dhe setConfiguration
Metoda e parë është getConfiguration, mund ta përdorni për të tërhequr të gjitha të dhënat e ruajtura në pajisje.
ResponseStructContainer getConfiguration ();
Këtu është një shembull përdorimi.
ResponseStructContainer c;
c = e32ttl100.getConfiguration (); // importantshtë e rëndësishme të merrni treguesin e konfigurimit para të gjitha operacioneve të tjera
Konfigurimi i konfigurimit = *(Konfigurimi *) c.data;
Serial.println (c.status.getResponseDescription ());
Serial.println (c.status.code);
Serial.println (konfigurimi. SPED.getUARTBaudRate ());
Struktura e konfigurimit ka të gjitha të dhënat e cilësimeve, dhe unë shtoj një seri funksionesh për të marrë të gjithë përshkrimin e të dhënave të vetme.
konfigurimi. ADDL = 0x0; // Pjesa e parë e konfigurimit të adresës. ADDH = 0x1; // Pjesa e dytë e konfigurimit të adresës. CHAN = 0x19; // Konfigurimi i kanalit. OPTION.fec = FEC_0_OFF; // Konfigurimi i kalimit të korrigjimit të gabimit përpara. OPTION.fixedTransmission = FT_TRANSPARENT_TRANSMISSION; // Konfigurimi i mënyrës së transmetimit. OPTION.ioDriveMode = IO_D_MODE_PUSH_PULLS_PULL_UPS; // Konfigurimi i menaxhimit tërheqës. OPTION.transmissionPower = POWER_17; // konfigurimi i fuqisë së transmetimit dBm. OPTION.wirelessWakeupTime = WAKE_UP_1250; // Koha e pritjes për konfigurimin e zgjimit. SPED.airDataRate = AIR_DATA_RATE_011_48; // Konfigurimi i normës së të dhënave të ajrit. SPED.uartBaudRate = UART_BPS_115200; // Konfigurimi i shpejtësisë së komunikimit të komunikimit. SPED.uartParity = MODE_00_8N1; // Pak pariteti
Ju keni funksionin ekuivalent për të gjithë atributin për të marrë të gjithë përshkrimin:
Serial.print (F ("Chan:")); Serial.print (konfigurimi. CHAN, DEC); Serial.print (" ->"); Serial.println (configuration.getChannelDescription ()); Serial.println (F ("")); Serial.print (F ("SpeedParityBit:")); Serial.print (konfigurimi. SPED.uartParity, BIN); Serial.print (" ->"); Serial.println (konfigurimi. SPED.getUARTParityDescription ()); Serial.print (F ("SpeedUARTDatte:")); Serial.print (konfigurimi. SPED.uartBaudRate, BIN); Serial.print (" ->"); Serial.println (konfigurimi. SPED.getUARTBaudRate ()); Serial.print (F ("SpeedAirDataRate:")); Serial.print (konfigurimi. SPED.airDataRate, BIN); Serial.print (" ->"); Serial.println (konfigurimi. SPED.getAirDataRate ()); Serial.print (F ("OptionTrans:")); Serial.print (konfigurimi. OPTION.fixedTransmission, BIN); Serial.print (" ->"); Serial.println (konfigurimi. OPTION.getFixedTransmissionDescription ()); Serial.print (F ("OptionPullup:")); Serial.print (konfigurimi. OPTION.ioDriveMode, BIN); Serial.print (" ->"); Serial.println (konfigurimi. OPTION.getIODroveModeDescription ()); Serial.print (F ("OptionWakeup:")); Serial.print (configuration. OPTION.wirelessWakeupTime, BIN); Serial.print (" ->"); Serial.println (konfigurimi. OPTION.getWirelessWakeUPTimeDescription ()); Serial.print (F ("OptionFEC:")); Serial.print (konfigurimi. OPTION.fec, BIN); Serial.print (" ->"); Serial.println (konfigurimi. OPTION.getFECDescription ()); Serial.print (F ("OptionPower:")); Serial.print (konfigurimi. OPTION.transmissionPower, BIN); Serial.print (" ->"); Serial.println (konfigurimi. OPTION.getTransmissionPowerDescription ());
Në të njëjtën mënyrë setConfiguration dëshiron një strukturë konfigurimi, kështu që unë mendoj se mënyra më e mirë për të menaxhuar konfigurimin është të marrësh atë aktual, të aplikosh ndryshimin e vetëm që të nevojitet dhe ta vendosësh përsëri.
ResponseStatus setConfiguration (Konfigurimi i konfigurimit, PROGRAM_COMMAND saveType = WRITE_CFG_PWR_DWN_LOSE);
konfigurimi është strucutre previsiouly show, saveType leje që ju të zgjidhni nëse ndryshimi bëhet përgjithmonë vetëm për sesionin aktual.
ResponseStructContainer c; c = e32ttl100.getConfiguration (); // importantshtë e rëndësishme të merrni treguesin e konfigurimit para çdo operacioni tjetër Konfigurimi i konfigurimit = *(Konfigurimi *) c.data; Serial.println (c.status.getResponseDescription ()); Serial.println (c.status.code); printParameters (konfigurimi); konfigurimi. ADDL = 0x0; konfigurimi. ADDH = 0x1; konfigurimi. CHAN = 0x19; konfigurimi. OPTION.fec = FEC_0_OFF; konfigurimi. OPTION.fixedTransmission = FT_TRANSPARENT_TRANSMISSION; konfigurimi. OPTION.ioDriveMode = IO_D_MODE_PUSH_PULLS_PULL_UPS; konfigurimi. OPTION.transmissionPower = POWER_17; configuration. OPTION.wirelessWakeupTime = WAKE_UP_1250; konfigurimi. SPED.airDataRate = AIR_DATA_RATE_011_48; configuration. SPED.uartBaudRate = UART_BPS_115200; configuration. SPED.uartParity = MODE_00_8N1; // Konfigurimi i konfiguruar ndryshoi dhe u vendos që të mos mbajë konfigurimin ResponseStatus rs = e32ttl100.setConfiguration (konfigurimi, WRITE_CFG_PWR_DWN_LOSE); Serial.println (rs.getResponseDescription ()); Serial.println (rs.code); printParameters (konfigurimi);
Të gjithë parametrat menaxhohen si konstantë:
Hapi 10: Opsioni bazë i konfigurimit
Hapi 11: Dërgoni Merr Mesazh
Së pari ne duhet të prezantojmë një metodë të thjeshtë por të dobishme për të kontrolluar nëse diçka është në tamponin e marrjes
int në dispozicion ();
Thjesht kthehet sa bajt keni në rrjedhën aktuale.
Hapi 12: Mënyra Normale e Transmetimit
Mënyra normale/transparente e transmetimit përdoret për të dërguar mesazhe në të gjitha pajisjet me të njëjtën adresë dhe kanal.
Ka shumë metoda për të dërguar/marrë mesazhe, ne do të shpjegojmë në detaje:
ResponseStatus sendMessage (const String message);
ResponseContainer merrniMessage ();
Metoda e parë është sendMessage dhe përdoret për të dërguar një String në një pajisje në modalitetin Normal.
ResponseStatus rs = e32ttl.sendMessage ("Prova"); Serial.println (rs.getResponseDescription ());
Pajisja tjetër thjesht bëni në lak
if (e32ttl.disponueshëm ()> 1) {ResponseContainer rs = e32ttl.receiveMessage (); Mesazh vargu = rs.data; // Së pari merrni të dhënat Serial.println (rs.status.getResponseDescription ()); Serial.println (mesazh); }
Hapi 13: Menaxhoni Strukturën
Nëse dëshironi të dërgoni një strukturë komplekse, mund ta përdorni këtë metodë
ResponseStatus sendMessage (mesazh const void *, const uint8_t size); ResponseStructContainer merrniMessage (madhësia const uint8_t);
Përdoret për të dërguar strucutre, për shembull:
struct Messaggione {tipi char [5]; mesazh char [8]; bool mitico; }; struct Messaggione messaggione = {"TEMP", "Peple", true}; ResponseStatus rs = e32ttl.sendMessage (& messaggione, sizeof (Messaggione)); Serial.println (rs.getResponseDescription ());
dhe në anën tjetër ju mund ta merrni mesazhin kështu
ResponseStructContainer rsc = e32ttl.receiveMessage (sizeof (Messaggione)); struct Messaggione messaggione = *(Messaggione *) rsc.data; Serial.println (messaggione.message); Serial.println (messaggione.mitico);
Lexoni strukturën e pjesshme
Nëse dëshironi të lexoni pjesën e parë të mesazhit për të menaxhuar më shumë lloj strucutre, mund ta përdorni këtë metodë.
ResponseContainer دریافتInitialMessage (madhësia e konstant uint8_t);
Unë e krijoj atë për të marrë një varg me tip ose tjetër për të identifikuar strukturën për të ngarkuar.
struct Messaggione {// Strucutre e pjesshme pa mesazh tipchar [8]; bool mitico; }; lloji i karbonit [5]; // pjesa e parë e strukturës ResponseContainer rs = e32ttl.receiveInitialMessage (madhësia (lloji)); // Vendos vargun në një grup char (nuk nevojitet) memcpy (lloji, rs.data.c_str (), madhësia (lloji)); Serial.println ("LEXO LLOJIN:"); Serial.println (rs.status.getResponseDescription ()); Serial.println (lloji); // Lexoni pjesën tjetër të strukturës ResponseStructContainer rsc = e32ttl.receiveMessage (madhësia (Messaggione)); struktur Messaggione messaggione = *(Messaggione *) rsc.data;
Hapi 14: Mënyra Fikse në vend të Modalitetit Normal
Në të njëjtën mënyrë unë krijoj një grup metodash për t'u përdorur me transmetim fiks
Transmetim fiks
Ju duhet të ndryshoni vetëm metodën e dërgimit, sepse pajisja e destinacionit nuk merr preambulën me Adresën dhe Kanalin quando settato il mode fikse.
Pra për mesazhin String që keni
ResponseStatus sendFixedMessage (byte ADDL, byte ADDH, byte CHAN, const String message); ResponseStatus sendBroadcastFixedMessage (byte CHAN, const String message);
dhe për strukturën që keni
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);
Këtu është një shembull i thjeshtë
ResponseStatus rs = e32ttl.sendFixedMessage (0, 0, 0x17, & messaggione, sizeof (Messaggione)); // ResponseStatus rs = e32ttl.sendFixedMessage (0, 0, 0x17, "Ciao");
Transmetimi fiks ka më shumë skenarë
Nëse dërgoni në një pajisje specifike (skenarët e dytë Transmetimi fiks) duhet të shtoni ADDL, ADDH dhe CHAN për ta identifikuar atë drejtpërdrejt.
ResponseStatus rs = e32ttl.sendFixedMessage (2, 2, 0x17, "Mesazh një pajisjeje");
Nëse dëshironi të dërgoni një mesazh në të gjitha pajisjet në një kanal të caktuar, mund ta përdorni këtë metodë.
ResponseStatus rs = e32ttl.sendBroadcastFixedMessage (0x17, "Mesazh për pajisjet e një kanali");
Nëse dëshironi të merrni të gjitha mesazhet e transmetuara në rrjet, duhet të vendosni ADDH dhe ADDL me BROADCAST_ADDRESS.
ResponseStructContainer c; c = e32ttl100.getConfiguration (); // importantshtë e rëndësishme të merrni treguesin e konfigurimit para çdo operacioni tjetër Konfigurimi i konfigurimit = *(Konfigurimi *) c.data; Serial.println (c.status.getResponseDescription ()); Serial.println (c.status.code); printParameters (konfigurimi); konfigurimi. ADDL = BROADCAST_ADDRESS; konfigurimi. ADDH = BROADCAST_ADDRESS; // Konfigurimi i konfiguruar ndryshoi dhe u vendos që të mos mbajë konfigurimin ResponseStatus rs = e32ttl100.setConfiguration (konfigurimi, WRITE_CFG_PWR_DWN_LOSE); Serial.println (rs.getResponseDescription ()); Serial.println (rs.code); printParameters (konfigurimi);
Hapi 15: Faleminderit
Tani keni të gjithë informacionin për të bërë punën tuaj, por mendoj se është e rëndësishme të tregoni disa shembuj realistë për të kuptuar më mirë të gjitha mundësitë.
- Pajisja LoRa E32 për Arduino, esp32 ose esp8266: cilësimet dhe përdorimi bazë
- Pajisja LoRa E32 për Arduino, esp32 ose esp8266: bibliotekë
- Pajisja LoRa E32 për Arduino, esp32 ose esp8266: konfigurimi
- Pajisja LoRa E32 për Arduino, esp32 ose esp8266: transmetim fiks
- Pajisja LoRa E32 për Arduino, esp32 ose esp8266: kursimi i energjisë dhe dërgimi i të dhënave të strukturuara
Recommended:
Mesazhi i telekomandës LoRa Me një TFT 1.8 "për distanca deri në 8km: 8 hapa
LoRa Remote Control Messenger Me një TFT 1.8 "për distanca deri në 8 km: Lidhni projektin me laptopin ose telefonin tuaj dhe pastaj bisedoni midis pajisjeve pa internet ose SMS duke përdorur vetëm LoRa. Hej, çfarë ka, djema? Akarsh këtu nga CETech. Kjo PCB gjithashtu ka një ekran dhe 4 butona të cilët mund të përdoren si telekomandë për
Pajisja e zbulimit të vjedhjes me kosto të ulët (Pi Home Security): 7 hapa
Pajisja e zbulimit të vjedhjes me kosto të ulët (Pi Home Security): Sistemi është krijuar për të zbuluar ndërhyrje (hyrje të paautorizuar) në një ndërtesë ose zona të tjera. Ky projekt mund të përdoret në pronat rezidenciale, tregtare, industriale dhe ushtarake për mbrojtje kundër vjedhjeve ose dëmtimit të pronës, si dhe
Largësi, 1.8km, Arduino në Arduino Komunikim pa tel me HC-12 .: 6 hapa (me fotografi)
Largësi, 1.8km, Arduino në Arduino Komunikim pa tel Me HC-12 .: Në këtë udhëzues do të mësoni se si të komunikoni midis Arduinos në një distancë të gjatë deri në 1.8km në ajër të hapur. HC-12 është një port serial pa tel modul komunikimi që është shumë i dobishëm, jashtëzakonisht i fuqishëm dhe i lehtë për t’u përdorur. Së pari do të lini
Rrjeti i sensorëve pa tela me kosto të ulët në brezin 433MHz: 5 hapa (me fotografi)
Rrjeti i sensorëve pa tela me kosto të ulët në brezin 433MHz: Shumë faleminderit Teresa Rajba që më dha me mirësi pranimin e saj për të përdorur të dhënat nga botimet e tyre në këtë artikull.*Në imazhin e mësipërm - pesë njësitë e dërguesve të sensorëve që kam përdorur për testimin rrjeteve? Një përkufizim i thjeshtë
LoRa Messenger për dy pajisje për distanca deri në 8km: 7 hapa
LoRa Messenger për dy pajisje për distanca deri në 8km: Lidhni projektin me laptopin ose telefonin tuaj dhe më pas bisedoni midis pajisjeve pa internet ose SMS duke përdorur vetëm LoRa. Hej, çfarë po ndodh djema? Akarsh këtu nga CETech. Sot ne do të bëjmë një projekt i cili mund të lidhet me smartphone tuaj ose ndonjë