Spisu treści:

Kontroler przekaźnika Alexa Raspberry Pi: 6 kroków
Kontroler przekaźnika Alexa Raspberry Pi: 6 kroków

Wideo: Kontroler przekaźnika Alexa Raspberry Pi: 6 kroków

Wideo: Kontroler przekaźnika Alexa Raspberry Pi: 6 kroków
Wideo: Sterowanie przekaźnikiem (Raspberry Pi z ekranem dotykowym, GUI i Qt) 2024, Listopad
Anonim
Kontroler przekaźnika Alexa Raspberry Pi
Kontroler przekaźnika Alexa Raspberry Pi
Kontroler przekaźnika Alexa Raspberry Pi
Kontroler przekaźnika Alexa Raspberry Pi
Kontroler przekaźnika Alexa Raspberry Pi
Kontroler przekaźnika Alexa Raspberry Pi

Stworzyłem tę instrukcję, aby podzielić się moimi doświadczeniami z integracją urządzeń IOT z Alexą Amazona.

Ten projekt umożliwia sterowanie płytką przekaźnikową podłączoną do Raspberry Pi ze sterownika smarthome.

Został przetestowany z Alexą, ale wydaje się również działać dobrze z Samsung Smartthings i innymi interfejsami sterującymi, ponieważ emuluje serię gniazd Belkin Wemo.

Istnieje WIELE przykładów opartych na doskonałym kodzie FAUXMO, ale oznaczało to naukę Pythona i nie dawało mi szczegółowej kontroli, której potrzebowałem dla moich urządzeń, dlatego postanowiłem odtworzyć go od zera, używając C jako podstawowego języka kodowania.

Nie chciałem też zagłębiać się w głębiny kodu lambda na Amazon.com, więc zachowałem to naprawdę prosto.

Zamieściłem źródło i notatki na Github:

github.com/Switchdoctorstu/StuPiMo

Samouczek ma na celu omówienie tego, jak go uruchomić i opublikować moje notatki, jeśli pomoże to innym.

Krok 1: Materiały eksploatacyjne i połączenia

Dostawy i połączenia
Dostawy i połączenia
Dostawy i połączenia
Dostawy i połączenia
Dostawy i połączenia
Dostawy i połączenia

Rzeczy, których potrzebujesz, są łatwo dostępne na Amazon / EBay:

  • Malina PI *
  • Zasilanie pi
  • Złącza dupontowe
  • Tablica przekaźnikowa
  • Stary przewód micro USB (przeciąć na pół w celu zasilania karty przekaźnika)

Każda raspberry Pi będzie działać, przetestowałem to na Modelu B i Zero.

*Jeśli korzystasz z Pi Zero, potrzebujesz karty sieciowej OTG (chyba że kupisz wersję „W” z wbudowanym WiFi)

Musisz podłączyć Pi do sieci.

Użyj złączy dupontowych, aby podłączyć kartę przekaźnikową do Pi.

Zwróć uwagę, że karta przekaźnikowa powinna korzystać z zewnętrznego zasilania (usuń łącze i podłącz do zewnętrznego 5V). Będzie działał zasilany z PI, ale nie jest zalecany do uruchomienia produkcyjnego.

Do mojej konfiguracji użyłem koncentratora USB zasilanego zewnętrznie. Zapewnia to zasilanie PI.

Odciąłem też koniec starego kabla USB i zasilałem przekaźniki z drugiego połączenia USB do koncentratora, aby zachować bezpieczeństwo. Moja wersja „produkcyjna” korzysta z małego zasilacza impulsowego 5V 5A. Ponownie przeciąłem przewód USB na pół, aby zasilić Pi przez Micro-USB i odciąłem dwa złącza dupontowe, aby zasilić płytkę przekaźnikową. W przewodzie USB są 4 przewody, większość używa czerwonego/czarnego do oznaczenia zasilania 5 V, ale w razie wątpliwości użyj miernika, aby upewnić się, że masz prawidłowe przewody.

Piny przekaźnika na płycie są podłączone do odpowiednich pinów GPIO na nagłówku PI.

Kod pozwala wybrać piny GPIO, ale domyślnie użyłem:

  1. Przekaźnik Pin 1 - Uziemienie
  2. Przekaźnik Pin 2 - Przekaźnik 1 - GPIO 0
  3. Przekaźnik Pin 3 - Przekaźnik 2 - GPIO 1
  4. Przekaźnik Pin 4 - Przekaźnik 3 - GPIO 2
  5. Przekaźnik Pin 5 - Przekaźnik 4 - GPIO 3
  6. Przekaźnik Pin 6 - Przekaźnik 5 - GPIO 4
  7. Przekaźnik Pin 7 - Przekaźnik 6 - GPIO 5
  8. Przekaźnik Pin 8 - Przekaźnik 7 - GPIO 6
  9. Przekaźnik Pin 9 - Przekaźnik 8 - GPIO 7
  10. Przekaźnik Pin 10 - + 5 v dla logiki

Krok 2: Konfiguracja PI

Nie zamierzam ponownie tworzyć samouczka o tym, jak uruchomić i uruchomić PI i podłączyć do sieci.

Istnieje wiele przewodników, w tym doskonały instruktaż pod adresem:

www.instructables.com/id/Ultimate-Raspberr…

Musisz dotrzeć do punktu, w którym PI jest widoczny w sieci i możesz się z nim połączyć.

Nie ma znaczenia, czy odbywa się to przez Ethernet, czy bezprzewodowo.

Ten projekt można ukończyć tylko za pomocą Raspberry PI za pomocą edytora programistów Geany, ale osobiście uważam, że łatwiej jest przygotować mój kod na komputerze za pomocą Visual Studio lub Eclipse (lub nawet Notepad ++), a następnie przesłać go do PI w celu debugowania za pomocą Połączenie VNC. Znowu nie zamierzam tego tutaj omawiać, ponieważ istnieje wiele doskonałych instrukcji dotyczących konfigurowania VNC na RPi.

Wszystko, czego potrzebujesz, to dojść do punktu, w którym możesz przesłać i skompilować kod.

Ważną informacją jest to, że ponieważ program obsługi UPNP wymaga multiemisji UDP, używane interfejsy muszą być ustawione w trybie „Promiscuous”.

Można to zrobić w wierszu poleceń:

pi@raspberrypi:~ $ ifconfig eth0 promisc

i / lub

pi@raspberrypi:~ $ ifconfig wlan0 promisc

Musi to być stałe, więc edytowałem /etc/rc.local

sudo nano \etc\rc.local

dołączyć linię:

sudo ifconfig eth0 promisc

po pierwszym zestawie linii banera #, aby upewnić się, że interfejsy zostały ustawione podczas uruchamiania.

Krok 3: Pobieranie i kompilowanie kodu

Sam kod znajduje się w moim repozytorium Github;

github.com/Switchdoctorstu/StuPiMo/blob/ma…

podczas gdy istnieją „poprawne” sposoby klonowania repozytorium. Uznałem, że łatwiej jest po prostu otworzyć edytor Geany na pulpicie Pi i wkleić kod.

Podobnie, jeśli używasz wiersza poleceń;

Utwórz nowy katalog

mkdir Stu

Zmień na to

CD Stu

Utwórz nowy plik tekstowy

nano StuPiMo.c

Skopiuj kod z surowego Github i wklej go do nowego pliku

Zapisz i wyjdź.

Gdy już masz plik jako obiekt kodu źródłowego C, możesz go skompilować za pomocą

gcc -o StuPiMo StuPiMo.c -l okablowaniePi

Zwróć uwagę, że "-l wirePi" jest potrzebne, aby upewnić się, że kompilator łączy się z wymaganą biblioteką wirePi.

Kod można następnie uruchomić za pomocą

./StuPiMo

Ponownie, jeśli chcesz, aby to działało podczas uruchamiania, użyj polecenia:

sudo nano /etc/rc.local

aby dodać następującą linię

sudo /home/pi/Stu/StuPiMo &

do twojego pliku /etc/rc.local. Nie zapomnij zapisać pliku przy wyjściu.

Zwróć uwagę, że „&” jest niezbędny, aby upewnić się, że proces podrzędny jest odradzany, aby upewnić się, że skrypt nie jest w tym momencie zablokowany.

Krok 4: Korzystanie z niego

Po uruchomieniu kodu poproś aleksę o „Odkryj urządzenia”, a powinna znaleźć wszystkie 8 wirtualnych urządzeń Wemo.

Wtedy wystarczy powiedzieć: "Alexa włącz gniazdo 1" lub "Alexa wyłącz gniazdo 6" itd. i odpowiedni przekaźnik zostanie zmieniony.

Krok 5: Jak działa kod

Kod działa poprzez emulację serii urządzeń gniazdowych Belkin Wemo.

Aby to osiągnąć, musi obsługiwać 2 główne funkcje

  • moduł obsługi emisji wykrywania UPNP
  • „obsługa urządzenia” (jeden na urządzenie wirtualne) do zarządzania poleceniami wysyłanymi do urządzenia i wymaganymi odpowiedziami.

Cechą „bonusową” jest to, że publikuje również stronę internetową, aby umożliwić kontrolę urządzeń.

Obsługa UPNP

Program obsługi UPNP otwiera gniazdo w celu monitorowania pakietów protokołu SSDP na porcie 239.255.255.250 1900.

Odpowiada na wszelkie przychodzące zapytania „M-SEARCH” z pakietem odpowiedzi wykrywania, który informuje o poszczególnych emulatorach wemo każdemu, kto o to poprosi.

Program obsługi urządzenia

Programy obsługi urządzeń (jeden na urządzenie wirtualne) monitorują szereg portów IP i odpowiadają na żądania.

Gdy zostaniesz o to poproszony, wyświetli odpowiedź setup.xml

Gdy zostaniesz o to poproszony, wyświetli plik opisu zdarzenia

Odpowie na żądanie GETBINARYSTATE

Przetworzy i odpowie na żądanie SETBINARYSTATE

Serwer internetowy

Serwer WWW to prosta procedura, która buduje formularz HTML zawierający przycisk na przekaźnik.

Będzie reagował na naciskane przyciski i odpowiednio przełączał stan przekaźnika.

Krok 6: Dostosowanie i przyjazne nazwy

Dostosowywanie i przyjazne nazwy
Dostosowywanie i przyjazne nazwy

Nie zwariowałem z kodem, aby był prosty i edytowalny.

Podstawy można dostosować za pomocą definicji na początku kodu:

// globalne definicje#define WEBPORT 5353 // port do uruchomienia serwera WWW

#define NUMDEVICES 8 // Liczba urządzeń wirtualnych do utworzenia

#define PORTBASE 43450 // bazowy port IP do zwiększenia z

WEBPORT to numer portu, na którym działa wbudowany serwer sieciowy. Można to ustawić na 80, aby było łatwo, ale okazało się, że jest to sprzeczne z tomcat lub innymi usługami działającymi lokalnie.

NUMDEVICES określa liczbę pojedynczych emulatorów WEMO do uruchomienia. Jeśli masz 2-portową kartę przekaźnikową, ustaw ją na 2, 4 porty = 4 itd.

Przyjazne nazwy urządzeń są ustawiane w procedurze o nazwie setup_names:

int setup_names(char friendly[NUMDEVICES][NAMELEN]) { int i = 0;

// użyj tej pętli

for (i = 0; i < LICZBA URZĄDZEŃ; i++) {

sprintf(friendly, "Gniazdo %d", i + 1);

}

// lub poniższa tabela ręczna, aby wypełnić nazwy urządzeń

/*

strcpy(friendly[0], "Telewizor w sypialni");

strcpy(friendly[1], "Koc elektryczny");

strcpy(przyjazny[2], "Lampa do sypialni");

strcpy(przyjazne[3], "Gniazdo 4");

strcpy(przyjazne[4], "Gniazdo 5");

strcpy(przyjazne[5], "Gniazdo 6");

strcpy(przyjazne[6], "Gniazdo 7");

strcpy(przyjazne[7], "Gniazdo 8");

*/

powrót ja;

}

Użyłem pętli do wywołania każdego urządzenia „Socket n”, ale możesz usunąć tę pętlę i zamiast tego dodać własne przyjazne nazwy (tylko upewnij się, że dodajesz ten sam numer co NUMDEVICES), jeśli usuniesz /* */

Pamiętaj, aby ponownie skompilować kod, jeśli dokonasz jakichkolwiek zmian.

Zalecana: