import network
import time
import sys
from machine import Pin
import dht
#utilizaremos a versao “robusta” do cliente umqtt em vez da “simple”
from umqtt.simple import MQTTClient
# MQTT Server Parameters
MQTT_CLIENT_ID = "MiM5KhEnBx0oNgsAABAZKx0"
MQTT_BROKER = "mqtt3.thingspeak.com"
MQTT_USER = "MiM5KhEnBx0oNgsAABAZKx0"
MQTT_PASSWORD = "h5ZDU3OzFG0HD4LBQSFwLsun"
MQTT_PUB_TOPIC = "channels/2253753/publish"
MQTT_PUB_TOPIC_FIELD1 = "channels/2253753/publish/fields/field1"
MQTT_PUB_TOPIC_FIELD2 = "channels/2253753/publish/fields/field2"
MQTT_PUB_TOPIC_FIELD3 = "channels/2253753/publish/fields/field3"
MQTT_SUB_TOPIC_FIELD3 = "channels/2253753/subscribe/fields/field3"
MQTT_SUB_TOPIC_FIELD4 = "channels/2253753/subscribe/fields/field4"
MQTT_SUB_TOPIC_FIELD5 = "channels/2253753/subscribe/fields/field5"
#WIFI parameters
WIFI_SSID = "Wokwi-GUEST"
WIFI_PASSWD = ""
led1=Pin(5, Pin.OUT)
led1.on()
#função callback
def callback(topic, msg):
global tempOffset
global tempControl
global heater
print((topic, msg))
if topic == b'channels/qqqqqq/subscribe/fields/field3' :
heater= msg
if msg == b'0':
led1.on()
else:
led1.off()
else:
if topic == b'channels/qqqqqq/subscribe/fields/field4' :
tempOffset = int(msg)
else:
if topic == b'channels/qqqqqq/subscribe/fields/field5' :
tempControl = int(msg)
#GPIO16
#sensor = dht.DHT11(Pin(16))
sensor = dht.DHT22(Pin(14))
#vamos utilizar o led da placa ESP32/8266 (GPIO02)
#local parameters
#ThingSpeak fields
#field1 = temperature
#field2 = humidity
#field3 = heater
#filed4 = tempOffset (desired temperature)
#field5 = tempControl (0=disabled, 1= device, 2 = cloud)
#field6 = telemetry rate (0=disabled, 1 = 1/1s, 2 = 1/2s, etc)
print("init parameters")
tempControl = 0
tempOffset = 30
heater = 0
temperature = sensor.temperature()
humidity = sensor.humidity()
#Create a WLAN network interface object. STA_IF = station aka client, connects to upstream WiFi access points
print("Connecting to WiFi", end="")
nic = network.WLAN(network.STA_IF)
nic.active(True)
nic.connect(WIFI_SSID, WIFI_PASSWD)
while not nic.isconnected():
print(".", end="")
time.sleep(0.1)
print(" WiFi Connected!")
#conexão com broker Thingspeak
print("Connecting to MQTT server... ", end="")
client = MQTTClient (MQTT_CLIENT_ID, MQTT_BROKER, user = MQTT_USER, password = MQTT_PASSWORD, ssl=False)
# callback to handle data when MQTT channel updates
client.set_callback(callback)
try:
client.connect()
except Exception as e:
print('could not connect to MQTT server {}{}'.format(type(e).__name__, e))
sys.exit()
print("MQTT Connected!")
client.subscribe(MQTT_SUB_TOPIC_FIELD3)
client.subscribe(MQTT_SUB_TOPIC_FIELD4)
client.subscribe(MQTT_SUB_TOPIC_FIELD5)
#loop publish and subscribe
prev_weather = ""
while True:
client.check_msg()
# print("Measuring weather conditions... ", end="")
sensor.measure()
temperature = sensor.temperature()
humidity = sensor.humidity()
message="field1={}&field2={}&status=MQTTPUBLISH".format(temperature,humidity)
print(message)
if message != prev_weather:
print("Updated!")
print("Reporting to MQTT topic {}: {}".format(MQTT_PUB_TOPIC, message))
# client.publish(MQTT_PUB_TOPIC, message)
client.publish(MQTT_PUB_TOPIC_FIELD1, str(temperature))
client.publish(MQTT_PUB_TOPIC_FIELD2, str(humidity))
prev_weather = message
else:
print("No change")
if tempControl != 0 :
if temperature > tempOffset :
heater = 0
client.publish(MQTT_PUB_TOPIC_FIELD3, str(heater))
led1.on()
else:
heater = 100
client.publish(MQTT_PUB_TOPIC_FIELD3, str(heater))
led1.off()
time.sleep(1)