#include WiFi.h #include PubSubClient.h #include Adafruit_NeoPixel.h const char* ssid = "YourSSID"; const char* password = "YourPassword"; const char* mqtt_server = "broker.emqx.io"; const char* topic = "week13/wifi"; // same topic to publisher #define NEOPIXEL_PIN D10 #define NUM_PIXELS 1 WiFiClient espClient; PubSubClient client(espClient); Adafruit_NeoPixel pixels(NUM_PIXELS, NEOPIXEL_PIN, NEO_GRB + NEO_KHZ800); void setup() { Serial.begin(115200); setup_wifi(); client.setServer(mqtt_server, 1883); client.setCallback(callback); pixels.begin(); } void setup_wifi() { delay(10); Serial.println(); Serial.print("Connecting to "); Serial.println(ssid); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi connected"); Serial.println("IP Address: "); Serial.println(WiFi.localIP()); } void callback(char* topic, byte* payload, unsigned int length) { String message = ""; for (int i = 0; i < length; i++) { message += (char)payload[i]; } Serial.print("Message received from topic "); Serial.print(topic); Serial.print(": "); Serial.println(message); if (message == "a") { pixels.setPixelColor(0, pixels.Color(255, 0, 0)); // Red pixels.show(); } else { pixels.setPixelColor(0, pixels.Color(0, 255, 0)); // Green pixels.show(); } } void reconnect() { while (!client.connected()) { Serial.print("Connecting to MQTT server..."); if (client.connect("neopixelClient")) { Serial.println("Connected"); client.subscribe(topic); } else { Serial.print("Failed, rc="); Serial.print(client.state()); Serial.println(" trying again in 5 seconds"); delay(5000); } } } void loop() { if (!client.connected()) { reconnect(); } client.loop(); }