import network
import time
import dht
import ujson
from machine import Pin
from umqtt.simple import MQTTClient
# Sensor DHT22 dan relay
sensor = dht.DHT22(Pin(15))
relay = Pin(2, Pin.OUT)
relay.value(0) # Relay OFF untuk modul aktif-HIGH
# Wi-Fi Wokwi
WIFI_SSID = "Wokwi-GUEST"
WIFI_PASSWORD = ""
# Broker EMQX publik
MQTT_BROKER = "broker.emqx.io"
MQTT_PORT = 1883
MQTT_CLIENT_ID = "pas-esp32-ruang01-73921"
# Topic MQTT
TOPIC_DATA = b"pas-teknik/ruang01/monitoring"
TOPIC_COMMAND = b"pas-teknik/ruang01/command"
TOPIC_RELAY_STATUS = b"pas-teknik/ruang01/relay_status"
def hubungkan_wifi():
wifi = network.WLAN(network.STA_IF)
wifi.active(True)
if not wifi.isconnected():
wifi.connect(WIFI_SSID, WIFI_PASSWORD)
timeout = 20
while not wifi.isconnected() and timeout > 0:
print("Menghubungkan Wi-Fi...")
time.sleep(1)
timeout -= 1
if not wifi.isconnected():
raise RuntimeError("Wi-Fi gagal terhubung")
print("Wi-Fi terhubung:", wifi.ifconfig()[0])
def kirim_status_relay(client):
status = "ON" if relay.value() == 1 else "OFF"
client.publish(TOPIC_RELAY_STATUS, status)
print("Status relay:", status)
def terima_pesan(topic, msg):
if topic == TOPIC_COMMAND:
perintah = msg.decode().strip().upper()
if perintah == "ON":
relay.value(1)
print("Perintah diterima: Relay ON")
kirim_status_relay(client)
elif perintah == "OFF":
relay.value(0)
print("Perintah diterima: Relay OFF")
kirim_status_relay(client)
else:
print("Perintah tidak dikenal:", perintah)
def hubungkan_mqtt():
mqtt_client = MQTTClient(
MQTT_CLIENT_ID,
MQTT_BROKER,
port=MQTT_PORT,
keepalive=60
)
mqtt_client.set_callback(terima_pesan)
mqtt_client.connect()
mqtt_client.subscribe(TOPIC_COMMAND)
print("MQTT EMQX terhubung!")
kirim_status_relay(mqtt_client)
return mqtt_client
hubungkan_wifi()
client = hubungkan_mqtt()
waktu_kirim = time.ticks_ms()
while True:
try:
# Periksa perintah MQTT tanpa menghentikan program
client.check_msg()
# Kirim data sensor setiap 5 detik
if time.ticks_diff(time.ticks_ms(), waktu_kirim) >= 5000:
sensor.measure()
data = {
"device": "ESP32_01",
"temperature": sensor.temperature(),
"humidity": sensor.humidity()
}
client.publish(TOPIC_DATA, ujson.dumps(data))
print("Data sensor:", data)
waktu_kirim = time.ticks_ms()
time.sleep_ms(100)
except Exception as e:
print("Koneksi MQTT bermasalah:", e)
try:
client.disconnect()
except Exception:
pass
time.sleep(3)
client = hubungkan_mqtt()
Loading
esp32-devkit-c-v4
esp32-devkit-c-v4