
Spisu treści:
- Krok 1: Zbierz części
- Krok 2: Skonfiguruj Raspberry Pi bez monitora lub klawiatury
- Krok 3: Zainstaluj Wiring Pi, Apache i PHP
- Krok 4: Strona internetowa
- Krok 5: Obraz strony internetowej
- Krok 6: Zdalne sterowanie serwerem internetowym
- Krok 7: Podłącz obwód do Raspberry Pi
- Krok 8: Utwórz usługę startową
- Krok 9: Podłącz Raspberry Pi do garażu
- Krok 10: Podłącz Raspberry Pi do SECO-LARMU
- Krok 11: Wyślij ostrzeżenie, jeśli drzwi są otwarte, a powinny być zamknięte
- Krok 12: Umieść Raspberry Pi w Secret Book
- Krok 13: Dodatek: Referencje
- Krok 14: Dodatek: Aktualizacje
- Krok 15: Dodatek: Rozwiązywanie problemów
2025 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2025-06-01 06:10

Stworzyłem tę instrukcję w 2014 roku. Od tego czasu wiele się zmieniło. W 2021 zaktualizowałem tutaj Smart Garage Door Opener.
Użyj Raspberry Pi i smartfona, aby otwierać, zamykać i monitorować bramę garażową. Otwieranie i zamykanie drzwi zabezpieczają samopodpisane certyfikaty instalowane na telefonach komórkowych rodziny. Jeśli brama garażowa jest otwarta, a nie powinna, wyślij wiadomość tekstową (SMS) na telefon komórkowy.
Brama garażowa jest w ciągłym użytkowaniu od końca 2014 roku. Przez lata starałem się na bieżąco wprowadzać zmiany. Istnieje dodatek opisujący zmiany w instrukcji.
Cele tego projektu to:
- Zrób mój pierwszy instruktaż - nie planowałem tego publikować, ale otrzymałem wiele próśb
- Otwórz bramę garażową za pomocą standardowego pilota
- Otwórz bramę garażową za pomocą naściennego dzwonka do otwierania garażu
- Otwórz bramę garażową za pomocą smartfona
- Monitoruj zdalnie stan bramy garażowej za pomocą telefonu komórkowego lub laptopa (czy jest otwarta czy zamknięta?)
- Wyślij wiadomość tekstową na mój telefon komórkowy, jeśli drzwi są otwarte, a powinny być zamknięte
- Zabezpiecz bramę garażową (np. w przypadku utraty zasilania drzwi nie powinny się otwierać)
- Nie zezwalaj nikomu innemu w sieci na otwieranie drzwi (dwukierunkowy certyfikat SSL z podpisem własnym)
- Użyj Wi-Fi zamiast połączenia przewodowego
- Użyj Raspberry Pi 3
Podstawa tego wdrożenia Garage Door Opener pochodzi z Instructable: Raspberry Pi Garage Door Opener firmy quartarian. Pierwotnie używałem modelu B+ Raspberry Pi, następnie przeniosłem się na Raspberry Pi 2 model B, a teraz używa Raspberry Pi 3.
Do komunikacji z Raspberry Pi używałem MacBooka, ale można użyć dowolnego komputera.
Nie ma przekonującego powodu, aby zbudować to urządzenie, ale było fajnie. Bardziej opłacalne jest kupowanie jednego. Podobne urządzenie można kupić za około 130 USD.
- Podnośnik główny 828LM
- Szambelan MyQ 129
- Brama GoGo 179
- Rzemieślnik $100
Uwagi:
- Tekst ujęty w pik, taki jak „zamień to” należy zastąpić rzeczywistą wartością
- Podkreślony niebieski tekst Arduino jest linkiem. W tym przypadku jest to link do wersji arduino automatu do otwierania drzwi garażowych.
- Próbowałem wymienić każde użyte źródło. Przepraszam za wszelkie przeoczenia. Większość tego dokumentu opiera się na pracy innych osób.
- $ wskazuje polecenie wykonywane w oknie terminala na MacBooku i zwykle jest wykonywane na Raspberry Pi
Krok 1: Zbierz części
Kupuj lub zbieraj części i narzędzia (ceny w USD).
- Raspberry Pi 3 Model B Newark Element14 134 zł
- Zasilacz USB 5,2 V 2,5 A od Amazon 9,99 USD
- Kabel Micro USB na USB 6 stóp od Amazon 7,99 USD
- Etui z Amazon $6,99
- SanDisk Ultra 16 GB microSDHC klasy 10 z adapterem (SDSQUAN-016G-G4A) od Amazon $ 8,99
- SunFounder 2-kanałowy moduł 5V przekaźnika osłony dla Arduino UNO 2560 1280 ARM PIC AVR STM32 Raspberry Pi - 6,79 USD
- 3x żeńskie przewody połączeniowe. Kupiony w Fry's za 4,95 USD.
- Dynamiczny DNS 40 USD rocznie dla 30 nazw (dyn.com)
- 1-zespół 18 cu. w. Stary ciężki przełącznik ścienny i skrzynka wyjściowa, 3,12 USD
- Ultra Pro Single Brush Biała płyta ścienna, 7,88 USD
- SECO-LARM SM 226L, czujnik drzwi garażowych, cena bardzo się różni, 9,99 USD na Amazon z bezpłatną wysyłką
- 50 stóp stałego przewodu termostatu, Home Depot lub Lowe's, ~ 20 USD
Moja suma: ~172,00 USD
Miałem następujące części, narzędzia i usługi:
- Kabel Ethernet CAT5
- Przewód o małym przekroju, 6 stóp długości
- Śrubokręt krzyżakowy
- Szczypce półokrągłe
- Noże do pudeł
- Płaski śrubokręt jubilerski, potrzebny do poluzowania śrub na przekaźniku
- MacBook (można użyć komputera PC)
- AT&T GigaPower (można użyć dowolnego dostawcy usług internetowych)
Krok 2: Skonfiguruj Raspberry Pi bez monitora lub klawiatury

Wszystkie projekty Raspberry Pi wymagają pewnego rodzaju konfiguracji. Lubię korzystać z tego samego zestawu instrukcji i w razie potrzeby mam jedno miejsce, w którym można je aktualizować.
Skonfiguruj Raspberry Pi, korzystając z następujących instrukcji:
Skonfiguruj Raspberry Pi bez monitora lub klawiatury
Powyższa instrukcja zawiera opcjonalne kroki w załączniku. Pamiętaj, aby wykonać krok:
Dodaj certyfikaty po stronie klienta do serwerów internetowych
Wyłącz Raspberry Pi
$ wyłączenie sudo -h 0
Po wyłączeniu usuń
- kabel Ethernet
- Kabel szeregowy USB
Nie będą już potrzebne. Użyj Wi-Fi, ssh i okna terminala na Mac Booku, aby uruchamiać polecenia na Raspberry Pi.
Odłącz zasilanie i podłącz ponownie, a raspberry pi powinien się zrestartować.
Krok 3: Zainstaluj Wiring Pi, Apache i PHP
Zainstaluj okablowanie Pi
Otwórz okno terminala na Mac Booku. Zaloguj się do Raspberry Pi, a następnie pobierz, skompiluj i zainstaluj Wiring Pi. To oprogramowanie umożliwia sterowanie pinami GPIO. Oto przewodnik krok po kroku:
wiringpi.com/download-and-install/
Oto skrócona wersja instrukcji:
$ ssh pi@♣raspberry-pi-ip♣
hasło: ♣hasło♣ $ sudo apt-get install git-core $ git clone git://git.drogon.net/wiringPi $ cd wirePi $ git pull origin $./build
Uruchom polecenie gpio, aby sprawdzić instalację:
$ gpio -v
gpio wersja: 2.29 Copyright (c) 2012-2015 Gordon Henderson Jest to darmowe oprogramowanie bez ŻADNEJ GWARANCJI. Aby uzyskać szczegółowe informacje wpisz: gpio -warranty Raspberry Pi Szczegóły: Typ: Model 2, Wersja: 1.1, Pamięć: 1024MB, Producent: Sony [OV] Drzewo urządzeń jest włączone. To Raspberry Pi obsługuje dostęp do GPIO na poziomie użytkownika. -> Więcej szczegółów można znaleźć na stronie podręcznika $ gpio readall +-----+-----+---------+------+---+--- Pi 2---+---+------+---------+-----+-----+ | BCM | wPi | Nazwa | Tryb | V | Fizyczne | V | Tryb | Nazwa | wPi | BCM | +-----+-----+---------+------+---+----++----+---+- -----+---------+-----+-----+ | | | 3,3v | | | 1 || 2 | | | 5v | | | | 2 | 8 | SDA.1 | W | 1 | 3 || 4 | | | 5V | | | | 3 | 9 | SCL.1 | W | 1 | 5 || 6 | | | 0v | | | | 4 | 7 | GPIO. 7 | WYJAZD | 1 | 7 || 8 | 1 | ALT0 | TxD | 15 | 14 | | | | 0v | | | 9 || 10 | 1 | ALT0 | RxD | 16 | 15 | | 17 | 0 | GPIO. 0 | W | 0 | 11 || 12 | 0 | W | GPIO. 1 | 1 | 18 | | 27 | 2 | GPIO. 2 | W | 0 | 13 || 14 | | | 0v | | | | 22 | 3 | GPIO. 3 | W | 0 | 15 || 16 | 1 | W | GPIO. 4 | 4 | 23 | | | | 3,3v | | | 17 || 18 | 0 | W | GPIO. 5 | 5 | 24 | | 10 | 12 | MOSI | W | 0 | 19 || 20 | | | 0v | | | | 9 | 13 | MISO | W | 0 | 21 || 22 | 0 | W | GPIO. 6 | 6 | 25 | | 11 | 14 | SCLK | W | 0 | 23 || 24 | 1 | W | CE0 | 10 | 8 | | | | 0v | | | 25 || 26 | 1 | W | CE1 | 11 | 7 | | 0 | 30 | SDA.0 | W | 1 | 27 || 28 | 1 | W | SCL.0 | 31 | 1 | | 5 | 21 | GPIO.21 | W | 1 | 29 || 30 | | | 0v | | | | 6 | 22 | GPIO.22 | W | 1 | 31 || 32 | 0 | W | GPIO.26 | 26 | 12 | | 13 | 23 | GPIO.23 | W | 0 | 33 || 34 | | | 0v | | | | 19 | 24 | GPIO.24 | W | 0 | 35 || 36 | 0 | W | GPIO.27 | 27 | 16 | | 26 | 25 | GPIO.25 | W | 0 | 37 || 38 | 0 | W | GPIO.28 | 28 | 20 | | | | 0v | | | 39 || 40 | 0 | W | GPIO.29 | 29 | 21 | +-----+-----+---------+------+---+----++----+---+- -----+---------+-----+-----+ | BCM | wPi | Nazwa | Tryb | V | Fizyczne | V | Tryb | Nazwa | wPi | BCM | +-----+-----+---------+------+---+---Pi 2---+---+--- ---+---------+-----+-----+
Powyższe polecenia powinny dać ci pewność, że okablowaniePi działa poprawnie.
Zainstaluj Apache i PHP
Uruchom następujące polecenia:
$ cd..
$ sudo apt-get aktualizacja $ sudo apt-get zainstaluj apache2 php5 libapache2-mod-php5
Aby sprawdzić, czy serwer WWW działa, otwórz przeglądarkę i w polu URL wpisz:
♣malina-pi-ip♣
Domyślna witryna Apache odpowiada komunikatem „To działa!”
Krok 4: Strona internetowa
Otwórz okno terminala na Mac Booku. Zaloguj się do Raspberry Pi, a następnie usuń domyślny plik index.html, zmień uprawnienia w katalogu witryny i edytuj plik o nazwie index.php.
$ ssh pi@♣raspberry-pi-ip♣
hasło: ♣hasło♣ $ sudo rm /var/www/index.html $ sudo chown pi:root /var/www $ sudo nano /var/www/index.php
I wprowadź następujący kod:
Otwieracz garażu
Automatyka domowa |
---|
Otwieracz drzwi garażowych | Instrukcja otwierania drzwi garażowych | zamknięte 1 | otwarte 0 |
CTRL-o i ENTER, aby zapisać plik, i CTRL-x, aby wyjść z edytora.
Zmień uprawnienia do pliku
$ sudo chmod 664 /var/www/index.php
Krok 5: Obraz strony internetowej


Pobierz z sieci zdalny mechanizm otwierania drzwi garażowych w wysokiej rozdzielczości. Zmodyfikuj obraz tak, jak chcesz, używając pędzla Mac. Na powyższym obrazku użyto wysokiej rozdzielczości Genie Garage Opener, dodano logo raspberry pi i usunięto diodę led.
Jeden obraz to tło (remote-background.jpg), a drugi to aktywny obraz (remote-press.jpg).
Plan był taki, że po naciśnięciu przycisku, zamiast migać diodę, malina mruga. Uprościłem stronę.
Skopiuj obrazy do Raspberry Pi:
$ scp *-j.webp
hasło: ♣hasło♣
Strona internetowa ma jeden przycisk. Aby zweryfikować, otwórz przeglądarkę i wpisz „raspberry-pi-ip”. Zamiast domyślnej witryny Apache, która mówi „To działa!”, powinien pojawić się przycisk. Naciśnij.
Krok 6: Zdalne sterowanie serwerem internetowym
Aby ułatwić zdalny dostęp do narzędzia do otwierania drzwi garażowych, używam dynamicznej nazwy DNS. Bo nie lubię zapamiętywać adresów IP.
Dzięki tej funkcji wpisuję ♣dynamic-hostname♣.getmyip.com w polu adresu URL przeglądarki. Uwaga: adres IP routerów domowych może się zmienić bez powiadomienia, ale rzadko się to zdarza. Wybrałem DynDNS. Musisz znać publiczny adres IP routera.
IP routera U-Verse: uverse-public-ip♣
Możesz wyświetlić swoje nazwy hostów i szczegóły konta DynDNS Pro. Oto kilka wskazówek na początek:
-
Utwórz nazwę hosta Dynamic DNS (1 z 30):
- ♣dynamic-hostname♣
- Klucz aktualizacji: ♣dynamic-ip-updater-key♣
-
Zainstaluj klienta aktualizacji, aby upewnić się, że nazwa hosta zawsze wskazuje poprawny adres IP.
- Pobierz i zainstaluj na MacBooku
- Adresy IP AT&T U-verse rzadko się zmieniają, więc powyższy aktualizator można uruchomić, gdy tylko się zmieni
-
Podążaj za wskazówkami:
- Dodaj konto
- Wpisz nazwę użytkownika i hasło: ♣dynamic-ip-username♣ ♣dynamic-ip-password♣
- Wybierz nazwę hosta
- Kliknij Konfiguruj wybrane hosty
- Host powinien stać się aktywny
-
Skonfiguruj swoją sieć, aby umożliwić dostęp do urządzenia z Internetu. Możesz skorzystać z naszego Kreatora Dyn, aby uzyskać ogólne instrukcje, jak to zrobić, skorzystać z zasobów takich jak PortForward.com lub skontaktować się z producentem urządzenia w celu uzyskania pomocy.
- AT&T U-verse
- Przekierowanie portów dla 2-Wire 3801HGV - to jest router AT&T U-Verse, który posiadam. Zobacz aktualizacje w dodatku, aby dowiedzieć się, jak przekierować porty na routerze AT&T U-verse 5268ac.
- Otwórz przeglądarkę i przejdź do ♣raspberry-pi-ip♣
- Hasło: ♣hasło♣
- Ustawienia
- Zapora
- Wybierz ♣raspberry-pi-hostname♣
-
Serwery
- Port serwera WWW 80
- Serwer HTTPS - port 443
- Dodać
- Zapisać
Po wykonaniu tej czynności serwer WWW będzie działał z Internetu. Aby zweryfikować, wpisz „dynamic-hostname” i powinieneś zobaczyć przycisk otwierania drzwi garażowych.
Krok 7: Podłącz obwód do Raspberry Pi

Dla dostarczonego kodu (krok 4 i 6) użyłem pinu 7 GPIO. To zbieg okoliczności, że GPIO 7 jest tym samym, co pin 7 okablowaniaPi. W kodzie PHP używane są numery pinów okablowania Pi, a NIE numery pinów GPIO. Możesz użyć dowolnego, ale pamiętaj, aby zmienić kod.
Próbowałem użyć skręconego drutu, ale przekaźnik nie trzyma się dobrze na skręconym przewodzie. Drut lity jest lepszy.
W mojej pierwszej próbie stworzyłem trzy kable połączeniowe (żeński-męski).
- Użyj trzech żeńskich do żeńskich kabli rozruchowych
-
Wytnij trzy kawałki litego drutu na około 1 cal.
Zdejmij 1/4 cala na obu końcach pełnego drutu
- Włóż jeden pełny przewód do jednego żeńskiego kabla połączeniowego.
Oto lepszy sposób na tworzenie kabli połączeniowych (żeński-męski):
- Używaj tylko solidnego drutu
- Wytnij trzy 4-calowe kawałki litego drutu
- Zdejmij 1/4 cala na obu końcach stałego drutu
-
Użyj żeńskich szpilek łączących
-
Wsuń jeden żeński sworzeń łączący na jeden koniec pełnego drutu i zagnij
Kołek żeński nie powinien się poluzować, w razie potrzeby przylutować
- Nasuń odciążenie na żeński kołek łączący lub kołek osłonowy za pomocą taśmy dla elektryka
-
Podłącz przekaźnik do pi, jak pokazano na schemacie:
- Podłącz żeńską końcówkę kabla do pinu Raspberry Pi.
- Włóż stały przewód do przekaźnika.
Krok 8: Utwórz usługę startową
Większość przekaźników, w tym zakupiony, działa w następujący sposób:
- Gdy sygnał jest włączony, obwód pozostaje wyłączony.
- Gdy sygnał jest wyłączony, obwód jest włączony.
Jeśli Raspberry Pi straci zasilanie, przekaźnik ma mechanizm zabezpieczający, który utrzymuje obwód w stanie OFF.
Problem może wystąpić, gdy Rapberry Pi i przekaźnik zostaną przywrócone, ale zanim Raspberry Pi zakończy uruchamianie, aby włączyć sygnał, co jest konieczne, aby obwód był wyłączony. Możesz obudzić się rano z otwartym garażem i potencjalnie kilkoma nowymi przyjaciółmi!
Jednak przekaźnik nie jest inicjalizowany, dopóki tryb pinów GPIO nie zostanie ustawiony za pomocą tego polecenia: tryb gpio 7 out. Ponadto, jeśli pin GPIO jest w pozycji ON (gpio write 7 1) przed ustawieniem trybu GPIO, przekaźnik pozostanie wyłączony po zainicjowaniu.
Aby uruchomić tę inicjalizację podczas rozruchu i nie budzić się z nowymi przyjaciółmi, użyj następującego skryptu startowego.
$ ssh pi@♣raspberry-pi-ip♣
$ sudo nano /etc/init.d/garagerelay
Następnie wklej ten skrypt:
#! /bin/bash
# /etc/init.d/garagerelay # Wykonywanie określonych funkcji na żądanie systemowe "$1" w starcie) echo "Starting Relay" # Włącz 7, co powoduje wyłączenie przekaźnika /usr/local/bin/gpio write 7 1 #Uruchom tryb Gpio /usr/local/bin/gpio 7 out;; stop) echo "Zatrzymywanie gpio";; *) echo "Stosowanie: /etc/init.d/garagerelay {start|stop}" exit 1;; esac wyjście 0
Aby zapisać: CTRL-o, ENTER
Aby wyjść z nano, CTRL-x
Ustaw plik wykonywalny:
$ sudo chmod +x /etc/init.d/garagerelay
Teraz powiedz swojemu pi, aby uruchomił ten skrypt podczas rozruchu:
$ sudo update-rc.d -f garagerelay start 4
(Uwaga: możesz bezpiecznie zignorować ostrzeżenie „brakujące tagi LSB”).
Upewnij się, że skrypt startowy jest uruchomiony
$ sudo restart
Otwórz przeglądarkę i kliknij otwieracz. Przekaźnik powinien kliknąć.
Krok 9: Podłącz Raspberry Pi do garażu

Przenosząc Raspberry Pi, upewnij się, że uruchomiłeś:
$ wyłączenie -h 0
Możesz wyłączyć zasilanie garażu. Więc otwieracz do drzwi nie porazi cię prądem:). Prawdziwym powodem jest to, że za każdym razem, gdy zwierasz przewody, drzwi będą się podnosiły i opadały.
Odkręć śruby ścienne z otwieracza typu dzwonek, który mocuje dzwonek do ściany.
Przebij dziurę z garażu za dzwonkiem do drzwi do domu. W Teksasie Raspberry Pi nie powinno znajdować się w garażu, zmiany temperatury w garażu wykraczają poza specyfikacje operacyjne Raspberry Pi.
Przeprowadź przewody przekaźnika przez otwór (użyj wieszaka na ubrania).
Poluzuj obie śruby z tyłu dzwonka do otwierania drzwi.
Zdejmij izolację z obu końców przewodów przekaźnika: 1) około 1/8 cala po stronie przekaźnika i około 1/2 cala po stronie dzwonka. Zegnij stronę dzwonka do drzwi w pół pętli wystarczająco dużą, aby zmieściła się wokół śruby z tyłu.
Podłącz jeden przewód przekaźnika do każdej śruby z tyłu dzwonka i dokręć śrubę. Połączenia są pokazane na obrazku. Ponieważ przekaźnik izoluje obwód, kierunek nie ma nawet znaczenia, który przekaźnik jest przymocowany do której śruby.
Krok 10: Podłącz Raspberry Pi do SECO-LARMU


Zanim skończyłem kod, moja rodzina i ja byliśmy na wakacjach i otworzyłem przeglądarkę. Ostatnim widokiem mojej przeglądarki był otwieracz bramy garażowej - strona odświeżona i otwarta brama garażowa. Kilka dni później zadzwonił sąsiad i zapytał, czy brama garażowa powinna być otwarta? Na szczęście mogłem go zamknąć z odległości 500 mil.
Ten snafu zmusił mnie do zmiany kodu, żeby tak się nie stało, i dodania do serwisu czujnika i stanu bramy garażowej.
To jest link do oryginalnej instrukcji dodawania czujnika. Jednak biorąc pod uwagę wszystko, co już zostało wykonane, instalację czujnika można znacznie uprościć i zamiast używać pythona dodać kilka linijek kodu do 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\pl.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