Manual

do

Maker

.

com

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

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

Bom, como eu citei no post anterior relacionado, de 2 partes acabou pulando pra 4 e a única maneira de justificar isso é criando a "parte IV de II", que era o objetivo inicial.

Nessa parte já não há tanto a acrescentar. No artigo anterior deixamos pronta a comunicação prova de conceito, agora só restava dar uma "arredondada" para já ser utilizável. Então vamos lá.

Consumo

No artigo anterior relacionado mostrei a utilização de um ESP8266 (NodeMCU Mini) ligado a uma bateria de li-ion. Para tentar mensurar o consumo, cometi o erro de ligá-lo a um pack de 20A, que resultou em consumo nenhum em 24h. Por causa disso, só posso dizer que deve funcionar bem o suficiente com qualquer power bank por uma semana, mas com um power bank maior você vai desde a fermentação até o priming sem recarga.

Fases

Não só para a maturação, mas inclui também o controle do início do processo, assim faço tudo diretamente no frigobar. Então criei um dicionário no código que contém as chaves "fermentation", "maturation" e "priming". Basta publicar no tópico "beer/program" o programa selecionado. Para isso, utilizando o MQTT Dashboard eu criei uma entrada de múltiplos botões para esse controle, mas poderiam ser botões independentes ou até mesmo entradas de texto, não importa.

As alterações no código já estão disponíveis no github, no projeto para MASUGUX e em seguida  listarei todos os links que você precisará para reproduzir o projeto.

Alteração no código e execução

Atenha-se ao fato de que estamos utilizando o MicroPython como firmware para ambos os ESP8266. Desse modo, você precisará fazer o mesmo, exceto migre o código (que não é complicado) para algum outro firmware de sua preferência.

No código que escrevi em Python, apenas adicionei um tópico para a fase da cerveja. Não está genérico ainda pois tem estilos que precisam fermentar a 14 graus, mas já está quebrando um galho.

import time

from umqtt.simple import MQTTClient
from machine import Pin
import network
# Publish test messages e.g. with:
# mosquitto_pub -t foo_topic -m hello

class freezer:
    def __init__(self,bb_mqtt_id="None",mqtt_broker="None",mqtt_port=0,mqtt_user="None",mqtt_passwd="None",topic="None"):
        self.relay_one = Pin(12,Pin.OUT) 
        self.relay_two = Pin(13,Pin.OUT)

        self.bb_mqtt_id   = "ElectroDragon"
        self.mqtt_broker  = mqtt_broker
        self.mqtt_port    = mqtt_port
        self.mqtt_user    = mqtt_user
        self.mqtt_passwd  = mqtt_passwd
        self.topic        = topic
        self.mqtt         = MQTTClient(self.bb_mqtt_id,self.mqtt_broker,self.mqtt_port,self.mqtt_user,self.mqtt_passwd)
        self.sta_if       = network.WLAN(network.STA_IF)

        self.programs     = {b'fermentation':[18.0,22.0],b'maturation':[0.0,2.0],b'priming':[23.0,25.0]}
        self.MINIMUM      = self.programs[b'fermentation'][0]
        self.MAXIMUM      = self.programs[b'fermentation'][1]
        
        print("Waiting IP...")
        size = 0
        while size < 11:
          try:
            size = len(self.sta_if.ifconfig()[0])
            time.sleep_ms(80)
          except:
            size = 0

        self.mqtt.connect()

    def doSleep(self):
        try:
            #self.mqtt.connect()
            self.mqtt.publish(b"beer/sleep",b'1')
        except:
            print("Nao foi possivel conectar ao broker")

    def toNumber(self,target):
        if len(target) == 4:
            temp  = (target[0] - 48) * 10.0
            temp += (target[1] - 48) *  1.0
            temp += (target[3] - 48) *  0.1

        elif len(target) == 3:
            if not target.find(b'.') == 1:
                return 0.0

            temp  = (target[0] - 48) * 1.0
            temp += (target[2] - 48) * 0.1

        self.doSleep()
        return temp
                
    # Received messages from subscriptions will be delivered to this callback
    def sub_cb(self,topic, msg):
        print((topic, msg))

        if topic == b'beer/program':
            if msg in self.programs.keys():
                self.MINIMAL = self.programs[msg][0]
                self.MAXIMUM = self.programs[msg][1]
                print("Programa escolhido:")
                print(msg)
                
        elif topic == b'beer/temperature':
            temp = self.toNumber(msg)
            if temp > self.MAXIMUM:
                self.relay_one.high()
                print("relay ON")
            
            elif temp < self.MINIMUM:
                print("relay OFF")
                self.relay_one.low()

    def check(self,server="192.168.1.2"):
        print("Connecting...")
        print("Setting callback...")
        self.mqtt.set_callback(self.sub_cb)
        #self.mqtt.connect()
        print("Subscribe to beer/temperature...")
        self.mqtt.subscribe(b"beer/#")
        while True:
            if True:
                # Blocking wait for message
                self.mqtt.wait_msg()
            else:
                # Non-blocking wait for message
                self.mqtt.check_msg()
                # Then need to sleep to avoid 100% CPU usage (in a real
                # app other useful actions would be performed instead)
                time.sleep(1)

        self.mqtt.disconnect()

Tendo citado o firmware em questão, mais uma vez relembro o processo para auto-inicialização do programa tempMonitor.py.

1 - Instale o firmware MicroPython (download do firmware - o arquivo é o firwmare-combined.bin)

2 - Faça o flashing

3 - Configure a rede

4 - Habilite o WEBREPL

5 - Instale o MQTT no MicroPython

6 - Modifique o boot.py

Faça o upload dos respectivos arquivos; tempMonitor para o ElectroDragon e goToBed.py para o NodeMCU Mini ou Wemos D1 Mini. O download pode ser feito desse link.

A alteração do boot.py para  cada um deles pode ser visto nesse artigo.

O wiring para o DS18B20 você vê nesse artigo.

Se precisa configurar um broker MQTT para conectar seus dispositivos, siga esse artigo.

Se pretende utilizar o próprio NodeMCU (firmware) e precisa de um código inicial para entender como as coisas funcionam com Lua, siga este artigo.

Comprar os ESP8266

Clique sobre o respectivo link para comprar os módulos ElectroDragon e NodeMCU Mini / Wemos D1 Mini ou alternativa.

MQTT Dashboard

Esse é o aplicativo para eventuais testes. Você pode baixá-lo no Google Play Store através desse link.

E sugiro que acompanhe os próximos artigos sobre cerveja, porque vou mostrar alguns dispositivos interessantes pra dispensar o densímetro e refratômetro, e acabar de vez com o disperdício de mosto na medição da conversão de alcool, além de controlar a temperatura diretamente do mosto, sem riscos de contaminação!

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.