Control de dispositivos IoT a través de correos electrónicos a través del protocolo IMAP – IOT Parte 48

En el tutorial anterior, se mencionó que el protocolo IMAP es un protocolo de correo electrónico estándar que se utiliza para almacenar mensajes de correo electrónico y recuperarlos. También se mencionó que el protocolo IMAP se puede utilizar en aplicaciones de IoT donde se pueden pasar comandos a dispositivos de IoT por correo electrónico. Esto puede resultar muy útil en determinadas situaciones, como cuando la seguridad puede ser la principal preocupación. Además, los correos electrónicos se pueden enviar a través de cualquier red sin ninguna aplicación o permiso especial. Los dispositivos IoT pueden recibir correos electrónicos como clientes de correo electrónico, donde pueden leerlos y procesar la información que contienen.
En este proyecto, se utiliza una Raspberry Pi como dispositivo IoT que actúa como cliente de correo electrónico. La Raspberry Pi tiene una interfaz con un LED que se controla mediante el envío de correos electrónicos a la Pi. El Pi recibe correos electrónicos a través de la red IoT (internet) y controla el LED según los datos recibidos en el cuerpo del correo electrónico. Interpreta el cuerpo del correo electrónico sólo cuando el asunto del correo electrónico coincide con un nombre predeterminado. Los correos electrónicos para pasar comandos de control de LED se pueden enviar desde cualquier dispositivo como computadora portátil, PC, tableta o teléfono inteligente. La Raspberry Pi recibe estos correos electrónicos a través del Protocolo de acceso a mensajes de Internet (IMAP).
Componentes necesarios –
1) Frambuesa Pi 3
2) LED
3) resistencia de 1KΩ
4) Cables de puente
Software requerido –
1) Sistema operativo Raspbian
2) Leafpad/GNU Nano/Python 3 IDLE (para escribir scripts en Python)
Diagrama de bloques -
Diagrama de blocos do cliente de e-mail Raspberry Pi IoT IMAP
Figura 1: Diagrama de bloques del cliente de correo electrónico IMAP Raspberry Pi IoT
Conexiones de circuito –
En este proyecto se diseña un dispositivo IOT simple. Tiene un LED conectado a la Raspberry Pi 3. El dispositivo se diseña ensamblando los siguientes componentes.
Raspberry Pi 3: Raspberry Pi 3 es la Raspberry Pi de tercera generación. Es una maravilla en miniatura, que reúne una potencia informática considerable en un espacio no mayor que el de una tarjeta de crédito. El procesador central del sistema Raspberry Pi es un sistema en chip (SoC) Broadcom BCM2837 que alberga un procesador Quad Core ARM Cortex-A53 de 1,2 GHz. La gran mayoría de los componentes del sistema, incluidas sus unidades de procesamiento central y de gráficos, junto con el. El hardware de audio y comunicaciones está integrado en este único componente, junto con el chip de memoria LPDDR2 de 1 GB en el centro de la placa. No es sólo este diseño de SoC lo que hace que el BCM2837 sea diferente del procesador que se encuentra en una computadora de escritorio o portátil típica; sin embargo, también utiliza una arquitectura de conjunto de instrucciones (ISA) diferente conocida como ARM.
El Pi viene equipado con una toma Ethernet 10/100 BaseT integrada, un puerto compuesto HDMI y RCA para vídeo, un conector de salida de audio de 3,5 mm, una interfaz serie de cámara MIPI de 15 pines (CSI-2), una interfaz serie de pantalla, Bluetooth 4.1, 802.11 b. /g/n LAN inalámbrica, tarjeta Micro SDIO a Micro SD, 4 conectores USB 2.0, conector de 40 pines que contiene 27 pines GPIO y toma Micro USB para fuente de alimentación.
La Raspberry Pi es una computadora de placa única diseñada para ejecutar un sistema operativo llamado GNU/Linux Raspbian. En lo sucesivo denominado simplemente Linux. A diferencia de Windows u OS X, Linux es de código abierto, por lo que puedes descargar el código fuente de todo el sistema operativo y realizar los cambios que desees. Raspberry Pi 3 también puede ejecutar Windows 10 IoT y muchos otros sistemas operativos integrados, muchos de los cuales se derivan de Linux. El sistema operativo debe cargarse en una tarjeta MicroSD y arrancar desde ella. Con potentes capacidades informáticas, una gran cantidad de interfaces multimedia y pines GPIO, Raspberry Pi 3 es una opción adecuada para ejecutar un proyecto integrado o de IoT basado en software complejo que requiere suficiente potencia informática, así como conectividad de sensores a gran escala. Con Bluetooth y Wi-Fi integrados, este Pi de tercera generación se puede implementar fácilmente en una red IoT. Las principales especificaciones de Raspberry Pi 3 se resumen en la siguiente tabla:
Tabela de listagem de especificações técnicas do Raspberry Pi 3
Figura 2: Tabla que enumera las especificaciones técnicas de Raspberry Pi 3

El encabezado de 40 pines en Raspberry Pi 3 tiene la siguiente configuración de pines:

Tabela de listagem de configuração de pinos do cabeçalho de 40 pinos do Raspberry Pi
Fig. 3: Tabla que enumera la configuración de pines del encabezado de 40 pines de Raspberry Pi
Tabela de listagem de configuração de pinos do cabeçalho de 40 pinos do Raspberry Pi
Fig. 4: Tabla que enumera la configuración de pines del encabezado de 40 pines de Raspberry Pi
En este proyecto, un LED interactúa con el pin GPIO18 de Raspberry Pi. La placa se alimenta mediante un adaptador USB.
LED: un LED está conectado al GPIO18 de Raspberry Pi. Su ánodo está conectado al pin Raspberry Pi y el cátodo está conectado a tierra. El LED está conectado al Pi a través de una resistencia pull-up de 1K ohmios en serie.
Fuente de alimentación: la fuente de alimentación está conectada a la Raspberry Pi. El Pi debe funcionar con un adaptador de 5 V con salida de corriente de 2,5 A. El adaptador se puede conectar a la toma Micro USB.
Cómo funciona el circuito –
El dispositivo IoT diseñado aquí es simplemente una Raspberry Pi 3 que controla un LED. Para controlar el LED, se escribe un script en Python que recupera correos electrónicos y si el asunto del correo electrónico coincide con un texto predeterminado, lee el cuerpo del correo electrónico que contiene el comando de control.
En primer lugar, es necesario cargar la Raspberry Pi con un sistema operativo. El sistema operativo oficial Raspberry Pi, Linux Raspbian, está instalado aquí. Durante la instalación del sistema operativo, la Raspberry Pi debe estar conectada a un monitor mediante un cable HDMI y un teclado y mouse a través de puertos USB.
Para instalar el sistema operativo Raspbian en una tarjeta MicroSD, primero descargue la imagen más reciente del sistema operativo Raspbian desde el sitio web de Raspberry Pi en el siguiente enlace:
Sistema operativo Raspbian
Copie la última imagen del sistema operativo Raspbian a la tarjeta MicroSD. Si la tarjeta MicroSD utilizada es de 32 GB o menos, se debe formatear en FAT32 (sistema de archivos) antes de copiar la imagen, o si la tarjeta MicroSD tiene más de 32 GB, se debe formatear en exFAT antes de copiar la imagen. Extrae el Zip del sistema operativo y cópialo en la tarjeta MicroSD. La imagen se puede escribir en la tarjeta conectándola a una computadora portátil o PC mediante un lector de tarjetas MicroSD. Después de copiar la imagen extraída, inserte la tarjeta en la ranura MicroSD como se muestra a continuación:
Imagem típica do slot para cartão MicroSD Raspberry Pi 3
Fig. 5: Imagen típica de la ranura para tarjetas MicroSD de Raspberry Pi 3
Conecte la Raspberry Pi a un monitor mediante un cable HDMI, un teclado y un mouse. Encienda la tarjeta conectándola a un adaptador de corriente. El LED rojo en la placa comenzará a parpadear y el sistema operativo comenzará a iniciarse desde la tarjeta MicroSD. El proceso de inicio se mostrará en el monitor y una vez que se complete el inicio, el LED verde se iluminará en la Raspberry Pi. Después de instalar con éxito el sistema operativo Raspbian en Raspberry Pi, se recomienda realizar una actualización de software. Esto se puede hacer ejecutando los siguientes comandos de Linux en la Terminal de Linux:
$ sudo apt-obtener actualización
$ sudo apt-obtener actualización
Después de instalar Raspbian, es hora de escribir y ejecutar scripts de Python en Raspbian. Se puede escribir un script de Python en Raspbian usando un editor de texto como Leafpad o GNU Nano. El script de Python también se puede escribir utilizando el IDE de Python estándar, como Python 2 IDLE o Python 3 IDLE. Abra Python 3 IDLE navegando por Menú -> Programación -> Python 3 IDLE. Se abrirá una ventana llamada Python 3.4.2 Shell. Escriba los scripts de Python y guárdelos en un directorio.
El script de Python escrito para este proyecto debe ejecutarse al inicio cuando el Pi 3 está encendido. El script ejecuta un bucle infinito para que nunca termine. Existen algunos métodos mediante los cuales se puede configurar Raspberry Pi para ejecutar un script de Python al inicio. Se puede utilizar cualquiera de los siguientes métodos:
1) Edición de rc.local –
Se pueden agregar comandos al archivo /etc/rc.local para ejecutar un programa o comando cuando se inicia Raspberry Pi. Esto es especialmente útil si el Pi necesita conectarse a una fuente de alimentación sin cabeza y ejecutar un programa sin configuración o inicialización manual. El archivo debe editarse con root ejecutando los siguientes comandos en la Terminal de Linux:
sudo nano /etc/rc.local
Ahora agregue comandos para ejecutar el script de Python usando la ruta completa del archivo y agregue un signo comercial al final del comando para que el script se ejecute en un proceso separado y la inicialización pueda continuar. Se debe agregar el siguiente comando donde el script de Python se guarda como IMAP.py:
sudo python /home/pi/IMAP.py &
salida 0
El comando debe agregarse justo antes de la línea de salida 0 en el archivo rc.local.
2) Edición de .bashrc –
El .bashrc es un archivo oculto en la carpeta de inicio que contiene opciones de configuración del usuario. Abra el archivo .bshrc ejecutando los siguientes comandos en la terminal de Linux:
sudo nano /home/pi/.bashrc
Agregue las siguientes líneas después de la última línea del archivo:
echo ejecutándose al inicio
sudo python /home/pi/IMAP.py
3) Agregar script al directorio init.d –
El directorio init.d contiene los scripts que se inician durante el proceso de arranque (además, todos los programas aquí se ejecutan cuando el Pi se apaga o reinicia). Agregue el script que se ejecutará al inicio al directorio init.d usando los siguientes comandos:
sudo cp /home/pi/securitysystem.py /etc/init.d/
Vaya al directorio de inicio y abra el script de Python ejecutando los siguientes comandos:
CD /etc/init.d
sudo nano IMAP.py
Agregue las siguientes líneas al script de Python para convertirlo en una base estándar de Linux (LSB):
# /etc/init.d/sample.py
### INFORMACIÓN DE INICIO
# Proporcionar: muestra.py
# Inicio obligatorio: $remote_fs $syslog
# Parada obligatoria: $remote_fs $syslog
# Inicio predeterminado: 2 3 4 5
# Parada predeterminada: 0 1 6
# Breve descripción: iniciar el demonio en el momento del arranque
# Descripción: Habilita el servicio proporcionado por el demonio.
### INFORMACIÓN FINAL INICIO
Haga ejecutable el script de Python en el directorio de inicio cambiando su permiso ejecutando el siguiente comando:
sudo chmod +x IMAP.py
Luego ejecute el siguiente comando:
sudo update-rc.d tiene por defecto IMAP.py
Luego reinicie el Pi ejecutando el siguiente comando:
reiniciar sudo
Cualquiera de los métodos anteriores se puede utilizar para ejecutar el script de Python al inicio. Ahora el Pi 3 se puede desconectar del monitor, teclado y mouse. Conecte el LED a la Raspberry Pi y enciéndalo.
Ahora, cuando el Pi se encienda, ejecutará el script de Python al inicio. El script Python leerá los correos electrónicos de nuestra cuenta de Gmail utilizando el protocolo IMAP. El script solo leerá correos electrónicos de asuntos específicos, como en este caso "pi" es el asunto, cuyos correos electrónicos serán leídos por el script. Ahora el cuerpo se lee en una cadena y esta cadena se compara con un conjunto de comandos predefinidos en el script. Cada comando tiene su propia funcionalidad, por ejemplo, si el comando "encendido" coincide con el cuerpo del correo electrónico, la luz se encenderá (LED conectado a Raspberry Pi). También se puede recibir un correo electrónico para cada comando como respuesta, pero esto requerirá implementación en el protocolo SMTP.
Guía de programación –
La implementación de este proyecto se puede realizar en cualquier lenguaje de programación como C, Java, pero en este caso se utiliza Python. Hay bibliotecas simples que se utilizan para raspberry pi GPIO e IMPLIB para IMAP.
El script de Python se puede dividir en las siguientes partes:
1. Importar bibliotecas importantes
2. Inicie sesión en el buzón (Gmail)
3. Buscar correo electrónico con un asunto específico "pi"
4. Comparar el cuerpo del correo electrónico con conjuntos de comandos predefinidos
5. Marcar el correo electrónico como visto
1. Importación de bibliotecas importantes: para llevar a cabo el proyecto primero, debe recopilar las herramientas necesarias, como las bibliotecas estándar requeridas.
Para la implementación IMAP se utiliza la biblioteca “IMAPLIB” y para la interacción GPIO se utiliza la biblioteca “RPI.GPIO”.
importar imaplib
importar RPi.GPIO como GPIO
2. Inicie sesión en el buzón: una vez que tenga lo que necesita, es hora de iniciar sesión en el buzón usando las credenciales y seleccionando ENTRADA. La conexión simplemente se almacena en el objeto "conn" y luego se utilizan comandos IMAP para interactuar con el buzón.
conexión = imaplib.IMAP4_SSL(“imap.gmail.com”, 993)
conexión.login(gmail_user, gmail_pwd)
Ahora se selecciona la ubicación donde se categoriza el correo electrónico, que en este caso es INBOX. Esto se puede hacer usando el comando de selección de la biblioteca IMAP.
selección de conexión (“INBOX”)
3. Búsqueda de correo electrónico con un asunto específico "pi": ahora, después de seleccionar la carpeta del buzón usando el comando de selección, el comando de búsqueda se puede usar para buscar el correo electrónico con un asunto específico "pi". Para comprobar si el correo electrónico es nuevo, el código también busca mensajes no vistos.
tipo, datos = conn.search(Ninguno, '(ASUNTO NO VISTO “pi”)')
Este comando debe ejecutarse dentro de un bucle para que cuando se reciba algún correo electrónico en cualquier momento sea verificado.
4. Comparar el cuerpo del correo electrónico con conjuntos de comandos predefinidos: ahora, después de recibir el correo electrónico, primero se debe leer el cuerpo del correo electrónico.
Nota: envíe los correos electrónicos seleccionando texto sin formato en las opciones de envío de Gmail.
cuerpo = extraer_cuerpo (carga útil)
Usando la función de extracción del cuerpo, es posible obtener solo el cuerpo del correo electrónico en una variable de cadena.
Ahora, después de convertir el cuerpo del mensaje en una variable, se puede comparar con los conjuntos de comandos.
si (cuerpo.strip ==”en”):
Salida GPIO (LED, verdadero)
elif(cuerpo.strip ==”apagado”):
Salida.GPIO(LED, Falso)
Usando el comando GPIO de raspberry pi es posible controlar cualquier estado de salida GPIO, ya que si se recibe el comando 'on', el LED de conexión del pin GPIO se puede encender usando el indicador "Verdadero".
5. Marcar el correo electrónico como visto: después de leer el correo electrónico y ejecutar el comando, el correo electrónico debe marcarse como leído para que el script no repita este comando.
tipo, respuesta = conn.store(num, '+FLAGS', r'(Visto)')
Esto también se puede hacer usando el comando "almacenar" IMAP. Ahora nuevamente el script está listo para recibir nuevos correos electrónicos con el asunto “pi”. La función del script while debe ejecutarse en un bucle y los errores y advertencias deben manejarse para que el proceso no se detenga.
mientras que Verdadero:
intentar:
Revisar correo electrónico
excepto excepción como y:
imprimir y
Así es como se puede utilizar el protocolo IMAP para controlar un dispositivo/aplicación IoT. Consulte el código Python y pruébelo rápidamente en una Raspberry Pi.
En el próximo tutorial, se discutirá el protocolo SMTP.

Código fuente del proyecto

 ###



 //Programa para


 
#!/usr/bin/env python importar RPi.GPIO como GPIO importar picamera importar subproceso importar imaplib GPIO.setwarnings(False) LED = 24 GPIO.setmode(GPIO.BCM) GPIO.setup(LED,GPIO.OUT) GPIO. salida(TRIG, Falso) def extract_body(carga útil): si isinstance(carga útil, str): devolver carga útil else: devolver 'n'.join((extract_body(part.get_payload) para parte en la carga útil)) def check_email conn = imaplib. IMAP4_SSL("imap.gmail.com", 993) conn.login(gmail_user, gmail_pwd) conn.select("INBOX") tipo, datos = conn.search(None, '(UNSEEN SUBJECT "pi")') intente: para num en datos(0).split: typ, msg_data = conn.fetch(num, '(RFC822)') para respuesta_part en msg_data: if isinstance(response_part, tupla): msg = email.message_from_string(response_part(1)) sujeto=msg('subject') payload=msg.get_payload body=extract_body(payload) print(body.strip ) #cosas que hacer cuando se recibe algo if(body.strip =="on"): GPIO.output(LED, True) elif(body.strip =="off"): GPIO.output(LED, False) typ, respuesta = conn.store(num, '+FLAGS', r'(Seen)') finalmente: intente: conn. cerrar excepto Excepción como e: imprimir e conn.logout mientras sea verdadero: intentar: check_email excepto Excepción como e: imprimir e

###

contenido relacionado

Regresar al blog

Deja un comentario

Ten en cuenta que los comentarios deben aprobarse antes de que se publiquen.