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á.
Tópicos
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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 |
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
5 – Instale o MQTT no MicroPython
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 newsletter, alí em cima à direita e receba novos posts por email.
Siga-nos no Do bit Ao Byte no Facebook.
Prefere twitter? @DobitAoByte.
Inscreva-se no nosso canal Do bit Ao Byte Brasil no YouTube.
Nossos grupos:
Arduino BR – https://www.facebook.com/groups/microcontroladorarduinobr/
Raspberry Pi BR – https://www.facebook.com/groups/raspberrybr/
Orange Pi BR – https://www.facebook.com/groups/OrangePiBR/
Odroid BR – https://www.facebook.com/groups/odroidBR/
Sistemas Embarcados BR – https://www.facebook.com/groups/SistemasEmbarcadosBR/
MIPS BR – https://www.facebook.com/groups/MIPSBR/
Do bit Ao Byte – https://www.facebook.com/groups/dobitaobyte/
Projetos Arduino e Eletrônica – https://www.facebook.com/groups/projetosarduinoeletronica/
ESP8266 BR – https://www.facebook.com/groups/ESP8266BR/
Próximo post a caminho!
Você precisa fazer log in para comentar.