#include <WiFi.h>
#include "DHTesp.h"
#include "ThingSpeak.h"
#include <Adafruit_SSD1306.h>
const int DHT_PIN = 15;
const int LED_PIN_R = 18; // Red LED
const int LED_PIN_G = 2; // Green LED
const int LED_PIN_B = 4; // Blue LED
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
const char* WIFI_NAME = "Wokwi-GUEST";
const char* WIFI_PASSWORD = "";
const int myChannelNumber = 2357234;
const char* myApiKey = "21GAB9UR8D18K3EG";
const char* server = "api.thingspeak.com";
DHTesp dhtSensor;
WiFiClient client;
Adafruit_SSD1306 oled(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
void setup() {
Serial.begin(115200);
// Setup RGB LED pins
pinMode(LED_PIN_R, OUTPUT);
pinMode(LED_PIN_G, OUTPUT);
pinMode(LED_PIN_B, OUTPUT);
dhtSensor.setup(DHT_PIN, DHTesp::DHT22);
WiFi.begin(WIFI_NAME, WIFI_PASSWORD);
// initialize OLED display with I2C address 0x3C
if (!oled.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("failed to start SSD1306 OLED"));
while (1);
}
while (WiFi.status() != WL_CONNECTED){
delay(1000);
Serial.println("Wifi not connected");
}
Serial.println("Wifi connected !");
Serial.println("Local IP: " + String(WiFi.localIP()));
WiFi.mode(WIFI_STA);
ThingSpeak.begin(client);
}
void loop() {
TempAndHumidity data = dhtSensor.getTempAndHumidity();
ThingSpeak.setField(1, data.temperature);
ThingSpeak.setField(2, data.humidity);
int x = ThingSpeak.writeFields(myChannelNumber, myApiKey);
Serial.print("ThingSpeak write result: ");
Serial.println(x);
Serial.println("Temp: " + String(data.temperature, 2) + "°C");
Serial.println("Humidity: " + String(data.humidity, 1) + "%");
if (x == 200) {
Serial.println("Data pushed successfully");
digitalWrite(LED_PIN_R, LOW);
digitalWrite(LED_PIN_G, HIGH);
digitalWrite(LED_PIN_B, LOW);
oled.clearDisplay();
oled.setTextSize(1);
oled.setTextColor(WHITE);
oled.setCursor(0, 2);
oled.println("Data pushed successfully");
// Attempt to read temperature and humidity again
TempAndHumidity data = dhtSensor.getTempAndHumidity();
// Display temperature and humidity
oled.setCursor(0, 15);
oled.print("Temperature: ");
oled.println(String(data.temperature, 2) + "°C");
oled.setCursor(0, 30);
oled.print("Humidity: ");
oled.println(String(data.humidity, 1) + "%");
oled.display();
} else {
Serial.println("Push error " + String(x));
digitalWrite(LED_PIN_R, HIGH);
digitalWrite(LED_PIN_G, LOW);
digitalWrite(LED_PIN_B, LOW);
oled.clearDisplay();
oled.setTextSize(1);
oled.setTextColor(WHITE);
oled.setCursor(0, 2);
oled.println("Push error");
oled.display();
}
Serial.println("---");
delay(10000);
}