import board
import pwmio
import time
import wifi
import socketpool
import adafruit_minimqtt.adafruit_minimqtt as MQTT
# Initialize PWM outputs for each color channel
red_pwm = pwmio.PWMOut(board.GP28, frequency=5000, duty_cycle=0)
green_pwm = pwmio.PWMOut(board.GP27, frequency=5000, duty_cycle=0)
blue_pwm = pwmio.PWMOut(board.GP26, frequency=5000, duty_cycle=0)
# Function to set the color of the RGB LED
def set_rgb_color(red_value, green_value, blue_value):
red_pwm.duty_cycle = int((red_value / 255) * 65535)
green_pwm.duty_cycle = int((green_value / 255) * 65535)
blue_pwm.duty_cycle = int((blue_value / 255) * 65535)
# MQTT callback when a message is received
def message_received(client, topic, message):
print(f"Received message on {topic}: {message}")
try:
values = message.split(',')
red_value = int(values[0])
green_value = int(values[1])
blue_value = int(values[2])
set_rgb_color(red_value, green_value, blue_value)
except Exception as e:
print(f"Failed to parse message: {e}")
# Connect to Wi-Fi
wifi.radio.connect("YOUR_SSID", "YOUR_PASSWORD")
# Create a socket pool
pool = socketpool.SocketPool(wifi.radio)
# Set up MQTT client
mqtt_client = MQTT.MQTT(
broker="158.180.44.197",
port=1883,
socket_pool=pool,
user = "bobm",
password = "letmein"
)
# Set up message callback
mqtt_client.on_message = message_received
# Connect to the MQTT broker
mqtt_client.connect()
# Subscribe to the RGB topic
mqtt_client.subscribe("home/rgb_led")
# Main loop
while True:
try:
mqtt_client.loop()
time.sleep(1)
except Exception as e:
print(f"Error: {e}")
mqtt_client.reconnect()