Experimentando a Node MCU com Nodejs e MQTT

2017 começou bem. Consegui dar meu primeiro passo no mundo de Internet das Coisas: fiz uma Node MCU funcionar com nodejs conversando com um Broker MQTT. Já até tinha trabalhado com uma antes, porém o ambiente era diferente.

Na época estava usando Windows, a MCU já estava com uma flash gravada, a IDE do Arduíno reconheceu a placa de primeira e a aplicação tinha um objetivo diferente.

O primeiro contato não foi dos melhores

Desta vez estou usando o Linux Debian, a Node chegou sem nenhum firmware instalado e inexplicavelmente a IDE do Arduíno não consegui reconhecer a placa de forma alguma. (Trabalho com Linux há pouco tempo, acredito que isso deve explicar um pouco).

Novas ferramentas

O que é interessante é que por causa disso, eu tive que conhecer ferramentas diferentes que não havia utilizado no Windows. Entre elas estão:

1 — ESPTool — Utilitário feito em Python, necessário para enviar dados para a ROM da ESP 8266.

2 — ESPlorer — Utilitário feito em Java, necessário para enviar scripts da linguagem LUA para a Node MCU.

3 — LUA — Linguagem totalmente criada no Brasil, pela PUC-Rio em 1993. Apesar de relativamente recente é uma das linguagem mais presentes em jogos mais utilizadas do mundo, presente em WoW e Angry Birds (Ia falar sobre o quanto isso me causou espanto, mas desisti porque achei que o artigo ir ficar enorme).

Gravando os binários

Não vou falar detalhes técnicos da ESP 8266 MCU, porque há vários tutoriais muito bons que vão conseguir explicar muito melhor do que eu. Eu recomendaria este aqui para começar. Porém, apesar de ser excelente, ele é indicado para quem usa Windows. Se você está utilizando Linux eu recomendo começar com este.

Basicamente você vai baixar os dois arquivos binários (float e integer) e usar o seguinte comando no terminal:

Tive que fazer um gist porque o Medium avacalha os tracinhos. .

Alterando a porta se necessário. O sudo é opcional se você já tiver digitado a senha de su.

Resultado do meu terminal ao executar os dois comandos

Neste momento, sua Node MCU tem que ficar com a luzinha azul piscando como no gif abaixo.

Agora estamos no caminho certo

Preparando o MQTT

Agora já podermos ir para a preparação do protocolo MQTT. Também não vou entrar em detalhes técnicos sobre ele. Este artigo, este e a documentação oficial já fazem isso muito bem.

A única coisa que eu vou da minha opinião é a respeito da stack utilizada para fazer o MQTT funcionar tanto na Web como no meu Smartphone Android.

Se você já leu outros artigos neste blog, já deve saber o quanto eu gosto da tecnologia NodeJs. Acredito até que o pessoal começou a utilizá-la para tentar substituir algumas coisas que não fazem muito sentido…mas para comunicação rápida, assíncrona e que acene para o padrão Observer ela é muito interessante.

No caso do MQTT, o Nodejs, hospedado no Heroku, formou uma parceria muito produtiva com o serviço de broker da CloudMQTT pois além do mesmo ter suporte a WebSockets é bastante simples de configurar.

Este é o Console do CloudMQTT

Depois de criar a sua conta no Broker, é só substituir o usuário e password do código js abaixo e carregá-lo pro Heroku.

Ainda preciso fazer algumas refatorações, mas basicamente esse é seu código js para colocar no Heroku

Carregue também o arquivo HTML de apresentação.

Código HTML de apresentação. Também carente de refatorações, apenas para prova de conceito mesmo

Antes do CloudMQTT, tentei experimentar os famosos Mosquito e Eclipse IOT e infelizmente não tive sucesso nas primeiras tentativas.

Por fim, se quiser ver o poder do protocolo MQTT funcionando no seu Smartphone, baixe o My MQTT pro seu Android e configure com as mesmas credenciais do CloudMQTT.

Carregando o Código LUA

Broker MQTT configurado, Nodejs configurado no Heroku, My MQTT instalado, vamos finalmente fazer a ESP 12 8266 Node MCU se conectar ao WI-FI da nossa casa.

Após ter baixado o ESPlorer (você vai precisar estar com a JRE e o JDK do Java configurados corretamente no seu computador) navegue até o caminho onde ele foi descompactado e digite o seguinte comando: java -jar ESPlorer.jar

Esta é a interface do ESPlorer

Agora você deve abrir porta serial através do comando “Open” a direita do utilitário. (Não sei porque o meu só conecta da segunda vez, preciso retirar o cabo e enviar o comando novamente, me parece que há uma tentativa do ESPlorer tentar auto-identificar a MCU).

Logo após carregue os seguintes scripts abaixo para a node MCU, através do comando “Save to ESP”. (Não tenho certeza, mas acredito que se esta ordem abaixo não for seguida corretamente, haverá problemas de referências inexistentes. Os nomes dos arquivos (config, init e app) também são padrão da NodeMCU).

Altere as variáveis de usuário e senha e salve como config.lua
Salve como setup.lua
Salve como app.lua
Salve como init.lua

Conclusão

Programar para Node MCU não é trivial, mas também não é algo super-complexo. Encontrei bons tutoriais em Português (no site do Pedro Minatel, nos posts do Pedro Bertoleti e no FelipeFlop) e acredito que se o cara é curioso ele consegue tirar bons proveitos dessa placa.

Pelo fato de serem muitas linguagens envolvidas (Python, LUA, Java,NodeJs e Android) dá um pouco de trabalho até chegar num primeiro resultado. Mas apesar ser bem simples, dá uma satisfação danada ver tudo funcionando.

Basicamente, leio a GPIO Analógica na porta A0 e envio para Internet

O vídeo não ficou dos mais didáticos, mas acredito que dê para passar a ideia de que estou lendo o valor analógico do potenciômetro e enviando para Internet. Infelizmente não tinha um outro celular para registrar estes mesmos valores chegando no Android, talvez futuramente eu registre de forma mais robusta.