import network
import time
from machine import Pin, ADC
import ujson
from umqtt.simple import MQTTClient
# MQTT Server Parameters
MQTT_CLIENT_ID = "demoErick"
MQTT_BROKER = "broker.emqx.io"
MQTT_USER = ""
MQTT_PASSWORD = ""
MQTT_TOPIC_SENSOR = "pings/to"
MQTT_TOPIC_LED = "pings/tu"
# pin Untuk LDR sensor
LDR_PIN = ADC(Pin(34)) #
LDR_PIN.atten(ADC.ATTN_11DB)
# pin Untuk LED
LED_PIN = Pin(2, Pin.OUT)
# Function to read light level from the LDR sensor
def read_light_level():
"""Read raw value from the LDR sensor"""
return LDR_PIN.read() # Membaca value ADC (0-4095)
# Normalize the ADC reading (0-4095) to a percentage (0-100)
def normalize_light_level(raw_value):
"""Normalize ADC value to a percentage (0-100%)"""
normalized = (raw_value / 4095) * 100 # Normalize to percentage
return round(normalized, 2) # Round to 2 decimal places
# Callback function to handle MQTT messages
def mqtt_callback(topic, msg):
"""Handle messages received via MQTT"""
print("Message received on topic {}: {}".format(topic.decode(), msg.decode()))
if topic.decode() == MQTT_TOPIC_LED:
command = msg.decode().strip().lower()
if command == "on":
LED_PIN.value(1) # Turn LED on
print("LED turned on!")
elif command == "off":
LED_PIN.value(0) # Turn LED off
print("LED turned off!")
# WIFI Connection
def connect_wifi():
"""Connect to WiFi"""
print("Trying to connect 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!")
# MQTT Server connection
def connect_mqtt():
"""Connect to the MQTT broker"""
print("Trying to connect to MQTT server...", end="")
client = MQTTClient(MQTT_CLIENT_ID, MQTT_BROKER, user=MQTT_USER, password=MQTT_PASSWORD)
client.set_callback(mqtt_callback)
client.connect()
client.subscribe(MQTT_TOPIC_LED)
print("Connected and subscribed to topic {}".format(MQTT_TOPIC_LED))
return client
# Main loop to monitor and control
def main():
"""Main function to run monitoring and control loop"""
# Connect to Wi-Fi and MQTT server
connect_wifi()
client = connect_mqtt()
while True:
try:
# Check incoming MQTT messages
client.check_msg()
# Read and normalize light level
light_level_raw = read_light_level()
light_level_normalized = normalize_light_level(light_level_raw)
# Display raw and normalized values for debugging
print("Light level (raw): {}, Light level (normalized): {}%".format(light_level_raw, light_level_normalized))
# Create message to send
message = ujson.dumps({
"light_level_raw": light_level_raw,
"light_level_percentage": light_level_normalized
})
# Publish sensor data to MQTT topic
client.publish(MQTT_TOPIC_SENSOR, message)
print("Sensor data published: {}".format(message))
# Delay for the next reading (1 second)
time.sleep(1)
except Exception as e:
print("Error occurred: ", e)
time.sleep(5)
# Run the main function directly
main()