
Innehållsförteckning:
- Steg 1: Samla delar
- Steg 2: Konfigurera Raspberry Pi utan bildskärm eller tangentbord
- Steg 3: Installera Wiring Pi, Apache och PHP
- Steg 4: Webbplats
- Steg 5: Webbplatsbild
- Steg 6: Fjärrstyr webbservern
- Steg 7: Koppla kretsen till Raspberry Pi
- Steg 8: Skapa en starttjänst
- Steg 9: Fäst Raspberry Pi i garaget
- Steg 10: Fäst Raspberry Pi på SECO-LARM
- Steg 11: Skicka varning om dörren är öppen när den ska stängas
- Steg 12: Lägg Raspberry Pi i hemlig bok
- Steg 13: Bilaga: Referenser
- Steg 14: Bilaga: Uppdateringar
- Steg 15: Bilaga: Felsökning
2025 Författare: John Day | [email protected]. Senast ändrad: 2025-06-01 06:10

Jag skapade detta instruerbart 2014. Mycket har förändrats sedan dess. År 2021 uppdaterade jag Smart Garage Door Opener här.
Använd en Raspberry Pi och en smartphone för att öppna, stänga och övervaka en garageport. Öppning och stängning av dörren säkras med hjälp av självsignerade certifikat installerade på familjens mobiltelefoner. Om garageporten är öppen när den inte borde vara det, skicka ett textmeddelande (SMS) till en mobiltelefon.
Garageporten har varit i kontinuerlig användning sedan slutet av 2014. Under åren har jag försökt hålla uppdateringarna uppdaterade. Det finns en bilaga som beskriver ändringarna av det instruerbara.
Målen för detta projekt är att:
- Gör min första instruerbara - jag hade inte tänkt lägga upp detta, men jag har fått många förfrågningar
- Öppna en garageport med en vanlig fjärrkontroll
- Öppna en garageport med den väggmonterade dörrklockans garageöppnare
- Öppna en garageport med en smartphone
- Övervaka garageportens status på distans via en mobiltelefon eller bärbar dator (är den öppen eller stängd?)
- Skicka ett sms till min mobiltelefon om dörren är öppen när den ska stängas
- Håll garageporten säker (t.ex. vid strömavbrott ska dörren inte öppnas)
- Låt inte någon annan på nätet öppna dörren (tvåvägs självsignerat SSL-certifikat)
- Använd WiFi istället för en kabelanslutning
- Använd en Raspberry Pi 3
Grunden för denna Garage Door Opener -implementering härleddes från Instructable: Raspberry Pi Garage Door Opener av kvartär. Ursprungligen använde jag en modell B+ Raspberry Pi, flyttade sedan till en Raspberry Pi 2 modell B, och nu använder den en Raspberry Pi 3.
Jag använde en MacBook för att kommunicera med Raspberry Pi, men vilken dator som helst kan användas.
Det finns ingen övertygande anledning att bygga den här enheten, men det var kul. Det är mer kostnadseffektivt att köpa en. En liknande enhet kan köpas för cirka $ 130 USD.
- Lift master 828LM
- Chamberlain MyQ $ 129
- GoGo Gate $ 179
- Hantverkare $ 100
Anmärkningar:
- Text i spader, så här ♣ ersätt-detta ♣ bör ersättas med ett verkligt värde
- Arduino understruken blå text är en länk. I det här fallet är det en länk till en arduino -version av en garageportöppnare.
- Jag har försökt kreditera alla källor som används. Jag ber om ursäkt för alla utelämnanden. Det mesta av detta dokument är baserat på andras arbete.
- $ indikerar ett kommando som körs i ett terminalfönster på MacBook och vanligtvis körs på Raspberry Pi
Steg 1: Samla delar
Köp eller samla delar och verktyg (priser i USD).
- Raspberry Pi 3 Model B Newark Element14 $ 35
- 5.2V 2.5A USB -strömadapter från Amazon $ 9,99
- Micro USB till USB -kabel 6ft från Amazon $ 7,99
- Fodral från Amazon $ 6,99
- SanDisk Ultra 16 GB microSDHC klass 10 med adapter (SDSQUAN-016G-G4A) från Amazon $ 8,99
- SunFounder 2 Channel 5V Relay Shield Module för Arduino UNO 2560 1280 ARM PIC AVR STM32 Raspberry Pi - $ 6,79
- 3x kvinnliga-kvinnliga bygeltrådar. Köpt på Fry's för 4,95 dollar.
- Dynamisk DNS $ 40 per år för 30 namn (dyn.com)
- 1-Gang 18 cu. in. Old Work Heavy Wall Switch och Outlet Box, $ 3,12
- Ultra Pro Single Brush White Wall Plate, $ 7,88
- SECO-LARM SM 226L, Garage Door Sensor, priset varierar mycket, $ 9,99 på Amazon med gratis frakt
- 50ft fast termostatledning, Home Depot eller Lowe's, ~ $ 20
Min summa: ~ $ 172,00
Jag hade följande delar, verktyg och tjänster:
- CAT5 Ethernet -kabel
- Liten mättråd, 6 fot lång
- Phillips skruvmejsel
- Nåltång
- Boxfräsar
- Juvelerare med skruvmejsel med platt huvud, behövs för att lossa skruvarna på reläet
- MacBook (en dator kan användas)
- AT&T GigaPower (vilken internetleverantör som helst kan användas)
Steg 2: Konfigurera Raspberry Pi utan bildskärm eller tangentbord

Alla Raspberry Pi -projekt kräver någon form av installation. Jag gillar att använda samma uppsättning instruktioner och har vid behov ett ställe för att uppdatera dessa instruktioner.
Konfigurera Raspberry Pi med följande instruktioner:
Konfigurera Raspberry Pi utan bildskärm eller tangentbord
Den instruerbara ovan innehåller valfria steg i bilagan. Var noga med att göra steget:
Lägg till certifikat på klientsidan till webbservrar
Stäng Raspberry Pi
$ sudo avstängning -h 0
När du har stängt av, ta bort
- ethernetkabel
- USB -seriell kabel
Dessa behövs inte längre. Använd wifi, ssh och ett terminalfönster på Mac Book för att köra kommandon på Raspberry Pi.
Koppla ur strömmen och sätt i strömmen igen, så ska hallon pi starta om.
Steg 3: Installera Wiring Pi, Apache och PHP
Installera Wiring Pi
Öppna ett terminalfönster på Mac Book. Logga in på Raspberry Pi, ladda ner, kompilera och installera Wiring Pi. Denna programvara möjliggör kontroll av GPIO -stiften. Här är en steg-för-steg-guide:
wiringpi.com/download-and-install/
Här är en sammanfattad version av instruktionerna:
$ ssh pi@♣ hallon-pi-ip ♣
lösenord: ♣ lösenord ♣ $ sudo apt-get install git-core $ git klon git: //git.drogon.net/wiringPi $ cd wiringPi $ git pull origin $./build
Kör kommandot gpio för att kontrollera installationen:
$ gpio -v
gpio-version: 2.29 Copyright (c) 2012-2015 Gordon Henderson Detta är gratis programvara med ABSOLUT INGEN GARANTI. För detaljer typ: gpio -garanti Raspberry Pi Detaljer: Typ: Modell 2, Revision: 1.1, Minne: 1024MB, Maker: Sony [OV] Enhetsträd är aktiverat. Denna Raspberry Pi stöder GPIO-åtkomst på användarnivå. -> Se man-sidan för mer information $ gpio readall+-----+-----+---------+------+---+--- Pi 2 ---+---+------+---------+-----+-----+| BCM | wPi | Namn | Läge | V | Fysisk | V | Läge | Namn | 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 | UT | 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 | Namn | Läge | V | Fysisk | V | Läge | Namn | wPi | BCM | +-----+-----+---------+------+---+--- Pi 2 ---+---+--- ---+---------+-----+-----+
Kommandona ovan bör ge dig ett visst förtroende för att wiringPi fungerar OK.
Installera Apache och PHP
Kör följande kommandon:
$ cd..
$ sudo apt-get update $ sudo apt-get install apache2 php5 libapache2-mod-php5
För att verifiera att webbservern fungerar, öppna en webbläsare och ange i rutan URL:
♣ hallon-pi-ip ♣
Apaches standardwebbplats svarar med "Det fungerar!"
Steg 4: Webbplats
Öppna ett terminalfönster på Mac Book. Logga in på Raspberry Pi, ta bort standardindex.html -filen, ändra behörigheterna i webbplatskatalogen och redigera en fil som heter index.php.
$ ssh pi@♣ hallon-pi-ip ♣
lösenord: ♣ lösenord ♣ $ sudo rm /var/www/index.html $ sudo chown pi: root/var/www $ sudo nano /var/www/index.php
Och ange följande kod:
Garageöppnare
Hemautomation |
---|
Garageportöppnare | Garageportöppnare Manual | stängt 1 | öppna 0 |
CTRL-o och ENTER för att skriva filen och CTRL-x för att lämna redigeraren.
Ändra behörigheter för filen
$ sudo chmod 664 /var/www/index.php
Steg 5: Webbplatsbild


Ta en högupplöst fjärrdörröppnare från nätet. Ändra bilden som du vill med Mac pensel. På bilden ovan användes en högupplöst Genie Garage Opener, en hallon pi -logotyp tillsattes och lysdioden togs bort.
En bild är bakgrunden (remote-background.jpg), och den andra är den aktiva bilden (remote-press.jpg).
Planen var att vid knapptryckning, i stället för att blinka lysdioden, skulle hallon blinka. Jag förenklade webbplatsen.
Kopiera bilderna till hallon pi:
$ scp *-j.webp
lösenord: ♣ lösenord ♣
Webbplatsen har en enda tryckknapp. För att verifiera, öppna en webbläsare och ange ♣ raspberry-pi-ip ♣. Istället för Apaches standardwebbplats, där det står "Det fungerar!", Ska knappen visas. Tryck på den.
Steg 6: Fjärrstyr webbservern
För att göra det enkelt att komma åt garageportöppnaren från en avlägsen plats använder jag ett dynamiskt DNS -namn. För jag gillar inte att komma ihåg IP -adresser.
Med den här funktionen anger jag ♣ dynamic-hostname get.getmyip.com i URL-fältet i en webbläsare. Obs: IP -adressen på hemrouter kan ändras utan föregående meddelande, men detta händer sällan. Jag valde att använda DynDNS. Du måste känna till din routers offentliga IP -adress.
U-Verse Router IP: ♣ uverse-public-ip ♣
Du kan se dina värdnamn och DynDNS Pro -kontouppgifter. Här är några tips för att komma igång:
-
Skapa ditt dynamiska DNS -värdnamn (1 av 30):
- ♣ dynamiskt värdnamn ♣
- Uppdateringsnyckel: ♣ dynamic-ip-updater-key ♣
-
Installera en uppdateringsklient för att säkerställa att ditt värdnamn alltid riktas till rätt IP -adress.
- Ladda ner och installera på MacBook
- AT & T U-vers IP-adresser ändras sällan, så uppdateraren ovan kan köras när den ändras
-
Följ anvisningarna:
- Lägg till konto
- Ange användarnamn och lösenord: ♣ dynamic-ip-användarnamn ♣ ♣ dynamic-ip-lösenord ♣
- Välj värdnamn
- Klicka på Konfigurera utvalda värdar
- Värd bör bli aktiv
-
Konfigurera ditt nätverk för att ge åtkomst till din enhet från Internet. Du kan använda vår Dyn Wizard för några allmänna instruktioner om hur du gör detta, använda resurser som PortForward.com eller kontakta enhetens tillverkare för att få hjälp.
- AT&T U-vers
- Port Forwarding för 2-Wire 3801HGV-det här är AT&T U-Verse-routern jag har. Se Uppdateringar i en bilaga för hur du vidarebefordrar porten till AT&T U-vers 5268ac-routern.
- Öppna webbläsaren och gå till ♣ raspberry-pi-ip ♣
- Lösenord: ♣ lösenord ♣
- inställningar
-
Brandvägg
- Välj "hallon-pi-värdnamn"
-
Servrar
- Webbserverport 80
- HTTPS -server - port 443
- Lägg till
- Spara
När detta är gjort fungerar webbservern från internet. För att verifiera, ange ♣ dynamiskt-värdnamn ♣ och du bör se garageportöppnarknappen.
Steg 7: Koppla kretsen till Raspberry Pi

För koden (steg 4 och 6) använde jag GPIO -stift 7. Det är en slump att GPIO 7 är detsamma som wiringPi -stift 7. I PHP -koden används ledningar för Pi -stift och INTE GPIO -stiftnummer. Du kan använda vilken du vill, men var noga med att ändra koden.
Jag försökte använda vriden tråd, men reläet håller inte bra på vriden tråd. Fast tråd är bättre.
Vid mitt första försök skapade jag tre anslutningskablar (hona-till-hane).
- Använd tre kvinnliga till kvinnliga bygelkablar
-
Skär tre bitar fast tråd till ca 1 tum.
Strip 1/4in på båda ändarna av massiv tråd
- Sätt i en solid tråd i en honkabel.
Här är ett bättre sätt att skapa anslutningskablar (hona-till-hane):
- Använd endast fast tråd
- Skär tre bitar av fast tråd
- Strip 1/4in på båda ändarna av massiv tråd
-
Använd honanslutningsstift
- Skjut en honkontaktstift på ena änden av massiv tråd och krympa
Honstiftet ska inte lossna, löd vid behov
- Skjut dragavlastningen över honanslutningsstiftet eller täckstiftet med elektrikerstejp
- Skjut en honkontaktstift på ena änden av massiv tråd och krympa
Koppla reläet till pi enligt diagrammet:
- Anslut honänden av kabeln till Raspberry Pi -stiftet.
- Sätt in massiv tråd i reläet.
Steg 8: Skapa en starttjänst
De flesta reläer inklusive den köpta fungerar så här:
- När signalen är PÅ stannar kretsen av.
- När signalen är AV är kretsen på.
Om Raspberry Pi tappar ström har reläet en säkerhetsmekanism som håller kretsen AV.
Ett problem kan uppstå när Rapberry Pi och reläet får strömmen återställd, men innan Raspberry Pi har startat upp för att slå på signalen som är nödvändig för att hålla kretsen avstängd. Du kan vakna på morgonen med ditt garage öppet och eventuellt några nya vänner!
Reläet initieras dock inte förrän GPIO -stiftläget är inställt via det här kommandot: gpio -läge 7 ut. Om GPIO -stiftet till PÅ (gpio skriv 7 1) dessutom ställs in innan du ställer in GPIO -läget, kommer reläet att vara av när det initierats.
För att få denna initialisering att köra vid start och inte vakna till nya vänner, använd följande startskript.
$ ssh pi@♣ hallon-pi-ip ♣
$ sudo nano /etc/init.d/garagerelay
Klistra sedan in det här skriptet:
#! /bin/bash
# /etc/init.d/garagerelay # Utför specifika funktioner när systemfrågan "$ 1" uppmanas till det) echo "Startrelä" # Slå på 7 som håller reläet av/usr/local/bin/gpio write 7 1 #Start Gpio/usr/local/bin/gpio mode 7 out;; stopp) eko "Stoppa gpio";; *) eko "Användning: /etc/init.d/garagerelay {start | stop}" avsluta 1;; esac exit 0
För att spara: CTRL-o, ENTER
För att avsluta nano, CTRL-x
Gör filen körbar:
$ sudo chmod +x /etc/init.d/garagerelay
Berätta nu för din pi att köra detta skript vid start:
$ sudo update -rc.d -f garagerelay start 4
(Obs! Du kan säkert ignorera varningen "saknade LSB -taggar".)
Se till att startskriptet körs
$ sudo starta om
Öppna en webbläsare och klicka på öppnaren. Reläet ska klicka.
Steg 9: Fäst Raspberry Pi i garaget

När du flyttar Raspberry Pi ska du köra:
$ avstängning -h 0
Du kanske vill stänga av strömmen till garaget. Så dörren öppnar dig inte:). Den verkliga orsaken är att varje gång du kortar trådarna går dörren upp och ner.
Lossa väggskruvarna från dörrklockans öppnare, som fäster dörrklockan på väggen.
Stick ett hål igenom från garaget bakom dörrklocköppnaren till inne i huset. I Texas ska Raspberry Pi inte vara i garaget, temperaturvariationen i garaget är utanför Raspberry Pi: s driftsspecifikationer.
Dra relätrådarna genom hålet (använd en klädhängare).
Lossa båda skruvarna på baksidan av dörrklocköppnaren.
Ta bort relätrådarnas båda ändar: 1) cirka 1/8 tum av reläsidan och cirka ½ tum på dörrklockans sida. Böj dörrklockans sida av tråden till en halv slinga som är tillräckligt stor för att passa runt skruven på baksidan.
Anslut en relätråd till varje skruv på baksidan av dörrklockan och dra åt skruven. Anslutningarna är som visas på bilden. Eftersom reläet isolerar kretsen spelar riktningen inte ens någon roll vilket relä som är fäst vid vilken skruv.
Steg 10: Fäst Raspberry Pi på SECO-LARM


Innan jag hade koden klar var jag och min familj på semester och jag öppnade min webbläsare. Min webbläsares sista vy var av garageportöppnaren - sidan uppdaterades och garageporten öppnades. Några dagar senare ringde en granne och frågade om garageporten skulle vara öppen? Lyckligtvis kunde jag stänga den från 500 mil bort.
Denna snafu tvingade mig att ändra koden så att detta inte skulle hända och lägga till en sensor och garageportens tillstånd till webbplatsen.
Detta är en länk till den ursprungliga instruerbara för att lägga till en sensor. Men med tanke på allt som redan har slutförts kan installationen av sensorn förenklas mycket och istället för att använda python lägger du till ett par rader kod till 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\sv.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