import network
import time
from umqtt.simple import MQTTClient
from machine import Pin
import dht
# Konstanta untuk DHT22
DHT_PIN = 12
LED_PIN = 15
# Inisialisasi DHT dan LED
sensor = dht.DHT22(Pin(DHT_PIN))
led = Pin(LED_PIN, Pin.OUT)
led.off()
# WiFi dan broker MQTT
SSID = "Wokwi-GUEST"
PASSWORD = ""
BROKER = "broker.emqx.io"
# Variabel untuk menyimpan nilai terakhir
last_suhu = None
last_kelembaban = None
# Fungsi untuk koneksi WiFi
def connect_wifi():
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(SSID, PASSWORD)
print("Menghubungkan ke WiFi...")
while not wlan.isconnected():
time.sleep(0.5)
print(".", end="")
print("\nTerhubung ke WiFi dengan IP:", wlan.ifconfig()[0])
# Callback untuk pesan MQTT
def message_callback(topic, msg):
print(f"Pesan diterima di topik: {topic.decode()}, payload: {msg.decode()}")
if topic.decode() == "dilecomunity/mufizihsanulhaq/aktuasi_led":
if msg.decode().upper() == "ON":
led.on()
print("LED dinyalakan")
elif msg.decode().upper() == "OFF":
led.off()
print("LED dimatikan")
else:
print("Payload tidak dikenali untuk kontrol LED")
# Fungsi untuk menerbitkan data sensor
def publish_data(client):
global last_suhu, last_kelembaban
try:
sensor.measure()
suhu = sensor.temperature()
kelembaban = sensor.humidity()
if suhu != last_suhu or kelembaban != last_kelembaban:
last_suhu = suhu
last_kelembaban = kelembaban
pesan = f"Suhu: {suhu:.2f} C, Kelembaban: {kelembaban:.2f} %"
client.publish("dilecomunity/mufizihsanulhaq/data_sensor", pesan)
print("Pesan diterbitkan: ", pesan)
else:
print("Tidak ada perubahan, tidak menerbitkan pesan.")
except Exception as e:
print("Gagal membaca sensor DHT22: ", e)
# Setup MQTT client
client = MQTTClient("uniqueClientID", BROKER)
client.set_callback(message_callback)
# Koneksi ke WiFi dan broker MQTT
connect_wifi()
client.connect()
client.subscribe("dilecomunity/mufizihsanulhaq/aktuasi_led")
# Loop utama
try:
while True:
client.check_msg()
publish_data(client)
time.sleep(15)
except KeyboardInterrupt:
print("Program dihentikan.")
finally:
client.disconnect()
print("Terputus dari broker.")