Inhoudsopgave:
- Stap 1: Benodigdheden en aansluitingen
- Stap 2: PI-configuratie
- Stap 3: De code downloaden en compileren
- Stap 4: Het gebruiken
- Stap 5: Hoe de code werkt
- Stap 6: Aanpassing en vriendelijke namen
Video: Alexa Raspberry Pi-relaiscontroller - Ajarnpa
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:16
Ik heb deze Instructable gemaakt om mijn ervaringen te delen met het integreren van IOT-apparaten met Amazon's Alexa.
Met dit project kan een relaisbord dat is aangesloten op een Raspberry Pi worden bestuurd vanaf een smarthome-controller.
Het is getest met Alexa, maar lijkt ook goed te werken met Samsung Smartthings en andere besturingsinterfaces, omdat het een reeks Belkin Wemo-sockets emuleert.
Er zijn VEEL voorbeelden gebaseerd op de uitstekende FAUXMO-code, maar dit betekende het leren van python en gaf me niet de gedetailleerde controle die ik nodig had voor mijn apparaten en dus besloot ik er een helemaal opnieuw te maken met C als mijn basiscodeertaal.
Ik wilde ook niet naar de diepten van lambda-code op Amazon.com gaan, dus ik heb het heel eenvoudig gehouden.
Ik heb de bron en opmerkingen op Github geplaatst:
github.com/Switchdoctorstu/StuPiMo
De tutorial is eigenlijk bedoeld om te beschrijven hoe je het kunt laten werken en om mijn aantekeningen te publiceren voor het geval het anderen helpt.
Stap 1: Benodigdheden en aansluitingen
De dingen die je nodig hebt, zijn direct beschikbaar op Amazon / EBay:
- Frambozen PI *
- Pi-voeding
- Dupont-connectoren
- Relaiskaart
- Oude micro-USB-kabel (om te halveren voor stroomvoorziening voor de relaiskaart)
Elke Raspberry Pi zal werken, ik heb dit getest op een Model B en Zero.
*Als je Pi Zero gebruikt, heb je een OTG-netwerkadapter nodig (tenzij je de 'W'-versie koopt met ingebouwde wifi)
Je moet de Pi verbinden met het netwerk.
Gebruik de dupont-connectoren om de relaiskaart op de Pi aan te sluiten.
Merk op dat de relaiskaart externe voeding moet gebruiken (verwijder de link en maak verbinding met externe 5v). Het zal werken vanuit de PI, maar het wordt niet aanbevolen voor productie.
Voor mijn setup heb ik een extern gevoede USB HUB gebruikt. Dit levert de stroom aan de PI.
Ik heb ook het uiteinde van een oude USB-kabel doorgeknipt en de relais van stroom voorzien vanaf een 2e USB-verbinding naar de hub om veilig te blijven. Mijn 'productie' versie gebruikt een kleine 5V 5A schakelende voeding. Nogmaals, ik heb zojuist een USB-kabel doormidden gesneden om de Pi via Micro-USB van stroom te voorzien en twee van de dupont-connectoren om de relaiskaart van stroom te voorzien. Er zitten 4 draden in de USB-kabel, de meeste gebruiken rood/zwart om de 5v-voeding aan te duiden, maar gebruik bij twijfel een meter om ervoor te zorgen dat u de juiste draden krijgt.
De relaispinnen op het bord zijn verbonden met de relevante GPIO-pinnen op de PI-header.
Met de code kun je de GPIO-pinnen kiezen, maar de standaard die ik gebruikte was:
- Relais Pin 1 - Massa
- Relais Pin 2 - Relais 1 - GPIO 0
- Relais Pin 3 - Relais 2 - GPIO 1
- Relais Pin 4 - Relais 3 - GPIO 2
- Relais Pin 5 - Relais 4 - GPIO 3
- Relais Pin 6 - Relais 5 - GPIO 4
- Relais Pin 7 - Relais 6 - GPIO 5
- Relais Pin 8 - Relais 7 - GPIO 6
- Relais Pin 9 - Relais 8 - GPIO 7
- Relais Pin 10 - +5v voor logica
Stap 2: PI-configuratie
Ik ga geen zelfstudie opnieuw maken over hoe u uw PI in gebruik kunt nemen en kunt verbinden met het netwerk.
Er zijn veel gidsen, waaronder een uitstekende instructable op:
www.instructables.com/id/Ultimate-Raspberr…
U moet zover komen dat de PI zichtbaar is op het netwerk en u er verbinding mee kunt maken.
Het maakt niet uit of dit via Ethernet of Wireless is.
Dit project kan worden voltooid met alleen de Raspberry PI met behulp van de Geany Programmers Editor, maar ik vind het persoonlijk gemakkelijker om mijn code voor te bereiden op een pc met Visual Studio of Eclipse (of zelfs Notepad ++) en deze vervolgens naar de PI te uploaden voor foutopsporing met een VNC-verbinding. Nogmaals, ik ga dat hier niet behandelen, want er zijn veel uitstekende instructables over het instellen van VNC op een RPi.
Het enige dat u nodig hebt, is het punt bereiken waarop u de code kunt uploaden en compileren.
Een opmerking die belangrijk is, is dat aangezien de UPNP-handler UDP-multicast vereist, de gebruikte interfaces moeten worden ingesteld op 'Promiscuous'-modus.
Dit kan op de opdrachtregel:
pi@raspberrypi:~ $ ifconfig eth0 promisc
en/of
pi@raspberrypi:~ $ ifconfig wlan0 promisc
Dit moet permanent worden gemaakt, dus ik heb de /etc/rc.local. bewerkt
sudo nano \etc\rc.local
om de regel op te nemen:
sudo ifconfig eth0 promisc
na de eerste set banner # regels om ervoor te zorgen dat de interfaces zijn ingesteld bij het opstarten.
Stap 3: De code downloaden en compileren
De code zelf staat in mijn Github-repository;
github.com/Switchdoctorstu/StuPiMo/blob/ma…
terwijl er 'juiste' manieren zijn om de repository te klonen. ik vond het gemakkelijker om de Geany-editor op het Pi-bureaublad te openen en de code erin te plakken.
Evenzo, als u de opdrachtregel gebruikt;
Een nieuwe map maken
mkdir Stu
Verander ernaar
cd Stu
Maak een nieuw tekstbestand
nano StuPiMo.c
Kopieer de code van de Github raw en plak deze in het nieuwe bestand
Opslaan en afsluiten.
Zodra u het bestand als een C-broncodeobject hebt, kunt u het compileren met
gcc -o StuPiMo StuPiMo.c -l bedradingPi
let op de "-l bedradingPi" is nodig om ervoor te zorgen dat de compiler naar de vereiste bedradingPi-bibliotheek linkt.
De code kan dan worden uitgevoerd met
./StuPiMo
Nogmaals, als u wilt dat dit bij het opstarten wordt uitgevoerd, gebruikt u de opdracht:
sudo nano /etc/rc.local
om de volgende regel toe te voegen:
sudo /home/pi/Stu/StuPiMo &
naar uw /etc/rc.local-bestand. Vergeet bij afsluiten niet uw bestand op te slaan.
Merk op dat de '&' essentieel is om ervoor te zorgen dat een subproces wordt voortgebracht om ervoor te zorgen dat het script op dit punt niet wordt geblokkeerd.
Stap 4: Het gebruiken
Zodra je de code hebt uitgevoerd, vraag je alexa om 'Apparaten te ontdekken' en ze zou alle 8 virtuele Wemo-apparaten moeten vinden.
Dan is het gewoon een kwestie van zeggen: "Alexa zet socket 1 aan" of "Alexa zet socket 6 uit" enz. en het betreffende relais wordt gewijzigd.
Stap 5: Hoe de code werkt
De code werkt door een reeks Belkin Wemo-socketapparaten te emuleren.
Om dit te bereiken moet het 2 belangrijke functies aankunnen:
- een UPNP discovery-uitzendingshandler
- een 'device handler' (één per virtueel apparaat) om de opdrachten die naar het apparaat worden gestuurd en de vereiste antwoorden te beheren.
Een 'bonus'-functie is dat het ook een webpagina publiceert om controle over de apparaten mogelijk te maken.
UPNP-handler
De UPNP-handler opent een socket om SSDP-protocolpakketten op 239.255.255.250 poort 1900 te bewaken.
Het reageert op alle 'M-SEARCH'-vragen die binnenkomen met een ontdekkingsantwoordpakket dat de individuele wemo-emulators bekendmaakt aan iedereen die erom vraagt.
Apparaathandler
De apparaathandlers (één per virtueel apparaat) bewaken een reeks IP-poorten en reageren op verzoeken.
Het zal een setup.xml-antwoord geven wanneer daarom wordt gevraagd
Het zal een evenementbeschrijvingsbestand weergeven wanneer daarom wordt gevraagd
Het zal reageren op een GETBINARYSTATE-verzoek
Het zal een SETBINARYSTATE-verzoek verwerken en beantwoorden
Web Server
De webserver is een eenvoudige routine die een HTML-formulier bouwt met een knop per relais.
Het zal reageren op de knoppen die worden ingedrukt en de status van het relais dienovereenkomstig wijzigen.
Stap 6: Aanpassing en vriendelijke namen
Ik ben niet gek geworden met de code om het eenvoudig en bewerkbaar te houden.
De basis kan per definitie worden aangepast aan het begin van de code:
// global definitions#define WEBPORT 5353 // poort om de webserver op te draaien
#define NUMDEVICES 8 // Aantal virtuele apparaten dat moet worden gemaakt
#define PORTBASE 43450 // basis IP-poort om vanaf te verhogen
WEBPORT is het poortnummer waarop de ingebouwde webserver draait. Dit zou op 80 kunnen worden gezet om dingen gemakkelijk te maken, maar ik ontdekte dat het in strijd was met Tomcat of andere lokale services.
NUMDEVICES definieert het aantal individuele WEMO-emulators dat moet worden gestart. Als u een relaiskaart met 2 poorten hebt, stel deze dan in op 2, 4 poorten = 4 enz.
De beschrijvende namen voor de apparaten worden ingesteld in een routine genaamd setup_names:
int setup_names(char friendly[NUMDEVICES][NAMELEN]) {int i = 0;
// gebruik deze lus
voor (i = 0; ik < NUMMERS; i++) {
sprintf(vriendelijk, "Socket %d", i + 1);
}
// of de volgende handmatige tabel om apparaatnamen in te vullen
/*
strcpy(vriendelijk[0], "TV in de slaapkamer");
strcpy(vriendelijk[1], "Elektrische Deken");
strcpy(vriendelijk[2], "Slaapkamerlamp");
strcpy(vriendelijk[3], "Socket 4");
strcpy(vriendelijk[4], "Socket 5");
strcpy(vriendelijk[5], "Socket 6");
strcpy(vriendelijk[6], "Socket 7");
strcpy(vriendelijk[7], "Socket 8");
*/
retour ik;
}
Ik heb een lus gebruikt om elk van de apparaten 'Socket n' te noemen, maar je kunt deze lus verwijderen en in plaats daarvan je eigen beschrijvende namen toevoegen (zorg ervoor dat je hetzelfde nummer toevoegt als NUMDEVICES) als je de /* */ verwijdert
Vergeet niet om de code opnieuw te compileren als u wijzigingen aanbrengt.
Aanbevolen:
Bedien de woonkamer met Alexa en Raspberry Pi: 12 stappen
Bedien de woonkamer met Alexa en Raspberry Pi: bedien de tv, verlichting en ventilator in je woonkamer met Alexa (Amazon Echo of Dot) en Raspberry Pi GPIO
Raspbian installeren in Raspberry Pi 3 B zonder HDMI - Aan de slag met Raspberry Pi 3B - Uw Raspberry Pi instellen 3: 6 stappen
Raspbian installeren in Raspberry Pi 3 B zonder HDMI | Aan de slag met Raspberry Pi 3B | Je Raspberry Pi 3 instellen: Zoals sommigen van jullie weten, zijn Raspberry Pi-computers best geweldig en kun je de hele computer op een klein bordje krijgen. De Raspberry Pi 3 Model B heeft een quad-core 64-bit ARM Cortex A53 geklokt op 1,2 GHz. Dit zet de Pi 3 ongeveer 50
RASPBERRY PI ALEXA THUISAUTOMATISERING: 4 stappen
RASPBERRY PI ALEXA HOME AUTOMATION: Deze Instructable behandelt de concepten van Amazon alexa eho dot, Raspberry pi Gpio-besturing met behulp van alexa. stel k
Praat met Alexa en Google Assistant samen in een Raspberry Pi: 4 stappen
Praat met Alexa en Google Assistant samen in een Raspberry Pi: voer Amazon Alexa en Google Assistant tegelijkertijd uit in een Raspberry Pi. Noem een van hun namen, ze zetten hun eigen LED's aan en belgeluiden om te reageren. Dan vraag je een verzoek en zij beantwoorden het respectievelijk. Je kunt hun karakter kennen
Amazon Alexa - Raspberry Pi (mobiel): 5 stappen (met afbeeldingen)
Amazon Alexa - Raspberry Pi (Mobile): Welkom bij onze tutorial over het bouwen van een Amazon Alexa met Rasberry Pi. Sinds je op deze tutorial hebt geklikt, weet je natuurlijk dat de Amazon Alexa een prachtig stukje technologie is in deze moderne tijd. Hoewel, het kopen en het maken ervan twee verschillende