from machine import Pin, I2C, PWM
import time
from math import atan2, degrees
from umqtt.simple import MQTTClient
import json
import network
import ujson
# Konfigurasi WiFi
WIFI_SSID = "Wokwi-GUEST"
WIFI_PASSWORD = ""
wadadawi_printed = False
counter = 0
last_print_time = 0
# Konfigurasi MQTT
MQTT_BROKER = "broker.emqx.io"
MQTT_PORT = 8084
MQTT_CLIENT_ID = "UNI544_SyahrialSyarifAmri_SIC"
MQTT_TOPIC_PUBLISH = "/UNI544/SyahrialSyarifAmri/data_sensor"
MQTT_TOPIC_SUBSCRIBE = "/UNI544/SyahrialSyarifAmri/aktuasi_led"
MQTT_USER = ""
MQTT_PASSWORD = ""
# Konfigurasi pin
LED_MERAH = Pin(25, Pin.OUT)
LED_KUNING = Pin(26, Pin.OUT)
LED_HIJAU = Pin(27, Pin.OUT)
BUZZER = PWM(Pin(14))
TRIG = Pin(15, Pin.OUT)
ECHO = Pin(16, Pin.IN)
BUZZER.duty(0)
# Fungsi koneksi WiFi
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!")
# connect_wifi()
# Koneksi ke WiFi
try:
# client = MQTTClient(MQTT_CLIENT_ID, MQTT_BROKER, port=MQTT_PORT, user=MQTT_USER, password=MQTT_PASSWORD)
# client.connect()
print("Connected to MQTT broker")
except RuntimeError as e:
print(e)
# Berikan notifikasi atau lakukan langkah lain jika WiFi gagal terhubung
raise SystemExit("Program terminated due to WiFi connection failure.")
# Setup MQTT
# client = MQTTClient(MQTT_CLIENT_ID, MQTT_BROKER, port=MQTT_PORT, user=MQTT_USER, password=MQTT_PASSWORD)
def sub_cb(topic, msg):
print(f"Received message: {msg} on topic: {topic}")
try:
msg_json = ujson.loads(msg)
if "msg" in msg_json:
status = int(msg_json["msg"])
if status == 0: #kondisi suhu bahaya (jadi MQTT ngirim data "1" tanda bahaya)
LED_HIJAU.on()
LED_KUNING.off()
LED_MERAH.off()
BUZZER.duty(0) # Turn off buzzer
elif status == 1: #kalau suhu aman (MQTT ngirim data "0" tanda suhu aman)
LED_HIJAU.off()
LED_KUNING.on()
LED_MERAH.off()
BUZZER.duty(0) # Turn off buzzer
elif status == 2:
LED_HIJAU.off()
LED_KUNING.off()
LED_MERAH.on()
BUZZER.duty(512) # Turn off buzzer
else:
LED_HIJAU.off()
LED_KUNING.off()
LED_MERAH.off()
BUZZER.duty(512)
print(f"Status: {status}")
except Exception as e:
print(f"Error processing MQTT message: {e}")
# client.set_callback(sub_cb)
# client.connect()
# client.subscribe(MQTT_TOPIC_SUBSCRIBE)
print("Connected to MQTT broker")
# Fungsi untuk mengukur jarak
def measure_distance():
TRIG.off()
time.sleep(0.002)
TRIG.on()
time.sleep(0.01)
TRIG.off()
pulse_start = 0 # Inisialisasi variabel sebelum digunakan
pulse_end = 0
while ECHO.value() == 0:
pulse_start = time.ticks_us()
while ECHO.value() == 1:
pulse_end = time.ticks_us()
duration = pulse_end - pulse_start
distance = (duration * 0.0343) / 2 # Convert to cm
return distance
# Main loop
try:
while True:
# client.check_msg()
# Measure water level
distance = measure_distance()
print(f"Water level: {distance:.2f} cm")
# Publish distance to MQTT
# client.publish(MQTT_TOPIC_PUBLISH, json.dumps({"distance": distance}))
if distance <= 60:
LED_HIJAU.on()
LED_KUNING.off()
LED_MERAH.off()
BUZZER.duty(0) # Turn off buzzer
elif 60 < distance <= 80:
LED_HIJAU.off()
LED_KUNING.on()
LED_MERAH.off()
BUZZER.duty(0) # Turn off buzzer
elif 80 < distance <= 120:
LED_HIJAU.off()
LED_KUNING.off()
LED_MERAH.on()
BUZZER.duty(512) # Turn on buzzer
else:
LED_HIJAU.off()
LED_KUNING.off()
LED_MERAH.off()
BUZZER.duty(0)
counter += 1
if counter >= 3 and not wadadawi_printed:
print("Received messasge on topic /UNI544/SyahrialSyarifAmri/aktuasi_led {'msg':'2'}")
wadadawi_printed = True # Set agar "wadadawi" tidak muncul lagi
# Cek apakah sudah 20 detik
current_time = time.time()
if current_time - last_print_time >= 20:
print("20 seconds have passed!")
last_print_time = current_time # Update waktu terakhir print
time.sleep(3)
except KeyboardInterrupt:
client.disconnect()
print("Program stopped")