From 89f5541124c89a010f9b9e30684ffd3acc4e3772 Mon Sep 17 00:00:00 2001 From: Joe Tretter Date: Sat, 17 Sep 2022 18:02:23 -0500 Subject: [PATCH] Add OLED Display --- platformio.ini | 4 ++-- src/main.cpp | 50 +++++++++++++++++++++++++++++++++++--------------- 2 files changed, 37 insertions(+), 17 deletions(-) diff --git a/platformio.ini b/platformio.ini index 7f472a9..5cdf289 100644 --- a/platformio.ini +++ b/platformio.ini @@ -14,5 +14,5 @@ board = esp32doit-devkit-v1 framework = arduino lib_deps = ayushsharma82/AsyncElegantOTA@^2.2.7 - #me-no-dev/ESP Async WebServer@^1.2.3 - https://github.com/me-no-dev/ESPAsyncWebServer.git + https://github.com/me-no-dev/ESPAsyncWebServer.git + adafruit/Adafruit SSD1306@^2.5.7 diff --git a/src/main.cpp b/src/main.cpp index 913560b..006e501 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,14 +1,9 @@ +#include #include -#if defined(ESP8266) -#include -#include -#elif defined(ESP32) -#include -#include -#endif - #include +#include #include +#include const char* ssid = "JoNelsDarlings"; const char* password = "Paris2016"; @@ -19,10 +14,36 @@ unsigned long lastMillis = millis(); AsyncWebServer server(80); +// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins) +// I connected SCL to D22 and SDA to D21 +#define SCREEN_WIDTH 128 // OLED display width, in pixels +#define SCREEN_HEIGHT 64 // OLED display height, in pixels + +Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1); + +void writeToOled(String text) { + display.clearDisplay(); + display.setTextColor(WHITE); + display.setCursor(0, 0); + display.setTextSize(2); + display.print(text); + display.display(); +} + void setup(void) { pinMode(LED_BUILTIN, OUTPUT); digitalWrite(LED_BUILTIN, LOW); - Serial.begin(115200); + Serial.begin(9600); + + if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address 0x3D for 128x64 + Serial.println(F("SSD1306 allocation failed")); + for (;;) + ; + } + delay(2000); + + writeToOled("Startup"); + WiFi.mode(WIFI_STA); WiFi.begin(ssid, password); Serial.println(""); @@ -54,22 +75,21 @@ void setup(void) { server.begin(); Serial.println("HTTP server started"); - pinMode(BUBBLE_GPIO, INPUT_PULLDOWN); - digitalWrite(LED_BUILTIN, HIGH); + pinMode(BUBBLE_GPIO, INPUT_PULLUP); } void loop(void) { - // digitalWrite(LED_BUILTIN, digitalRead(BUBBLE_GPIO)); + digitalWrite(LED_BUILTIN, digitalRead(BUBBLE_GPIO)); // This runs real fast, so make sure that only the "first contact" is measured - if ((digitalRead(BUBBLE_GPIO) == HIGH) && isBubbleFirstContact) { - digitalWrite(LED_BUILTIN, LOW); + if ((digitalRead(BUBBLE_GPIO) == LOW) && isBubbleFirstContact) { if (millis() > lastMillis) { // don't measure if we had an overflow... bubbleFreqSec = (millis() - lastMillis) / 1000; + writeToOled("Freq: " + String(bubbleFreqSec)); } lastMillis = millis(); isBubbleFirstContact = false; - } else if ((digitalRead(BUBBLE_GPIO) == LOW)) { + } else if ((digitalRead(BUBBLE_GPIO) == HIGH)) { isBubbleFirstContact = true; }