Manual

do

Maker

.

com

Controle da maturação da cerveja com ESP8266 (parte III de II)

Controle da maturação da cerveja com ESP8266 (parte III de II)

Nunca viu a terceira parte de algo que tem duas partes, hum? Bem, não havia outro jeito, achei que conseguiria dividir o artigo em duas partes, mas ficou um pouco mais elaborado do que o planejado esse controle da maturação da cerveja.

Vou adiantar nesse artigo que sim, haverá (pelo menos) mais uma parte. Até aqui o que fiz foi o controle dos dois ESP8266 para o controle do relé que ligará e desligará o frigobar. E por que dois ESP8266?  Simples, o NodeMCU Mini ficará ligado por bateria dentro do frigobar, apenas enviando a temperatura para o broker. O ESP8266 (nesse caso, o ElectroDragon desse outro artigo) também se cadastra ao mesmo tópico em que o NodeMCU Mini publica o valor de temperatura. Passando dos limites máximo e mínimo estabelecidos no código, o ElectroDragon reage conforme a condição (liga ou desliga o relé). As temperaturas no código atual não são variáveis, o código que disponibilizo nesse artigo (no git de projetos MASUGUX) está em franco desenvolvimento, mas estou disponibilizando no estado que está para que você possa já acompanhar como está sendo desenvolvido. Então, transformando em tópicos, a rotina funciona assim:

Fisica
  • O ElectroDragon está ligado ao filtro de linha da minha bancada.
  • O NodeMCU mini está conectado a um pack com 2 baterias li-ion
  • Apenas 1 relé do ElectroDragon está em uso (pino 12)
Lógica
  • O ElectroDragon iniciará com o relé ligado.
  • O ElectroDragon se subscreve ao tópico de temperatura.
  • O NodeMCU Mini liga, coleta a temperatura e publica.
  • O ElectroDragon recebe o callback, opera o relé e publica para o NodeMCU Mini dormir.
  • O NodeMCU Mini recebe o callback e sabe que a mensagem foi recebida, então dorme.

Ainda falta implementar a reação do NodeMCU Mini para dormir, hoje está hardcoded para dormir após o sleep de 1 minuto.

Bug atual

Ainda preciso descobrir a razão disso, mas quando conectado à bateria, o NodeMCU Mini não está voltando do sleep. Se conectado à USB mesmo na micro-USB que só alimenta a board, funciona tudo normal. Estou trabalhando na solução agora. De resto, tudo está funcionando já.

Material

Sugiro fortemente que repita o projeto da mesma forma maluca que estou fazendo aqui, no futuro fará muito sentido ter 2 ESP8266 para controlar a temperatura e o relé. A lista de materias é basicamente:

Wiring do DS18B20

ds18b20-foto-300x225.webp

A comunicação é bastante simples e o wiring também. repare no pedaço de imagem abaixo. Eu copiei só a parte importante de uma das imagens que encontrei no google images (só pra não ter que fazer no Fritzing). Preto é GND, laranja é SIGNAL e vermelho é VCC. Entre SIGNAL e VCC coloque um resistor de 4k7. A alimentação será 3V3 alimentado diretamente pelo ESP8266. O SIGNAL vai ao GPIO2, nada mais além disso.

ds18b20-wiring-simple.webp

Não há impecílho em utilizar um LM35 ou outro sensor que queira, mas esse sensor facilita um pouco a questão física e descomplica a leitura, porque se fosse uma leitura analógica, seriamos obrigados a colocar um divisor de tensão (ou um diodo zener) para limitar a tensão em 1V na porta analógica do ESP8266. Com o DS18B20 é transparente e digital.

Execução

No artigo anterior mostrei como colocar um script para inicializar junto com o sistema. Quando o script for inicializado, o console do ESP8266 se tornará indisponível pela serial e inacessível via WEBREPL. Porém você pode usar a combinação Ctrl+C para interromper o script e ganhar novamente acesso ao console. Desse modo não será necessário refazer o flashing caso algo dê errado em alguma experimentação sua (ufa).

No electroDragon

você deverá instanciar um objeto da classe "freezer" e chamar o método check. Fica desse jeito:

import tempMonitor

freezer = tempMonitor.freezer(bb_mqtt_id="NomeQualquer",mqtt_broker="ipDoBroker",mqtt_port=1883,mqtt_user="seuUser",mqtt_passwd="suaSenha",topic="beer/temperature")
freezer.check()

O tópico e ID estão hardcoded agora, mas é fácil trocar. No código final tudo estará bonito (ou menos feio). Tudo o que você precisa fazer para inicialização automática é colocar essas linhas no boot.py.

No NodeMCU Mini

Aqui é bastante parecido:

import goToBed

go = goToBed.sleeper(bb_mqtt_id="qualquerNome",mqtt_broker="ipDoBroker",mqtt_port=1883,mqtt_user="seuUser",mqtt_passwd="suaSenha",step=1)

go.now()

Sobre o broker

Eu não recomendo, mas você pode utilizar um broker público (pelo menos para testes). Sugiro o Mosquitto, que você poderá acessar através desse link. Todavia, fazer seu próprio broker é a melhor opção. Caso deseje configurar um em qualquer computador incluindo um Raspberry Pi (e preferencialmente um), você pode seguir os passos nesse outro tutorial que escrevi a respeito.

Download

Tanto o firmware quanto os programas "tempMonitor.py" e o "goToBed.py" estão disponíveis no git de projetos para a MASUGUX, que você pode acessar através desse link.

Informações complementares

Se não sabe como fazer o flashing do firmware, veja nesse outro artigo, na sessão "Trocando o firmware NodeMCU por MicroPython". Não se preocupe, o processo é o mesmo para a troca de qualquer firmware.

Se optar por esse projeto, terá que incluir o suporte ao MQTT no firmware do MicroPython. Para isso, mas subir os respectivos programas para o ESP8266. O processo pode ser visto nesse outro artigo.

Pra finalizar essa parte do artigo, um pequeno video para mostrar como as coisas andam. No video você vê a ligação do NodeMCU Mini. Após o boot, ele publica a temperatura que estará alta por ser ambiente. Então o ElectroDragon (que agora está aberto para a configuração) recebe um callback do tópico que está subescrito e liga o relé (você vê um LED vermelho se acender). Fiz um corte no video e logo em seguida você vê o NodeMCU mini entrar em deepsleep.

https://www.youtube.com/watch?v=6O9EI0BJbRY

Inscreva-se no nosso canal Manual do Maker no YouTube.

Também estamos no Instagram.

Nome do Autor

Djames Suhanko

Autor do blog "Do bit Ao Byte / Manual do Maker".

Viciado em embarcados desde 2006.
LinuxUser 158.760, desde 1997.