Controlando dispositivos IoT por meio de e-mails sobre protocolo IMAP – IOT Parte 48

Controlando dispositivos IoT por meio de e-mails sobre protocolo IMAP – IOT Parte 48

No tutorial anterior, foi mencionado que o protocolo IMAP é um protocolo de email padrão usado para armazenar mensagens de email e recuperá-las. Também foi mencionado que o protocolo IMAP pode ser usado em aplicações IoT onde comandos podem ser passados ​​para dispositivos IoT por e-mail. Isso pode ser muito útil em certas situações, como quando a segurança pode ser a principal preocupação. Além disso, os e-mails podem ser enviados em qualquer rede sem qualquer aplicativo ou permissão especial. Os dispositivos IoT podem receber e-mails como clientes de e-mail, onde podem ler e-mails e processar as informações neles contidas.
Neste projeto, um Raspberry Pi é usado como um dispositivo IoT que atua como cliente de email. O Raspberry Pi tem interface com um LED que é controlado pelo envio de e-mails para o Pi. O Pi recebe e-mails pela rede IoT (internet) e controla o LED de acordo com os dados recebidos no corpo do e-mail. Ele interpreta o corpo do email somente quando o assunto do email corresponde a um nome pré-determinado. Os e-mails para passar os comandos de controle do LED podem ser enviados de qualquer dispositivo como Laptop, PC, Tablet ou Smart Phone. O Raspberry Pi recebe esses e-mails através do Internet Message Access Protocol (IMAP).
Componentes necessários –
1) Framboesa Pi 3
2) LED
3) Resistor de 1KΩ
4) Fios de ligação em ponte
Software necessário –
1) SO Raspbian
2) Leafpad/GNU Nano/Python 3 IDLE (para escrever scripts python)
Diagrama de bloco –
Diagrama de blocos do cliente de e-mail Raspberry Pi IoT IMAP
Figura 1: Diagrama de blocos do cliente de e-mail Raspberry Pi IoT IMAP
Conexões de Circuito –
Um dispositivo IOT simples é projetado neste projeto. Possui um LED conectado ao Raspberry Pi 3. O dispositivo é projetado através da montagem dos seguintes componentes.
Framboesa Pi 3 – Raspberry Pi 3 é o Raspberry Pi de terceira geração. É uma maravilha em miniatura, reunindo um poder computacional considerável em um espaço não maior que um cartão de crédito. O processador central do sistema Raspberry Pi é um sistema em chip (SoC) Broadcom BCM2837 que abriga um processador Quad Core ARM Cortex-A53 de 1,2 GHz. A grande maioria dos componentes do sistema, incluindo suas unidades centrais e de processamento gráfico, juntamente com o hardware de áudio e comunicação, são construídos nesse único componente, juntamente com o chip de memória LPDDR2 de 1 GB no centro da placa. Não é apenas esse design de SoC que torna o BCM2837 diferente do processador encontrado em um desktop ou laptop típico; no entanto, ele também usa uma arquitetura de conjunto de instruções (ISA) diferente, conhecida como ARM.
O Pi vem equipado com soquete Ethernet 10/100 BaseT integrado, porta HDMI e RCA composta para vídeo, conector de saída de áudio de 3,5 mm, interface serial de câmera MIPI de 15 pinos (CSI-2), interface serial de exibição, Bluetooth 4.1, 802.11 b/g/n Wireless LAN, Micro SDIO para cartão Micro SD, 4 conectores USB 2.0, conector de 40 pinos contendo 27 pinos GPIO e soquete Micro USB para fonte de alimentação.
O Raspberry Pi é um computador de placa única projetado para executar um sistema operacional chamado GNU/Linux Raspbian. Doravante referido simplesmente como Linux. Ao contrário do Windows ou OS X, o Linux é de código aberto, portanto é possível baixar o código-fonte de todo o sistema operacional e fazer as alterações desejadas. O Raspberry Pi 3 também pode executar o Windows 10 IoT e muitos outros sistemas operacionais incorporados, muitos dos quais são derivados do Linux. O sistema operacional deve ser carregado em um cartão MicroSD e inicializado a partir dele. Com poderosos recursos de computação, grande número de interfaces multimídia e pinos GPIO, Raspberry Pi 3 é uma escolha adequada para executar um projeto complexo de IoT ou Embedded orientado a software que requer poder de computação suficiente, bem como conectividade de sensores em grande escala. Com Bluetooth e Wi-Fi integrados, este Pi de 3ª geração pode ser facilmente implantado em uma rede IoT. As principais especificações do Raspberry Pi 3 estão resumidas na tabela a seguir –
Tabela de listagem de especificações técnicas do Raspberry Pi 3
Figura 2: Tabela listando as especificações técnicas do Raspberry Pi 3

O cabeçalho de 40 pinos no Raspberry Pi 3 tem a seguinte configuração de pinos –

Tabela de listagem de configuração de pinos do cabeçalho de 40 pinos do Raspberry Pi
Fig. 3: Tabela listando a configuração dos pinos do cabeçalho de 40 pinos do Raspberry Pi
Tabela de listagem de configuração de pinos do cabeçalho de 40 pinos do Raspberry Pi
Fig. 4: Tabela listando a configuração dos pinos do cabeçalho de 40 pinos do Raspberry Pi
Neste projeto, um LED faz interface com o pino GPIO18 do Raspberry Pi. A placa é alimentada por um adaptador USB.
LIDERADO – Um LED está conectado ao GPIO18 do Raspberry Pi. Seu ânodo está conectado ao pino Raspberry Pi e o cátodo está conectado ao terra. O LED é conectado ao Pi por meio de um resistor pull-up de 1K ohm em série.
Fonte de energia – A fonte de alimentação está conectada ao Raspberry Pi. O Pi deve ser alimentado por um adaptador de 5 V com saída de corrente de 2,5 A. O adaptador pode ser conectado na tomada Micro USB.
Como funciona o circuito –
O dispositivo IoT projetado aqui é simplesmente um Raspberry Pi 3 controlando um LED. Para controlar o LED, é escrito um script python que recupera emails e se o assunto do email corresponder a um texto pré-determinado, ele lê o corpo do email contendo o comando de controle.
Primeiro de tudo, o Raspberry Pi precisa ser carregado com um sistema operacional. Aqui está instalado o sistema operacional oficial do Raspberry Pi – Linux Raspbian. Durante a instalação do sistema operacional, o Raspberry Pi deve ser conectado a um monitor usando um cabo HDMI e um teclado e mouse através de portas USB.
Para instalar o sistema operacional Raspbian no cartão MicroSD, primeiro baixe a imagem mais recente do sistema operacional Raspbian no site Raspberry Pi no link a seguir –
Sistema Operacional Raspbian
Copie a imagem do sistema operacional Raspbian mais recente no cartão MicroSD. Se o cartão MicroSD usado tiver 32 GB ou menos, ele deverá ser formatado para FAT32 (sistema de arquivos) antes de copiar a imagem ou se o cartão MicroSD tiver mais de 32 GB, ele deverá ser formatado para exFAT antes de copiar a imagem. Extraia o Zip do sistema operacional e copie-o para o cartão MicroSD. A imagem pode ser gravada no cartão conectando-o a um laptop ou PC usando um leitor de cartão MicroSD. Após copiar a imagem extraída, insira o cartão no slot MicroSD conforme mostrado abaixo –
Imagem típica do slot para cartão MicroSD Raspberry Pi 3
Fig. 5: Imagem típica do slot para cartão MicroSD Raspberry Pi 3
Conecte o Raspberry Pi a um monitor usando um cabo HDMI, um teclado e um mouse. Ligue a placa conectando-a a um adaptador de energia. O LED vermelho na placa começará a piscar e o sistema operacional começará a inicializar a partir do cartão MicroSD. O processo de inicialização será exibido no monitor e assim que a inicialização for concluída, o LED verde acenderá no Raspberry Pi. Após instalar com sucesso o Raspbian OS no Raspberry Pi, é recomendado realizar a atualização do software. Isso pode ser feito executando os seguintes comandos do Linux no Terminal Linux –
$ sudo apt-get atualização
$ sudo apt-get atualização
Depois de instalar o Raspbian, é hora de escrever e executar os scripts python no Raspbian. Um script python pode ser escrito em Raspbian usando um editor de texto como Leafpad ou GNU Nano. O script python também pode ser escrito usando o IDE python padrão, como Python 2 IDLE ou Python 3 IDLE. Abra o Python 3 IDLE navegando através de Menu -> Programação -> Python 3 IDLE. Uma janela chamada Python 3.4.2 Shell será aberta. Escreva os scripts python e salve-os em um diretório.
O script python escrito para este projeto deve ser executado na inicialização quando o Pi 3 estiver ligado. O script executa um loop infinito para que nunca termine. Existem alguns métodos pelos quais o Raspberry Pi pode ser configurado para executar um script python na inicialização. Qualquer um dos seguintes métodos pode ser usado –
1) Editando rc.local –
Os comandos podem ser adicionados ao arquivo /etc/rc.local para executar um programa ou comando quando o Raspberry Pi inicializar. Isso é especialmente útil se o Pi precisar ser conectado à energia sem cabeça e executar um programa sem configuração ou inicialização manual. O arquivo deve ser editado com root executando os seguintes comandos no Terminal Linux –
sudo nano /etc/rc.local
Agora adicione comandos para executar o script python usando o caminho completo do arquivo e adicione um e comercial no final do comando para que o script seja executado em um processo separado e a inicialização possa continuar. O seguinte comando deve ser adicionado onde o script python é salvo como IMAP.py –
sudo python /home/pi/IMAP.py &
saída 0
O comando deve ser adicionado logo antes da linha exit 0 no arquivo rc.local.
2) Editando .bashrc –
O .bashrc é um arquivo oculto na pasta inicial que contém opções de configuração do usuário. Abra o arquivo .bshrc executando os seguintes comandos no terminal Linux –
sudo nano /home/pi/.bashrc
Adicione as seguintes linhas após a última linha do arquivo –
echo Executando na inicialização
sudo python /home/pi/IMAP.py
3) Adicionando script ao diretório init.d –
O diretório init.d contém os scripts que são iniciados durante o processo de inicialização (além disso, todos os programas aqui são executados quando o Pi é desligado ou reinicializado). Adicione o script a ser executado na inicialização ao diretório init.d usando os seguintes comandos –
sudo cp /home/pi/securitysystem.py /etc/init.d/
Vá para o diretório init e abra o script python executando os seguintes comandos –
cd /etc/init.d
sudo nano IMAP.py
Adicione as seguintes linhas ao script python para torná-lo um Linux Standard Base (LSB) –
# /etc/init.d/sample.py
### INFORMAÇÕES DE INÍCIO
# Fornece: sample.py
# Início obrigatório: $remote_fs $syslog
# Parada obrigatória: $remote_fs $syslog
# Início padrão: 2 3 4 5
# Parada padrão: 0 1 6
# Breve descrição: Iniciar o daemon no momento da inicialização
# Descrição: Habilita o serviço fornecido pelo daemon.
### FIM INFORMAÇÃO DE INÍCIO
Torne o script python no diretório init executável alterando sua permissão executando o seguinte comando –
sudo chmod +x IMAP.py
Em seguida, execute o seguinte comando –
sudo update-rc.d padrões IMAP.py
Em seguida, reinicie o Pi executando o seguinte comando –
sudo reiniciar
Qualquer um dos métodos acima pode ser usado para executar o script python na inicialização. Agora o Pi 3 pode ser desconectado do monitor, teclado e mouse. Conecte o LED ao Raspberry Pi e ligue-o.
Agora, quando o Pi for ligado, ele executará o script python na inicialização. O script Python lerá e-mails de nossa conta do Gmail usando o protocolo IMAP. O script lerá apenas emails de assuntos específicos, como neste caso “pi” é o assunto, para o qual os emails serão lidos pelo script. Agora o corpo é lido em uma string e essa string é comparada com um conjunto de comandos, predefinido no script. Cada comando tem sua própria funcionalidade, como se o comando “on” corresponder ao corpo do e-mail, a luz será acesa (LED conectado ao raspberry pi). Também pode ser recebido um e-mail para cada comando como feedback, mas isso exigirá implementação no protocolo SMTP.
Guia de programação –
A implementação deste projeto pode ser feita em qualquer linguagem de programação como C, Java mas python é usado neste caso. Existem bibliotecas simples usadas para raspberry pi GPIO e IMPLIB para IMAP.
O script python pode ser dividido nas seguintes partes –
1. Importando bibliotecas importantes
2. Faça login na caixa de correio (Gmail)
3. Pesquisando e-mail do assunto específico “pi”
4. Comparando o corpo do email com conjuntos de comandos predefinidos
5. Marcando o e-mail como visto
1. Importando bibliotecas importantes: Para realizar o projeto primeiro, é necessário coletar as ferramentas necessárias, como as bibliotecas padrão necessárias.
Para implementação IMAP é utilizada a biblioteca “IMAPLIB” e para interação GPIO é utilizada a biblioteca “RPI.GPIO”.
importar imaplib
importar RPi.GPIO como GPIO
2. Faça login na caixa de correio: Depois de obter o que você precisa agora, é hora de fazer login na caixa de correio usando credenciais e selecionando INBOX. A conexão é simplesmente armazenada no objeto “conn” e então os comandos IMAP são usados ​​para interagir com a caixa de correio.
conexão = imaplib.IMAP4_SSL(“imap.gmail.com”, 993)
conn.login(gmail_user, gmail_pwd)
Agora é selecionado o local onde o e-mail está categorizado que neste caso é INBOX. Isso pode ser feito usando o comando select da biblioteca IMAP.
conn.select (“CAIXA DE ENTRADA”)
3. Procurando email do assunto específico “pi”: Agora após selecionar a pasta da caixa de correio usando o comando select, o comando search pode ser usado para pesquisar o email com assunto específico “pi”. Para verificar se o email é novo, o código também verifica se há mensagens não vistas.
typ, data = conn.search(None, '(ASSUNTO NÃO VISTO “pi”)')
Este comando deve ser executado dentro de um loop para que quando qualquer e-mail for recebido a qualquer momento ele seja verificado.
4. Comparando o corpo do email com conjuntos de comandos predefinidos: Agora, após o recebimento do e-mail, o corpo do e-mail deve ser lido primeiro.
Observação: Envie os e-mails selecionando texto simples nas opções de envio do Gmail.
corpo = extrair_corpo (carga útil)
Usando a função body extract, é possível obter apenas o corpo do email em uma variável do tipo string.
Agora, depois de obter o corpo da mensagem em uma variável, ele pode ser comparado com os conjuntos de comandos.
if(body.strip ==”ligado”):
GPIO.output (LED, Verdadeiro)
elif(body.strip ==”desligado”):
GPIO.output(LED, Falso)
Usando o comando raspberry pi GPIO é possível controlar qualquer estado de saída GPIO, como se o comando 'on' for recebido, o LED de conexão do pino GPIO pode ser ligado usando o sinalizador “True”.
5. Marcando o e-mail como visto: Após a leitura do e-mail e a execução do comando, o e-mail precisa ser marcado como lido para que o script não repita esse comando.
tipo, resposta = conn.store(num, '+FLAGS', r'(Visto)')
Isso também pode ser feito usando o comando IMAP “store”. Então agora novamente o script está pronto para receber novos emails do assunto “pi”. A função do script while deve ser executada em loop e erros e avisos devem ser tratados para que o processo não pare.
enquanto Verdadeiro:
tentar:
verificar email
exceto Exceção como e:
imprimir e
Então, é assim que o protocolo IMAP pode ser usado para comandar um dispositivo/aplicativo IOT. Confira o código python e experimente-o rapidamente em um Raspberry Pi.
No próximo tutorial, o protocolo SMTP será discutido.

Código fonte do projeto

###



//Program to


#!/usr/bin/env python import RPi.GPIO as GPIO import picamera import subprocess import imaplib GPIO.setwarnings(False) LED = 24 GPIO.setmode(GPIO.BCM) GPIO.setup(LED,GPIO.OUT) GPIO.output(TRIG, False) def extract_body(payload): if isinstance(payload,str): return payload else: return 'n'.join((extract_body(part.get_payload ) for part in payload)) def check_email  conn = imaplib.IMAP4_SSL("imap.gmail.com", 993) conn.login(gmail_user, gmail_pwd) conn.select("INBOX") typ, data = conn.search(None, '(UNSEEN SUBJECT "pi")') try: for num in data(0).split : typ, msg_data = conn.fetch(num, '(RFC822)') for response_part in msg_data: if isinstance(response_part, tuple): msg = email.message_from_string(response_part(1)) subject=msg('subject') payload=msg.get_payload  body=extract_body(payload) print(body.strip ) #things to do when somehthing recived if(body.strip  =="on"): GPIO.output(LED, True) elif(body.strip =="off"): GPIO.output(LED, False) typ, response = conn.store(num, '+FLAGS', r'(Seen)') finally: try: conn.close  except Exception as e: print e conn.logout  while true: try: check_email  except Exception as e: print e 

###

Conteúdo Relacionado

Voltar para o blog

Deixe um comentário

Os comentários precisam ser aprovados antes da publicação.