from machine import Pin, I2C
from time import sleep
import dht
import network
import ubinascii
import machine
from umqtt.simple import MQTTClient
from i2c_lcd import I2cLcd
# WiFi settings
WIFI_SSID = 'Wokwi-GUEST'
WIFI_PASSWORD = ''
# MQTT settings
MQTT_CLIENT_ID = ""
MQTT_BROKER = "test.mosquitto.org"
MQTT_PORT = 1883
MQTT_USER = "" # Leave empty if no authentication is needed
MQTT_PASSWORD = "" # Leave empty if no authentication is needed
MQTT_TOPIC = "egg/incubator"
# I2C and LCD settings
I2C_ADDR = 0x27
I2C_SCL_PIN = 22
I2C_SDA_PIN = 21
I2C_NUM_ROWS = 4
I2C_NUM_COLS = 20
i2c = I2C(scl=Pin(I2C_SCL_PIN), sda=Pin(I2C_SDA_PIN))
lcd = I2cLcd(i2c, I2C_ADDR, I2C_NUM_ROWS, I2C_NUM_COLS)
# DHT sensor settings
DHT_PIN = 27
dht_sensor = dht.DHT22(Pin(DHT_PIN))
# LED settings
green_led = Pin(4, Pin.OUT)
red_led = Pin(2, Pin.OUT)
def connect_wifi(ssid, password):
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(ssid, password)
print("Connecting to WiFi", end="")
while not wlan.isconnected():
print(".", end="")
sleep(1)
print("\nConnected to WiFi:", wlan.ifconfig())
def mqtt_connect():
client = MQTTClient(MQTT_CLIENT_ID, MQTT_BROKER, MQTT_PORT, MQTT_USER, MQTT_PASSWORD)
client.connect()
print('Connected to %s MQTT broker' % MQTT_BROKER)
return client
def display_temperature(temp):
lcd.clear()
lcd.putstr('Temperature: ')
lcd.move_to(12, 0)
lcd.putstr('{:.1f} C'.format(temp))
def main():
connect_wifi(WIFI_SSID, WIFI_PASSWORD)
client = mqtt_connect()
while True:
dht_sensor.measure()
temp = dht_sensor.temperature()
display_temperature(temp)
client.publish(MQTT_TOPIC, str(temp))
if 60 <= temp <= 70:
red_led.off()
green_led.on()
lcd.move_to(6, 2)
lcd.putstr('HATCHING')
else:
red_led.on()
green_led.off()
lcd.move_to(6, 2)
lcd.putstr('ERROR!!')
sleep(5)
if __name__ == '__main__':
main()