import network
import time
from machine import Pin, I2C, #SoftI2C
import dht
import ujson
from umqtt.simple import MQTTClient
import lcd_i2c
lcd_width = 16
lcd_height = 2
lcd_address = 0x27
i2c = I2C(scl=Pin(22), sda=Pin(21), freq=800000)
lcd = lcd_i2c.I2cLcd(i2c, lcd_address, lcd_height, lcd_width)
# devices = i2c.scan()
# if len(devices) == 0:
# print("No i2c device !")
# else:
# print('i2c devices found:',len(devices))
# for device in devices:
# print("Hexa address: ",hex(device))
# lcd = Display(i2c=i2c, lcd_addr=lcd_address)
# lcd.begin()
# lcd.print("Hello World")
MQTT_CLIENT_ID = "Espressif_Weather_pub"
MQTT_BROKER = "78.83.97.25"
MQTT_USER = "ivan"
MQTT_PASSWORD = "890235"
MQTT_TOPIC = "mqtt/sensor"
sensor = dht.DHT22(Pin(15))
print("Connecting to 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(" Connected!")
print("Connecting to MQTT server... ", end="")
client = MQTTClient(MQTT_CLIENT_ID, MQTT_BROKER, user=MQTT_USER, password=MQTT_PASSWORD)
client.connect()
print("Connected!")
prev_weather = ""
counter = 0
while True:
sensor.measure()
message = ujson.dumps({
"temp": sensor.temperature()
})
if message != prev_weather:
print("Updated!")
print("Reporting to MQTT topic {}: {}".format(MQTT_TOPIC, message))
client.publish(MQTT_TOPIC, message, retain=True)
prev_weather = message
lcd.clear()
lcd.move_to(0,0)
lcd.putstr("Message sent:")
lcd.move_to(0,1)
lcd.putstr(str(message))
time.sleep(0.5)
counter = counter + 1
if counter >= 30:
counter = 0
print("Pinged broker!")
client.ping()