Untitled
# Quadran1 # Universitas Diponegoro # UNI037 from umqtt.simple import MQTTClient import network import time import ujson from machine import Pin, Timer, ADC import dht # Config Pin led1 = Pin(2, Pin.OUT) dht22 = dht.DHT22(Pin(15)) # Config Wifi WIFI_SSID = "Wokwi-GUEST" WIFI_PASSWORD = "" # Config MQTT MQTT_BROKER = "broker.emqx.io" MQTT_PORT = 1883 MQTT_CLIENT_ID = "quadran1_mqttx_UNI037" # Topic Configuration MQTT_TOPIC_SENSOR = "/UNI037/Quadran1/Sensor" MQTT_TOPIC_LED = "/UNI037/Quadran1/LedKontrol" # Function untuk koneksi ke Wifi nya def connect_wifi(): print("Koneksiin WiFi...", end="") sta_if = network.WLAN(network.STA_IF) sta_if.active(True) sta_if.connect(WIFI_SSID, WIFI_PASSWORD) retry = 0 while not sta_if.isconnected() and retry < 10: print(".", end="") time.sleep(1) retry += 1 if sta_if.isconnected(): print("\nWiFi Terkoneksi!") print("IP:", sta_if.ifconfig()[0]) return True else: print("\nWiFi Gagal Terkoneksi!") return False # Function untuk koneksi ke MQTT def connect_mqtt(): try: print("Koneksiin MQTT...", end="") client = MQTTClient( client_id=MQTT_CLIENT_ID, server=MQTT_BROKER, port=MQTT_PORT, keepalive=60 ) client.connect() print(" Terkoneksi!") return client except Exception as e: print(" GAGAL!") print("Error:", str(e)) return None # Function untuk callback MQTT def mqtt_callback(topic, msg): try: print("Pesan Diterima:") print("Topic:", topic.decode()) print("Pesan:", msg.decode()) if topic.decode() == MQTT_TOPIC_LED: command = msg.decode().upper() # If-else perintah penghidupan LED if command == "ON LED 1": led1.on() print("LED 1 HIDUP") elif command == "OFF LED 1": led1.off() print("LED 1 MATI") except Exception as e: print("Callback error:", str(e)) # Function untuk mengambil data dari sensor def get_sensor_data(): try: dht22.measure() # Mengambil pengukuran dari dht22 temperature = dht22.temperature() # Read suhu humidity = dht22.humidity() # Read kelembaban return { "temperature": round(temperature, 2), "humidity": round(humidity, 2), } except Exception as e: print("Error reading sensor:", str(e)) return { "temperature": 0, "humidity": 0, } # Function utama def main(): # Connect ke Wifi if not connect_wifi(): return # Connect ke MQTT client = connect_mqtt() if client is None: return # Setup callback dan subscribe try: client.set_callback(mqtt_callback) client.subscribe(MQTT_TOPIC_LED) print(f"Subscribe ke {MQTT_TOPIC_LED}") # Main loop print("Memulai...") while True: try: # Check incoming messages client.check_msg() # Get and publish sensor data sensor_data = get_sensor_data() message = ujson.dumps(sensor_data) client.publish(MQTT_TOPIC_SENSOR, message) print(f"Publish: {message}") time.sleep(5) except Exception as e: print("Loop error:", str(e)) time.sleep(5) try: client.connect() except: print("GAGAL") except Exception as e: print("Setup error:", str(e)) # Running programnya if __name__ == "__main__": while True: try: main() except Exception as e: print("Main error:", str(e)) print("Restarting dalam 10 detik...") time.sleep(10)
Leave a Comment