Reklaam
Nutikad pistikupesad on lihtsaim viis kodu automatiseerimiseks, kuid Wi-Fi- või ZWave-põhise pistikupesa hinnaga umbes 40 dollarit on tõenäoline, et ostate rohkem kui mõned.
Võimalik, et teil on juba mõned odavad raadiosidepõhised pistikupesad - sellised, millel on oma kohandatud kaugjuhtimispult ja mille tagaküljel on mõned kanalite ja ID valijad. Kahjuks neid pole nutikad kodukeskused turul Nutikodu jaoturite lahing: mis seal väljas on ja mis tulemas on? Loe rohkem see töötab nendega. Kas poleks tore, kui saaksite need kuidagi oma DIY nutika kodu süsteemiga siduda? Noh, saate - tegelikult üsna hõlpsalt - umbes 10 dollariga osade kaupa.
Pisut rohkem tööd tehes saate integreerida ka mõnda muud RF-põhist kaugriistvara, nt see eelarve kinoekraan.
Mida sa vajad:
- ESP8266 NodeMCU v12E dev juhatus (täpne mudel ei oma tähtsust, ka v1 või v3 peaksid olema korras) NodeMCU tahvlit kasutame põhjusel, et tahame hiljem hõlpsat WiFi-ühendust. Link on pakendis 2, mis maksab 7 dollarit.
- Pakend 433MHz saatja ja vastuvõtja (umbes 3 dollarit).
- RCSwitch ja MQTT teegid ja meie kood - kõik saab alla laadida Githubist.
- MQTT-server, lokaalne või serveri kaudu.
- Mõned raadiosagedusliku juhtimisega pistikupesad töötavad sagedusalas 433 MHz (see peaks ütlema kaugjuhtimispuldi kohta). Ostsin Maplinilt kaevanduse pakendis 3, umbes 20 naela (25,89 dollarit).
Kui see on NodeMCU tahvli esmakordne programmeerimine, peate selle jaoks alla laadima Arduino pistikprogrammid: järgige koos meie esimese osaga Arduino Killeri sissejuhatav juhend Tutvuge Arduino tapjaga: ESP8266Mis siis, kui ma ütleksin teile, et seal on sisseehitatud WiFi-ga Arduino-ühilduv arendusplaat vähem kui 10 dollari eest? Noh, on olemas. Loe rohkem kiibi NodeMCU / ESP8266 jaoks. Teil on vaja ka CH430 draiverid. Leiad allkirjastatud macOS CH430 draiverid siinvõi Windows siin.
Olen kasutanud Arduino v1.6.5, kuna miski kõrgem tekitab rohkem probleeme kui lahendab. Alendage ametikoht, kui te pole seda juba teinud.
Enne kui jätkate, eeldan ma põhiteadmisi selle kohta Arduino programmeerimine Arduino programmeerimine algajatele: valgusfoori kontrolleri projekti juhendArduino valgusfoori kontrolleri ehitamine aitab teil arendada põhilisi kodeerimisoskusi! Alustame teid. Loe rohkem , ja et teil on NodeMCU seadistused lauahalduris ja saate mõnda demo koodi õigesti üles laadida. Peaksite lisama ka meie allalaaditavasse teekide kausta Arduino / raamatukogud kausta.
Kui teil on olemas PubSubClient või MQTT teek, varundage see ja eemaldage see - see, mille olen alla laadinud, on ainus, kus sain NodeMCU-ga sõnumeid usaldusväärselt vastu võtta ja proovisin palju!
RF-nuusutamine (valikuline)
Seda sammu pole vaja, kui soovite juhtida ainult DIP-lüliti või valimisnupu pistikupesa - need toetatakse väljastpoolt ja on vaja minimaalset koodi muutmist (seda on siiski kõigepealt huvitav teha, et mõistaksite, mis toimub stseenid).
Kui teil on muid raadiosageduse kaugjuhtimispulte, mida soovite proovida lisada, peate esmalt edastatavad raadiosidekoodid „nuusutama”. Selleks laadige ReceiveDemo_Advanced visand Menüü -> Näited -> RCSwitch ja muutke järgmine rida numbriks 0
mySwitch.enableReict (0); // Vastuvõtja katkestuse ajal 0 => see on pin # 2
kuni 2-ni.
mySwitch.enableReict (2); // Vastuvõtja GPIO 2 / D4-l.
Juhtme moodul ühendatakse järgmiselt. Vastuvõtjaplaadi eest vaadates (see on kahest pikem, saatja on ruudukujuline) - külg, kus komponendid on peal:
- Parempoolne on GND. Ühendage GND-ga NodeMCU tahvel.
- Vasakule jääb VCC. Ühendage NodeMCU tahvlil VIN-iga.
- Kaks keskmist tihvti on signaal. Ühendage üks neist NodeMCU D4-ga (need on omavahel ühendatud, nii et pole vahet, kumb).
![433 juhtmestik-1](/f/90297e6e89a0dad6289ee9a1b89ceff9.jpg)
Nüüd laadige muudetud üles ReceiveDemo_Advancedja kui see on tehtud, avage jadamonitor ja alustage kaugjuhtimispuldi nuppude vajutamist. Nupu vajutamisel kopeerige kümnendkoht (sealhulgas biti pikkus), impulsi pikkus ja protokoll.
![ekraani RF nuusutamine](/f/e6ac539861e59c6da3e2f11aa2247031.png)
Pärast seda teadsin, et mu projektori ekraan on kasutuses
- EKRAANI ÜLES: Vastu võetud 8694273 / 24bit; Impulsi pikkus: 355 või 356; Protokoll: 1
- Ekraani allapoole: vastu võetud 8694276 / 24bit;Impulsi pikkus: 355 või 356; Protokoll: 1
Jätkake nii palju nuppe kui vaja.
Saatja testimine
Järgmisena proovime koodide saatmist saatja abil. Juhtme saatja moodul (ruut) moodustatakse järgmiselt. Olge ettevaatlik: nendel tihvtidel on sildistamine kohutav.
VCC tihvt on tegelikult keskel, mitte vasakul. Selle mõistmise käigus hävitasin ühe mooduli. See asi, mis ütleb “ATAD”, on tegelikult “DATA”, tagasi kirjutatud. Jällegi lähevad andmed D4-le, VCC-le VIN-i ja GND-le GND-le (eemaldage vastuvõtumoodul, te ei vaja seda enam).
![433 juhtmestik-2](/f/4a0ff55e348dd10bf43f87280d7e0d93.jpg)
Laadige Näited -> RCSwitch -> TypeB_WithRotaryOrSlidingSwitchesja jälle muutke andmesidet:
mySwitch.enableTransmit (10);
kuni
mySwitch.enableTransmit (2);
Pange tähele, et raamatukogus on palju erinevaid näiteid ja milline neist teie jaoks töötab, sõltub teie valitud lüliti täpsest tüübist. Kõige tavalisemad on tüüp A (dip-lülitid) ja B (valimisnupud või liugurid) - vaadake pilte RCSwitchi lehel. B-tüübi puhul on pistikupesa sisse- ja väljalülitamine sama lihtne kui:
mySwitch.switchOn (1, 4); mySwitch.switchOff (1, 4);
kus 1 on kanali ID (ülemine ketas) ja 4 on pesa ID (alumine ketas). Need olid minu pistikupesadele kirjutatud rooma numbritega. Seetõttu saab adresseerida maksimaalselt 16 individuaalset pistikupesa, ehkki mitu pistikupesa võivad kasutada sama aadressi, kui teil on mitu sisselülitatavat seadet korraga.
Minu projektori ekraan oli aga pisut erinev - see kasutas erinevat impulsi pikkust. Nii et nende opereerimiseks töötasid järgmised. Pange tähele, et kui teie kaugjuhtimispult seda vajab, saate määratleda ka mõne muu protokolli. BUT kindlasti määrake protokoll ENNE impulsi pikkust. Protokolli vahetamisel kirjutatakse impulsi pikkus üle.
// Pange tähele, et minu ekraan nõuab tegelikult kaks nuppu vajutamist (mitte pikka vajutamist, vaid kahte füüsilist) vajutab), nii et viivitan natuke ja saadan sama signaali uuesti tühiseks screenUp () { mySwitch.setPulseLength (358); mySwitch.send (8694273,24); // (kümnendkood, bittide arv) viivitus (2000); mySwitch.send (8694273,24); } tühine screenDown () {mySwitch.setPulseLength (358); mySwitch.send (8694276,24); viivitus (2000); mySwitch.send (8694276,24); }
Enne järgmise sammu juurde minemist kontrollige, kas kõik teie koodid töötavad.
Juhtimine MQTT kaudu
Avage visand, mille olete alla laadinud Githubist nimega mqtt_rcswitch.inoja alustage oma kodu võrgu SSID ja parooli muutmisest. Seejärel muutke soovi korral kanali nime ja määrake MQTT-server. Kui teil pole veel OpenHAB-i installimisel MQTT-serverit, lugege meie OpenHAB-i algajate juhendi 2. osa OpenHABi algajate juhend, 2. osa: ZWave, MQTT, reeglid ja diagrammidAvatud lähtekoodiga kodutehnika automatiseerimistarkvara OpenHAB ületab kaugelt teiste turul olevate koduautomaatikasüsteemide võimalusi - kuid selle seadistamine pole lihtne. Tegelikult võib see olla täiesti pettumust valmistav. Loe rohkem . Pange tähele, et minu kood on mõeldud B-tüüpi (pöördlüliti) pistikupesadele, ehkki saate seda ka DIP-lülitite jaoks hõlpsalt muuta.
Koodi kõige olulisem osa on sõnum vastu võetud () funktsioon, mis reageerib sissetulevatele MQTT käskudele. Selle funktsiooni puhul kontrollime kõigepealt peamist märksõna - valisin “lüliti” ja “ekraan”. Lüliti korral sõelume siis välja kanali ja pistiku ID; siis kontrollige käsu kasuliku koorma keha kohta.
tühine teadeVõetud (stringi teema, stringi kasulik koormus, char * baitid, allkirjastamata int pikkus) {if (topic.indexOf ("switch")> = 0) {// lüliti juhtimine, sõeluge kanal välja ja lisage id int channel = getValue (teema, '/', 3) .toInt (); int plug = getValue (teema, '/', 4) .toInt (); if (payload == "on") {mySwitch.switchOn (kanal, pistik); } else {mySwitch.switchOff (kanal, pistik); }} else if (topic.indexOf ("screen")> = 0) {// ekraanikontroll if (payload == "up") {screenUp (); } else if (payload == "down") {screenDown (); }} / * lisage siia veel mõni muu käskide kuulamiseks (või muutke lihtsalt ülaltoodud käsku, kui te ei soovi ekraani) * / }
Vaikimisi toimivad järgmised MQTT käsud:
elutuba / kontroll / lüliti / X / Y (kus X on kanal ja Y on pistiku ID; sõnumi sisuga sisse või välja)
elutuba / juhtimisseade / ekraan (sõnumi korpusega üles või alla)
Enne OpenHAB-i lisamist kasutage oma seadmete testimiseks käsurida või GUI MQTT-klienti.
Lisamine OpenHAB-i
Viimase sammuna peame lihtsalt OpenHAB-is nende lülitite jaoks mõned üksused looma. Olen praeguseks määratlenud järgmised üksused, kuid peaksite aru saama, kuidas rohkem lisada:
/ * RF433mHz seadmed * / Lülitage CinemaScreen "ekraan" (kino) {mqtt = "> [maakler: elutuba / juhtimine / ekraan: käsk: ON: alla],> [maakler: elutuba / juhtimine / ekraan: käsk: OFF: üles]"} Lüliti Lüliti41 "Lüliti41" (Kino) {mqtt = "> [maakler: elutuba / juhtimine / lüliti / 4/1: käsk: sisse: sisse],> [maakler: elutuba / juhtimine / lüliti / 4/1: käsk: välja lülitatud: väljas]"} Lüliti Lüliti42 "Lüliti42" (Kino) {mqtt = "> [maakler: elutuba / juhtimine / lüliti / 4/2: käsk: ON: sisse],> [maakler: elutuba / juhtimine / lüliti / 4/2: käsk: VÄLJAS: väljas]"}
Nüüd peaksite saama RF-seadmeid OpenHAB-ist juhtida! Üks asi, mille üle meeldivalt üllatasin, oli vahemik - üks sõlme suutis suurema osa minu majast katta. Muidugi saate lisada sama kanali kuulamise ajal veel ühe sõlme, mis lihtsalt kordab samu käske, kui vajate täiendavat leviala.
Ainus piirang, mida meeles pidada, on see, et pistikupesad ise ei saa oma olekut teatada, nii et kui teie kasutage originaalset kaugjuhtimispulti, ei pruugi pistikupesa olek täpselt kajastuda OpenHAB. Kasutage ainult OpenHAB-i liidest ja peaksite hakkama saama.
Kas teil on küsimusi või probleeme? Küsige kommentaaridelt ära ja annan endast parima. Kui soovite minu koodi paremaks muuta, saatke julgelt tõmbetaotlus.
Jamesil on tehisintellekti BSc ning ta on CompTIA A + ja Network + sertifikaadiga. Ta on MakeUseOfi juhtiv arendaja ja veedab oma vaba aega VR-i paintballi ja lauamänge mängides. Ta on lapsest peale arvutit ehitanud.