import network
import time
from machine import Pin, ADC
from umqtt.simple import MQTTClient
import ubinascii
import machine
# Gunakan ID unik dengan chip ID
MQTT_CLIENT_ID = b"esp32_" + ubinascii.hexlify(machine.unique_id())
MQTT_BROKER = "broker.emqx.io"
MQTT_TOPIC_SENSOR = b"ambaNitro/arfin_desca_alzachri/LDR_sensor"
MQTT_TOPIC_LED = b"ambaNitro/arfin_desca_alzachri/aktuasi_led"
# Pin untuk LDR
LDR_PIN = ADC(Pin(34))
LDR_PIN.atten(ADC.ATTN_11DB)
# Pin untuk LED
LED_PIN = Pin(2, Pin.OUT)
# Fungsi konversi ADC ke lux
def adc_to_lux(adc_value):
max_adc = 4095
max_lux = 1000
lux = (adc_value / max_adc) * max_lux
return round(lux, 2)
# Baca nilai cahaya
def read_light_level():
raw_value = LDR_PIN.read()
lux_value = adc_to_lux(raw_value)
return "Tingkat kecerahan adalah: {} lux".format(lux_value)
# Callback jika ada pesan masuk
def mqtt_callback(topic, msg):
print("Pesan masuk:", topic, msg)
if topic == MQTT_TOPIC_LED:
command = msg.decode().strip().lower()
if command == "on":
LED_PIN.value(1)
elif command == "off":
LED_PIN.value(0)
# Hubungkan ke WiFi
def connect_wifi():
sta_if = network.WLAN(network.STA_IF)
if not sta_if.isconnected():
print("Menghubungkan ke WiFi...")
sta_if.active(True)
sta_if.connect('Wokwi-GUEST', '') # Ganti SSID jika perlu
while not sta_if.isconnected():
time.sleep(0.1)
print("Terhubung ke WiFi:", sta_if.ifconfig())
# Hubungkan ke broker MQTT
def connect_mqtt():
client = MQTTClient(MQTT_CLIENT_ID, MQTT_BROKER)
client.set_callback(mqtt_callback)
client.connect()
client.subscribe(MQTT_TOPIC_LED)
print("Terhubung ke MQTT broker dan subscribe topik.")
return client
# Fungsi utama
def main():
connect_wifi()
client = connect_mqtt()
while True:
try:
client.check_msg() # Cek pesan masuk dari broker
light_message = read_light_level()
client.publish(MQTT_TOPIC_SENSOR, light_message)
print("Dikirim:", light_message)
time.sleep(2)
except OSError:
print("Koneksi terputus, mencoba ulang...")
connect_wifi()
client = connect_mqtt()
except Exception as e:
print("Error:", e)
time.sleep(5)
# Jalankan
main()