
Taula de continguts:
- Pas 1: reuniu parts
- Pas 2: configureu Raspberry Pi sense monitor ni teclat
- Pas 3: instal·leu Wiring Pi, Apache i PHP
- Pas 4: lloc web
- Pas 5: imatge del lloc web
- Pas 6: control remot del servidor web
- Pas 7: connecteu el circuit al Raspberry Pi
- Pas 8: creeu un servei d'inici
- Pas 9: connecteu Raspberry Pi al garatge
- Pas 10: connecteu Raspberry Pi a SECO-LARM
- Pas 11: envieu l'alerta si la porta està oberta quan s'ha de tancar
- Pas 12: poseu Raspberry Pi al llibre secret
- Pas 13: Apèndix: Referències
- Pas 14: Apèndix: actualitzacions
- Pas 15: Apèndix: Solució de problemes
2025 Autora: John Day | [email protected]. Última modificació: 2025-06-01 06:08

Vaig crear aquesta instrucció el 2014. Des de llavors, han canviat molt. El 2021, vaig actualitzar l’obridor de portes de garatge intel·ligent aquí.
Utilitzeu un Raspberry Pi i un telèfon intel·ligent per obrir, tancar i controlar una porta del garatge. L’obertura i el tancament de la porta es garanteixen mitjançant certificats autofirmats instal·lats als telèfons mòbils de la família. Si la porta del garatge està oberta quan no hauria d’estar, envieu un missatge de text (SMS) a un telèfon mòbil.
La porta del garatge fa un ús continuat des de finals del 2014. Amb els anys he intentat mantenir els canvis actualitzats. Hi ha un apèndix que descriu els canvis a la instrucció.
Els objectius d’aquest projecte són:
- Feu que sigui el primer instructiu: no tenia previst publicar-ho, però he rebut moltes sol·licituds
- Obriu una porta del garatge amb un comandament a distància estàndard
- Obriu una porta de garatge amb l’obridor de timbre muntat a la paret
- Obriu una porta del garatge amb un telèfon intel·ligent
- Superviseu l’estat de la porta del garatge de manera remota mitjançant un telèfon mòbil o un ordinador portàtil (està obert o tancat?)
- Envieu un missatge de text al meu telèfon mòbil si la porta està oberta quan s’hauria de tancar
- Mantingueu la porta del garatge segura (per exemple, en cas de pèrdua d’alimentació, la porta no s’hauria d’obrir)
- No permeteu que ningú més a la xarxa obri la porta (certificat SSL bidireccional autofirmat)
- Utilitzeu WiFi en lloc d’una connexió per cable
- Utilitzeu un Raspberry Pi 3
La base d’aquesta implementació de l’obridor de portes de garatge es va derivar de l’instructible: obridor de portes de garatge Raspberry Pi del quartari. Originalment, feia servir un model B + Raspberry Pi, que després em vaig mudar a un Raspberry Pi 2 model B i ara fa servir un Raspberry Pi 3.
Vaig utilitzar un MacBook per comunicar-me amb el Raspberry Pi, però es pot utilitzar qualsevol ordinador.
No hi ha cap raó convincent per construir aquest dispositiu, però va ser divertit. Comprar-ne un és més rendible. Es pot comprar un dispositiu similar per uns 130 USD.
- Lift master 828LM
- Chamberlain MyQ 129 dòlars
- GoGo Gate: 179 dòlars
- Artesà 100 dòlars
Notes:
- El text inclòs en pics, com aquest ♣ replace-this ♣, s'ha de substituir per un valor real
- El text blau subratllat Arduino és un enllaç. En aquest cas, es tracta d’un enllaç a una versió arduino d’un obridor de portes de garatge.
- He intentat acreditar totes les fonts utilitzades. Disculpeu les omissions. La major part d’aquest document es basa en el treball d’altres persones.
- $ indica una ordre executada en una finestra de terminal al MacBook i que normalment s’executa al Raspberry Pi
Pas 1: reuniu parts
Comprar o reunir peces i eines (preus en USD).
- Raspberry Pi 3 Model B Newark Element14 $ 35
- Adaptador d'alimentació USB de 5,2 V 2,5 A d'Amazon 9,99 dòlars
- Cable micro USB a USB de 6 peus des d’Amazon 7,99 dòlars
- Funda d'Amazon 6,99 dòlars
- SanDisk Ultra 16 GB microSDHC Classe 10 amb adaptador (SDSQUAN-016G-G4A) des d’Amazon 8,99 dòlars
- Mòdul d’escut de relé 5 canals SunFounder de 2 canals per Arduino UNO 2560 1280 ARM PIC AVR STM32 Raspberry Pi - 6,79 $
- 3x cables de pont femení-femení. Comprat a Fry’s per 4,95 dòlars.
- DNS dinàmic de 40 dòlars anuals per a 30 noms (dyn.com)
- 1 colla de 18 cu. in. Interruptor i caixa de sortida de paret pesada Old Work, 3,12 dòlars
- Placa de paret blanca Ultra Pro amb pinzell senzill, 7,88 dòlars
- SECO-LARM SM 226L, sensor de porta de garatge, el preu varia molt, 9,99 dòlars a Amazon amb enviament gratuït
- 50 peus de cable de termòstat sòlid, Home Depot o Lowe's, ~ 20 dòlars
El meu total: ~ 172,00 $
Tenia les següents parts, eines i serveis:
- Cable Ethernet CAT5
- Filferro de calibre petit, de 6 peus de llarg
- Tornavís Phillips
- Alicates d'agulla
- Talladors de caixes
- Tornavisos de punta plana de joieria, necessaris per afluixar els cargols del relé
- MacBook (es pot utilitzar un PC)
- AT&T GigaPower (es pot utilitzar qualsevol proveïdor de serveis d'Internet)
Pas 2: configureu Raspberry Pi sense monitor ni teclat

Tots els projectes de Raspberry Pi requereixen algun tipus de configuració. M'agrada utilitzar el mateix conjunt d'instruccions i, quan calgui, tinc un lloc per actualitzar-les.
Configureu Raspberry Pi mitjançant el següent mètode instructiu:
Configureu Raspberry Pi sense monitor ni teclat
La instrucció anterior inclou passos opcionals a l'apèndix. Assegureu-vos de fer el pas:
Afegiu certificats del costat del client als servidors web
Apagar Raspberry Pi
$ sudo shutdown -h 0
Un cop apagat, elimineu-lo
- cable ethernet
- Cable sèrie USB
Aquestes ja no seran necessàries. Utilitzeu wifi, ssh i una finestra de terminal al Mac Book per executar ordres al Raspberry Pi.
Desconnecteu l’alimentació i torneu a endollar-la i el raspberry pi s’hauria de reiniciar.
Pas 3: instal·leu Wiring Pi, Apache i PHP
Instal·leu el cablejat Pi
Obriu una finestra de terminal al Mac Book. Inicieu la sessió a Raspberry Pi i, a continuació, descarregueu, compileu i instal·leu Wiring Pi. Aquest programari permet controlar els pins GPIO. Aquí teniu una guia pas a pas:
wiringpi.com/download-and-install/
Aquí teniu una versió resumida de les instruccions:
$ ssh pi @ ♣ raspberry-pi-ip ♣
contrasenya: ♣ contrasenya ♣ $ sudo apt-get install git-core $ git clone git: //git.drogon.net/wiringPi $ cd wiringPi $ git pull origin $./build
Executeu l'ordre gpio per comprovar la instal·lació:
$ gpio -v
versió de gpio: 2.29 Copyright (c) 2012-2015 Gordon Henderson Aquest és un programari lliure que no té absolutament cap garantia. Per obtenir informació detallada, escriviu: gpio -warranty Raspberry Pi Detalls: Tipus: Model 2, Revisió: 1.1, Memòria: 1024 MB, Creador: Sony [OV] L'arbre del dispositiu està habilitat. Aquest Raspberry Pi admet l'accés GPIO a nivell d'usuari. -> Consulteu la pàgina de manual per obtenir més informació $ gpio readall + ----- + ----- + --------- + ------ + --- + --- Pi 2 --- + --- + ------ + --------- + ----- + ----- + | BCM | wPi | Nom | Mode | V | Físic | V | Mode | Nom | wPi | BCM | + ----- + ----- + --------- + ------ + --- + ---- ++ ---- + --- + - ----- + --------- + ----- + ----- + | | | 3.3v | | | 1 || 2 | | | 5v | | | | 2 | 8 | SDA.1 | EN | 1 | 3 || 4 | | | 5V | | | | 3 | 9 | SCL.1 | EN | 1 | 5 || 6 | | | 0v | | | | 4 | 7 | GPIO. 7 | Fora | 1 | 7 || 8 | 1 | ALT0 | TxD | 15 | 14 | | | | 0v | | | 9 || 10 | 1 | ALT0 | RxD | 16 | 15 | | 17 | 0 | GPIO. 0 | EN | 0 | 11 || 12 | 0 | EN | GPIO. 1 | 1 | 18 | | 27 | 2 | GPIO. 2 | EN | 0 | 13 || 14 | | | 0v | | | | 22 | 3 | GPIO. 3 | EN | 0 | 15 || 16 | 1 | EN | GPIO. 4 | 4 | 23 | | | | 3.3v | | | 17 || 18 | 0 | EN | GPIO. 5 | 5 | 24 | | 10 | 12 | MOSI | EN | 0 | 19 || 20 | | | 0v | | | | 9 | 13 | MISO | EN | 0 | 21 || 22 | 0 | EN | GPIO. 6 | 6 | 25 | | 11 | 14 | SCLK | EN | 0 | 23 || 24 | 1 | EN | CE0 | 10 | 8 | | | | 0v | | | 25 || 26 | 1 | EN | CE1 | 11 | 7 | | 0 | 30 | SDA.0 | EN | 1 | 27 || 28 | 1 | EN | SCL.0 | 31 | 1 | | 5 | 21 | GPIO.21 | EN | 1 | 29 || 30 | | | 0v | | | | 6 | 22 | GPIO.22 | EN | 1 | 31 || 32 | 0 | EN | GPIO.26 | 26 | 12 | | 13 | 23 | GPIO.23 | EN | 0 | 33 || 34 | | | 0v | | | | 19 | 24 | GPIO.24 | EN | 0 | 35 || 36 | 0 | EN | GPIO.27 | 27 | 16 | | 26 | 25 | GPIO.25 | EN | 0 | 37 || 38 | 0 | EN | GPIO.28 | 28 | 20 | | | | 0v | | | 39 || 40 | 0 | EN | GPIO.29 | 29 | 21 | + ----- + ----- + --------- + ------ + --- + ---- ++ ---- + --- + - ----- + --------- + ----- + ----- + | BCM | wPi | Nom | Mode | V | Físic | V | Mode | Nom | wPi | BCM | + ----- + ----- + --------- + ------ + --- + --- Pi 2 --- + --- + --- --- + --------- + ----- + ----- +
Les ordres anteriors us donaran certa confiança que wiringPi funciona correctament.
Instal·leu Apache i PHP
Executeu les ordres següents:
$ cd..
$ sudo apt-get update $ sudo apt-get install apache2 php5 libapache2-mod-php5
Per verificar que el servidor web funciona, obriu un navegador i al quadre URL introduïu:
♣ raspberry-pi-ip ♣
El lloc web predeterminat d'Apache respon amb "Funciona".
Pas 4: lloc web
Obriu una finestra de terminal al Mac Book. Inicieu la sessió a Raspberry Pi i, a continuació, traieu el fitxer index.html per defecte, canvieu els permisos del directori del lloc web i editeu un fitxer anomenat index.php.
$ ssh pi @ ♣ raspberry-pi-ip ♣
contrasenya: ♣ contrasenya ♣ $ sudo rm /var/www/index.html $ sudo chown pi: root / var / www $ sudo nano /var/www/index.php
I introduïu el codi següent:
Obridor de garatge
Domòtica |
---|
Obridor de portes de garatge | Manual d'obertura de portes de garatge | tancat 1 | obre 0 |
CTRL-o i ENTER per escriure el fitxer i CTRL-x per sortir de l'editor.
Canvieu els permisos del fitxer
$ sudo chmod 664 /var/www/index.php
Pas 5: imatge del lloc web


Agafeu un obridor de portes de garatge remot en alta resolució del web. Modifiqueu la imatge com vulgueu amb el pinzell Mac. A la imatge superior, es va utilitzar un obridor de garatge Genie d'alta resolució, es va afegir un logotip de raspberry pi i es va eliminar el led.
Una imatge és el fons (remote-background.jpg) i l’altra és la imatge activa (remote-press.jpg).
El pla era que en prémer el botó, en lloc de parpellejar el led, el gerd parpellegés. He simplificat el lloc web.
Copieu les imatges al raspberry pi:
$ scp *-j.webp
contrasenya: ♣ contrasenya ♣
El lloc web té un sol polsador. Per verificar, obriu un navegador i introduïu ♣ raspberry-pi-ip ♣. En lloc del lloc web predeterminat d'Apache, que diu "Funciona", hauria d'aparèixer el botó. Premeu-lo.
Pas 6: control remot del servidor web
Per facilitar l'accés a l'obertura de portes de garatge des d'una ubicació remota, faig servir un nom DNS dinàmic. Perquè no m’agrada recordar les adreces IP.
Amb aquesta funció, introdueixo ♣ dynamic-hostname ♣.getmyip.com al camp URL d’un navegador. Nota: La IP dels routers domèstics pot canviar sense previ avís, però poques vegades això passa. Vaig triar utilitzar DynDNS. Haureu de conèixer l'adreça IP pública del vostre enrutador.
IP del router de versos en U: vers ip-públic versiu
Podeu veure els vostres noms d’amfitrió i els detalls del compte DynDNS Pro. Aquests són alguns consells per començar:
-
Creeu el vostre nom d'amfitrió DNS dinàmic (1 de 30):
- ♣ nom-amfitrió dinàmic ♣
- Clau d'actualització: ♣ key-ip-updater-dynamic ♣
-
Instal·leu un client d'actualització per assegurar-vos que el vostre nom d'amfitrió sempre apunti a l'adreça IP correcta.
- Baixeu-lo i instal·leu-lo al MacBook
- Les adreces IP U-verse d’AT&T poques vegades canvien, de manera que l’actualitzador anterior es pot executar sempre que canviï
-
Seguiu les instruccions:
- Afegir compte
- Introduïu el nom d'usuari i la contrasenya: ♣ dynamic-ip-username ♣ ♣ dynamic-ip-password ♣
- Seleccioneu el nom de l'amfitrió
- Feu clic a Configura els amfitrions seleccionats
- L’amfitrió hauria d’estar actiu
-
Configureu la vostra xarxa per permetre l'accés al vostre dispositiu des d'Internet. Podeu utilitzar el nostre assistent Dyn per obtenir instruccions generals sobre com fer-ho, utilitzar recursos com PortForward.com o contactar amb el fabricant del dispositiu per obtenir ajuda.
- AT-T U-vers
- Reenviament de ports per a 2 fils 3801HGV: aquest és el router AT-T U-Verse que tinc. Consulteu Actualitzacions en un apèndix per saber com reenviar el port al router AT-T U-verse 5268ac.
- Obriu el navegador i aneu a ♣ raspberry-pi-ip ♣
- Contrasenya: ♣ contrasenya ♣
- Configuració
-
Tallafoc
- Trieu ♣ raspberry-pi-hostname ♣
-
Servidors
- Port 80 del servidor web
- Servidor HTTPS: port 443
- Afegeix
- Desa
Un cop fet això, el servidor web funcionarà des d'Internet. Per verificar, introduïu ♣ nom-amfitrió dinàmic ♣ i hauríeu de veure el botó d'obertura de la porta del garatge.
Pas 7: connecteu el circuit al Raspberry Pi

Per al codi proporcionat (passos 4 i 6), he utilitzat el pin 7. GPIO. És coincidència que GPIO 7 és el mateix que el pin 7. wiringPi. Al codi PHP s’utilitzen els números de pin Pi de cablejat i NO els números de pin GPIO. Podeu utilitzar el que vulgueu, però assegureu-vos de canviar el codi.
Vaig provar d'utilitzar filferro retorçat, però el relé no s'adapta bé al filferro trenat. El filferro sòlid és millor.
En el meu primer intent, vaig crear tres cables de connexió (femella a mascle).
- Utilitzeu tres cables de pont femella a femella
-
Talleu tres trossos de filferro sòlid a aproximadament 1 polzada.
Tireu 1/4 de polz als dos extrems de filferro sòlid
- Introduïu un cable sòlid en un cable de pont femella.
A continuació, es mostra una manera millor de crear cables de connexió (femella a mascle):
- Utilitzeu només filferro sòlid
- Talleu tres trossos de filferro sòlid de 4 polzades
- Tireu 1/4 de polz als dos extrems de filferro sòlid
- Utilitzeu passadors de connexió femella
-
Feu lliscar un passador de connexió femella per un extrem del filferro massís i encreuar-lo
El passador femella no s'ha de desprendre, soldar si cal
- Feu lliscar el relleu de tensió sobre el passador de connexió femení o el passador de tapa amb cinta d’electricista
-
Connecteu el relé al pi tal com es mostra al diagrama:
- Connecteu l'extrem femella del cable al pin Raspberry Pi.
- Inseriu filferro sòlid al relé.
Pas 8: creeu un servei d'inici
La majoria dels relés, inclòs el comprat, funcionen així:
- Quan el senyal està activat, el circuit queda apagat.
- Quan el senyal està DESACTIVAT, el circuit està encès.
Si el Raspberry Pi perd energia, el relé té un mecanisme de seguretat que manté el circuit APAGAT.
Es podria produir un problema quan el Rapberry Pi i el relé es restauren, però abans que el Raspberry Pi hagi acabat d’arrencar per activar el senyal que és necessari per mantenir el circuit apagat. Podeu despertar-vos al matí amb el garatge obert i potencialment uns quants amics nous!
Tot i això, el relé no s’inicialitza fins que el mode pin GPIO s’estableix mitjançant aquesta ordre: mode gpio 7 fora. A més, si el pin GPIO està activat (gpio write 7 1) abans d’establir el mode GPIO, el relé es mantindrà apagat un cop inicialitzat.
Per fer que aquesta inicialització s’executi a l’arrencada i no es desperti amb nous amics, utilitzeu el següent script d’inici.
$ ssh pi @ ♣ raspberry-pi-ip ♣
$ sudo nano /etc/init.d/garagerelay
A continuació, enganxeu aquest script:
#! / bin / bash
# /etc/init.d/garagerelay # Realitzeu funcions específiques quan se us demani el cas del sistema "$ 1" a l'inici) feu ressò de "Start Relay" # Turn 7 on manté el relé desactivat / usr / local / bin / gpio write 7 1 #Inicieu el mode 7 Gpio / usr / local / bin / gpio;; stop) echo "Stop gpio";; *) ressò "Ús: /etc/init.d/garagerelay {start | stop}" sortida 1;; sortida 0 d'esac
Per desar: CTRL-o, ENTRAR
Per sortir de nano, CTRL-x
Feu que el fitxer sigui executable:
$ sudo chmod + x /etc/init.d/garagerelay
Ara digueu al vostre pi que executi aquest script a l'arrencada:
$ sudo update-rc.d -f garagerelay start 4
(Nota: Podeu ignorar de forma segura l'advertiment sobre "etiquetes LSB que falten").
Assegureu-vos que s’executa l’escriptura d’inici
$ sudo reiniciar
Obriu un navegador i feu clic a l'obertura. El relé ha de fer clic.
Pas 9: connecteu Raspberry Pi al garatge

Quan moveu el Raspberry Pi, assegureu-vos d'executar:
$ shutdown -h 0
És possible que vulgueu apagar el garatge. Per tant, l’obridor del timbre no t’electrocuta:). La veritable raó és que cada vegada que es tallen els cables, la porta puja i baixa.
Desfeu els cargols de la paret de l'obridor del timbre, que fixa el timbre a la paret.
Feu un forat des del garatge darrere de l’obridor del timbre fins a l’interior de la casa. A Texas, el Raspberry Pi no hauria d’estar al garatge, la variació de temperatura del garatge és fora de les especificacions de funcionament del Raspberry Pi.
Feu passar els cables del relé pel forat (utilitzeu un penjador).
Afluixeu els dos cargols de la part posterior de l'obertura del timbre.
Retireu els dos extrems dels cables del relé: 1) aproximadament 1/8 "de polzada del costat del relé i aproximadament ½" de polzada al costat del timbre. Doblegueu el costat del timbre del cable en un mitjà bucle prou gran per encabir-lo al voltant del cargol posterior.
Connecteu un cable de relé a cada cargol situat a la part posterior del timbre de la porta i estrenyiu el cargol. Les connexions són les que es mostren a la imatge. Com que el relé aïlla el circuit, la direcció ni tan sols importa a quin relé estigui unit a quin cargol.
Pas 10: connecteu Raspberry Pi a SECO-LARM


Abans d’acabar el codi, la meva família i jo estàvem de vacances i vam obrir el navegador. La darrera visualització del meu navegador era l’obertura de la porta del garatge: la pàgina s’ha actualitzat i la porta del garatge s’ha obert. Uns dies després, un veí va trucar i va preguntar si la porta del garatge hauria d’estar oberta? Per sort, el podria tancar a 500 milles de distància.
Aquest snafu em va obligar a canviar el codi perquè això no passés i afegir un sensor i l'estat de la porta del garatge al lloc web.
Aquest és un enllaç a la instrucció original per afegir un sensor. Tot i això, tenint en compte tot el que ja s’ha completat, la instal·lació del sensor es pot simplificar molt i, en lloc d’utilitzar python, afegiu un parell de línies de codi a 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:516 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\ca.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 516