# Professor Cristiano Teixeira. #
# Programa para enviar dados de botão e potenciometro com #
# finalidade de executar instruções em outro ESP32 via MQTT #
# #
# Mudanças do original Sob Licença Apache 2.0 #
# Baseado no original de Copyright (C) 2022, Uri Shaked. #
# https://wokwi.com/arduino/projects/315787266233467457 #
"""
Este projeto trabalha em conjunto com outro
MicroPython MQTT (ESP32) V2 Leitor [Prof. Cristiano]
Em:
https://wokwi.com/projects/445556187035203585
Os dois tem que estar executando ao mesmo tempo.
Para testar isolado sem o outro projeto
Para visualizar os dados:
1. Vá para http://www.hivemq.com/demos/websocket-client/
2. Clique em "Connect"
3. Em "Subscriptions", clique em "Add New Topic Subscription"
4. No campo Tópico, digite "SensorV2" e clique em "Subscribe"
Agora clique no botão da simulação,
altere a potenciômetro e você verá
a mensagem aparece no MQTT Broker, no painel "Mensagens".
"""
import network
import time
from machine import Pin, ADC
import ujson
from umqtt.simple import MQTTClient
# Configurações das portas
psensor = ADC(Pin(32))
bt=Pin(21, Pin.IN, Pin.PULL_DOWN)
#As Instruções abaixo são somente para conectar a internet no wokwi. Remova esssas linhas no projeto físico, ou ajuste para sua rede wi-fi.
print("Conectando no WiFi", end="")
sta_if = network.WLAN(network.STA_IF)
sta_if.active(True)
sta_if.connect('Wokwi-GUEST', '')
while not sta_if.isconnected():
print(".", end="")
time.sleep(0.1)
print(" Conectado no Wi-Fi com Sucesso!")
#Fim da conexão Wi-fi do wokwi
# MQTT Server Parameters
MQTT_CLIENT_ID = "micropython-weather-demo"
MQTT_BROKER = "broker.mqttdashboard.com"
MQTT_USER = ""
MQTT_PASSWORD = ""
MQTT_TOPIC = "SensorV2"
def connect_mqtt():
client = MQTTClient(MQTT_CLIENT_ID, MQTT_BROKER, user=MQTT_USER, password=MQTT_PASSWORD)
client.connect()
return client
print("Conectando ao MQTT server... ", end="")
client = connect_mqtt()
print("Conectado!")
# Variaveis usadas
sensor_anterior = 0
tensao = 0
botao_anterior = False
botao = False
print("Realizando Medições... ", end="")
while True:
# Faz a leitura da tensao no Sensor 0 a 4095
tensao = int(psensor.read())
#alternância do estado da variável botao
if bt.value() == 1:
if botao == False:
botao = True
else:
botao = False
time.sleep(0.1)
#acrescentado um try... except pois dava muito erro de conexão com o MQTT na versão física
try:
if (tensao != sensor_anterior or botao != botao_anterior):
print("Atualizado!")
message = ujson.dumps({
"Sensor": tensao,
"Botao": botao
})
print("Publicando no Tópico do MQTT {}: {}".format(MQTT_TOPIC, message))
client.publish(MQTT_TOPIC, message)
sensor_anterior = tensao
botao_anterior = botao
time.sleep(1)
#else:
#print("Sem mudanças")
#time.sleep(1)
except OSError as e:
print("Erro de conexão, tentando reconectar...")
client = connect_mqtt()