
Cuprins:
- Pasul 1: Adunați părți
- Pasul 2: Configurați Raspberry Pi fără monitor sau tastatură
- Pasul 3: Instalați Wiring Pi, Apache și PHP
- Pasul 4: site-ul web
- Pasul 5: Imagine a site-ului web
- Pasul 6: Control de la distanță Webserver
- Pasul 7: Conectați circuitul la Raspberry Pi
- Pasul 8: Creați un serviciu de pornire
- Pasul 9: Atașați Raspberry Pi la garaj
- Pasul 10: Atașați Raspberry Pi la SECO-LARM
- Pasul 11: Trimiteți o alertă dacă ușa este deschisă când ar trebui închisă
- Pasul 12: Puneți Raspberry Pi în Cartea secretă
- Pasul 13: Anexă: Referințe
- Pasul 14: Anexă: Actualizări
- Pasul 15: Anexă: Depanare
2025 Autor: John Day | [email protected]. Modificat ultima dată: 2025-06-01 06:10

Am creat acest instructabil în 2014. De atunci s-au schimbat multe. În 2021, am actualizat dispozitivul de deschidere a ușii de garaj inteligent aici.
Folosiți un Raspberry Pi și un smartphone pentru a deschide, închide și monitoriza o ușă de garaj. Deschiderea și închiderea ușii sunt asigurate prin utilizarea certificatelor autosemnate instalate pe telefoanele mobile ale familiei. Dacă ușa garajului este deschisă atunci când nu ar trebui să fie, trimiteți un mesaj text (SMS) la un telefon mobil.
Ușa garajului este în uz continuu de la sfârșitul anului 2014. De-a lungul anilor, am încercat să mențin modificările actualizate. Există un apendice care descrie modificările la instructable.
Obiectivele acestui proiect sunt:
- Faceți primul meu instructable - nu am planificat să postez acest lucru, dar am primit multe cereri
- Deschideți o ușă de garaj cu o telecomandă standard
- Deschideți o ușă de garaj cu deschizătorul de garaj montat pe perete
- Deschideți o ușă de garaj cu un SmartPhone
- Monitorizați starea ușii garajului de la distanță prin intermediul unui telefon mobil sau laptop (este deschisă sau închisă?)
- Trimiteți un mesaj text pe telefonul meu mobil dacă ușa este deschisă când ar trebui închisă
- Păstrați ușa garajului sigură (de exemplu, la pierderea de energie electrică, ușa nu trebuie să se deschidă)
- Nu permiteți nimănui de pe net să deschidă ușa (certificat SSL autosemnat cu două sensuri)
- Utilizați WiFi în loc de o conexiune prin cablu
- Folosiți un Raspberry Pi 3
Baza pentru această punere în aplicare a deschiderii ușii de garaj a fost derivată din Instructable: Raspberry Pi Deschidere ușă de garaj de către quartarian. Inițial, am folosit un model B + Raspberry Pi, apoi am trecut la un Raspberry Pi 2 model B, iar acum folosește un Raspberry Pi 3.
Am folosit un MacBook pentru a comunica cu Raspberry Pi, dar poate fi folosit orice computer.
Nu există niciun motiv convingător pentru a construi acest dispozitiv, dar a fost distractiv. Este mai rentabil să cumpărați unul. Un dispozitiv similar poate fi achiziționat pentru aproximativ 130 USD.
- Lift master 828LM
- Chamberlain MyQ 129 $
- GoGo Gate 179 USD
- Artizan 100 $
Note:
- Textul închis în pică, ca acesta ♣ înlocuiți-acesta ♣ ar trebui înlocuit cu o valoare reală
- Arduino subliniat textul albastru este un link. În acest caz, este un link către o versiune arduino a unui deschizător de uși de garaj.
- Am încercat să creditez fiecare sursă utilizată. Îmi cer scuze pentru orice omisiune. Majoritatea acestui document se bazează pe munca altor persoane.
- $ indică o comandă executată într-o fereastră de terminal de pe MacBook și de obicei se execută pe Raspberry Pi
Pasul 1: Adunați părți
Cumpărați sau strângeți piese și instrumente (prețuri în USD).
- Raspberry Pi 3 Model B Newark Element14 $ 35
- Adaptor de alimentare USB de 5,2 V 2,5 A de la Amazon 9,99 USD
- Cablu Micro USB la USB 6ft de la Amazon 7,99 USD
- Caz de la Amazon 6,99 USD
- SanDisk Ultra 16 GB microSDHC Clasa 10 cu adaptor (SDSQUAN-016G-G4A) de la Amazon 8,99 USD
- SunFounder 2 canale 5V releu Shield Module pentru Arduino UNO 2560 1280 ARM PIC AVR STM32 Raspberry Pi - 6,79 USD
- 3x fire jumper feminin-feminin. Cumpărat la Fry’s pentru 4,95 USD.
- DNS dinamic de 40 USD pe an pentru 30 de nume (dyn.com)
- 1-Gang 18 cu. în. Întrerupător de perete greu și cutie de ieșire, 3,12 USD
- Placă de perete albă Ultra Pro Single Brush, 7,88 USD
- SECO-LARM SM 226L, senzor ușă de garaj, prețul variază foarte mult, 9,99 USD pe Amazon, cu transport gratuit
- 50ft de fir termostat solid, Home Depot sau Lowe's, ~ 20 USD
Totalul meu: ~ 172,00 USD
Am avut următoarele părți, instrumente și servicii:
- Cablu Ethernet CAT5
- Sârmă de dimensiuni mici, lungime de 6 ft
- Șurubelniță cu cap Phillips
- Cleste pentru nas
- Freze cutii
- Șurubelnițe cu cap plat, bijuterii, necesare pentru a slăbi șuruburile de pe releu
- MacBook (se poate utiliza un computer)
- AT&T GigaPower (poate fi utilizat orice furnizor de servicii de internet)
Pasul 2: Configurați Raspberry Pi fără monitor sau tastatură

Toate proiectele Raspberry Pi necesită un anumit tip de configurare. Îmi place să folosesc același set de instrucțiuni și, atunci când este necesar, am un singur loc pentru actualizarea acestor instrucțiuni.
Configurați Raspberry Pi utilizând următoarele instrucțiuni:
Configurați Raspberry Pi fără monitor sau tastatură
Instrucțiunile de mai sus includ pași opționali în anexă. Asigurați-vă că faceți pasul:
Adăugați certificate de partea clientului pe serverele web
Închideți Raspberry Pi
$ sudo shutdown -h 0
După închidere, eliminați
- cablu Ethernet
- Cablu serial USB
Acestea nu vor mai fi necesare. Utilizați wifi, ssh și o fereastră de terminal pe Mac Book pentru a rula comenzi pe Raspberry Pi.
Deconectați alimentarea și reconectați-o, iar raspberry pi ar trebui să repornească.
Pasul 3: Instalați Wiring Pi, Apache și PHP
Instalați Wiring Pi
Deschideți o fereastră de terminal pe Mac Book. Conectați-vă la Raspberry Pi, apoi descărcați, compilați și instalați Wiring Pi. Acest software permite controlul pinilor GPIO. Iată un ghid pas cu pas:
wiringpi.com/download-and-install/
Iată o versiune condensată a instrucțiunilor:
$ ssh pi @ ♣ zmeură-pi-ip ♣
parola: ♣ parola ♣ $ sudo apt-get install git-core $ git clone git: //git.drogon.net/wiringPi $ cd wiringPi $ git pull origin $./build
Rulați comanda gpio pentru a verifica instalarea:
$ gpio -v
versiunea gpio: 2.29 Copyright (c) 2012-2015 Gordon Henderson Acesta este un software gratuit cu ABSOLUT FĂRĂ GARANȚIE. Pentru detalii tip: gpio -warranty Raspberry Pi Detalii: Tip: Model 2, Revizie: 1.1, Memorie: 1024MB, Producător: Sony [OV] Arborele dispozitivului este activat. Acest Raspberry Pi acceptă acces GPIO la nivel de utilizator. -> Consultați pagina de manual pentru mai multe detalii $ gpio readall + ----- + ----- + --------- + ------ + --- + --- Pi 2 --- + --- + ------ + --------- + ----- + ----- + | BCM | wPi | Nume | Mod | V | Fizic | V | Mod | Nume | wPi | BCM | + ----- + ----- + --------- + ------ + --- + ---- ++ ---- + --- + - ----- + --------- + ----- + ----- + | | | 3.3v | | | 1 || 2 | | | 5v | | | | 2 | 8 | SDA.1 | IN | 1 | 3 || 4 | | | 5V | | | | 3 | 9 | SCL.1 | IN | 1 | 5 || 6 | | | 0v | | | | 4 | 7 | GPIO. 7 | OUT | 1 | 7 || 8 | 1 | ALT0 | TxD | 15 | 14 | | | | 0v | | | 9 || 10 | 1 | ALT0 | RxD | 16 | 15 | | 17 | 0 | GPIO. 0 | IN | 0 | 11 || 12 | 0 | IN | GPIO. 1 | 1 | 18 | | 27 | 2 | GPIO. 2 | IN | 0 | 13 || 14 | | | 0v | | | | 22 | 3 | GPIO. 3 | IN | 0 | 15 || 16 | 1 | IN | GPIO. 4 | 4 | 23 | | | | 3.3v | | | 17 || 18 | 0 | IN | GPIO. 5 | 5 | 24 | | 10 | 12 | MOSI | IN | 0 | 19 || 20 | | | 0v | | | | 9 | 13 | MISO | IN | 0 | 21 || 22 | 0 | IN | GPIO. 6 | 6 | 25 | | 11 | 14 | SCLK | IN | 0 | 23 || 24 | 1 | IN | CE0 | 10 | 8 | | | | 0v | | | 25 || 26 | 1 | IN | CE1 | 11 | 7 | | 0 | 30 | SDA.0 | IN | 1 | 27 || 28 | 1 | IN | SCL.0 | 31 | 1 | | 5 | 21 | GPIO.21 | IN | 1 | 29 || 30 | | | 0v | | | | 6 | 22 | GPIO.22 | IN | 1 | 31 || 32 | 0 | IN | GPIO.26 | 26 | 12 | | 13 | 23 | GPIO.23 | IN | 0 | 33 || 34 | | | 0v | | | | 19 | 24 | GPIO.24 | IN | 0 | 35 || 36 | 0 | IN | GPIO.27 | 27 | 16 | | 26 | 25 | GPIO.25 | IN | 0 | 37 || 38 | 0 | IN | GPIO.28 | 28 | 20 | | | | 0v | | | 39 || 40 | 0 | IN | GPIO.29 | 29 | 21 | + ----- + ----- + --------- + ------ + --- + ---- ++ ---- + --- + - ----- + --------- + ----- + ----- + | BCM | wPi | Nume | Mod | V | Fizic | V | Mod | Nume | wPi | BCM | + ----- + ----- + --------- + ------ + --- + --- Pi 2 --- + --- + --- --- + --------- + ----- + ----- +
Comenzile de mai sus ar trebui să vă ofere o anumită încredere că wiringPi funcționează OK.
Instalați Apache și PHP
Rulați următoarele comenzi:
$ cd..
$ sudo apt-get update $ sudo apt-get install apache2 php5 libapache2-mod-php5
Pentru a verifica funcționarea serverului web, deschideți un browser și introduceți în caseta URL:
♣ zmeură-pi-ip ♣
Site-ul implicit al lui Apache răspunde cu „Funcționează!”
Pasul 4: site-ul web
Deschideți o fereastră de terminal pe Mac Book. Conectați-vă la Raspberry Pi, apoi eliminați fișierul index.html implicit, modificați permisiunile din directorul site-ului web și editați un fișier numit index.php.
$ ssh pi @ ♣ zmeură-pi-ip ♣
parola: ♣ parola ♣ $ sudo rm /var/www/index.html $ sudo chown pi: root / var / www $ sudo nano /var/www/index.php
Și introduceți următorul cod:
Deschizător de garaj
Domotică |
---|
Deschizător ușă garaj | Manual de deschidere a ușii de garaj | închis 1 | deschideți 0 |
CTRL-o și ENTER pentru a scrie fișierul și CTRL-x pentru a ieși din editor.
Modificați permisiunile pentru fișier
$ sudo chmod 664 /var/www/index.php
Pasul 5: Imagine a site-ului web


Luați de pe web un deschizător de uși de garaj la distanță, de înaltă rezoluție. Modificați imaginea așa cum doriți folosind pensula Mac. În imaginea de mai sus, a fost utilizat un deschizător de garaj Genie de înaltă rezoluție, s-a adăugat un logo zmeură pi și ledul a fost îndepărtat.
O imagine este fundalul (remote-background.jpg), iar cealaltă este imaginea activă (remote-press.jpg).
Planul era ca la apăsarea butonului, în loc să clipească ledul, zmeura să clipească. Am simplificat site-ul web.
Copiați imaginile în raspberry pi:
$ scp *-j.webp
parola: ♣ parola ♣
Site-ul web are un singur buton. Pentru verificare, deschideți un browser și introduceți ♣ raspberry-pi-ip ♣. În loc de site-ul implicit al lui Apache, care spune „Funcționează!”, Butonul ar trebui să apară. Apasa-l.
Pasul 6: Control de la distanță Webserver
Pentru a facilita accesarea deschizătorului de uși de garaj dintr-o locație la distanță, folosesc un nume DNS dinamic. Pentru că nu-mi place să-mi amintesc adresele IP.
Cu această caracteristică, introduc ♣ nume-gazdă dinamică ♣.getmyip.com în câmpul URL al unui browser. Notă: IP-ul routerelor de acasă se poate modifica fără notificare prealabilă, dar acest lucru se întâmplă rar. Am ales să folosesc DynDNS. Va trebui să cunoașteți adresa IP publică a routerului.
U-Verse Router IP: vers uverse-public-ip ♣
Puteți vizualiza numele dvs. de gazdă și detaliile contului DynDNS Pro. Iată câteva sfaturi pentru a începe:
-
Creați numele de gazdă DNS dinamic (1 din 30):
- ♣ nume-gazdă dinamică ♣
- Actualizator cheie: ♣ dinamic-ip-actualizator-cheie ♣
-
Instalați un client de actualizare pentru a vă asigura că numele gazdei dvs. este întotdeauna îndreptat către adresa IP corectă.
- Descărcați și instalați pe MacBook
- IP-urile U-verse AT&T rareori se schimbă, astfel încât actualizatorul de mai sus poate fi rulat ori de câte ori se schimbă
-
Urmeaza direcțiile:
- Adaugă cont
- Introduceți numele de utilizator și parola: ♣ dynamic-ip-username ♣ ♣ dynamic-ip-password ♣
- Selectați numele gazdei
- Faceți clic pe Configurare gazde selectate
- Gazda ar trebui să devină activă
-
Configurați-vă rețeaua pentru a permite accesul la dispozitivul dvs. de pe Internet. Puteți utiliza expertul Dyn pentru câteva instrucțiuni generale despre cum să faceți acest lucru, puteți utiliza resurse precum PortForward.com sau contactați producătorul dispozitivului pentru asistență.
- AT-T U-vers
- Redirecționare port pentru 2 fire Wire 3801HGV - acesta este routerul AT-T U-Verse pe care îl am. Consultați Actualizări într-un apendice pentru cum să transferați portul pe routerul AT&T U-verse 5268ac.
- Deschideți browserul și accesați ♣ raspberry-pi-ip ♣
- Parolă: ♣ parolă ♣
- Setări
-
Paravan de protecție
- Alegeți ♣ raspberry-pi-hostname ♣
-
Servere
- Portul Web Server 80
- Server HTTPS - portul 443
- Adăuga
- Salvați
Odată ce acest lucru este făcut, serverul web va funcționa de pe internet. Pentru verificare, introduceți ♣ nume-gazdă dinamică ♣ și ar trebui să vedeți butonul de deschidere a ușii de garaj.
Pasul 7: Conectați circuitul la Raspberry Pi

Pentru codul furnizat (pașii 4 și 6), am folosit pinul GPIO 7. Este o coincidență faptul că GPIO 7 este același cu pinul wiringPi 7. În codul PHP, se utilizează numerele pin pin de cablare și NU numerele pin PIN GPIO. Puteți utiliza oricare dintre acestea doriți, dar asigurați-vă că modificați codul.
Am încercat să folosesc sârmă răsucită, dar releul nu ține bine firul răsucit. Sârmă solidă este mai bună.
La prima mea încercare, am creat trei cabluri de conectare (de la mamă la mamă).
- Folosiți trei cabluri jumper la femelă
-
Tăiați trei bucăți de sârmă solidă la aproximativ 1 inch.
Îndepărtați 1/4 inch pe ambele capete ale firului solid
- Introduceți un fir solid într-un cablu jumper feminin.
Iată o modalitate mai bună de a crea cabluri de conectare (de la mamă la mamă):
- Folosiți numai sârmă solidă
- Tăiați trei bucăți de sârmă solidă de 4 inci
- Îndepărtați 1/4 inch pe ambele capete ale firului solid
-
Utilizați pini de conectare de sex feminin
-
Glisați un știft de conectare mamă pe un capăt al firului solid și sertizați
Știftul feminin nu trebuie să se desprindă, lipiți dacă este necesar
- Glisați dispozitivul de eliberare a tensiunii peste știftul de conectare feminin sau știftul de acoperire cu banda electriciană
-
Conectați releul la pi așa cum se arată în diagramă:
- Conectați capătul feminin al cablului la pinul Raspberry Pi.
- Introduceți firul solid în releu.
Pasul 8: Creați un serviciu de pornire
Cele mai multe relee, inclusiv cea achiziționată, funcționează astfel:
- Când semnalul este PORNIT circuitul rămâne oprit.
- Când semnalul este OPRIT, atunci circuitul este pornit.
Dacă Raspberry Pi își pierde puterea, releul are un mecanism de siguranță care menține circuitul oprit.
O problemă ar putea apărea atunci când Rapberry Pi și releul vor fi restabiliți, dar înainte ca Raspberry Pi să termine pornirea pentru a porni semnalul care este necesar pentru a menține circuitul oprit. Te-ai putea trezi dimineața cu garajul tău deschis și potențial câțiva prieteni noi!
Cu toate acestea, releul nu se inițializează până când modul PIN GPIO nu este setat prin această comandă: gpio mode 7 out. Mai mult, dacă pinul GPIO este activat (scriere gpio 7 1) înainte de a seta modul GPIO, releul va rămâne oprit odată inițializat.
Pentru ca această inițializare să ruleze la pornire și să nu vă treziți cu noi prieteni, utilizați următorul script de pornire.
$ ssh pi @ ♣ zmeură-pi-ip ♣
$ sudo nano /etc/init.d/garagerelay
Apoi lipiți acest script:
#! / bin / bash
# /etc/init.d/garagerelay # Efectuați funcții specifice atunci când vi se solicită cazul de sistem „$ 1” în start) ecou „Pornire releu” # Turn 7 pe care menține releu dezactivat / usr / local / bin / gpio write 7 1 #Start Gpio / usr / local / bin / gpio mode 7 out;; stop) ecou „Oprirea gpio”;; *) ecou „Utilizare: /etc/init.d/garagerelay {start | stop}” ieșirea 1;; esac ieșire 0
Pentru a salva: CTRL-o, ENTER
Pentru a ieși din nano, CTRL-x
Faceți fișierul executabil:
$ sudo chmod + x /etc/init.d/garagerelay
Acum spuneți-i pi-ului dvs. să ruleze acest script la boot:
$ sudo update-rc.d -f garagerelay start 4
(Notă: puteți ignora în siguranță avertismentul „etichete LSB lipsă”.)
Asigurați-vă că scriptul de pornire rulează
$ sudo reporniți
Deschideți un browser și faceți clic pe deschizător. Releul ar trebui să facă clic.
Pasul 9: Atașați Raspberry Pi la garaj

Când mutați Raspberry Pi, asigurați-vă că rulați:
$ închidere -h 0
Poate doriți să opriți curentul din garaj. Deci, deschizătorul soneriei nu te electrocutează:). Adevăratul motiv este că de fiecare dată când scurtcircuitați firele, ușa va urca și coborî.
Desfaceți șuruburile de perete de la deschizătorul de tip sonerie, care atașează soneria de perete.
Faceți o gaură din garaj, în spatele deschizătorului soneriei, în interiorul casei. În Texas, Raspberry Pi nu ar trebui să fie în garaj, variația temperaturii în garaj fiind în afara specificațiilor de funcționare ale Raspberry Pi.
Treceți firele releului prin orificiu (utilizați un cuier).
Slăbiți ambele șuruburi de pe partea din spate a deschizătorului soneriei.
Îndepărtați ambele capete ale firelor releului: 1) aproximativ 1/8 "inch din partea releului și aproximativ ½" inch pe partea soneriei. Îndoiți partea soneriei ușii a firului într-o jumătate de buclă suficient de mare pentru a se potrivi în jurul șurubului din spate.
Conectați un fir de releu la fiecare șurub de pe partea din spate a soneriei și strângeți șurubul. Conexiunile sunt așa cum se arată în imagine. Deoarece releul izolează circuitul, direcția nu contează nici măcar ce releu este atașat la care șurub.
Pasul 10: Atașați Raspberry Pi la SECO-LARM


Înainte să termin codul, eu și familia mea eram în vacanță și mi-am deschis browserul. Ultima vizualizare a browserului meu a fost deschizătorul ușii garajului - pagina s-a reîmprospătat și ușa garajului s-a deschis. Câteva zile mai târziu, un vecin a sunat și a întrebat dacă ușa garajului ar trebui să fie deschisă? Din fericire, aș putea să-l închid de la 500 de mile distanță.
Acest snafu m-a forțat să schimb codul pentru ca acest lucru să nu se întâmple și să adaug un senzor și starea ușii garajului pe site.
Acesta este un link către instrucțiunile originale pentru adăugarea unui senzor. Cu toate acestea, având în vedere tot ce a fost deja finalizat, instalarea senzorului poate fi mult simplificată și în loc să folosiți python adăugați câteva linii de cod la index.php.
Fatal error: Uncaught Error: Call to undefined function exec() in W:\www\langs\.php-gen-lang\v3-core\macros.php(127) : eval()'d code:518 Stack trace: #0 W:\www\langs\.php-gen-lang\v3-core\macros.php(127): eval() #1 W:\www\langs\.php-gen-lang\v3-core\index-global.php(231): Macros->macros_parse('<!DOCTYPE html>...') #2 W:\www\langs\howwhatproduce.com\ro.howwhatproduce.com\index.php(9): require_once('W:\\www\\langs\\.p...') #3 {main} thrown in W:\www\langs\.php-gen-lang\v3-core\macros.php(127) : eval()'d code on line 518