import network
import time
from machine import Pin
import dht
import ujson
from umqtt.simple import MQTTClient
# Konfigurasi WiFi
SSID = "Wokwi-GUEST"
PASSWORD = ""
# Konfigurasi MQTT
MQTT_CLIENT_ID = "Putra-Client"
MQTT_BROKER = "broker.emqx.io"
MQTT_USER = ""
MQTT_PASSWORD = ""
TOPIC_PUBLISH = "/UNI163/Putra/data_sensor" # Topik untuk publish data sensor
TOPIC_SUBSCRIBE = "/UNI163/Putra/aktuasi_led" # Topik untuk kontrol LED
# Konfigurasi sensor dan LED
sensor1 = dht.DHT22(Pin(15))
sensor2 = dht.DHT22(Pin(2))
led = Pin(13, Pin.OUT) # LED terhubung ke GPIO13
# Koneksi WiFi
def connect_wifi():
print("Connecting to WiFi", end="")
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(SSID, PASSWORD)
while not wlan.isconnected():
print(".", end="")
time.sleep(0.5)
print(" Connected! IP:", wlan.ifconfig())
# Publish Data
def publish_sensor_data(client):
print("Measuring weather conditions... ", end="")
sensor1.measure()
sensor2.measure()
message = ujson.dumps({
"temp1": sensor1.temperature(),
"humidity1": sensor1.humidity(),
"temp2": sensor2.temperature(),
"humidity2": sensor2.humidity(),
})
print("Publishing to topic {}: {}".format(TOPIC_PUBLISH, message))
client.publish(TOPIC_PUBLISH, message)
# Callback untuk pesan MQTT
def on_message(topic, msg):
topic = str(topic, 'utf-8') # Pastikan topic adalah string
msg = str(msg, 'utf-8') # Pastikan msg adalah string
print("Message received on topic {}: {}".format(topic, msg))
if topic == TOPIC_SUBSCRIBE:
if msg == "On":
led.value(1) # Nyalakan LED
print("LED ON")
elif msg == "Off":
led.value(0) # Matikan LED
print("LED OFF")
# Program Utama
connect_wifi()
client = MQTTClient(MQTT_CLIENT_ID, MQTT_BROKER, user=MQTT_USER, password=MQTT_PASSWORD)
client.set_callback(on_message)
client.connect()
print("Connected to MQTT Broker:", MQTT_BROKER)
client.subscribe(TOPIC_SUBSCRIBE)
print("Subscribed to topic:", TOPIC_SUBSCRIBE)
# Loop Utama
while True:
# Publish data sensor
publish_sensor_data(client)
# Periksa pesan untuk subscribe
client.check_msg()
# Tunggu sebelum loop berikutnya
time.sleep(5)