Përmbajtje:

Shtesa e Operatorit të Kontrolluar të Portës WebApp (IoT): 20 hapa (me fotografi)
Shtesa e Operatorit të Kontrolluar të Portës WebApp (IoT): 20 hapa (me fotografi)

Video: Shtesa e Operatorit të Kontrolluar të Portës WebApp (IoT): 20 hapa (me fotografi)

Video: Shtesa e Operatorit të Kontrolluar të Portës WebApp (IoT): 20 hapa (me fotografi)
Video: Top Channel/ Ukraina kërkon më shumë para, vendos rregulla të reja për eksportet ushqimore 2024, Nëntor
Anonim
Shtesa e Operatorit të Kontrolluar të Portës WebApp (IoT)
Shtesa e Operatorit të Kontrolluar të Portës WebApp (IoT)
Shtesa e Operatorit të Kontrolluar të Portës WebApp (IoT)
Shtesa e Operatorit të Kontrolluar të Portës WebApp (IoT)
Shtesa e Operatorit të Kontrolluar të Portës WebApp (IoT)
Shtesa e Operatorit të Kontrolluar të Portës WebApp (IoT)

Unë kam një klient i cili kishte një zonë të mbyllur ku shumë njerëz kishin nevojë të vinin dhe të shkonin. Ata nuk donin të përdornin një tastierë nga jashtë dhe kishin vetëm një numër të kufizuar të transmetuesve të tastierës. Gjetja e një burimi të përballueshëm për tastierë shtesë ishte e vështirë. Mendova se do të ishte një mundësi e shkëlqyeshme për të përmirësuar këtë operator porta Liftmaster për të qenë IoT i pajtueshëm me pajisjet e personalizuara, API -në e internetit dhe ndërfaqen e aplikacionit në internet. Kjo jo vetëm që zgjidhte problemin e aksesit në masë, por hapte edhe funksionalitet shtesë!

Në foton e fundit më sipër është njësia e provës që kisha vrapuar për gati një vit në një qese ziplock. Mendova se ishte koha për një përmirësim!

Kjo është një zgjidhje plotësisht funksionale me të gjithë kodin, informacionin e harduerit dhe modelet e listuara këtu.

Të gjithë skedarët e projekteve janë gjithashtu të pritur në GitHub: github.com/ThingEngineer/IoT-Gate-Operator-Addon

Një shembull i ndërfaqes CodeIgniter WebApp është vendosur këtu: projects.ajillion.com/gate Ky shembull nuk është i lidhur me një portë të drejtpërdrejtë, por është ndërfaqja dhe kodi i saktë që po funksionon në porta (pa disa veçori të sigurisë).

--

Për një integrim edhe më të madh ju mund të përdorni bibliotekën IFTTT për Electric Imp.

Hapi 1: Mblidhni Pjesët

Mblidhni Pjesët
Mblidhni Pjesët
  • Ju do të keni nevojë për një IMP Elektrike me të paktën 4 GPIO në dispozicion, unë jam duke përdorur IMP001 me një bord të prishjes së prillit.
  • Një rregullator për të ulur tensionin e burimit në 5V. Unë jam duke përdorur një modul hap poshtë DC-DC Buck Converter. Versioni MP1584EN i eBoot nga Amazon.
  • Një modul stafetë i dyfishtë (ose më shumë) ose një pajisje ndërrimi e ngjashme që do të funksionojë me daljen e IMP -ve. Unë jam duke përdorur këtë një modul stafetash JBtek 4 Channel DC 5V nga Amazon.
  • Një terminal me vida me 4 tela. Unë jam duke përdorur këtë një 5Pcs 2 Rreshta 12P Wire Connector Screw Terminal Barrier Block 300V 20A nga Amazon.

Hapi 2: Furnizimet

Furnizimet
Furnizimet

Gjithashtu do t'ju duhet:

  • Qasje në një printer 3D ose një kuti të vogël projekti
  • 4 vida të vogla rreth 4mm x 6mm për kapakun e kasës
  • Teli lidhës
  • Preres telash
  • Zhveshëset e telave
  • Kaçavida të vogla
  • Makine per ngjitjen e metalit
  • Ngjitës i nxehtë ose silikoni
  • Lidhëse zip

Hapi 3: Madhësoni rastin

Madhësia Rasti
Madhësia Rasti

Paraqitni pjesët tuaja për të përcaktuar se çfarë madhësie do t'ju nevojitet. Me një paraqitje siç është fotografuar, do të më duhet një kuti që është rreth 140 mm e gjerë, 70 mm e thellë dhe 30 mm e lartë.

Hapi 4: Konvertuesi i telave DC-DC

Konvertues DC-DC me tela
Konvertues DC-DC me tela

Pritini 3 palë tela lidhës të kuq dhe të zi për lidhjet e energjisë brenda dhe jashtë bordit të konvertuesit DC-DC.

  • Hyrja: 100 mm
  • Dalja në IMP: 90 mm
  • Dalja në modulin e stafetës: 130mm

Ngjitini ato në tabelën tuaj siç tregohet.

Hapi 5: Fuqia me tela për pajisjet

Fuqia me tela për pajisjet
Fuqia me tela për pajisjet
  • Lidhni hyrjen e konvertuesit DC-DC në dy nga pikat në bllokun e terminalit të vidave.
  • Lidhni telat e shkurtër të daljes 5V në PUN.
  • Ngjitni telat më të gjatë të daljes 5V në modulin e stafetës.

Hapi 6: Hyrjet e modulit të stafetës me tela

Hyrjet e modulit të stafetës me tela
Hyrjet e modulit të stafetës me tela
  • Pritini 4 tela 90 mm për lidhjet hyrëse të modulit të stafetës. Kam përdorur 4 ngjyra të veçanta për referencë të lehtë më vonë gjatë kodimit.
  • Ngjitini telat në hyrjet e modulit të stafetës 1-4, pastaj në 4 pikat e para të IMP GPIO (Pin1, 2, 5, & 7) respektivisht.

Hapi 7: IMP Power Jumper

IMP Power Jumper
IMP Power Jumper

Ju mund të keni nevojë të përdorni energji USB gjatë fillimit të programimit dhe testimit të PUN -it tuaj. Kur të përfundoni, sigurohuni që ta zhvendosni bluzën e fuqisë në anën BAT.

Hapi 8: Hyrjet e statusit të Wire Gate

Hyrjet e statusit të Portës së Telit
Hyrjet e statusit të Portës së Telit
  • Pritini telat 2 x 80 mm për hyrjet e statusit.
  • Lidhni telat me 2 terminalet e vidhave të mbetura.
  • Lidhni telat ngjitur me pikat e IMP GPIO (Pin8 & 9) respektivisht.

Hapi 9: Shtypni ose blini një kuti

Shtypni ose blini një rast
Shtypni ose blini një rast

Ju mund të shkarkoni. STL ose. F3D tim për këtë rast në GitHub ose Thingiverse

Nëse nuk keni qasje në një printer 3D, një rast i vogël projekti gjenerik do të funksionojë.

Hapi 10: Dekoroni rastin tuaj

Dekoroni rastin tuaj
Dekoroni rastin tuaj

Sepse!

Vendosa një tekst të dhëmbëzuar mbi timen dhe thjesht e ngjyrosa me një mprehtësi të zezë. Nëse ndiheni aventurierë, mund të përdorni bojë akrilike, manikyrin e thonjve ose diçka tjetër për ta bërë atë edhe më të lëmuar.

Hapi 11: Vrima e stërvitjes për tela

Vrima e stërvitjes për telat
Vrima e stërvitjes për telat

Shponi një vrimë të vogël 10-15 mm në anën afër mesit ku të gjitha telat do të bashkohen.

Kam përdorur një Unibit për një vrimë të pastër dhe të lëmuar në plastikë.

Hapi 12: Përgatitni dhe instaloni telat e lidhjes

Përgatitni dhe instaloni telat e lidhjes
Përgatitni dhe instaloni telat e lidhjes
Përgatitni dhe instaloni telat e lidhjes
Përgatitni dhe instaloni telat e lidhjes

Pritini telat 9 x 5-600mm për fiksimin e pajisjes sonë deri në bordin e operatorit të portës.

  • 2 për hyrjen e energjisë 24V
  • 3 për statusin e portës (2 hyrje dhe një bazë e përbashkët)
  • 2 për sinjalin e portës së hapur
  • 2 për sinjalin e portës së mbyllur

Ktheni së bashku secilin nga grupet e listuara më sipër duke përdorur një stërvitje. Kjo do ta bëjë gjithçka më të lehtë dhe do të duket më mirë.

Zhvisheni dhe lidhni secilën prej telave në terminalet përkatëse siç tregohet.

Hapi 13: Telat e lidhjes së rrugës

Telat e lidhjes së rrugës
Telat e lidhjes së rrugës

Kaloni telat e lidhjes përmes vrimës siç tregohet.

Hapi 14: Montoni përbërësit

Komponentët e Montimit
Komponentët e Montimit

Vendosni dhe montoni përbërësit me një sferë të vogël ngjitëse të nxehtë ose silikoni. Mos përdorni shumë në rast se keni nevojë të hiqni një pjesë, përdorni vetëm sa për t'i siguruar ato.

Fillimisht doja ta printoja kasetën me kapëse/skeda për të mbajtur bordet në vend, por më duhej ta instaloja këtë dhe nuk kisha kohë. Shtimi i kapëseve të bordit në rastin tuaj do të ishte një prekje e bukur.

Hapi 15: Vulosni telat e lidhjes

Tela lidhëse lidhëse
Tela lidhëse lidhëse

Mbyllni telat e lidhjes me zam të nxehtë ose silikon.

Hapi 16: Mbyllni Rastin

Mbyll Rastin
Mbyll Rastin

Kam përdorur vida të vogla ~ 4mm në listën e këtij kuti të printuar 3D. Nëse jeni të shqetësuar për papastërtitë ose lagështinë vendosni një rruaza silikoni ose ngjitës të nxehtë rreth nyjës së kapakut para se ta mbyllni.

Hapi 17: Instaloni në Operatorin Gate

Instaloni në Gate Operator
Instaloni në Gate Operator
Instaloni në Gate Operator
Instaloni në Gate Operator

Në tabelën kryesore:

  • Lidhni dy telat e lidhur me daljen e stafetës 1 në terminalin Open Gate. (e kuqe/kafe në foto)
  • Lidhni dy telat e lidhur me daljen e stafetës 2 në terminalin Close Gate. (e verdhë/blu në fotografi)
  • Lidhni dy telat e lidhur me hyrjen e konvertuesit DC-DC në terminalet e vidave të aksesorëve 24V (në të kuqe/të zezë në fotografi)

Në tabelën e zgjerimit

  • Kërcejini terminalet e zakonshme të vidave të stafetës së bashku me një pjesë të vogël teli
  • Lidhni tokën e përbashkët me një nga terminalet e vidave të zakonshme të stafetës (e gjelbër në foto)
  • Lidhni hyrjet e statusit të dy portave (IMP Pin8 & 9) me terminalet e vidave normale të hapura të stafetës (JO) (gri/e verdhë në fotografi)

Drejtoni telat, lidhini ato me zinxhir që të duken të pastra dhe gjeni një vend për të montuar ose vendosur kutinë tuaj.

Ka fotografi shtesë, me rezolucion të plotë, të strehuara në depon GitHub.

Hapi 18: Vendosni modalitetin e transmetimit Aux

Vendosni modalitetin e transmetimit Aux
Vendosni modalitetin e transmetimit Aux

Vendosni çelsat ndihmës të stafetës siç tregohet në foto.

Kjo do t'i japë IMP -së sinjalet që i duhen për të përcaktuar nëse porta është e mbyllur, e hapur, e hapur ose e mbyllur.

Hapi 19: Kodi i Agjentit dhe Pajisjes IMP

Kodi i Agjentit dhe Pajisjes IMP
Kodi i Agjentit dhe Pajisjes IMP

Kodi i Agjentit të Impaktit Elektrik:

  • Krijoni një model të ri në IDE Electric Imp:
  • Zëvendësoni URL -në për të treguar serverin tuaj

// Funksioni i mbajtësit të

funksioni httpHandler (req, resp) {try {local d = http.jsondecode (req.body); //server.log(d.c); nëse (d.c == "btn") {//server.log(d.val); pajisje. dërgoni ("btn", d.val); resp.send (200, "OK"); }} catch (ex) {// Nëse ka pasur një gabim, dërgojeni përsëri në serverin e përgjigjes.log ("error:" + ex); resp.send (500, "Gabim i brendshëm i serverit:" + ish); }} // Regjistro HTTP handler http.onquest (httpHandler); // GateStateChange funksioni i funksionit gateStateChangeHandler (të dhëna) {// URL për shërbimin në internet url lokal = "https://projects.ajillion.com/save_gate_state"; // Vendosni titullin Content-Type në json headers = {"Content-Type": "application/json"}; // Kodoni të dhënat e marra dhe regjistroni trupin lokal = http.jsonencode (të dhëna); server.log (trupi); // Dërgoni të dhënat në shërbimin tuaj në internet http.post (url, titujt, trupi).sendsync (); } // Regjistroni pajisjen e mbajtësit të gateStateChange (në "" gateStateChange ", gateStateChangeHandler);

Kodi i Agjentit të Impaktit Elektrik:

  • Caktoni një pajisje Imp modelit tuaj
  • Verifikoni që kunjat e harduerit aliazohen si të lidhur

// Biblioteka Debouce

#kërko "Button.class.nut: 1.2.0" // Alias për gateOpen pin GPIO (aktiv i ulët) gateOpen <- hardware.pin2; // Alias për gateClose kontrollin GPIO pin (aktiv i ulët) gateClose <- hardware.pin7; // Konfiguro 'gateOpen' të jetë një dalje dixhitale me një vlerë fillestare të portës dixhitale 1 (të lartë) Open.configure (DIGITAL_OUT, 1); // Konfiguro 'gateClose' të jetë një dalje dixhitale me një vlerë fillestare të portës dixhitale 1 (të lartë) Close.configure (DIGITAL_OUT, 1); // Alias për pinin GPIO që tregon se porta po lëviz (N. O.) gateMovingState <- Butoni (hardware.pin8, DIGITAL_IN_PULLUP); // Alias për pinin GPIO që tregon se porta është plotësisht e hapur (N. O.) gateOpenState <- Butoni (hardware.pin9, DIGITAL_IN_PULLUP); // Ndryshore globale për të mbajtur gjendjen e portës (Hapur = 1 / Mbyllur = 0) lastGateOpenState lokale = 0; // Latch Timer object latchTimer = null agent.on ("btn", function (data) {switch (data.cmd) {case "open": gateOpen.write (0); if (latchTimer) imp.cancelwakeup (latchTimer); latchTimer = imp.wakeup (1, releaseOpen); server.log ("Komanda e hapur u mor"); kuti pushimi "latch30m": gateOpen.write (0); nëse (latchTimer) imp.cancelwakeup (latchTimer); latchTimer = imp.wakeup (1800, releaseOpen); server.log ("Komanda Latch30m u mor"); kuti pushimi "latch8h": gateOpen.write (0); nëse (latchTimer) imp.cancelwakeup (latchTimer); latchTimer = imp.wakeup (28800, releaseOpen); server.log ("Komanda Latch8h u mor"); rasti i ndërprerjes "mbyll": nëse (latchTimer) imp.cancelwakeup (latchTimer); gateOpen.write (1); gateClose.write (0); latchTimer = imp.wakeup (1, releaseClose); server.log ("Mbyll tani komanda e marrë"); thye parazgjedhjen: server.log ("Komanda e butonit nuk njihet");}}); funksioni releaseOpen () {if (latchTimer) imp.cancelwakeup (latchTimer); gateOpen.shkruaj (1); //server.log("Kalla e lëshuar paraprakeHap kontaktin e çelësit "); } funksion releaseClose () {if (latchTimer) imp.cancelwakeup (latchTimer); gateClose.shkruaj (1); //server.log("Porta e lëshuar kohoreMbyll kontaktin e kalimit "); } gateMovingState.onPress (funksioni () {// Releja është aktivizuar, porta po lëviz //server.log("Gate po hapet "); të dhënat lokale = {" gatestate ": 1," timer ": hardware.millis ()}; agent.send ("gateStateChange", të dhëna);}). onRelease (funksioni () {// Releja lëshohet, porta është në pushim //server.log("Gate është e mbyllur "); të dhënat lokale = {"gatestate": 0, "timer": hardware.millis ()}; agent.send ("gateStateChange", të dhëna);}); gateOpenState.onPress (funksioni () {// Releja është aktivizuar, porta është plotësisht e hapur //server.log("Gate është e hapur "); të dhënat lokale = {" gatestate ": 2," timer ": hardware.millis ()}; agent.send ("gateStateChange", të dhëna);}). onRelease (funksioni () {// Releja lëshohet, porta nuk është plotësisht e hapur //server.log("Gate po mbyllet "); të dhënat lokale = {"gatestate": 3, "timer": hardware.millis ()}; agent.send ("gateStateChange", të dhëna);});

Hapi 20: Kodi PHP i Shërbimit të Uebit

Shërbimi i uebit Kodi PHP
Shërbimi i uebit Kodi PHP

Unë e shkrova këtë kod për kornizën CodeIgniter sepse e shtova në një projekt të vjetër ekzistues. Kontrolluesi dhe kodi i shikimit mund të përshtaten lehtësisht me kuadrin e zgjedhjes suaj.

Për t'i mbajtur gjërat të thjeshta, i ruaj të dhënat JSON në një skedar të sheshtë për ruajtjen e të dhënave. Nëse keni nevojë për regjistrim ose funksione më komplekse që lidhen me të dhënat, përdorni një bazë të dhënash.

Biblioteka ajax që kam shkruar dhe përdorur në këtë projekt mund të shkarkohet nga depoja GitHub: ThingEngineer/Codeigniter-jQuery-Ajax

Kodi i kontrolluesit PHP:

  • aplikacioni/kontrolluesit/projektet.php
  • Sigurohuni që shtegu i të dhënave të jetë i arritshëm nga skripti juaj PHP, si për vendndodhjen ashtu edhe për privilegjet e leximit/shkrimit.

load-> helper (array ('file', 'date'));

$ data = json_decode (read_file ('../ app/logs/gatestate.data'), TRUE); switch ($ data ['gatestate']) {case 0: $ view_data ['gatestate'] = 'Mbyllur'; pushim; rasti 1: $ view_data ['gatestate'] = 'Po hapet …'; pushim; rasti 2: $ view_data ['gatestate'] = 'Hapur'; pushim; rasti 3: $ view_data ['gatestate'] = 'Po mbyllet…'; pushim; } $ last_opened = json_decode (read_file ('../ app/logs/projects/gateopened.data'), TRUE); $ view_data ['last_opened'] = kohëzgjatja e kohës ($ last_opened ['last_opened'], koha ()). ' më parë'; // Pamja e ngarkimit $ t ['data'] = $ view_data; $ this-> load-> view ('gate_view', $ t); } funksioni save_gate_state () {$ this-> load-> helper ('file'); $ data = file_get_contents ('php: // input'); write_file ('../ app/logs/projects/gatestate.data', $ data); $ data = json_decode ($ data, TRUE); if ($ data ['gatestate'] == 1) {$ last_opened = array ('last_opened' => koha ()); write_file ('../ app/logs/projects/gateopened.data', json_encode ($ last_opened)); }} funksioni get_gate_state () {$ this-> load-> helper (array ('file', 'date')); $ this-> load-> bibliotekë ('ajax'); $ data = json_decode (read_file ('../ app/logs/projects/gatestate.data'), TRUE); $ last_opened = json_decode (read_file ('../ app/logs/projects/gateopened.data'), TRUE); $ data ['last_opened'] = kohëzgjatja e kohës ($ last_opened ['last_opened'], koha ()). ' më parë'; $ this-> ajax-> output_ajax ($ data, 'json', FALSE); // dërgoni të dhëna json, mos zbatoni kërkesën ajax}}/ * Fundi i projekteve të skedarëve.php *// * Vendndodhja:./application/controllers/projects.php */

Kodi i shikimit të PHP:

Kam përdorur Bootstrap për pjesën e përparme sepse është i shpejtë, i lehtë dhe i përgjegjshëm. Mund ta shkarkoni këtu: https://getbootstrap.com (jQuery është përfshirë)

  • app/kontrolluesit/gate_view.php
  • Zëvendësoni KODIN E AGJENTIT TUAJ me kodin e agjentit Electric Imp

Shtesa e operuesit të portës IoT Shtesa e operuesit të portës IoT

  • Në shtëpi
  • Administratori

Open Gate Latch Hapur për 30 minuta Latch Open për 8 orë Mbylle Tani Statusi i Portës: Hapur për herë të fundit $ (dokument). Gati (funksioni () {resetStatus ();}) funksioni sendJSON (JSONout) {var url = 'https:// agent.electricimp.com/YOUR-AGENT-CODE '; $.post (url, JSONout); } $ ("#open_gate"). kliko (funksioni) {var JSONout = '{"c": "btn", "val": {"cmd": "hapur"}}'; sendJSON (JSONout); $ ("#status"). tekst ("Po hapet …");}); $ ("#latch30m_gate"). kliko (funksioni) {var JSONout = '{"c": "btn", "val": {"cmd": "latch30m"}}'; sendJSON (JSONout); $ ("#status"). teksti ("Po hapet …");}); $ ("#latch8h_gate"). kliko (funksioni) {var JSONout = '{"c": "btn", "val": {"cmd": "latch8h"}}'; sendJSON (JSONout); $ ("#status"). teksti ("Po hapet …");}); $ ("#close_gate"). kliko (funksioni) {var JSONout = '{"c": "btn", "val": {"cmd": "mbyll"}}'; sendJSON (JSONout); $ ("#status"). tekst ("Mbyllja …");}); funksioni resetStatus () {// URL -ja e synuar var target = 'https://projects.ajillion.com/get_gate_state'; // Kërko var data = {agent: 'app'}; // Dërgo kërkesë për postim ajax $.ajax ({url: target, dataType: 'json', type: 'POST', data: data, success: function (data, textStatus, XMLHttpRequest) {switch (data.gatestate) {case 0: $ ("#status"). Tekst ("Mbyllur"); pushim; rasti 1: $ ("#status"). Tekst ("Po hapet …"); pushim; rasti 2: $ ("#status").text ('Open'); break; case 3: $ ("#status"). text ('Mbyllja…'); break; default: $ ("#status"). tekst ('Gabim');} $ ("#last_hapur"). tekst (data.last_hapur);}, gabim: funksion (XMLHttpRequest, textStatus, errorThrown) {// Mesazh gabimi $ ("#status"). tekst ('Gabim në server');}}); setTimeout (resetStatus, 3000); }

Recommended: