#include #include #include #include char ssid[] = "XXXX"; // your network SSID (name) char pass[] = "XXXX"; // your network password (use for WPA, or use as key for WEP) const char* mqttServer = "192.168.1.34"; const int mqttPort = 1883; const char* mqttTopic = "/home/matrixportal"; WiFiClient espClient; PubSubClient client(espClient); uint8_t rgbPins[] = {7, 8, 9, 10, 11, 12}; uint8_t addrPins[] = {17, 18, 19, 20}; uint8_t clockPin = 14; uint8_t latchPin = 15; uint8_t oePin = 16; Adafruit_Protomatter matrix( 64, 4, 1, rgbPins, 4, addrPins, clockPin, latchPin, oePin, false); uint64_t pixelPalette[] = { matrix.color565(0, 0, 0), matrix.color565(157, 157, 157), matrix.color565(255, 255, 255), matrix.color565(190, 38, 51), matrix.color565(224, 111, 139), matrix.color565(73, 60, 43), matrix.color565(164, 100, 34), matrix.color565(235, 137, 49), matrix.color565(247, 226, 107), matrix.color565(47, 72, 78), matrix.color565(68, 137, 26), matrix.color565(163, 206, 39), matrix.color565(27, 38, 50), matrix.color565(0, 87, 132), matrix.color565(49, 162, 242), matrix.color565(178, 220, 239), matrix.color565(255, 0, 255)}; //--------- WIFI ------------------------------------------- void wifi_connect() { Serial.print("Starting connecting WiFi."); delay(10); WiFi.begin(ssid, pass); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println("WiFi connected"); Serial.println("IP address: "); Serial.println(WiFi.localIP()); } //------------------ MQTT ---------------------------------- void mqtt_setup() { client.setServer(mqttServer, mqttPort); client.setBufferSize(64*32 + 64); client.setCallback(callback); Serial.println("Connecting to MQTT…"); while (!client.connected()) { String clientId = "ESP32Client-"; clientId += String(random(0xffff), HEX); if (client.connect(clientId.c_str())) { Serial.println("connected"); } else { Serial.print("failed with state "); Serial.println(client.state()); delay(2000); } } client.subscribe(mqttTopic); } void callback(char* topic, byte* payload, unsigned int length) { Serial.print("Message arrived in topic: "); Serial.println(topic); String byteRead = ""; Serial.print("Message: "); for (int i = 0; i < length; i++) { byteRead += (char)payload[i]; } Serial.println(byteRead); matrix.fillScreen(matrix.color565(0, 0, 0)); for (int i = 0; i < byteRead.length(); i++) { uint64_t pixelColor = matrix.color565(0, 0, 0); String pixelChar = String(byteRead[i]); int colorIndex = (int)strtol(&pixelChar[0], NULL, 16); if (colorIndex >= 0 && colorIndex < 16) { pixelColor = pixelPalette[colorIndex]; } matrix.drawPixel(i % 64, i / 64, pixelColor); } matrix.show(); // Copy data to matrix buffers } void setup() { Serial.begin(9600); // Initialize matrix... ProtomatterStatus pmstatus = matrix.begin(); Serial.print("Protomatter begin() status: "); Serial.println((int)pmstatus); if (pmstatus != PROTOMATTER_OK) { for (;;) ; } matrix.println("wifi..."); // Default text color is white matrix.show(); // Copy data to matrix buffers wifi_connect(); matrix.println("mqtt..."); // Default text color is white matrix.show(); // Copy data to matrix buffers mqtt_setup(); } void loop() { client.loop(); }