Tabla de contenido:

Controlador de relé Alexa Raspberry Pi: 6 pasos
Controlador de relé Alexa Raspberry Pi: 6 pasos

Video: Controlador de relé Alexa Raspberry Pi: 6 pasos

Video: Controlador de relé Alexa Raspberry Pi: 6 pasos
Video: Raspberry Pi How to Control a DC Motor With an L298N Driver 2024, Mes de julio
Anonim
Controlador de relé Alexa Raspberry Pi
Controlador de relé Alexa Raspberry Pi
Controlador de relé Alexa Raspberry Pi
Controlador de relé Alexa Raspberry Pi
Controlador de relé Alexa Raspberry Pi
Controlador de relé Alexa Raspberry Pi

Creé este Instructable para compartir mis experiencias con la integración de dispositivos IOT con Alexa de Amazon.

Este proyecto permite controlar una placa de relés conectada a una raspberry pi desde un controlador smarthome.

Se ha probado con Alexa, pero también parece funcionar bien con Samsung Smartthings y otras interfaces de control, ya que emula una serie de enchufes Belkin Wemo.

Hay MUCHOS ejemplos basados en el excelente código FAUXMO, pero esto significó aprender Python y no me dio el control detallado que necesitaba para mis dispositivos, por lo que decidí volver a crear uno desde cero usando C como mi lenguaje de codificación base.

Tampoco quería tener que ir a las profundidades del código lambda en Amazon.com, así que lo he mantenido realmente simple.

Publiqué la fuente y las notas en Github:

github.com/Switchdoctorstu/StuPiMo

El tutorial es realmente para cubrir cómo hacerlo funcionar y publicar mis notas en caso de que ayude a otros.

Paso 1: Suministros y conexiones

Suministros y conexiones
Suministros y conexiones
Suministros y conexiones
Suministros y conexiones
Suministros y conexiones
Suministros y conexiones

Las cosas que necesita están disponibles en Amazon / EBay:

  • Frambuesa PI *
  • Fuente de alimentación Pi
  • Conectores Dupont
  • Tablero de relés
  • Cable micro USB antiguo (para cortar a la mitad para alimentar la tarjeta de relé)

Cualquier Raspberry Pi funcionará, lo he probado en un Model B y Zero.

* Si usa Pi Zero, necesitará un adaptador de red OTG (a menos que compre la versión 'W' con buit en WiFi)

Deberá conectar el Pi a la red.

Utilice los conectores dupont para conectar la tarjeta de relé al Pi.

Tenga en cuenta que la tarjeta de relé debe utilizar alimentación externa (retire el enlace y conéctelo a 5v externos). Funcionará con la tecnología de PI, pero no se recomienda para la producción en ejecución.

Para mi configuración utilicé un HUB USB con alimentación externa. Esto proporciona energía al PI.

También corté el extremo de un cable USB viejo y encendí los relés desde una segunda conexión USB al concentrador para mantenerme a salvo. Mi versión de 'producción' usa una pequeña fuente de alimentación conmutada de 5V 5A. Nuevamente, simplemente corté un cable USB por la mitad para alimentar el Pi a través de Micro-USB y corté dos de los conectores dupont para alimentar la placa de relés. Hay 4 cables en el cable USB, la mayoría usa rojo / negro para indicar el suministro de 5v, pero en caso de duda use un medidor para asegurarse de obtener los cables correctos.

Los pines de relé en la placa están conectados a los pines GPIO relevantes en el encabezado PI.

El código le permite elegir los pines GPIO, pero el predeterminado que usé fue:

  1. Pin de relé 1 - Tierra
  2. Pin de relé 2 - Relé 1 - GPIO 0
  3. Pin de relé 3 - Relé 2 - GPIO 1
  4. Pin del relé 4 - Relé 3 - GPIO 2
  5. Pin de relé 5 - Relé 4 - GPIO 3
  6. Pin del 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 del relé 9 - Relé 8 - GPIO 7
  10. Pin de relé 10 - + 5v para lógica

Paso 2: Configuración de PI

No voy a volver a crear un tutorial sobre cómo poner su PI en funcionamiento y conectado a la red.

Hay muchas guías que incluyen un excelente instructable en:

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

Deberá llegar al punto en el que el PI esté visible en la red y pueda conectarse a él.

No importa si esto es vía Ethernet o inalámbrica.

Este proyecto se puede completar solo con Raspberry PI usando el Geany Programmers Editor, pero personalmente me resulta más fácil preparar mi código en una PC usando Visual Studio o Eclipse (o incluso Notepad ++) y luego subirlo al PI para depurarlo usando un Conexión VNC. Nuevamente, no voy a cubrir eso aquí, ya que hay muchos instructivos excelentes sobre cómo configurar VNC en un RPi.

Todo lo que necesita es llegar al punto en el que pueda cargar y compilar el código.

Una nota que es importante es que dado que el controlador UPNP requiere multidifusión UDP, las interfaces utilizadas deben configurarse en modo 'Promiscuo'.

Esto se puede hacer en la línea de comando:

pi @ raspberrypi: ~ $ ifconfig eth0 promisc

y / o

pi @ raspberrypi: ~ $ ifconfig wlan0 promisc

Esto debe hacerse permanente, así que edité el archivo /etc/rc.local

sudo nano / etc / rc.local

para incluir la línea:

sudo ifconfig eth0 promisc

después del primer conjunto de líneas de banner # para asegurarse de que las interfaces se establecieron al inicio.

Paso 3: descarga y compilación del código

El código en sí se encuentra en mi repsoitory de Github;

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

mientras que hay formas 'correctas' de clonar el repositorio. Me resultó más fácil abrir el editor Geany en el escritorio de Pi y pegar el código.

Del mismo modo, si está utilizando la línea de comandos;

Crea un directorio nuevo

mkdir Stu

Cambiar a eso

cd Stu

Crea un nuevo archivo de texto

nano StuPiMo.c

Copie el código del Github sin procesar y péguelo en el nuevo archivo

Guardar y Salir.

Una vez que tenga el archivo como un objeto de código fuente C, puede compilarlo usando

gcc -o StuPiMo StuPiMo.c -l cableadoPi

tenga en cuenta que el "-l cableadoPi" es necesario para garantizar que el compilador enlaza en la biblioteca de cableado requerida.

Luego, el código se puede ejecutar usando

./StuPiMo

Nuevamente, si desea que esto se ejecute al inicio, use el comando:

sudo nano /etc/rc.local

para agregar la siguiente línea

sudo / home / pi / Stu / StuPiMo y

a su archivo /etc/rc.local. No olvide guardar su archivo al salir.

Tenga en cuenta que el '&' es esencial para garantizar que se genere un subproceso para garantizar que el script no se bloquee en este punto.

Paso 4: usándolo

Una vez que tenga el código en ejecución, pídale a alexa que 'descubra dispositivos' y ella debería encontrar los 8 dispositivos virtuales de Wemo.

Entonces es solo un caso de decir: "Alexa enciende el enchufe 1" o "Alexa apaga el enchufe 6", etc. y se cambiará el relé correspondiente.

Paso 5: cómo funciona el código

El código funciona emulando una serie de dispositivos de enchufe Belkin Wemo.

Para lograr esto, tiene que manejar 2 funciones principales.

  • un controlador de difusión de descubrimiento UPNP
  • un 'controlador de dispositivo' (uno por dispositivo virtual) para administrar los comandos enviados al dispositivo y las respuestas requeridas.

Una característica 'adicional' es que también publica una página web para permitir el control de los dispositivos.

Controlador UPNP

El controlador UPNP abre un socket para monitorear los paquetes del protocolo SSDP en el puerto 1900 239.255.255.250.

Responde a cualquier consulta de 'M-SEARCH' que llega con un paquete de respuesta de descubrimiento que anuncia los emuladores de wemo individuales a cualquiera que los pregunte.

Manejador de dispositivos

Los controladores de dispositivos (uno por dispositivo virtual) monitorean una serie de puertos IP y responden a las solicitudes.

Servirá una respuesta setup.xml cuando se le solicite

Servirá un archivo de descripción del evento cuando se le solicite

Responderá a una solicitud GETBINARYSTATE

Procesará y responderá a una solicitud SETBINARYSTATE

Servidor web

El servidor web es una rutina simple que crea un formulario HTML que contiene un botón por relé.

Responderá a los botones que se presionan y cambiará el estado del relé en consecuencia.

Paso 6: personalización y nombres descriptivos

Personalización y nombres descriptivos
Personalización y nombres descriptivos

No me he vuelto loco con el código para mantenerlo simple y editable.

Los conceptos básicos se pueden personalizar mediante definiciones al comienzo del código:

// definiciones globales # definir WEBPORT 5353 // puerto para ejecutar el servidor web

#define NUMDEVICES 8 // Número de dispositivos virtuales para crear

#define PORTBASE 43450 // puerto IP base para incrementar desde

WEBPORT es el número de puerto en el que se ejecuta el servidor web integrado. Esto podría hacerse para sentarse en 80 para facilitar las cosas, pero encontré que entraba en conflicto con tomcat u otros servicios que se ejecutan localmente.

NUMDEVICES define el número de emuladores WEMO individuales que se ejecutarán. Si tiene una tarjeta de relé de 2 puertos, configure esto en 2, 4 puertos = 4, etc.

Los nombres descriptivos de los dispositivos se establecen en una rutina llamada setup_names:

int setup_names (caracteres amigables [NUMDEVICES] [NAMELEN]) {int i = 0;

// usa este bucle

para (i = 0; i <NUMDISPOSITIVOS; i ++) {

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

}

// o la siguiente tabla manual para completar los nombres de los dispositivos

/*

strcpy (amigable [0], "TV del dormitorio");

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

strcpy (amigable [2], "Lámpara de dormitorio");

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

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

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

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

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

*/

volver i;

}

Usé un bucle para llamar a cada uno de los dispositivos 'Socket n', pero puede eliminar este bucle y agregar sus propios nombres descriptivos en su lugar (solo asegúrese de agregar el mismo número que NUMDEVICES) si elimina el / * * /

Recuerde volver a compilar el código si realiza algún cambio.

Recomendado: