import network
import machine
import utime
import dht
from umqtt_simple import MQTTClient
# Konfigurasi Wi-Fi
WIFI_SSID = "Wokwi-GUEST"
WIFI_PASS = ""
# Konfigurasi MQTT
MQTT_BROKER = "test.mosquitto.org"
MQTT_PORT = 1883
# Ganti angka 2025 dengan 4 digit akhir NIM peserta!
MQTT_TOPIC = "ragil22"
CLIENT_ID = "Pico-Wokwi"
# Inisialisasi sensor DHT22
dht_sensor = dht.DHT22(machine.Pin(16))
# Inisialisasi sensor HC-SR04
trig = machine.Pin(14, machine.Pin.OUT)
echo = machine.Pin(15, machine.Pin.IN)
# Inisialisasi relay dan LED
relay_pompa = machine.Pin(12, machine.Pin.OUT)
led_indikator = machine.Pin(13, machine.Pin.OUT)
relay_pompa.low() # Pompa mati
led_indikator.low() # LED mati
# Fungsi koneksi Wi-Fi
def connect_wifi():
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(WIFI_SSID, WIFI_PASS)
print("Menghubungkan ke Wi-Fi", end="")
while not wlan.isconnected():
print(".", end="")
utime.sleep(1)
print("\nTerhubung ke Wi-Fi!")
print("IP Address:", wlan.ifconfig()[0])
# Fungsi membaca sensor DHT22
def read_dht22():
try:
dht_sensor.measure()
temp = dht_sensor.temperature()
hum = dht_sensor.humidity()
print(f"Suhu : {temp:.2f} °C")
print(f"Kelembaban : {hum:.2f} %")
return temp, hum
except Exception as e:
return None, None
# Fungsi membaca sensor HC-SR04
def read_hcsr04():
try:
trig.low()
utime.sleep_us(2)
trig.high()
utime.sleep_us(10)
trig.low()
while echo.value() == 0:
start_time = utime.ticks_us()
while echo.value() == 1:
end_time = utime.ticks_us()
duration = end_time - start_time
distance = (duration * 0.0343) / 2
print(f"Ketinggian : {distance:.2f} cm")
return distance
except Exception as e:
return None
# Koneksi ke Wi-Fi
connect_wifi()
# Koneksi ke broker MQTT
try:
client = MQTTClient(CLIENT_ID, MQTT_BROKER, MQTT_PORT)
client.connect()
print("Terhubung ke MQTT Broker!")
except Exception as e:
print("[ERROR] Gagal terhubung ke broker MQTT:", e)
while True:
temperature, humidity = read_dht22()
ketinggian_air = read_hcsr04()
if temperature is not None and humidity is not None and ketinggian_air is not None:
# Logika kontrol pompa dan indikator
if ketinggian_air < 380:
relay_pompa.high() # Pompa menyala
led_indikator.low()
print("Pompa : ON")
print("Level : Tidak Penuh")
else:
relay_pompa.low() # Pompa mati
led_indikator.high()
print("Pompa : OFF")
print("Level : Penuh")
# Format data JSON
payload = '{{"temperature": {:.2f}, "humidity": {:.2f}, "ketinggian_air": {:.2f}, "led_status": {}, "relay_status": {}}}'.format(
temperature, humidity, ketinggian_air, led_indikator.value(), relay_pompa.value()
)
# Kirim data ke MQTT
try:
client.publish(MQTT_TOPIC, payload)
print("[DEBUG] Data terkirim ke MQTT")
print("-----------------------------")
except Exception as e:
print("[ERROR] Gagal mengirim data ke MQTT:", e)
print("------------------------------------")
utime.sleep(2)