31 de julho de 2021

Do bit Ao Byte

Embarcados, Linux e programação

Arduino com Alexa sem WiFi, bluetooth ou ethernet

Arduino com Alexa

Parece mágica? Então não deixe de assistir o vídeo em nosso canal DobitaobyteBrasil no Youtube, porque a apresentação desse tutorial segue o novo padrão de vídeos, unindo humor e informação! E nesse artigo de Arduino com Alexa é provável que você não conheça o conceito, mas esse raciocínio certamente será usado para outros projetos com diferentes propósitos!

Objetivo: Colocar um Arduino para responder a Alexa

A primeira coisa que podemos pensar quando falamos de Arduino com Alexa é um ESP-01 para fazer a comunicação. Mas se for para usar um ESP8266 ou ESP32, não há razão para usar Arduino. Se tem aí uns Arduinos e quer ligar lâmpadas ou outra coisa em sua casa, não vai precisar de nenhum conceito novo, nem biblioteca! Empolgante ou não? Mas, como colocar um Arduino com Alexa sem WiFi, bluetooth ou ethernet?

Criando uma bridge

O conceito de bridge (“ponte”, em português) é bem simples: Fazer uma interface entre dois sistemas diferentes. Já usei muito bridge transparente em Linux para fazer análise do tráfego de rede em CPDs, sem interferir na comunicação. Também usei amplamente em diversos países que trabalhei, para comunicar um sistema cujo protocolo é TR-069 com outros tipos de sistema, incluindo DOCSIS (cable MODEM), IPTV (legítimo, nada de pirataria) e VoIP, em diversas operadoras de telecom, onde atuei principalmente em alta-disponibilidade, redundância geográfica e disaster recovery, que são algumas de minhas especialidades. Então, o conceito serve para uma mera comunicação entre microcontroladoras até o BGP de uma operadora de telecom. Já imaginou como será a nossa bridge?

Comunicação serial (mas “sem fio”)

Vamos usar um HC12 em cada dispositivo. Um ESP32 (que também poderá atuar, se desejado) fará a bridge. Criaremos nossos dispositivos usando a biblioteca espalexa desse artigo e baseando-se nesse código, poderemos adicionar até 20 dispositivos. O ESP32 receberá a requisição e informará o dispositivo o que fazer.

O Arduino também terá um HC12 para receber a mensagem. Como estou usando um Arduino UNO, será necessário usar a biblioteca SoftwareSerial. Se estiver usando qualquer Arduino com atmega32u ou Attiny88, é só usar a segunda serial. A vantagem de usar um Attiny88 é o baixíssimo custo e tamanho reduzido, sendo exatamente o tamanho de um Arduino Nano. Para programar é exatamente a mesma coisa que um Arduino qualquer, confira nesse artigo.

Protocolo de comunicação

O HC12 é um RF 433, o que dá outra vantagem: Um alcance muito amplo, chegando a até 1km, o que permitirá automatizar a casa, a garagem, o quintal e um pouco mais! Nada de ficar preso aos limites do WiFi! Porém, para um controle robusto seria necessário implementar um protocolo que monitorasse o estado real dos Arduinos, mas aqui vamos simplesmente enviar o comando para fazermos a prova de conceito.

Como podemos ter vários Arduino na rede RF433 e a mensagem é um broadcast (todo mundo recebe), precisamos criar um identificador para que os Arduino saibam quando a mensagem é para si e então atuem. Só estou colocando 1 Arduino, mas para que fique claro o conceito de identificação, vou adicionar um byte para esse propósito. A mensagem ficará assim:

^u1$

Em expressões regulares o “^” indica começo de linha e o “$” indica final de linha. Desse modo, não precisamos nos preocupar com ordem dos bytes, só será lido se chegar corretamente. Mais uma vez, isso também deixa claro a importância de ter uma resposta; se o Arduino não enviar um “ok”, a mensagem deve ser reenviada. Já escrevi montes de artigos implementando isso tudo, mas dessa vez só vou mostrar o básico mesmo.

O “u” será o identificar para dizer que a mensagem “pertence ao UNO”. Quando ele ver que é um começo de linha (^) ele lerá todos os bytes até o final ($). Se encontrar o “u” após o início de linha, o próximo byte será lido para avaliar a ação: Ligar (1) ou desligar (0). Na protoboard estou usando um LED. É mais que o suficiente, considerando que o princípio é o mesmo para um relé.

Código do ESP32 com Alexa

Primeiro, gravamos o código no ESP32. Se leu o artigo do espalexa já estará ambientando com o código. Nesse artigo do espalexa tem a implementação de mais dispositivos, confira, se restar dúvidas.

Utilizei a serial 2, sendo a serial 0 a da porta USB. No ESP32 homologado pela Anatel o pinout é esse:

Arduino com Alexa

Código do Arduino com Alexa

Agora o código do Arduino, que é extremamente simples. Não tem mais o que falar a respeito, apenas que a biblioteca é a NeoSWSerial. Criei um repositório, basta copiar o código ou baixar o zip ou clonar o repositório. O sketch mostra os pinos utilizados (10 e 11) para a serial por software e o pino 8 para acionar relé.

Vídeo

Eis o vídeo em nosso canal DobitaobyteBrasil no Youtube. Seja camarada e um maker aliado; inscreva-se no canal para dar um incentivo!