How to refresh Adafruit 1306 OLED properly when displaying DHT11 temp data?

Temperature data is not updating on my OLED. The temperature number stays the same no matter what.

I am using an NodeMCU ESP8266 with a DHT11 temp/humid sensor, an Adafruit ssd1306 oled, and 2 buttons.

My code displays the temperature on a web server which works and updates just fine on page refresh.
Right now, if you push one button, the string “Test!” will appear on the oled. If you push the other button, the temperature will display.

But the temperature never updates if I press the button again or press the “Test!” button and the temperature button again.
So it’s not refreshing with the current temperature data.
I’m not sure if it is just an issue where my oled is not clearing properly or if my code does not allow the buttonpress() function to update with new temp data. Or maybe it’s both?

Any suggestions on what I could do to get the oled to refresh with current temperature data like the web server does?
(note: there may be some junk about LEDs in there which I’m now not using. Just ignore that.)

// Including the ESP8266 WiFi library
#include <ESP8266WiFi.h>
#include <DHT.h> // temp and humid sensor

// We need to include Wire.h for I2C communication
#include <Wire.h>

#include <SPI.h>

#include <Adafruit_SSD1306.h>

#define OLED_RESET LED_BUILTIN
Adafruit_SSD1306 display(OLED_RESET);


// Uncomment one of the lines below for whatever DHT sensor type you're using!
#define DHTTYPE DHT11   // DHT 11
//#define DHTTYPE DHT21   // DHT 21 (AM2301)
//#define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321



int pushButton1 = 16;
int pushButton2 = 10;


int buttonState1 = 0;
int buttonState2 = 0;


// Replace with your network details
const char* ssid = "MyUsername";
const char* password = "MyPassword";

// Web Server on port 80
WiFiServer server(80);

// DHT Sensor
const int DHTPin = 2;
// Initialize DHT sensor.
DHT dht(DHTPin, DHTTYPE);

// Temporary variables
static char celsiusTemp[7];
static char fahrenheitTemp[7];
static char humidityTemp[7];

void setup() {

  pinMode(pushButton1, INPUT);
  pinMode(pushButton2, INPUT);
  // Initializing serial port for debugging purposes
  Serial.begin(115200);
  delay(10);



  // by default, we'll generate the high voltage from the 3.3v line internally! (neat!)
  display.begin(SSD1306_SWITCHCAPVCC, 0x3D);  // initialize with the I2C addr 0x3D (for the 128x64)
  // init done
  
  // Show image buffer on the display hardware.
  // Since the buffer is intialized with an Adafruit splashscreen
  // internally, this will display the splashscreen.
  display.display();
  delay(2000);

  // Clear the buffer.
  display.clearDisplay();


  dht.begin();
  
  // Connecting to WiFi network
  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");
  
  // Starting the web server
  server.begin();
  Serial.println("Web server running. Waiting for the ESP IP...");
  delay(10000);
  
  // Printing the ESP IP address
  Serial.println(WiFi.localIP());

}

// runs over and over again
void loop() {

    buttonpress();
    WiFiClient client = server.available();
    if (client) {
      Serial.println("New client");
      // bolean to locate when the http request ends
      boolean blank_line = true;
      while (client.connected()) {
        if (client.available()) {
          char c = client.read();
          
          if (c == '\n' && blank_line) {
              // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
              float h = dht.readHumidity();
              // Read temperature as Celsius (the default)
              float t = dht.readTemperature();
              // Read temperature as Fahrenheit (isFahrenheit = true)
              float f = dht.readTemperature(true);
              // Check if any reads failed and exit early (to try again).
              if (isnan(h) || isnan(t) || isnan(f)) {
                Serial.println("Failed to read from DHT sensor!");
                strcpy(celsiusTemp,"Failed");
                strcpy(fahrenheitTemp, "Failed");
                strcpy(humidityTemp, "Failed");         
              }
              else{
                // Computes temperature values in Celsius + Fahrenheit and Humidity
                float hic = dht.computeHeatIndex(t, h, false);       
                dtostrf(hic, 6, 2, celsiusTemp);             
                float hif = dht.computeHeatIndex(f, h);
                dtostrf(hif, 6, 2, fahrenheitTemp);         
                dtostrf(h, 6, 2, humidityTemp);
                // You can delete the following Serial.print's, it's just for debugging purposes
                Serial.print("Humidity: ");
                Serial.print(h);
                Serial.print(" %\t Temperature: ");
                Serial.print(t);
                Serial.print(" *C ");
                Serial.print(f);
                Serial.print(" *F\t Heat index: ");
                Serial.print(hic);
                Serial.print(" *C ");
                Serial.print(hif);
                Serial.print(" *F");
                Serial.print("Humidity: ");
                Serial.print(h);
                Serial.print(" %\t Temperature: ");
                Serial.print(t);
                Serial.print(" *C ");
                Serial.print(f);
                Serial.print(" *F\t Heat index: ");
                Serial.print(hic);
                Serial.print(" *C ");
                Serial.print(hif);
                Serial.println(" *F");
              }
              client.println("HTTP/1.1 200 OK");
              client.println("Content-Type: text/html");
              client.println("Connection: close");
              client.println();
              // your actual web page that displays temperature and humidity
              client.println("<!DOCTYPE HTML>");
              client.println("<html>");
              client.println("<head></head><body><h1>ESP8266 - Temperature and Humidity</h1><h3>Temperature in Celsius: ");
              client.println(celsiusTemp);
              client.println("*C</h3><h3>Temperature in Fahrenheit: ");
              client.println(fahrenheitTemp);
              client.println("*F</h3><h3>Humidity: ");
              client.println(humidityTemp);
              client.println("%</h3><h3>");
              client.println("</body></html>");     
              break;
          }
          if (c == '\n') {
            // when starts reading a new line
            blank_line = true;
          }
          else if (c != '\r') {
            // when finds a character on the current line
            blank_line = false;
          }
        }
      }  
      // closing the client connection
      delay(1);
      client.stop();
      Serial.println("Client disconnected.");
    }

  
  
}   


void buttonpress() {

  // read the state of the pushbutton value:
  buttonState1 = digitalRead(pushButton1);
  buttonState2 = digitalRead(pushButton2);

  // check if the pushbutton is pressed.
  // if it is, the buttonState is HIGH:
  if (buttonState1 == LOW) {     
    // turn LED on:    
    Serial.println("Button 1 Pushed");
 
  // text display tests
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(0,0);
  display.println("Test!");

  display.display();
  delay(400);
  display.clearDisplay();

  }
  if (buttonState2 == LOW) {     
    // turn LED on:    
    Serial.println("Button 2 Pushed");

  // text display tests
  display.setTextSize(2);
  display.setTextColor(WHITE);
  display.setCursor(0,0);
  float f = dht.readTemperature(true);
  display.println(f);
  display.display();
  delay(400);
  display.clearDisplay();

  }
  
}
void setup() {

  pinMode(pushButton1, INPUT);
  pinMode(pushButton2, INPUT);
 ...
}

How are your pushbuttons wired? Please provide a schematic and/or a wiring diagram and/or a clear photograph of the wiring.

Good Luck!

lol Hope this helps.

So I've been playing with this a bit today and that code was just wrong for what I wanted it to do.

The function for getting the temperature and other data is tied to the client being connected to the web server and viewing the page it generates. So when I'm running the buttonpress function, it's not gathering the data properly.