Isi kandungan:
- Bekalan
- Langkah 1: Perpustakaan
- Langkah 2: Pinout
- Langkah 3: Pin AUX
- Langkah 4: Skema Terhubung Sepenuhnya Esp8266
- Langkah 5: Skema Bersambung sepenuhnya Arduino
- Langkah 6: Perpustakaan: Pembina
- Langkah 7: Mulakan
- Langkah 8: Kaedah Konfigurasi dan Maklumat
- Langkah 9: Bekas Respons
- Langkah 10: Pilihan Konfigurasi Asas
- Langkah 11: Hantar Mesej Terima
- Langkah 12: Mod Penghantaran Biasa
- Langkah 13: Uruskan Struktur
- Langkah 14: Tetap Mod Bukan Mod Normal
- Langkah 15: Terima kasih
Video: Komunikasi Tanpa Wayar LoRa 3Km hingga 8Km Dengan Peranti E32 Kos Rendah (sx1278 / sx1276) untuk Arduino, Esp8266 atau Esp32: 15 Langkah
2024 Pengarang: John Day | [email protected]. Diubah suai terakhir: 2024-01-30 11:07
Saya membuat perpustakaan untuk menguruskan EBYTE E32 berdasarkan peranti LoRa siri Semtech, peranti yang sangat kuat, sederhana dan murah.
Anda boleh mendapatkan versi 3Km di sini, versi 8Km di sini
Mereka boleh bekerja pada jarak 3000m hingga 8000m, dan mereka mempunyai banyak ciri dan parameter. Oleh itu, saya membuat perpustakaan ini untuk memudahkan penggunaannya.
Ini adalah penyelesaian untuk mengambil data dari sensor metropolitan atau untuk mengawal drone.
Bekalan
Arduino UNO
Wemos D1 mini
LoRa E32 TTL 100 versi 3Km
Versi LoRa E32 TTL 1W 8Km
Langkah 1: Perpustakaan
Anda boleh menemui perpustakaan saya di sini.
Untuk muat turun.
Klik butang DOWNLOADS di sudut kanan atas, namakan semula folder LoRa_E32 yang tidak dimampatkan.
Pastikan folder LoRa_E32 mengandungi LoRa_E32.cpp dan LoRa_E32.h.
Letakkan folder perpustakaan LoRa_E32 anda / pustaka / folder. Anda mungkin perlu membuat subfolder perpustakaan jika itu adalah perpustakaan pertama anda.
Mulakan semula IDE.
Langkah 2: Pinout
Seperti yang anda lihat, anda boleh menetapkan pelbagai mod melalui pin M0 dan M1.
Terdapat beberapa pin yang dapat digunakan dengan cara statik, tetapi jika anda menyambungkannya ke mikrokontroler dan mengkonfigurasinya di perpustakaan, anda akan mendapat prestasi dan anda dapat mengawal semua mod melalui perisian, tetapi kami akan menerangkan dengan lebih baik selanjutnya.
Langkah 3: Pin AUX
Seperti yang telah saya katakan Tidak penting untuk menyambungkan semua pin ke output mikrokontroler, anda boleh meletakkan pin M0 dan M1 ke TINGGI atau RENDAH untuk mendapatkan konfigurasi yang diinginkan, dan jika anda tidak menyambungkan AUX, perpustakaan menetapkan kelewatan yang munasabah untuk memastikan bahawa operasi itu selesai.
Pin AUX
Semasa penghantaran data dapat digunakan untuk membangunkan MCU luaran dan mengembalikan TINGGI pada selesai pemindahan data.
Semasa menerima AUX akan RENDAH dan kembali TINGGI ketika buffer kosong.
Ia juga digunakan untuk pemeriksaan sendiri untuk mengembalikan operasi normal (pada mod nyalaan dan mod tidur / program).
Langkah 4: Skema Terhubung Sepenuhnya Esp8266
Skema sambungan esp8266 lebih mudah kerana berfungsi pada voltan komunikasi logik yang sama (3.3v).
Penting untuk menambahkan perintang tarik (4, 7Kohm) untuk mendapatkan kestabilan yang baik.
Langkah 5: Skema Bersambung sepenuhnya Arduino
Voltan kerja Arduino adalah 5v, jadi kita perlu menambahkan pembahagi voltan pada modul RX pin M0 dan M1 dari LoRa untuk mengelakkan kerosakan, anda boleh mendapatkan lebih banyak maklumat di sini Pembahagi voltan: kalkulator dan aplikasi.
Anda boleh menggunakan perintang 2Kohm ke GND dan 1Kohm dari isyarat daripada disatukan pada RX.
Langkah 6: Perpustakaan: Pembina
Saya membuat satu set konstruktor yang banyak, kerana kita boleh mempunyai lebih banyak pilihan dan situasi untuk diuruskan.
LoRa_E32 (bait rxPin, bait txPin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
LoRa_E32 (bait rxPin, bait 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);
Set konstruktor pertama dibuat untuk mewakilkan pengurusan Serial dan pin lain ke perpustakaan.
rxPin dan txPin adalah pin untuk menyambung ke UART dan mereka wajib.
auxPin adalah pin yang memeriksa status operasi, penghantaran dan penerimaan (kita akan menerangkan dengan lebih baik seterusnya), pin itu Tidak wajib, jika anda tidak menetapkannya, saya menggunakan kelewatan untuk membolehkan operasi selesai sendiri (dengan kependaman).
m0pin dan m1Pin adalah pin untuk menukar MODE operasi (lihat jadual di atas), saya rasa pin dalam "produksi" ini akan dihubungkan secara langsung TINGGI atau RENDAH, tetapi untuk ujian, ia berguna untuk dikendalikan oleh perpustakaan.
bpsRate adalah boudrate dari SoftwareSerial biasanya adalah 9600 (satu-satunya kadar baud dalam mod program / tidur)
Contoh mudah adalah
#sertakan "LoRa_E32.h" LoRa_E32 e32ttl100 (2, 3); // RX, TX // LoRa_E32 e32ttl100 (2, 3, 5, 6, 7); // RX, TX
Kita boleh menggunakan SoftwareSerial secara langsung dengan konstruktor lain
LoRa_E32 (siri HardwareSerial *, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
LoRa_E32 (HardwareSerial * bersiri, byte auxPin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
LoRa_E32 (HardwareSerial * bersiri, byte auxPin, byte m0Pin, byte m1Pin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
Contoh atas dengan pembina ini boleh dibuat seperti itu.
#include #include "LoRa_E32.h"
SoftwareSerial mySerial (2, 3); // RX, TX
LoRa_E32 e32ttl100 (& mySerial);
// LoRa_E32 e32ttl100 (& mySerial, 5, 7, 6);
Kumpulan konstruktor terakhir adalah membenarkan penggunaan HardwareSerial dan bukannya SoftwareSerial.
LoRa_E32 (siri SoftwareSerial *, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
LoRa_E32 (SoftwareSerial * bersiri, byte auxPin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
LoRa_E32 (SoftwareSerial * bersiri, byte auxPin, byte m0Pin, byte m1Pin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
Langkah 7: Mulakan
Perintah mula digunakan untuk memulakan Serial dan pin dalam mod input dan output.
kekosongan bermula ();
dalam pelaksanaan adalah
// Mulakan semua pin dan UART
e32ttl100.begin ();
Langkah 8: Kaedah Konfigurasi dan Maklumat
Terdapat satu set kaedah untuk mengatur konfigurasi dan mendapatkan maklumat mengenai peranti.
ResponseStructContainer getConfiguration ();
ResponseStatus setConfiguration (Konfigurasi konfigurasi, PROGRAM_COMMAND saveType = WRITE_CFG_PWR_DWN_LOSE);
ResponseStructContainer getModuleInformation ();
void printParameters (struktur Konfigurasi konfigurasi);
ResponseStatus resetModule ();
Langkah 9: Bekas Respons
Untuk mempermudah pengurusan respons, saya membuat satu set wadah, bagi saya sangat berguna untuk menguruskan kesilapan dan mengembalikan data generik.
Status Respons
Ini adalah bekas status dan mempunyai 2 titik masuk yang mudah, dengan ini anda boleh mendapatkan kod status dan keterangan kod status
Serial.println (c.getResponseDescription ()); // Penerangan kod
Serial.println (c.code); // 1 sekiranya Berjaya
Kodnya adalah
KEJAYAAN = 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
Bekas Respons
Bekas ini dibuat untuk menguruskan tindak balas String dan mempunyai 2 titik masuk.
data dengan rentetan dikembalikan dari mesej dan status contoh RepsonseStatus.
ResponseContainer rs = e32ttl.receiveMessage ();
Mesej rentetan = rs.data;
Serial.println (rs.status.getResponseDescription ());
Serial.println (mesej);
ResponseStructContainer
Ini adalah wadah yang lebih "kompleks", saya menggunakannya untuk menguruskan struktur, ia mempunyai titik masuk yang sama dari ResponseContainer tetapi data adalah penunjuk yang tidak sah untuk menguruskan struktur yang kompleks.
ResponseStructContainer c;
c = e32ttl100.getConfiguration (); // Penting untuk mendapatkan penunjuk konfigurasi sebelum semua operasi lain
Konfigurasi konfigurasi = * (Konfigurasi *) c.data;
Serial.println (c.status.getResponseDescription ());
Serial.println (c.status.code);
getConfiguration dan setConfiguration
Kaedah pertama adalah getConfiguration, anda boleh menggunakannya untuk mendapatkan semula semua data yang tersimpan pada peranti.
ResponseStructContainer getConfiguration ();
Berikut adalah contoh penggunaan.
ResponseStructContainer c;
c = e32ttl100.getConfiguration (); // Penting untuk mendapatkan penunjuk konfigurasi sebelum semua operasi lain
Konfigurasi konfigurasi = * (Konfigurasi *) c.data;
Serial.println (c.status.getResponseDescription ());
Serial.println (c.status.code);
Serial.println (konfigurasi. SPED.getUARTBaudRate ());
Struktur konfigurasi mempunyai semua data pengaturan, dan saya menambahkan serangkaian fungsi untuk mendapatkan semua keterangan tentang data tunggal.
konfigurasi. ADDL = 0x0; // Bahagian pertama dari alamatconfiguration. ADDH = 0x1; // Bahagian kedua konfigurasi alamat. CHAN = 0x19; // Konfigurasi saluran. OPTION.fec = FEC_0_OFF; // Konfigurasi suis pembetulan ralat ke hadapan. OPTION.fixedTransmission = FT_TRANSPARENT_TRANSMISSION; // Konfigurasi mod penghantaran. OPTION.ioDriveMode = IO_D_MODE_PUSH_PULLS_PULL_UPS; // Konfigurasi pengurusan pull-up. OPTION.transmissionPower = POWER_17; // konfigurasi kuasa penghantaran dBm. OPTION.wirelessWakeupTime = WAKE_UP_1250; // Tunggu masa untuk bangun konfigurasi. SPED.airDataRate = AIR_DATA_RATE_011_48; // Konfigurasi kadar data udara. SPED.uartBaudRate = UART_BPS_115200; // Konfigurasi kadar baud komunikasi. SPED.uartParity = MODE_00_8N1; // Pariti sedikit
Anda mempunyai fungsi yang setara untuk semua atribut untuk mendapatkan semua keterangan:
Serial.print (F ("Chan:")); Serial.print (konfigurasi. CHAN, DEC); Serial.print ("->"); Serial.println (config.getChannelDescription ()); Serial.println (F ("")); Serial.print (F ("SpeedParityBit:")); Serial.print (config. SPED.uartParity, BIN); Serial.print ("->"); Serial.println (konfigurasi. SPED.getUARTParityDescription ()); Serial.print (F ("SpeedUARTDatte:")); Serial.print (config. SPED.uartBaudRate, BIN); Serial.print ("->"); Serial.println (konfigurasi. SPED.getUARTBaudRate ()); Serial.print (F ("SpeedAirDataRate:")); Serial.print (config. SPED.airDataRate, BIN); Serial.print ("->"); Serial.println (konfigurasi. SPED.getAirDataRate ()); Serial.print (F ("OptionTrans:")); Serial.print (config. OPTION.fixedTransmission, BIN); Serial.print ("->"); Serial.println (config. OPTION.getFixedTransmissionDescription ()); Serial.print (F ("OptionPullup:")); Serial.print (config. OPTION.ioDriveMode, BIN); Serial.print ("->"); Serial.println (config. OPTION.getIODroveModeDescription ()); Serial.print (F ("OptionWakeup:")); Serial.print (config. OPTION.wirelessWakeupTime, BIN); Serial.print ("->"); Serial.println (config. OPTION.getWirelessWakeUPTimeDescription ()); Serial.print (F ("OptionFEC:")); Serial.print (config. OPTION.fec, BIN); Serial.print ("->"); Serial.println (config. OPTION.getFECDescription ()); Serial.print (F ("OptionPower:")); Serial.print (config. OPTION.transmissionPower, BIN); Serial.print ("->"); Serial.println (config. OPTION.getTransmissionPowerDescription ());
Dengan cara yang sama setConfiguration ingin konfigurasi, jadi saya rasa cara yang lebih baik untuk menguruskan konfigurasi adalah dengan mengambil yang sekarang, gunakan satu-satunya perubahan yang anda perlukan dan tetapkan lagi.
ResponseStatus setConfiguration (Konfigurasi konfigurasi, PROGRAM_COMMAND saveType = WRITE_CFG_PWR_DWN_LOSE);
konfigurasi adalah pertunjukan sebelumnya, izin saveType kepada anda untuk memilih sekiranya perubahan menjadi kekal hanya untuk sesi semasa.
ResponseStructContainer c; c = e32ttl100.getConfiguration (); // Penting untuk mendapatkan penunjuk konfigurasi sebelum semua operasi lain Konfigurasi konfigurasi = * (Konfigurasi *) c.data; Serial.println (c.status.getResponseDescription ()); Serial.println (c.status.code); printParameters (konfigurasi); konfigurasi. ADDL = 0x0; konfigurasi. ADDH = 0x1; konfigurasi. CHAN = 0x19; konfigurasi. OPTION.fec = FEC_0_OFF; konfigurasi. OPTION.fixedTransmission = FT_TRANSPARENT_TRANSMISSION; konfigurasi. OPTION.ioDriveMode = IO_D_MODE_PUSH_PULLS_PULL_UPS; konfigurasi. OPTION.transmissionPower = POWER_17; konfigurasi. OPTION.wirelessWakeupTime = WAKE_UP_1250; konfigurasi. SPED.airDataRate = AIR_DATA_RATE_011_48; konfigurasi. SPED.uartBaudRate = UART_BPS_115200; konfigurasi. SPED.uartParity = MODE_00_8N1; // Set konfigurasi diubah dan diatur untuk tidak menahan konfigurasi ResponseStatus rs = e32ttl100.setConfiguration (konfigurasi, WRITE_CFG_PWR_DWN_LOSE); Serial.println (rs.getResponseDescription ()); Serial.println (rs.code); printParameters (konfigurasi);
Parameter semuanya dikendalikan sebagai pemalar:
Langkah 10: Pilihan Konfigurasi Asas
Langkah 11: Hantar Mesej Terima
Mula-mula kita mesti memperkenalkan kaedah yang mudah tetapi berguna untuk memeriksa apakah ada sesuatu yang ada dalam buffer penerimaan
int tersedia ();
Cukup mengembalikan berapa bait yang anda ada dalam aliran semasa.
Langkah 12: Mod Penghantaran Biasa
Mod penghantaran Normal / Transparan digunakan untuk mengirim mesej ke semua peranti dengan alamat dan saluran yang sama.
Terdapat banyak kaedah untuk menghantar / menerima mesej, kami akan menerangkan secara terperinci:
ResponseStatus sendMessage (const String message);
ResponseContainer menerimaMessage ();
Kaedah pertama adalah sendMessage dan digunakan untuk menghantar String ke peranti dalam mod Normal.
ResponseStatus rs = e32ttl.sendMessage ("Prova"); Serial.println (rs.getResponseDescription ());
Peranti lain hanya dilakukan pada gelung
jika (e32ttl.available ()> 1) {ResponseContainer rs = e32ttl.receiveMessage (); Mesej rentetan = rs.data; // Pertama sekali dapatkan data Serial.println (rs.status.getResponseDescription ()); Serial.println (mesej); }
Langkah 13: Uruskan Struktur
Sekiranya anda ingin menghantar struktur yang kompleks, anda boleh menggunakan kaedah ini
ResponseStatus sendMessage (const void * message, const uint8_t size); ResponseStructContainer menerimaMessage (saiz const uint8_t);
Ia digunakan untuk menghantar strucutre, misalnya:
struct Messaggione {char type [5]; mesej char [8]; bool mitico; }; struct Messaggione messaggione = {"TEMP", "Peple", true}; ResponseStatus rs = e32ttl.sendMessage (& messaggione, sizeof (Messaggione)); Serial.println (rs.getResponseDescription ());
dan di sisi lain anda boleh menerima mesej itu
ResponseStructContainer rsc = e32ttl.receiveMessage (sizeof (Messaggione)); struct Messaggione messaggione = * (Messaggione *) rsc.data; Serial.println (messaggione.message); Serial.println (messaggione.mitico);
Baca sebahagian struktur
Sekiranya anda ingin membaca bahagian pertama mesej untuk menguruskan lebih banyak jenis strucutre, anda boleh menggunakan kaedah ini.
ResponseContainer acceptInitialMessage (saiz uint8_t);
Saya membuatnya untuk menerima rentetan dengan jenis atau yang lain untuk mengenal pasti struktur yang akan dimuat.
struct Messaggione {// Strucutre separa tanpa mesej typechar [8]; bool mitico; }; jenis char [5]; // bahagian pertama struktur ResponseContainer rs = e32ttl.receiveInitialMessage (sizeof (type)); // Masukkan rentetan dalam array char (tidak diperlukan) memcpy (type, rs.data.c_str (), sizeof (type)); Serial.println ("BACA JENIS:"); Serial.println (rs.status.getResponseDescription ()); Serial.println (jenis); // Baca sisa struktur ResponseStructContainer rsc = e32ttl.receiveMessage (sizeof (Messaggione)); struct Messaggione messaggione = * (Messaggione *) rsc.data;
Langkah 14: Tetap Mod Bukan Mod Normal
Dengan cara yang sama saya membuat satu set kaedah untuk digunakan dengan penghantaran tetap
Memperbaiki penghantaran
Anda hanya perlu mengubah kaedah pengiriman, kerana perangkat tujuan tidak menerima mukadimah dengan Alamat tetap dan saluran quando settato il mode tetap.
Jadi untuk mesej String yang anda ada
ResponseStatus sendFixedMessage (byte ADDL, byte ADDH, byte CHAN, const String message); ResponseStatus sendBroadcastFixedMessage (byte CHAN, const String message);
dan untuk struktur yang anda ada
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);
Berikut adalah contoh mudah
ResponseStatus rs = e32ttl.sendFixedMessage (0, 0, 0x17, & messaggione, sizeof (Messaggione)); // ResponseStatus rs = e32ttl.sendFixedMessage (0, 0, 0x17, "Ciao");
Transmisi yang diperbaiki mempunyai lebih banyak senario
Sekiranya anda menghantar ke peranti tertentu (senario kedua Transmisi tetap) anda mesti menambahkan ADDL, ADDH dan CHAN untuk mengenal pasti secara langsung.
ResponseStatus rs = e32ttl.sendFixedMessage (2, 2, 0x17, "Mesej ke peranti");
Sekiranya anda ingin menghantar mesej ke semua peranti di Saluran yang ditentukan, anda boleh menggunakan kaedah ini.
ResponseStatus rs = e32ttl.sendBroadcastFixedMessage (0x17, "Mesej ke peranti saluran");
Sekiranya anda mahu menerima semua mesej siaran dalam rangkaian, anda mesti menetapkan ADDH dan ADDL anda dengan BROADCAST_ADDRESS.
ResponseStructContainer c; c = e32ttl100.getConfiguration (); // Penting untuk mendapatkan penunjuk konfigurasi sebelum semua operasi lain Konfigurasi konfigurasi = * (Konfigurasi *) c.data; Serial.println (c.status.getResponseDescription ()); Serial.println (c.status.code); printParameters (konfigurasi); konfigurasi. ADDL = BROADCAST_ADDRESS; konfigurasi. ADDH = BROADCAST_ADDRESS; // Set konfigurasi diubah dan diatur untuk tidak menahan konfigurasi ResponseStatus rs = e32ttl100.setConfiguration (konfigurasi, WRITE_CFG_PWR_DWN_LOSE); Serial.println (rs.getResponseDescription ()); Serial.println (rs.code); printParameters (konfigurasi);
Langkah 15: Terima kasih
Sekarang anda mempunyai semua maklumat untuk melakukan kerja anda, tetapi saya rasa penting untuk menunjukkan beberapa contoh yang realistik untuk tidak memahami kemungkinan yang lebih baik.
- Peranti LoRa E32 untuk Arduino, esp32 atau esp8266: tetapan dan penggunaan asas
- Peranti LoRa E32 untuk perpustakaan Arduino, esp32 atau esp8266:
- Peranti LoRa E32 untuk Arduino, esp32 atau esp8266: konfigurasi
- Peranti LoRa E32 untuk Arduino, esp32 atau esp8266: transmisi tetap
- Peranti LoRa E32 untuk Arduino, esp32 atau esp8266: penjimatan kuasa dan penghantaran data berstruktur
Disyorkan:
Rangkaian Sensor Tanpa Wayar Kos Rendah pada Jalur 433MHz: 5 Langkah (dengan Gambar)
Rangkaian Sensor Tanpa Wayar Kos Rendah pada Jalur 433MHz: Terima kasih banyak kepada Teresa Rajba kerana telah memberikan saya penerimaannya untuk menggunakan data dari penerbitan mereka dalam artikel ini. * Pada gambar di atas - lima unit pengirim sensor yang saya gunakan untuk menguji Apa itu sensor wayarles rangkaian? Definisi ringkas akan
Bagaimana Mengukur Penggunaan Modul Komunikasi Tanpa Wayar dengan Betul di Era Penggunaan Daya Rendah ?: 6 Langkah
Bagaimana Mengukur Penggunaan Tenaga Modul Komunikasi Tanpa Wayar dengan Betul di Era Penggunaan Daya Rendah?: Penggunaan tenaga yang rendah adalah konsep yang sangat penting dalam Internet Perkara. Sebilangan besar nod IoT perlu dikuasakan oleh bateri. Hanya dengan mengukur penggunaan kuasa modul wayarles dengan tepat, kita dapat mengira dengan tepat berapa bateri saya
LoRa Messenger untuk Dua Peranti untuk Jarak Hingga 8km: 7 Langkah
LoRa Messenger untuk Dua Peranti untuk Jarak Hingga 8km: Sambungkan projek ke komputer riba atau telefon anda dan kemudian berbual antara peranti tanpa internet atau SMS dengan hanya menggunakan LoRa. Hei, ada apa? Akarsh di sini dari CETech. Hari ini kita akan membuat projek yang boleh disambungkan ke telefon pintar anda atau mana-mana
Penyejuk / Dudukan Laptop Kos Sifar (Tanpa Lem, Tanpa Penggerudian, Tanpa Mur & Baut, Tanpa Skru): 3 Langkah
Penyejuk / Dudukan Laptop Kos Sifar (Tanpa Lem, Tanpa Penggerudian, Tanpa Mur & Baut, Tanpa Skru): KEMASKINI: SILA KINDLY VOTE FOR MY INSTRUCTABLE, TERIMA KASIH ^ _ ^ ANDA JUGA MUNGKIN MENGUNDI LAIN MASUK DI www.instructables.com/id/Zero-Cost-Aluminium-Furnace-No-Propane-No-Glue-/ ATAU MUNGKIN MEMBERIKAN suara untuk rakan baik saya
Peretas Pintu Tanpa Wayar ke Suis Penggera Tanpa Wayar atau Suis Hidup / Mati: 4 Langkah
Peretas Pintu Tanpa Wayar ke Suis Penggera Tanpa Wayar atau Suis Hidup / Mati: Saya baru-baru ini membina sistem penggera dan memasangnya di rumah saya. Saya menggunakan suis magnet di pintu dan memasang kabel melalui loteng. Tingkap adalah kisah lain dan pendawaian keras bukan pilihan. Saya memerlukan penyelesaian tanpa wayar dan ini