IoT (Internet of Things) Session 2— IFTTT e ESP8266, faça seu próprio alarme

Tiago Silva
CWI Software
Published in
6 min readApr 6, 2019

No artigo anterior, foi possível conhecer de forma prática alguns conceitos básicos sobre Android Things, um sistema operacional projetado para atender demandas de IoT. Neste artigo, buscaremos aprofundar o conhecimento sobre sistemas embarcados sem a utilização de sistemas operacionais, construindo um mecanismo de sensor de porta para alarme, utilizando uma plataforma de serviços online gratuita e um kit de baixo custo.

Há muitos casos voltados para a indústria e para processos críticos, onde temos a necessidade de ter sob controle absoluto todas as máquinas de hardware do microcontrolador. Para este tipo de aplicação sistemas operacionais como o Android Things não são a melhor opção, pois possuem uma fila de processos assim como qualquer outro sistema operacional que conhecemos, provocando atrasos e antecipações aleatórias na execução de determinadas tarefas, impossibilitando o trabalho com sistemas Real Time.

No contexto de desenvolvimento embarcado para IoT, onde não há um sistema operacional, será possível conhecer ao longo do artigo o Micropython, um Firmware que pode ser gravado em uma série de placas. Porém neste artigo utilizaremos a ESP8266 como exemplo.

A ESP8266 é amplamente conhecida, principalmente pelo seu baixo custo (normalmente algo em torno de R$30,00) e por ter acoplado a ela um módulo Wifi 802.11, com o qual é possível se conectar a qualquer rede WAN das suas proximidades. Não vamos entrar em detalhes sobre o hardware, até porque o foco aqui é o desenvolvimento de software, mas quem quiser entender melhor as configurações da placa pode ler o datasheet da placa.

Utilizando a mesma metodologia do primeiro artigo da série, ao longo deste vamos aproveitar e colocar a mão na massa com as primeiras práticas, desenvolvendo um sensor de porta que irá gerar uma notificação no Slack informando se a sua porta foi aberta, porém antes vamos entender como deixar tudo pronto para começar a desenvolver.

Instalando o Micropython

Para baixar a ferramenta que utilizaremos para transferir o firmware, rode o seguinte comando no gerenciador de pacotes “pip”:

pip install esptool

Para gravar a memória flash do controlador com o firmware, baixe o firmware deste Link, e após rode o seguinte comando:

esptool.py --port <PORTA> --baud 460800 write_flash --flash_size=detect <arquivo>.bin

Para obter acesso ao sistema de arquivos da ESP8266 pode ser utilizado um pacote chamado “ampy”. Seguem abaixo os passos e os comandos para a instalação:

pip install adafruit-ampy

OU

pip3 install adafruit-ampy

Comandos básicos para utilização do Ampy

Listando diretórios internos na memória flash da placa:

ampy -p COM<Porta> ls

Rodando uma aplicação:

ampy -p COM<Porta> run <arquivo.py>

Copiando a aplicação para o módulo:

ampy -p COM<Porta> put <arquivo.py>

Copiando um arquivo do módulo para o computador:

ampy -p COM<Porta> get <arquivo.py>

Removendo um arquivo do módulo

ampy -p COM<Porta> rm <arquivo.py>

Agora sim! Temos a possibilidade de gravar aplicações na ESP8266, então podemos começar com um exemplo básico, onde gravaremos uma aplicação para conectar na rede Wifi, afinal de contas este é o principal recurso da placa.

No código acima é possível observar todas as facilidades de se trabalhar com uma linguagem de alto nível no microcontrolador, principalmente quando há uma série de bibliotecas de apoio, como a network por exemplo, que é responsável pelas interações com a interface de rede.

Agora vamos falar um pouco sobre a ferramenta que utilizaremos para conectar a ESP ao Slack. O IFTTT tem um conceito muito atrativo que consiste em conectar praticamente qualquer serviço a outro utilizando uma simples condicional (IF)como pré-requisito. A imagem logo abaixo ilustra este entendimento.

Temos uma trigger, onde podemos conectar um serviço e quando este serviço é disparado a ação acontecerá. Tanto a trigger quanto a ação podem ser qualquer serviço disponível na plataforma.

No nosso caso, a trigger será um webhook. Ele será chamado a partir da ESP, no formato de uma HTTP request convencional. Segue a opção que você deve encontrar no IFTTT para configurar o serviço.

Agora você terá que dar um nome ao evento do webhook. Segue a tela que você terá que preencher.

Pronto, agora você tem a condição, agora vamos para o resultado da receita ;)

Na ação escolha a opção do Slack(Post to channel), como pode ser visto na imagem abaixo. Após ter as credenciais conectadas você poderá escolher o canal e a mensagem que irá aparecer no chat.

Nesta mensagem você pode colocar variáveis, as quais você preenche quando chama o webhook, são basicamente textos entre duplas chaves. Estas variáveis são chamadas de ingredientes da receita.

Para disparar o webhook utilizaremos o pacote urequests, com o seguinte código para chamar a api.

Como pode ser visto no código acima, os ingredientes (variáveis) podem ser passados no payload da request HTTP.

No circuito desenvolvido para esta prática a porta da ESP está configurada para ficar ativa em nível baixo, bem como a interrupção externa está configurada para ser ativa em nível baixo. Logo, quando chegar o formato de onda correspondente, teremos a detecção de que a porta foi aberta.

Note um detalhe importante neste código na linha 37, onde desabilitamos a interrupção.

Esta é uma prática bastante comum realizada em aplicações de sistemas embarcados, pois diferente do mundo das aplicações de alto nível quando ocorre o acionamento de uma interrupção, a máquina de hardware responsável por gerenciar a interrupção continua rodando. Logo, podemos ter uma série de acionamentos indesejados em uma fração de segundos, gerando uma série de mensagens inválidas. Além disso ainda temos a questão relacionada aos espúrios do sensor, pois imaginamos algo mais ou menos assim no osciloscópio quando temos o acionamento de um sensor.

Porém o que temos no mundo real é algo mais próximo disso:

Existem uma série de táticas para mitigar estes espúrios, como calcular um capacitor de valor ideal para filtrar as ondas indesejadas, porém a alternativa que utilizamos é algo exclusivamente de software e vem mais ao encontro das nossas práticas. Vale ressaltar o cuidado necessário neste trecho de código, pois quanto mais lento ele é, mais tempo de indisponibilidade da interrupção externa você terá.

Pronto, agora que você entendeu os detalhes relacionados ao código vamos ver o resultado. Assim que você abrir a porta, o circuito será acionado e você receberá a seguinte mensagem no Slack:

Lembrando que essa é apenas uma das possibilidades com IFTTT e até mesmo com a ESP, pois a aplicabilidade é imensa, e a quantidade de lógicas é absurdamente grande.

No próximo artigo falaremos um pouco sobre um protocolo chamado MQTT, e utilizaremos novamente a ESP8266 para as práticas. Até a próxima ;)

--

--

Tiago Silva
CWI Software

Developer .Net and Android, enthusiast in IoT and blockchain.