/********* Rui Santos Complete project details at https://randomnerdtutorials.com *********/ // I connected SCK to D22 and SDA to D21 - but all I get is a weird pattern - is the dislay broken? #include #include #include #include #include #include #include #include #define SCREEN_WIDTH 128 // OLED display width, in pixels #define SCREEN_HEIGHT 64 // OLED display height, in pixels // Declaration for an SSD1306 display connected to I2C (SDA, SCL pins) Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1); // Update these with values suitable for your network. const char* ssid = "Jnd-Front"; const char* password = "Paris2016"; const char* mqtt_server = "mqtt.ddns.kawomi.com"; WiFiClient espClient; PubSubClient client(espClient); unsigned long lastMsg = 0; #define MSG_BUFFER_SIZE (50) char msg[MSG_BUFFER_SIZE]; void setup_wifi() { delay(10); // We start by connecting to a WiFi network Serial.println(); Serial.print("Connecting to "); Serial.println(ssid); WiFi.mode(WIFI_STA); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } randomSeed(micros()); Serial.println(""); Serial.println("WiFi connected"); Serial.println("IP address: "); Serial.println(WiFi.localIP()); display.setCursor(0, 0); display.clearDisplay(); display.print("Wifi connected\nIP addres:\n"); display.print(WiFi.localIP()); display.display(); delay(1000); } void reconnect() { // Loop until we're reconnected while (!client.connected()) { Serial.print("Attempting MQTT connection..."); // Create a random client ID String clientId = "ESP32Client-"; clientId += String(random(0xffff), HEX); // Attempt to connect if (client.connect(clientId.c_str())) { Serial.println("MQTT connected"); client.publish("OLED", "Connected"); client.subscribe("OLED/setText"); } else { Serial.print("MQTT failed, rc="); Serial.print(client.state()); Serial.println(" try again in 5 seconds"); // Wait 5 seconds before retrying delay(5000); } } } void callback(char* topic, byte* payload, unsigned int length) { Serial.print("Message arrived ["); Serial.print(topic); String recBuf=""; Serial.print("] "); for (int i = 0; i < length; i++) { recBuf += (char)payload[i]; } Serial.println(recBuf); StaticJsonDocument<1024> jsonDoc; deserializeJson(jsonDoc,recBuf); const char* theText=jsonDoc["text"]; int theSize=jsonDoc["size"]; display.setCursor(40, 0); display.setTextSize(9); display.print("#"); display.display(); delay(500); display.setCursor(0, 0); display.setTextSize(theSize); display.clearDisplay(); display.print(theText); display.display(); } void setup() { Serial.begin(115200); if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address 0x3D for 128x64 Serial.println(F("SSD1306 allocation failed")); for(;;); } delay(2000); display.clearDisplay(); display.display(); display.setTextSize(1); display.setTextColor(WHITE); display.setCursor(0, 0); // Display static text display.println("Line 1 -"); display.println("Line 2 --"); display.println("Line 3 ---"); display.display(); setup_wifi(); client.setServer(mqtt_server, 1883); client.setCallback(callback); } void loop() { if (!client.connected()) { reconnect(); } client.loop(); }