from machine import Pin
from neopixel import NeoPixel
import network
import time
import json
from umqtt import MQTTClient
time.sleep(0.1) # Wait for USB to become ready
led_pin = Pin(5, Pin.OUT)
np = NeoPixel(led_pin, 16)
# WiFi settings
ssid = "mqtt_sd"
password = "12345"
#MQTT server parameters
MQTT_CLIENT_ID = "neopixel-sd-iot"
MQTT_HOST = "broker.emqx.io"
MQTT_TOPIC = "sd/neopixel"
def mqtt_message(topic, message):
print("-------------------")
print("topic:", topic)
print("message:", message)
try:
# [255, 0, 0] [R, G, B]
msg = json.loads(message)
np.fill((msg[0], msg[1], msg[2]))
np.write()
except Exception as e:
print(e)
print("-------------------")
# Connecting to WIFI
print("Connecting to WiFi..")
wifi = network.WLAN(network.STA_IF)
wifi.active(True)
wifi.connect(ssid, password)
while not wifi.isconnected():
time.sleep(0.3)
print(".", end="")
print("Wifi Connected")
# Connecting to MQTT Broker
print("Connecting to MQTT Host")
client = MQTTClient(MQTT_CLIENT_ID, MQTT_HOST)
client.set_callback(mqtt_message)
client.connect()
client.subscribe(MQTT_TOPIC)
print("MQTT HOST Connected...")
last_ping = 0
while True:
client.check_msg()
if time.ticks_ms() - last_ping > 10000:
client.ping()
last_ping = time.ticks_ms()
time.sleep(0.1)