Taula de continguts:

Controlador de relés Alexa Raspberry Pi: 6 passos
Controlador de relés Alexa Raspberry Pi: 6 passos

Vídeo: Controlador de relés Alexa Raspberry Pi: 6 passos

Vídeo: Controlador de relés Alexa Raspberry Pi: 6 passos
Vídeo: How To Control A Solenoid With A Raspberry Pi Using a Relay 2024, De novembre
Anonim
Controlador de relés Alexa Raspberry Pi
Controlador de relés Alexa Raspberry Pi
Controlador de relés Alexa Raspberry Pi
Controlador de relés Alexa Raspberry Pi
Controlador de relés Alexa Raspberry Pi
Controlador de relés Alexa Raspberry Pi

Vaig crear aquest Instructable per compartir les meves experiències amb la integració de dispositius IOT amb Alexa d’Amazon.

Aquest projecte permet controlar una placa de relé connectada a un raspberry pi des del controlador smarthome.

S'ha provat amb Alexa, però també sembla que funciona bé amb Samsung Smartthings i altres interfícies de control, ja que emula una sèrie de sòcols Belkin Wemo.

Hi ha MOLTS exemples basats en l’excel·lent codi FAUXMO, però això significava aprendre python i no em donava el control detallat que necessitava per als meus dispositius i, per tant, vaig decidir recrear-ne un de zero utilitzant C com a llenguatge de codificació base.

Tampoc no volia haver d'anar a la profunditat del codi lambda a Amazon.com, així que ho he mantingut molt senzill.

He publicat la font i les notes a Github:

github.com/Switchdoctorstu/StuPiMo

El tutorial tracta realment de com funcionar i publicar les meves notes per si ajuda els altres.

Pas 1: subministraments i connexions

Subministraments i connexions
Subministraments i connexions
Subministraments i connexions
Subministraments i connexions
Subministraments i connexions
Subministraments i connexions

Les coses que necessiteu estan disponibles a Amazon / EBay:

  • Raspberry PI *
  • Alimentació Pi
  • Connectors Dupont
  • Taula de relés
  • Vell cable micro USB (per tallar a la meitat per alimentar la targeta de relé)

Qualsevol gerd Pi funcionarà, ho he provat en un model B i Zero.

* Si utilitzeu Pi Zero, necessitareu un adaptador de xarxa OTG (tret que compreu la versió "W" amb buit a WiFi)

Haureu de connectar el Pi a la xarxa.

Utilitzeu els connectors dupont per connectar la targeta de relé al Pi.

Tingueu en compte que la targeta de relé hauria d’utilitzar alimentació externa (traieu l’enllaç i connecteu-lo a 5v externs). Funcionarà amb alimentació des del PI, però no s’aconsella que s’executi la producció.

Per a la meva configuració he utilitzat un concentrador USB alimentat externament. Això proporciona energia al PI.

També vaig tallar l'extrem d'un cable USB antic i vaig alimentar els relés d'una segona connexió USB al concentrador per mantenir-me segur. La meva versió de "producció" utilitza una petita font d'alimentació en mode de commutació 5V 5A. Una vegada més, acabo de tallar un cable USB per la meitat per alimentar el Pi mitjançant micro-USB i vaig tallar dos dels connectors dupont per alimentar la placa de relés. Hi ha 4 cables al cable USB, la majoria utilitzen vermell / negre per indicar el subministrament de 5 V, però si teniu dubtes, utilitzeu un comptador per assegurar-vos que obtingueu els cables correctes.

Els pins del relé de la placa estan connectats als pins GPIO corresponents de la capçalera PI.

El codi us permet triar els pins GPIO, però el valor per defecte que he utilitzat era:

  1. Pin de relé 1: terra
  2. Pin de relé 2 - relé 1 - GPIO 0
  3. Pin de relé 3 - relé 2 - GPIO 1
  4. Pin de relé 4 - relé 3 - GPIO 2
  5. Pin de relé 5 - relé 4 - GPIO 3
  6. Pin de relé 6 - relé 5 - GPIO 4
  7. Pin de relé 7 - relé 6 - GPIO 5
  8. Pin de relé 8 - relé 7 - GPIO 6
  9. Pin de relé 9 - relé 8 - GPIO 7
  10. Pin de relé 10 - + 5v per a la lògica

Pas 2: Configuració de PI

No tornaré a crear un tutorial sobre com posar en marxa el vostre PI i connectar-lo a la xarxa.

Hi ha moltes guies que inclouen una excel·lent instrucció a:

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

Haureu d’arribar al punt on el PI sigui visible a la xarxa i us pugueu connectar.

Tant se val si és via Ethernet o sense fils.

Aquest projecte es pot completar només amb el Raspberry PI mitjançant l’Editor de programadors de Geany, però personalment és més fàcil fer la preparació del meu codi en un PC mitjançant Visual Studio o Eclipse (o fins i tot Notepad ++) i després penjar-lo al PI per depurar-lo amb un Connexió VNC. Una vegada més no vaig a tractar això aquí, ja que hi ha molts instruccions excel·lents sobre la configuració de VNC en un RPi.

Tot el que necessiteu és arribar al punt on podeu penjar i compilar el codi.

Una nota important és que, atès que el controlador UPNP requereix multidifusió UDP, les interfícies utilitzades s'han d'establir al mode "Promiscu".

Això es pot fer a la línia d'ordres:

pi @ raspberrypi: ~ $ ifconfig eth0 promisc

i / o

pi @ raspberrypi: ~ $ ifconfig wlan0 promisc

Cal fer-ho permanent, de manera que he editat el fitxer /etc/rc.local

sudo nano / etc / rc.local

per incloure la línia:

sudo ifconfig eth0 promisc

després del primer conjunt de banderes # línies per assegurar-se que les interfícies es van configurar a l'inici.

Pas 3: descàrrega i compilació del codi

El codi en si es troba al meu repositori de Github;

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

tot i que hi ha maneres "correctes" de clonar el dipòsit. Em va resultar més fàcil obrir l'editor Geany a l'escriptori Pi i enganxar-hi el codi.

De la mateixa manera, si utilitzeu la línia d'ordres;

Creeu un directori nou

mkdir Stu

Canvieu-hi

cd Stu

Feu un fitxer de text nou

nano StuPiMo.c

Copieu el codi en brut de Github i enganxeu-lo al fitxer nou

Guardar i sortir.

Un cop tingueu el fitxer com a objecte de codi font C, podeu compilar-lo mitjançant

gcc -o StuPiMo StuPiMo.c -l cablejatPi

tingueu en compte que es necessita "-l wiringPi" per assegurar-vos que el compilador enllaça a la biblioteca wiringPi necessària.

El codi es pot executar amb

./StuPiMo

Una vegada més, si voleu que això s'executi a l'inici, utilitzeu l'ordre:

sudo nano /etc/rc.local

per afegir la línia següent

sudo / home / pi / Stu / StuPiMo &

al fitxer /etc/rc.local. No oblideu desar el fitxer a la sortida.

Tingueu en compte que el "&" és essencial per assegurar-se que es genera un subprocés per garantir que l'script no estigui bloquejat en aquest moment.

Pas 4: utilitzar-lo

Un cop tingueu el codi en funcionament, demaneu a Alexa que "Descobriu els dispositius" i haurà de trobar els vuit dispositius Wemo virtuals.

Aleshores només es tracta de dir: "Alexa activa el sòcol 1" o "Alexa apaga el sòcol 6", etc., i es canviarà el relé corresponent.

Pas 5: Com funciona el codi

El codi funciona emulant una sèrie de dispositius de sòcol Belkin Wemo.

Per aconseguir-ho, ha de gestionar dues funcions principals

  • un controlador d’emissions de descobriment d’UPNP
  • un "gestor de dispositius" (un per dispositiu virtual) per gestionar les ordres enviades al dispositiu i les respostes necessàries.

Una característica "addicional" és que també publica una pàgina web per permetre el control dels dispositius.

Gestor UPNP

El controlador UPNP obre un sòcol per controlar els paquets de protocol SSDP al port 1900 239.255.255.250.

Respon a qualsevol consulta "M-SEARCH" amb un paquet de resposta al descobriment que anuncia els emuladors de wemo individuals a qualsevol persona que ho demani.

Gestor de dispositius

Els gestors de dispositius (un per dispositiu virtual) supervisen una sèrie de ports IP i responen a les sol·licituds.

Servirà una resposta setup.xml quan se li demani

Servirà un fitxer de descripció d'esdeveniments quan se li demani

Respondrà a una sol·licitud de GETBINARYSTATE

Processarà i respondrà a una sol·licitud de SETBINARYSTATE

Servidor web

El servidor web és una rutina senzilla que crea un formulari HTML que conté un botó per retransmissió.

Respondrà als botons que es premen i alternarà l'estat del relé en conseqüència.

Pas 6: Personalització i noms amigables

Personalització i noms amigables
Personalització i noms amigables

No m’he tornat boig amb el codi perquè sigui senzill i editable.

Els conceptes bàsics es poden personalitzar mitjançant definicions al començament del codi:

// definicions globals # define WEBPORT 5353 // port on executar el servidor web

#define NUMDEVICES 8 // Nombre de dispositius virtuals a crear

#define PORTBASE 43450 // port IP base per incrementar des de

WEBPORT és el número de port en què s’executa el servidor web integrat. Es podria fer que se situés als 80 anys per facilitar les coses, però vaig trobar que entrava en conflicte amb Tomcat o altres serveis que s’executaven localment.

NUMDEVICES defineix el nombre d'emuladors WEMO individuals que cal iniciar. Si teniu una targeta de retransmissió de 2 ports, configureu-la en 2, 4 ports = 4, etc.

Els noms simples dels dispositius es configuren en una rutina anomenada setup_names:

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

// utilitzeu aquest bucle

per a (i = 0; i <NUMDEVICES; i ++) {

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

}

// o la següent taula manual per omplir noms de dispositius

/*

strcpy (amable [0], "TV de dormitori");

strcpy (amigable [1], "Manta elèctrica");

strcpy (amigable [2], "Llum de dormitori");

strcpy (friendly [3], "Socket 4");

strcpy (friendly [4], "Socket 5");

strcpy (friendly [5], "Socket 6");

strcpy (friendly [6], "Socket 7");

strcpy (friendly [7], "Socket 8");

*/

tornar i;

}

He utilitzat un bucle per trucar a cadascun dels dispositius "Socket n", però podeu suprimir aquest bucle i afegir els vostres propis noms amistosos (assegureu-vos que afegiu el mateix número que NUMDEVICES) si suprimiu el fitxer / * * /

Recordeu que heu de tornar a compilar el codi si feu algun canvi.

Recomanat: