Configurar Raspberry Pi Home Automation

Configurar Raspberry Pi Home Automation
Una de las cosas más importantes para la automatización del hogar es controlar CA de alto voltaje utilizando un DC de bajo voltaje. Para controlar el CA de alto voltaje de Raspberry Pi, necesitará un interruptor de retransmisión de 5V. Puede controlar el interruptor de relé usando los pines GPIO de Raspberry Pi. El interruptor de relé puede controlar los electrodomésticos de CA a través de Raspberry Pi.

Este artículo le mostrará cómo usar Raspberry Pi y el interruptor de retransmisión de 5V para encender y apagar una bombilla de su dispositivo móvil. El artículo incluye una aplicación web a la que puede acceder desde cualquier dispositivo en su red y controlar cualquier electrodoméstico de CA en su hogar de forma inalámbrica. Entonces, comencemos con nuestro simple experimento de automatización del hogar Raspberry Pi.

Cosas que necesitarás

Si desea usar su Raspberry Pi Harment (a través de SSH o VNC), necesitará las siguientes cosas:

1) Raspberry Pi 3 o Raspberry Pi 4.
2) interruptor de relé de 5V.
3) cables eléctricos.
4) 3 cables de conexión de mujer a mujer.
5) AC Lightbulb.
6) Soporte de bombillas de CA.
7) enchufe de CA.
8) herramienta de stripper y wirecutter.
9) destornillador CR-V 3.
10) Micro-USB (Raspberry Pi 3) o USB Type-C (Raspberry PI 4) Adaptador de alimentación.
11) La tarjeta microSD de 16 GB o 32 GB con Raspberry Pi OS flashó.
12) Conectividad de red en Raspberry Pi.
13) Laptop o una computadora de escritorio para acceso de escritorio remoto VNC o acceso SSH a Raspberry Pi.

Si no desea acceder a Raspberry Pi de forma remota a través de SSH o VNC, también necesitará lo siguiente:

14) Un monitor.
15) cable HDMI o micro-HDMI.
16) Un teclado.
17) Un mouse.

Si necesita ayuda para flashear la imagen de Raspberry Pi OS en la tarjeta microSD, consulte el artículo sobre cómo instalar y usar Raspberry Pi Imager.

Si es un principiante Raspberry Pi y necesita ayuda para instalar Raspberry Pi OS en Raspberry Pi, consulte el artículo sobre cómo instalar Raspberry Pi OS en Raspberry Pi 4.

Además, si necesita ayuda con la configuración sin cabeza de Raspberry Pi, consulte el artículo sobre cómo instalar y configurar Raspberry Pi OS en Raspberry Pi 4 sin monitor externo.

Las imágenes de todas las herramientas requeridas se dan a continuación.

Encendido en Raspberry Pi

A continuación, conecte el cable de alimentación a Raspberry Pi y encienda la Raspberry Pi.

Una vez que se enciende Raspberry Pi, puede conectarse a Raspberry Pi a través de VNC o SSH. O puede conectar un teclado, un mouse y un monitor a Raspberry Pi para acceder directamente a él.

Pinots de retransmisión de 5V

Un relé es básicamente un interruptor. Pero, a diferencia de un interruptor tradicional, un relé se puede controlar por una pequeña cantidad de voltaje de CC.

El relé de 5V es muy fácil de usar. Tiene dos lados: se usa un lado para controlar el relé a través de DC de bajo voltaje (de Raspberry Pi), y el otro lado se usa para controlar el CA de alto voltaje (I.mi., la bombilla), dependiendo del estado del relé.


Por un lado, el relé tiene dos LED (uno rojo y otro verde) y tres pines (En, gnd, y VCC). Estos tres pines se utilizan para controlar el relé de Raspberry Pi.

Los dos primeros pines en el otro lado se utilizan para controlar el aparato en casa de CA.

Conectando el relé de 5 V a Raspberry Pi

Para conectar el relé de 5V a Raspberry Pi, necesitará tres cables de conexión de mujer a mujer.

Conecte un lado de los cables de conexión al EN (alambre amarillo), Gnd (alambre negro), y VCC Pins (alambre rojo) en el relé de 5V, como se muestra a continuación.


El otro lado de los cables entra en los pasadores de encabezado GPIO de Raspberry Pi, como se muestra en la imagen a continuación.

El cable rojo debe entrar en el Pin 2 (VCC) de Raspberry Pi.
El cable negro debe entrar en el Pin 6 (GND) de Raspberry Pi.
El cable amarillo debe entrar en el Pin 7 (GPIO 4) de Raspberry Pi.


Una vez que el relé de 5V está conectado a Raspberry Pi, debe verse como se muestra en la imagen a continuación.

Permitir el acceso de GPIO al usuario de inicio de sesión

Para permitir el acceso a los pines GPIO, el usuario de inicio de sesión predeterminado de Raspberry Pi OS Pi debe agregarse al GPIO grupo.

Puedes agregar el Pi usuario al GPIO Grupo con el siguiente comando:

$ sudo usermod -ag gpio $ (whoami)


Para que los cambios entren en vigencia, reinicie Raspberry Pi con el siguiente comando:

$ sudo reinicio

Creación de un directorio de proyecto

También es una buena idea mantener todos los archivos del proyecto organizados.

Para mantener organizados los archivos del proyecto, cree el directorio del proyecto ~/www y los subdirectorios requeridos con el siguiente comando:

$ mkdir -pv ~/www/plantillas, static


Una vez que se crea el directorio del proyecto, navegue al directorio del proyecto de la siguiente manera:

$ CD ~/www

Cambiar el relé de 5 V desde Raspberry Pi

Ahora que ha conectado el relé de 5V a Raspberry Pi, cambiará el relé de Raspberry Pi usando el lenguaje de programación de Python.

Nota: conmutación es un término utilizado en electrónica. Conmutación significa controlar (yo.mi. encendido/apagado) un determinado dispositivo electrónico.

Para experimentar con el cambio del relé usando el lenguaje de programación de Python, cree la nueva prueba de script de Python.Py en el directorio del proyecto de la siguiente manera:

$ nano prueba.py


Escriba las siguientes líneas de códigos en la prueba.guión py python.

de gpiozero import led
Desde el tiempo de sueño
Mientras que es cierto:
relé = LED (4)
Imprimir ("Relé: ON")
dormir (5)
relé.cerca()
Imprimir ("Relé: APAGADO")
dormir (5)

Una vez que haya terminado, presione + X seguido por Y y Para salvar el prueba.py Guión de pitón.


Aquí, la línea 1 importaciones CONDUJO desde el gpiozero biblioteca y línea 2 importe el dormir función desde el tiempo biblioteca.


Las líneas 6-14 están dentro de un bucle infinito.


La línea 6 inicializa un LED en el GPIO 4 de Raspberry Pi, que está conectado al EN Pin del relé.


La línea 8 enciende el relé usando el en() método.

La línea 9 imprime un mensaje en la consola utilizando el imprimir() función.

La línea 10 retrasa la ejecución de la siguiente línea de código durante cinco segundos utilizando el dormir() función.


La línea 12 apaga el relé usando el cerca() método.

De la misma manera, la línea 9 imprime un mensaje en la consola utilizando el imprimir() La función y la línea 10 retrasan la ejecución de la siguiente línea de código durante 5 segundos utilizando el dormir() función.


A continuación, ejecuta el prueba.py Python script de la siguiente manera:

Prueba de $ python3.py


El prueba.py El script de Python debe comenzar a cambiar el relé de 5V. Debería escuchar un sonido de clic cada cinco segundos. Cuando el relé cambia el estado (de encendido hacia apagado o de apagado hacia adelante), hace un ruido de clics. Esto significa que el relé funciona correctamente.


Cuando el relé está en el estado fuera del estado (operación normal: la carga de CA está desconectada), solo el rojo LED debe iluminarse, como puede ver en la imagen a continuación.


Cuando el relé está en el estado del estado (la carga de CA está conectada), ambos verde LED y el rojo LED debe iluminarse, como puede ver en la imagen a continuación.


Una vez que se complete la prueba, presione + C para terminar el prueba.py guion.

Conectando la bombilla AC al relé de 5V

El relé de 5V ahora debería estar funcionando correctamente. Ahora, conectará su aparato en casa AC (una bombilla, en este caso) al relé de 5V.

Primero, corta el cable eléctrico negro conectado a la bombilla con un wirecutter.


Una vez que el cable eléctrico negro conectado a la bombilla se ha cortado con un wirecutter, debe verse como se muestra en la imagen a continuación.


Luego, elimine la capa exterior para exponer aproximadamente ½ pulgada del cable eléctrico, como se muestra en la imagen a continuación.


Luego, doble los cables expuestos, como se muestra en la imagen a continuación.


Afloje los tornillos marcados del relé con un destornillador CV-3.


Inserte los cables expuestos que se desnudó y dobló antes en las dos terminales de tornillo y apriete los tornillos con un destornillador CV-3.

Prueba de conmutación de relé después de conectar la carga de CA

Una vez que la carga de CA esté conectada al relé de 5 V, conecte el enchufe de la bombilla a la toma de la pared.


Ejecutar el prueba.py Python script del directorio del proyecto de la siguiente manera:

Prueba de $ python3.py


El prueba.py El script de Python debe comenzar a cambiar el relé de 5 V, que, a su vez, cambiará la bombilla de CA de alto voltaje a intervalos de cinco segundos. La bombilla AC debe permanecer encendida durante cinco segundos, luego permanecer fuera durante cinco segundos, y así sucesivamente.

La bombilla está apagada en la imagen a continuación.


La bombilla está encendida en la imagen a continuación.


Como puede ver, podemos cambiar el relé y controlar la bombilla AC de alto voltaje usando el lenguaje de programación de Python. Entonces, presione + C para terminar el prueba.py guion.

Pasemos ahora a la siguiente sección.

Escribir la aplicación web de Home Automation

En esta sección, le mostraré cómo escribir una aplicación web basada en API utilizando el lenguaje de programación de Python. Puede usar la aplicación web para controlar el relé y los dispositivos domésticos de CA o dispositivos eléctricos conectados a la relé desde un navegador web.

NOTA: Todos los códigos que se muestran en esta sección están disponibles en mi repositorio de GitHub Shovon8/Raspberry-Pi-Home-Automation. Si lo desea, puede clonar mi repositorio de GitHub y omitir todos los códigos.

Crear el servidor.Py Python Script en el directorio del proyecto de la siguiente manera:

$ Nano Server.py


Escriba las siguientes líneas de códigos en el servidor.py Guión de pitón.

de Flask Import Flask, JSONIFY, URL_FOR, RENDER_TEMPLATE
de gpiozero import led
de uuid import uuid4
habitaciones =
habitaciones ['habitación 1'] = [
'id': uuid4 (),
'Nombre': 'Luz 1',
'icono': 'fa fa-lightbulb',
'Estado': Falso,
'Relaypin': 4,
'RelayInstance': falso
,
'id': uuid4 (),
'Nombre': 'Fan 1',
'icono': 'fa fa-fan',
'Estado': Falso,
'Relaypin': 6,
'RelayInstance': falso
]
habitaciones ['Baño 1'] = [
'id': uuid4 (),
'Nombre': 'Luz 1',
'icono': 'fa fa-lightbulb',
'Estado': Falso,
'Relaypin': 5,
'RelayInstance': falso
]
App = Flask (__ Nombre__)
aplicación.config ['send_file_max_age_default'] = 0
@App.ruta('/')
Def Home ():
return render_template ('./índice.html ', habitaciones = habitaciones)
Def toggle_appliance_status (id):
para habitación en las habitaciones:
Para el electrodoméstico en las habitaciones [habitación]:
if str (aparato ['id']) == id:
Si el dispositivo ['RelayInstance']:
aparato ['RelayInstance'].cerca()
aparato ['RelayInstance'] = False
demás:
Appliance ['RelayInStance'] = LED (Appliance ['RelayPin'])
aparato ['RelayInstance'].en()
aparato ['status'] = no aparato ['status']
Devolver verdadero
falso retorno
@App.ruta ('/Appliance/Toggle/')
Def Appliance_Toggle (ID):
return jsonify ('status': toggle_appliance_status (id))

Una vez que haya terminado, presione + X seguido por Y y Para salvar el servidor.py Guión de pitón.


Aquí, las líneas 1-3 importan todos los componentes necesarios de sus respectivas bibliotecas.


La línea 5 crea un vacío habitaciones diccionario. En este diccionario, almacenaremos todos los detalles del dispositivo de CA que queremos controlar desde la aplicación web.


El habitaciones Los detalles se almacenan en las líneas 7-29.


Discutamos la estructura de datos de una de las habitaciones.

Aquí, el nombre de la habitación será Habitación 1. Entonces, Habitación 1 es la clave del habitaciones diccionario.


El Habitación 1 La clave contiene una matriz como valor. El número de elementos de matriz es igual al número de electrodomésticos de CA que tiene en esa habitación que también desea controlar desde la aplicación web. En este caso, tenemos dos electrodomésticos de CA que queremos controlar: Luz 1 y Fan 1.


Cada definición de electrodoméstico tiene una identificación. El identificación es un uuid generado al azar. Esto se usa para identificar qué habitación queremos controlar usando la API.

Un electrodoméstico también tiene todo lo siguiente:

  • Nombre (Luz 1 en este caso)
  • icono (Clase de icono impresionante de fuentes, ya que usaremos Font Awesome para los iconos)
  • Estado (verdadero si en y FALSO si apagado)
  • relevante (El número de pin GPIO utilizado para controlar el relé conectado al aparato inicio de CA)
  • RelayInstance (el inicializado CONDUJO objeto de gpiozero Biblioteca responsable de controlar el Pin GPIO respectivo - relevante)


La línea 31 inicializa un servidor web de Flask Python.

La línea 32 configura el servidor web de Flask.


Líneas 34-36 Enviar el índice.html archivo del plantillas/ Directorio cuando visita la aplicación web de Home Automation.

Usos del frasco Jinja2 plantilla de lenguaje para renderizar el índice.html archivo. Entonces, he pasado el habitaciones diccionario al índice.html archivo. Jinja2 hará la página de inicio utilizando el habitaciones datos.


La función toggle_appliance_status () En las líneas 39-52 se usa para encender el aparato de inicio si está apagado y apagar el aparato de inicio si está en usar el dispositivo identificación.

Vuelve Verdadero Si la operación de palanca es exitosa. Si hay un error, volverá FALSO.


Las líneas 55-57 se utilizan para alternar un aparato de inicio utilizando el /Appliance/Toggle/ Punto final API del servidor web. Aquí, identificación es la identificación del aparato local.


Crear el índice.html archivo en el plantillas/ Directorio de su proyecto de la siguiente manera:

$ Nano plantillas/índice.html

Escriba las siguientes líneas de códigos en el índice.html guion.








Automatización del hogar con Raspberry Pi



Raspberry Pi Automatización del hogar


% para habitación en habitaciones %

habitación



% para electrodomésticos en habitaciones [habitación] %


Appliance ['Name']

% endfor %


% endfor %



Una vez que haya terminado, presione + X seguido por Y y Para salvar el índice.html archivo.


Crear un estilo.CSS archivo en el estático/ Directorio de su proyecto de la siguiente manera:

$ nano estático/estilo.CSS


Escriba las siguientes líneas de códigos en el estilo.CSS archivo.

@Import URL ('https: // fuentes.Googleapis.com/css2?familia = benchnine: wght@300; 400; 700 & display = swap ');
*
margen: 0;
relleno: 0;
Font-Family: 'benchnine', sans-serif;

#content> H1
Antecedentes: gradiente lineal (a la derecha, RGB (112, 24, 163), RGB (86, 127, 240));
Color: #fff;
Text-Align: Center;
relleno: .5em 0;

div.habitación
margen: .5em;
borde: 2px sólido RGB (112, 24, 163);
Border-Radius: 5px;

div.habitación H2
/* Antecedentes: RGB (9, 76, 121); */
Antecedentes: gradiente lineal (a la derecha, RGB (112, 24, 163), RGB (86, 127, 240));
relleno: 0 0 0 .5em;
Color: #fff;

div.aparatos
margen: .5em .5em 0 0;
Pantalla: Flex;
Flex-Wrap: envoltura;

div.aparato
borde: 2px sólido RGB (112, 24, 163);
Border-Radius: 5px;
Ancho: 110px;
Altura: 120px;
Text-Align: Center;
Margen: 0 0 .5em .5em;
Pantalla: Flex;
Dirección flexible: columna;

div.Applio yo.fa
tamaño de fuente: 4em;
Flex-Crow: 1;
Tople de relleno: 0.3em;
Color: RGB (204, 50, 50);

div.aparato [data-active = "activo"] i.fa
Color: RGB (32, 177, 51);

div.extensión de electrod
bloqueo de pantalla;
Font-Weight: Bold;
Antecedentes: RGB (112, 24, 163);
Color: #fff;

Una vez que haya terminado, presione + X seguido por Y y Para salvar el estilo.CSS archivo.


Crear un aplicación.js archivo en el estático/ Directorio de su proyecto de la siguiente manera:

$ nano static/app.js


Escriba las siguientes líneas de códigos en el aplicación.js archivo.

ventana.addEventListener ('Load', Main);
función main ()
function toggleAppliancestate (e)
var id = e.camino [1].identificación;
var http = new xmlhttprequest ();
http.onreadyStateChange = function ()
si esto.ReadyState === 4 && esto.estado === 200)
if (json.analizar (esto.Responsetxt).estado === true)
if (e.camino [1].Hasattribute ('data-active'))
mi.camino [1].RemoveAttribute ('Data-Active')
demás
mi.camino [1].setAttribute ('data-active', 'activo')




http.Open ("Get", '/Appliance/Toggle/$ id', true);
http.enviar();

electrodomésticos var = documento.getElementsByClassName ('Appliance');
para (i = 0; i < appliances.length; i++)
aparatos [i].addEventListener ('hacer clic', toggleAppliancestate);

Una vez que haya terminado, presione + X seguido por Y y para salvar el aplicación.js archivo.


Aquí, la línea 1 ejecuta el principal() función cuando la página web finaliza la carga.

En el índice.html Archivo, cada aparato de inicio está encerrado en un aparato clase. Las líneas 26-29 se utilizan para seleccionar cada aparato de inicio en la página web y adjuntar el hacer clic Evento para el aparato. Cuando alguien hace clic en un dispositivo inicio desde la página web, el toggleAppliancestate () la función se ejecutará.


En las líneas 4-23, el toggleAppliancestate () la función se utiliza para solicitar el /Appliance/Toggle/ punto final del servidor web para cambiar el estado del dispositivo inicio hecho hecho. La solicitud se realiza en segundo plano a través de AJAX. Una vez que se recibe la respuesta, la página web se actualiza en consecuencia.


Navegar al estático/ Directorio en su proyecto Directorio de la siguiente manera:

$ CD estática/


Descargar Font Awesome con el siguiente comando:

$ wget https: // usar.avenida.com/lanzamientos/v5.15.1/fontawesher-free-5.15.1-web.cremallera


Una vez que Font Awesome se descarga, debe encontrar el nuevo archivo zip fontawesome-libre-5.15.1-web.cremallera en el estático/ directorio.

$ ls -lh


Descomprimir el fontawesome-libre-5.15.1-web.cremallera Archivo con el siguiente comando:

$ Unzip Fontawesome-Free-5.15.1-web.cremallera


El fontawesome-libre-5.15.1-web.cremallera El archivo ahora debe estar descomprimido.


El nuevo directorio fontawesome-libre-5.15.1-Web/ debe crearse en la estática/ directorio, como puede ver en la captura de pantalla a continuación.

$ ls -lh

Cambiar el nombre del directorio fontawesome-libre-5.15.1-Web/ a FontAwesome/ Con el siguiente comando:

$ MV -V FONTAWEASSEW-FRAY-5.15.1-web Fontaweam


Ahora, ya no necesitas el fontawesome-libre-5.15.1-web.cremallera archivo. Entonces, retire el fontawesome-libre-5.15.1-web.cremallera Archivo con el siguiente comando:

$ RM -V FONTAWEASS-Free-5.15.1-web.cremallera


El estático/ La estructura del directorio debe verse como se muestra en la captura de pantalla a continuación.

$ ls -lh


Navegue de regreso al directorio del proyecto ~/www como sigue:

$ CD ..

Prueba de la aplicación web de automatización del hogar

Para probar la aplicación web de Home Automation, ejecute el siguiente comando en el directorio de su proyecto:

$ Frask_app = servidor.Py Flask Run


La aplicación web debe estar disponible en el puerto 5000 de su Raspberry Pi.


Desde el navegador web de Chromium, visite http: // localhost: 5000. La aplicación web de la automatización del hogar debe cargarse.

Haga clic en el icono de la bombilla, indicado en la imagen a continuación.


La bombilla AC ahora debe activarse. El color del icono también debe cambiar a verde, lo que indica que la bombilla está encendida.


Entonces, la aplicación web de Home Automation está funcionando. Prensa + C para terminar el servidor web.

Creación del servicio Systemd para la aplicación web de Home Automation

En esta sección, le mostraré cómo crear un archivo de servicio de Systemd para la aplicación web Home Automation para que se inicie automáticamente en Boot.

Primero, cree el Raspi-Home-Automation.servicio Archivo en su directorio de proyecto de la siguiente manera:

$ nano raspi-home-automatización.servicio

Escriba las siguientes líneas en la automatización de Raspi-Home.archivo de servicio.

[Unidad]
Descripción = Raspberry Pi Home Automation Service web
Después = red.objetivo
[Servicio]
WorkingDirectory =/Home/Pi/www
Entorno = frask_app = servidor.py
Environmento = Flask_env = Producción
Execstart =/usr/bin/frask run --host = 0.0.0.0
StandardOutput = heredar
StandardError = heredar
Reiniciar = siempre
Usuario = PI
[Instalar]
Wantedby = Multi-user.objetivo

Una vez que haya terminado, presione + X seguido por Y y para salvar el Raspi-Home-Automation.servicio archivo.


Copia el Raspi-Home-Automation.servicio archivo al /etc/systemd/system/ directorio con el siguiente comando:

$ sudo cp -v raspi-home-automatización.servicio/etc/systemd/system/


Recargar los Daemons Systemd para que los cambios entren en vigencia de la siguiente manera:

$ sudo SystemCtl-Daemon-Reload


Añade el Raspi-Home-Automation Servicio al inicio del sistema de Raspberry Pi OS con el siguiente comando:

$ sudo SystemCTL Habilitar Raspi-Home-Automation.servicio


Reiniciar Raspberry Pi con el siguiente comando:

$ sudo reinicio


Una vez que se bota Raspberry Pi, la Raspi-Home-Automation El servicio debe estar activo/en ejecución, como puede ver en la captura de pantalla a continuación.

$ sudo systemctl status raspi-home-automatización.servicio

Acceder a la aplicación web de Home Automation desde otros dispositivos

Para acceder a la aplicación web Home Automation desde otros dispositivos en su red doméstica, deberá conocer la dirección IP de su dispositivo Raspberry PI.

Puede encontrar la dirección IP de su dispositivo Raspberry Pi 4 desde la interfaz de administración web de su enrutador de inicio. En mi caso, la dirección IP es 192.168.0.103. Esto será diferente para ti. Entonces, asegúrese de reemplazar mi IP con la suya de ahora en adelante.


Si tiene acceso a la consola Raspberry Pi, también puede ejecutar el siguiente comando para encontrar la dirección IP.

$ hostname -i


Una vez que conozca la dirección IP de su dispositivo Raspberry Pi, puede acceder a ella desde cualquier dispositivo en su red doméstica.

Como puede ver en la captura de pantalla a continuación, he accedido a la aplicación web Home Automation desde mi teléfono inteligente Android.


Asegúrese de enchufar el enchufe de la bombilla en la salida de alimentación de la pared.


La bombilla debe apagarse de forma predeterminada.


Si toca el icono de la bombilla de la aplicación de la automatización del hogar, el color del icono de la bombilla debe cambiar a verde, lo que indica que la bombilla está encendida.


Como puede ver en la imagen a continuación, la bombilla está encendida.

Conclusión

Este artículo le mostró cómo usar un relé de 5 V para controlar un dispositivo eléctrico de CA de alto voltaje de Raspberry Pi utilizando el lenguaje de programación de Python. El artículo también le mostró cómo escribir una aplicación web Python Flask basada en API para controlar el relé desde el navegador web. Este artículo debería ayudarlo a comenzar con la automatización del hogar usando Raspberry Pi.