#include <WiFi.h>
#include <ThingSpeak.h>
#include "DHTesp.h"
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
DHTesp dhtSensor;
TempAndHumidity data;
const int DHT_PIN = 15; // always use GPIO15 for DHT sensor
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
WiFiClient client;
unsigned long myChannelNumber = 2481856;
const char * myWriteAPIKey = "55BC630J2V9JAMI5";
int statusCode;
void setup() {
Serial.begin(115200);
// Initialize OLED display
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;);
}
delay(2000); // Pause for 2 seconds
WiFi.mode(WIFI_STA);
ThingSpeak.begin(client);
dhtSensor.setup(DHT_PIN, DHTesp::DHT22);
}
void loop() {
data = dhtSensor.getTempAndHumidity();
if(WiFi.status() != WL_CONNECTED) {
Serial.print("Attempting to connect");
while(WiFi.status() != WL_CONNECTED) {
WiFi.begin(ssid, pass);
Serial.print(".");
delay(5000);
}
Serial.println("\nConnected.");
}
// Clear display
display.clearDisplay();
// Display humidity and temperature
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0);
display.print("Humidity: ");
display.println(String(data.humidity, 1) + " %");
display.print("Temperature: ");
display.println(String(data.temperature, 2) + " °C");
// Display update
display.display();
// Update ThingSpeak fields
ThingSpeak.setField(1, data.humidity);
ThingSpeak.setField(2, data.temperature);
statusCode = ThingSpeak.writeFields(myChannelNumber, myWriteAPIKey);
if(statusCode == 200) { // Successful writing code
Serial.println("Channel update successful.");
} else {
Serial.println("Problem Writing data. HTTP error code :" + String(statusCode));
}
delay(15000); // Delay between updates in milliseconds
}
Loading
ssd1306
ssd1306