import network
import time
from machine import Pin, I2C
import dht
from umqtt.simple import MQTTClient
import ujson
from ssd1306 import SSD1306_I2C
# MQTT Server Parameters
MQTT_CLIENT_ID = "demoKARI"
MQTT_BROKER = "mqtt-dashboard.com"
MQTT_USER = ""
MQTT_PASSWORD = ""
MQTT_TOPIC1 = "/UNI053/Abdurrokhman/data_sensor" # Topik untuk data sensor
MQTT_TOPIC2 = "/UNI053/Abdurrokhman/aktuasi_led" # Topik untuk kontrol LED
# I2C Pins (ESP32 default: SDA=21, SCL=22)
i2c = I2C(0, scl=Pin(22), sda=Pin(21))
# OLED Display setup
WIDTH = 128
HEIGHT = 64
oled = SSD1306_I2C(WIDTH, HEIGHT, i2c)
# LED and DHT sensor setup
led = Pin(14, Pin.OUT)
sensor = dht.DHT22(Pin(12))
def connect_wifi():
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!")
def mqtt_callback(topic, msg):
print(f"Message received on topic {topic.decode()}: {msg.decode()}")
if msg.decode() == "on":
led.value(1) # Nyalakan LED
print("Lampu menyala")
elif msg.decode() == "off":
led.value(0) # Matikan LED
print("Lampu mati")
def connect_mqtt():
print("Connecting to MQTT server... ", end="")
client = MQTTClient(MQTT_CLIENT_ID, MQTT_BROKER, user=MQTT_USER, password=MQTT_PASSWORD)
client.set_callback(mqtt_callback)
client.connect()
client.subscribe(MQTT_TOPIC2) # Subscribe ke topik untuk kontrol LED
print("Connected and subscribed to topic!")
return client
def display_data(temp, hum):
oled.fill(0) # Clear the display
oled.text("DHT22 Sensor", 0, 0)
oled.text(f"Temp: {temp:.1f} C", 0, 20)
oled.text(f"Humidity: {hum:.1f} %", 0, 40)
oled.show()
# Main Program
connect_wifi()
client = connect_mqtt()
prev_weather = ""
while True:
client.check_msg() # Periksa pesan masuk dari MQTT broker
# Pengukuran sensor DHT
sensor.measure()
temperature = sensor.temperature()
humidity = sensor.humidity()
# Tampilkan data pada OLED
display_data(temperature, humidity)
# Membangun pesan JSON untuk data sensor
message_sensor = ujson.dumps({
"temperature": temperature,
"humidity": humidity
})
# Kirim data sensor ke topik pertama
if message_sensor != prev_weather:
print("Updated!")
print("Reporting to MQTT topic {}: {}".format(MQTT_TOPIC1, message_sensor))
client.publish(MQTT_TOPIC1, message_sensor)
prev_weather = message_sensor
else:
print("No change")
time.sleep(1)