Satura rādītājs:
- Piegādes
- 1. darbība: bibliotēka
- 2. darbība
- 3. darbība: AUX tapa
- 4. darbība: pilnībā savienota shēma Esp8266
- 5. darbība: pilnībā savienota shēma Arduino
- 6. darbība: bibliotēka: konstruktors
- 7. solis: sāciet
- 8. darbība: konfigurācijas un informācijas metode
- 9. darbība. Atbildes konteiners
- 10. darbība: pamata konfigurācijas opcija
- 11. darbība: nosūtiet saņemšanas ziņojumu
- 12. solis: normāls pārraides režīms
- 13. darbība: pārvaldiet struktūru
- 14. darbība. Fiksētais režīms normālā režīma vietā
- 15. solis: Paldies
Video: LoRa bezvadu sakari no 3 km līdz 8 km ar zemām izmaksām E32 (sx1278/sx1276) ierīce Arduino, Esp8266 vai Esp32: 15 soļi
2024 Autors: John Day | [email protected]. Pēdējoreiz modificēts: 2024-01-30 10:51
Es izveidoju bibliotēku, lai pārvaldītu EBYTE E32, pamatojoties uz LoRa ierīces Semtech sēriju, kas ir ļoti jaudīga, vienkārša un lēta ierīce.
Jūs varat atrast 3Km versiju šeit, 8Km versiju šeit
Viņi var strādāt 3000–8000 m attālumā, un tiem ir daudz funkciju un parametru. Tāpēc es izveidoju šo bibliotēku, lai vienkāršotu lietošanu.
Tas ir risinājums, lai izgūtu datus no lielpilsētu sensoriem vai kontrolētu dronu.
Piegādes
Arduino UNO
Wemos D1 mini
LoRa E32 TTL 100 3Km versija
LoRa E32 TTL 1W 8Km versija
1. darbība: bibliotēka
Manu bibliotēku varat atrast šeit.
Lai lejupielādētu.
Augšējā labajā stūrī noklikšķiniet uz pogas LEJUPIELĀDĒT, pārdēvējiet nesaspiesto mapi LoRa_E32.
Pārbaudiet, vai LoRa_E32 mapē ir LoRa_E32.cpp un LoRa_E32.h.
Ievietojiet LoRa_E32 bibliotēkas mapi savā / libraries / mapē. Jums var būt jāizveido bibliotēku apakšmape, ja tā ir jūsu pirmā bibliotēka.
Restartējiet IDE.
2. darbība
Kā redzat, varat iestatīt dažādus režīmus, izmantojot M0 un M1 tapas.
Ir dažas tapas, kuras var izmantot statiskā veidā, bet, ja jūs pievienojat to mikrokontrolleram un konfigurējat tās bibliotēkā, jūs iegūstat veiktspēju, un jūs varat kontrolēt visu režīmu, izmantojot programmatūru, bet tālāk mēs paskaidrosim labāk.
3. darbība: AUX tapa
Kā es jau saku, nav svarīgi visu tapu pieslēgt pie mikrokontrollera izejas, jūs varat ievietot M0 un M1 tapas HIGH vai LOW, lai iegūtu detalizētu konfigurāciju, un, ja nepievienojat AUX, bibliotēka nosaka saprātīgu kavēšanos ka darbība ir pabeigta.
AUX tapa
Nosūtot datus, var izmantot, lai pamodinātu ārējo MCU un atgrieztos HIGH pēc datu pārsūtīšanas pabeigšanas.
Saņemot AUX, zems un atgriežas HIGH, kad buferis ir tukšs.
To izmanto arī pašpārbaudei, lai atjaunotu normālu darbību (ieslēgšanas un miega/programmas režīmā).
4. darbība: pilnībā savienota shēma Esp8266
esp8266 savienojuma shēma ir vienkāršāka, jo tā darbojas ar tādu pašu loģisko sakaru spriegumu (3.3v).
Lai iegūtu labu stabilitāti, ir svarīgi pievienot pievilkšanas rezistoru (4, 7Kohm).
5. darbība: pilnībā savienota shēma Arduino
Arduino darba spriegums ir 5v, tāpēc mums ir jāpievieno sprieguma dalītājs LoRa moduļa RX tapai M0 un M1, lai novērstu bojājumus, šeit varat iegūt vairāk informācijas Sprieguma dalītājs: kalkulators un lietojumprogramma.
Jūs varat izmantot 2Kohm rezistoru GND un 1Kohm no signāla nekā salikt RX.
6. darbība: bibliotēka: konstruktors
Es izveidoju diezgan daudzu konstruktoru komplektu, jo mums var būt vairāk iespēju un situāciju, ko pārvaldīt.
LoRa_E32 (baits rxPin, baits txPin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
LoRa_E32 (baits rxPin, baits txPin, baits auxPin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600); LoRa_E32 (baits rxPin, baits txPin, baits auxPin, baits m0Pin, baits m1Pin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
Pirmais konstruktoru komplekts tiek izveidots, lai bibliotēkai deleģētu sērijas un citu tapu pārvaldību.
rxPin un txPin ir piespraude, lai izveidotu savienojumu ar UART, un tie ir obligāti.
auxPin ir tapa, kas pārbauda darbību, pārraidi un saņemšanas statusu (tālāk mēs paskaidrosim labāk), šī tapa Tas nav obligāti, ja jūs to neiestatāt, es piemēroju aizkavi, lai ļautu darbībai pabeigties (ar latentumu).
m0pin un m1Pin ir tapas, lai mainītu darbības režīmu (skatiet tabulas augšdaļu), es domāju, ka šīs tapas “ražošanā” tieši pieslēgsies HIGH vai LOW, bet pārbaudei tās ir lietderīgi pārvaldīt bibliotēkā.
bpsRate ir programmatūras sērijas budrāts parasti ir 9600 (vienīgais datu pārraides ātrums programmin/miega režīmā)
Vienkāršs piemērs ir
#include "LoRa_E32.h" LoRa_E32 e32ttl100 (2, 3); // RX, TX // LoRa_E32 e32ttl100 (2, 3, 5, 6, 7); // RX, TX
Mēs varam tieši izmantot SoftwareSerial ar citu konstruktoru
LoRa_E32 (HardwareSerial* sērijas, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
LoRa_E32 (HardwareSerial* sērijas, baits auxPin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
LoRa_E32 (HardwareSerial* sērijas, baits auxPin, baits m0Pin, baits m1Pin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
Augšējais piemērs ar šo konstruktoru var būt šāds.
#include #include "LoRa_E32.h"
SoftwareSerial mySerial (2, 3); // RX, TX
LoRa_E32 e32ttl100 (& mySerial);
// LoRa_E32 e32ttl100 (& mySerial, 5, 7, 6);
Pēdējais konstruktoru komplekts ir atļauts izmantot HardwareSerial, nevis SoftwareSerial.
LoRa_E32 (SoftwareSerial* sērijas, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
LoRa_E32 (SoftwareSerial* sērijas, baits auxPin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
LoRa_E32 (SoftwareSerial* sērija, baits auxPin, baits m0Pin, baits m1Pin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
7. solis: sāciet
Komanda start tiek izmantota, lai startēšanas sērijas un tapas ievades un izvades režīmā.
void begin ();
izpildē ir
// Sākt visas tapas un UART
e32ttl100.begin ();
8. darbība: konfigurācijas un informācijas metode
Ir metožu kopums, lai pārvaldītu konfigurāciju un iegūtu informāciju par ierīci.
ResponseStructContainer getConfiguration ();
ResponseStatus setConfiguration (konfigurācijas konfigurācija, PROGRAM_COMMAND saveType = WRITE_CFG_PWR_DWN_LOSE);
ResponseStructContainer getModuleInformation ();
void printParameters (struktura konfigurācijas konfigurācija);
ResponseStatus resetModule ();
9. darbība. Atbildes konteiners
Lai vienkāršotu atbildes pārvaldību, es izveidoju konteinera komplektu, kas man ir ļoti noderīgi, lai pārvaldītu kļūdas un atgrieztu vispārīgus datus.
ResponseStatus
Šis ir statusa konteiners, un tam ir 2 vienkārši ievades punkti, ar kuriem jūs varat iegūt statusa kodu un statusa koda aprakstu
Serial.println (c.getResponseDescription ()); // Koda apraksts
Serial.println (c.code); // 1 ja veiksme
Kods ir
VEIKSME = 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
Šis konteiners ir izveidots, lai pārvaldītu virknes atbildi, un tam ir 2 ievades punkti.
dati ar virkni, kas atgriezta no ziņojuma, un statuss ir RepsonseStatus gadījums.
ResponseContainer rs = e32ttl.receptMessage ();
String message = rs.data;
Serial.println (rs.status.getResponseDescription ());
Serial.println (ziņojums);
ResponseStructContainer
Šis ir sarežģītāks konteiners, es to izmantoju struktūras pārvaldīšanai. Tam ir tāds pats ResponseContainer ieejas punkts, bet dati ir tukšs rādītājs sarežģītas struktūras pārvaldīšanai.
ResponseStructContainer c;
c = e32ttl100.getConfiguration (); // Pirms jebkuras citas darbības ir svarīgi iegūt konfigurācijas rādītāju
Konfigurācijas konfigurācija = *(Configuration *) c.data;
Serial.println (c.status.getResponseDescription ());
Serial.println (c.status.code);
getConfiguration un setConfiguration
Pirmā metode ir getConfiguration, to varat izmantot, lai atgūtu visus ierīcē saglabātos datus.
ResponseStructContainer getConfiguration ();
Šeit ir lietošanas piemērs.
ResponseStructContainer c;
c = e32ttl100.getConfiguration (); // Pirms jebkuras citas darbības ir svarīgi iegūt konfigurācijas rādītāju
Konfigurācijas konfigurācija = *(Configuration *) c.data;
Serial.println (c.status.getResponseDescription ());
Serial.println (c.status.code);
Serial.println (configuration. SPED.getUARTBaudRate ());
Konfigurācijas struktūrā ir visi iestatījumu dati, un es pievienoju funkciju sēriju, lai iegūtu visu atsevišķu datu aprakstu.
konfigurācija. ADDL = 0x0; // Adreses konfigurācijas pirmā daļa. ADDH = 0x1; // Adreses konfigurācijas otrā daļa. CHAN = 0x19; // Kanāla konfigurācija. OPTION.fec = FEC_0_OFF; // Pārsūtīt kļūdu labošanas slēdža konfigurāciju. OPTION.fixedTransmission = FT_TRANSPARENT_TRANSMISSION; // Pārraides režīma konfigurācija. OPTION.ioDriveMode = IO_D_MODE_PUSH_PULLS_PULL_UPS; // Pull-up pārvaldības konfigurācija. OPTION.transmissionPower = POWER_17; // dBm pārraides jaudas konfigurācija. OPTION.wirelessWakeupTime = WAKE_UP_1250; // Pagaidiet modināšanas konfigurācijas gaidīšanas laiku. SPED.airDataRate = AIR_DATA_RATE_011_48; // Gaisa datu pārraides ātruma konfigurācija. SPED.uartBaudRate = UART_BPS_115200; // Sakaru pārraides ātruma konfigurācija. SPED.uartParity = MODE_00_8N1; // Paritātes bits
Lai iegūtu visu aprakstu, jums ir līdzvērtīga funkcija visiem atribūtiem:
Sērijas nospiedums (F ("Chan:")); Serial.print (konfigurācija. 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 ());
Tādā pašā veidā setConfiguration vēlas konfigurēt konfigurāciju, tāpēc es domāju, ka labāks veids, kā pārvaldīt konfigurāciju, ir izgūt pašreizējo, piemērot vienīgās nepieciešamās izmaiņas un iestatīt to vēlreiz.
ResponseStatus setConfiguration (konfigurācijas konfigurācija, PROGRAM_COMMAND saveType = WRITE_CFG_PWR_DWN_LOSE);
Konfigurācija ir iepriekš redzamā, parādīt, SaveType atļauj jums izvēlēties, ja izmaiņas tiek veiktas tikai pašreizējai sesijai.
ResponseStructContainer c; c = e32ttl100.getConfiguration (); // Pirms visām citām darbībām ir svarīgi iegūt konfigurācijas rādītāju Configuration configuration = *(Configuration *) c.data; Serial.println (c.status.getResponseDescription ()); Serial.println (c.status.code); printParameters (konfigurācija); konfigurācija. ADDL = 0x0; konfigurācija. ADDH = 0x1; konfigurācija. 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; // Iestatītā konfigurācija ir mainīta un iestatīts neturēt konfigurāciju ResponseStatus rs = e32ttl100.setConfiguration (konfigurācija, WRITE_CFG_PWR_DWN_LOSE); Serial.println (rs.getResponseDescription ()); Serial.println (rs.code); printParameters (konfigurācija);
Visi parametri tiek pārvaldīti kā nemainīgi:
10. darbība: pamata konfigurācijas opcija
11. darbība: nosūtiet saņemšanas ziņojumu
Vispirms mums jāievieš vienkārša, bet noderīga metode, lai pārbaudītu, vai kaut kas ir saņēmēja buferī
int pieejams ();
Tas vienkārši atgriež, cik baitu jums ir pašreizējā straumē.
12. solis: normāls pārraides režīms
Parasto/caurspīdīgo pārraides režīmu izmanto, lai nosūtītu ziņas uz visām ierīcēm ar vienu un to pašu adresi un kanālu.
Ziņu nosūtīšanai/saņemšanai ir daudz veidu, mēs detalizēti paskaidrosim:
ResponseStatus sendMessage (konstanta virknes ziņojums);
ResponseContainer ReceiveMessage ();
Pirmā metode ir sendMessage, un to izmanto, lai nosūtītu virkni uz ierīci normālā režīmā.
ResponseStatus rs = e32ttl.sendMessage ("Prova"); Serial.println (rs.getResponseDescription ());
Otra ierīce vienkārši veic cilpu
ja (e32ttl.available ()> 1) {ResponseContainer rs = e32ttl.receptMessage (); String message = rs.data; // Vispirms iegūstiet datus Serial.println (rs.status.getResponseDescription ()); Serial.println (ziņojums); }
13. darbība: pārvaldiet struktūru
Ja vēlaties nosūtīt sarežģītu struktūru, varat izmantot šo metodi
ResponseStatus sendMessage (const void *message, const uint8_t size); ResponseStructContainer ReceiveMessage (const uint8_t size);
To izmanto, lai nosūtītu strucutre, piemēram:
struktūra Messaggione {char tips [5]; char ziņojums [8]; bool mitico; }; struktūra Messaggione messaggione = {"TEMP", "Peple", true}; ResponseStatus rs = e32ttl.sendMessage (& messaggione, sizeof (Messaggione)); Serial.println (rs.getResponseDescription ());
un otrā pusē jūs varat saņemt ziņu tā
ResponseStructContainer rsc = e32ttl.receptMessage (sizeof (Messaggione)); struk Messaggione messaggione = *(Messaggione *) rsc.data; Serial.println (ziņojumapmaiņas ziņojums); Serial.println (messaggione.mitico);
Izlasiet daļēju struktūru
Ja vēlaties izlasīt ziņojuma pirmo daļu, lai pārvaldītu vairāk veidņu, varat izmantot šo metodi.
ResponseContainer ReceiveInitialMessage (const uint8_t size);
Es to izveidoju, lai saņemtu virkni ar tipu vai citu, lai identificētu ielādējamo struktūru.
structure Ziņapmaiņa {// Daļēja strucutre bez rakstzīmju ziņojuma [8]; bool mitico; }; char tips [5]; // struktūras pirmā daļa ResponseContainer rs = e32ttl.receptInitialMessage (sizeof (tips)); // Ievietojiet virkni char masīvā (nav nepieciešams) memcpy (type, rs.data.c_str (), sizeof (type)); Serial.println ("LASĪT TIPU:"); Serial.println (rs.status.getResponseDescription ()); Serial.println (tips); // Lasīt pārējo struktūru ResponseStructContainer rsc = e32ttl.receptMessage (sizeof (Messaggione)); struktūra Messaggione messaggione = *(Messaggione *) rsc.data;
14. darbība. Fiksētais režīms normālā režīma vietā
Tādā pašā veidā es izveidoju metožu kopu, ko izmantot ar fiksētu pārraidi
Fiksēta transmisija
Jums ir jāmaina tikai nosūtīšanas metode, jo mērķa ierīce nesaņem preambulu ar adreses un kanāla quando settato il fiksēto režīmu.
Tātad jums ir String ziņojums
ResponseStatus sendFixedMessage (baits ADDL, baits ADDH, baits CHAN, konst String ziņojums); ResponseStatus sendBroadcastFixedMessage (baits CHAN, const String ziņojums);
un jūsu struktūrai
ResponseStatus sendFixedMessage (baits ADDL, baits ADDH, baits CHAN, const void *ziņojums, const uint8_t lielums); ResponseStatus sendBroadcastFixedMessage (baits CHAN, const void *ziņojums, const uint8_t lielums);
Šeit vienkāršs piemērs
ResponseStatus rs = e32ttl.sendFixedMessage (0, 0, 0x17, & messaggione, sizeof (Messaggione)); // ResponseStatus rs = e32ttl.sendFixedMessage (0, 0, 0x17, "Ciao");
Fiksētajai pārraidei ir vairāk scenāriju
Ja sūtāt uz noteiktu ierīci (otrais scenārijs Fiksētā pārraide), jums ir jāpievieno ADDL, ADDH un CHAN, lai to tieši identificētu.
ResponseStatus rs = e32ttl.sendFixedMessage (2, 2, 0x17, "Ziņojums ierīcei");
Ja vēlaties nosūtīt ziņojumu uz visām ierīcēm noteiktā kanālā, varat izmantot šo metodi.
ResponseStatus rs = e32ttl.sendBroadcastFixedMessage (0x17, "Ziņojums kanāla ierīcēm");
Ja vēlaties saņemt visus apraides ziņojumus tīklā, ADDH un ADDL ir jāiestata ar BROADCAST_ADDRESS.
ResponseStructContainer c; c = e32ttl100.getConfiguration (); // Pirms visām citām darbībām ir svarīgi iegūt konfigurācijas rādītāju Configuration configuration = *(Configuration *) c.data; Serial.println (c.status.getResponseDescription ()); Serial.println (c.status.code); printParameters (konfigurācija); konfigurācija. ADDL = BROADCAST_ADDRESS; konfigurācija. ADDH = BROADCAST_ADDRESS; // Iestatītā konfigurācija ir mainīta un iestatīts neturēt konfigurāciju ResponseStatus rs = e32ttl100.setConfiguration (konfigurācija, WRITE_CFG_PWR_DWN_LOSE); Serial.println (rs.getResponseDescription ()); Serial.println (rs.code); printParameters (konfigurācija);
15. solis: Paldies
Tagad jums ir visa informācija, lai veiktu savu darbu, taču, manuprāt, ir svarīgi parādīt dažus reālus piemērus, lai labāk izprastu visas iespējas.
- LoRa E32 ierīce Arduino, esp32 vai esp8266: iestatījumi un pamata lietojums
- LoRa E32 ierīce Arduino, esp32 vai esp8266: bibliotēka
- LoRa E32 ierīce Arduino, esp32 vai esp8266: konfigurācija
- LoRa E32 ierīce Arduino, esp32 vai esp8266: fiksēta pārraide
- LoRa E32 ierīce Arduino, esp32 vai esp8266: enerģijas taupīšana un strukturētu datu sūtīšana
Ieteicams:
Liels attālums, 1,8 km, no Arduino līdz Arduino bezvadu sakari ar HC-12: 6 soļi (ar attēliem)
Liels attālums, 1,8 km, no Arduino līdz Arduino bezvadu sakari ar HC-12: Šajā pamācībā jūs uzzināsit, kā sazināties starp Arduinos lielā attālumā līdz 1,8 km brīvā dabā. HC-12 ir bezvadu seriālais ports komunikācijas modulis, kas ir ļoti noderīgs, ārkārtīgi spēcīgs un viegli lietojams. Vispirms jūs atradīsit
Bezvadu sakari, izmantojot NRF24L01 uztvērēja moduli Arduino projektiem: 5 soļi (ar attēliem)
Bezvadu sakari, izmantojot NRF24L01 uztvērēja moduli Arduino projektiem: šī ir mana otrā pamācība par robotiem un mikrokontrolleriem. Ir patiešām pārsteidzoši redzēt, ka jūsu robots ir dzīvs un strādā, kā paredzēts, un ticiet man, ka būs jautrāk, ja vadīsit savu robotu vai citas lietas bezvadu režīmā ar ātru un
LM317 Barošanas avots ar zemām izmaksām: 6 soļi
LM317 Zemu izmaksu stenda barošanas avots: Sveiki, puiši, šis ir mans pirmais pamācību projekts. šeit es jums parādīšu, kā es izdarīju savu zemo izmaksu LM317 Bench barošanas avotu. Es ceru, ka jums patiks
Mācīties pagatavot Panaramu par ļoti zemām izmaksām: 11 soļi
Uzziniet, kā padarīt Panaramu par ļoti zemām izmaksām. Nepieciešamais materiāls. Digitālās kameras statīvs? Neobligāta bezmaksas programmatūra 12 punktu rokasgrāmata attēliem Daudz brīva laika Šis Instructable radās šādi. Es sērfoju internetā, kad nonācu vietnē, no kuras bija jauka panorāma. Es gribu
Uzlauzt bezvadu durvju zvanu bezvadu trauksmes slēdzī vai ieslēgšanas/izslēgšanas slēdzī: 4 soļi
Uzlauzt bezvadu durvju zvanu bezvadu trauksmes slēdzī vai ieslēgšanas/izslēgšanas slēdzī: es nesen izveidoju signalizācijas sistēmu un uzstādīju to savā mājā. Es izmantoju magnētiskos slēdžus uz durvīm un vadu tos caur bēniņiem. Logi bija cits stāsts, un cieta elektroinstalācija nebija risinājums. Man vajadzēja bezvadu risinājumu, un tas ir