#include <WiFi.h>
#include <PubSubClient.h>
#include <Adafruit_Sensor.h>
#include <DHT.h>
#include <DHT_U.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define DHTPIN 23 // Pin where the DHT22 is connected
#define DHTTYPE DHT22 // DHT 22 (AM2302)
#define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin)
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
DHT dht(DHTPIN, DHTTYPE);
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET,0x3C);
const char* ssid = "Wokwi-GUEST"; // WiFi SSID
const char* password = ""; // WiFi Password
const char* mqtt_server = "broker.hivemq.com"; // MQTT Broker address
const int mqtt_port = 1883; // MQTT Port
WiFiClient espClient;
PubSubClient client(espClient);
void setup_wifi() {
delay(10);
Serial.println("Connecting to WiFi..");
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}
// void reconnect() {
// while (!client.connected()) {
// Serial.print("Attempting MQTT connection...");
// if (client.connect("ESP32Client")) {
// Serial.println("connected");
// // Subscribe or publish here
// } else {
// Serial.print("failed, rc=");
// Serial.print(client.state());
// Serial.println(" try again in 5 seconds");
// delay(5000);
// }
// }
// }
void setup() {
Serial.begin(115200);
dht.begin();
display.begin(SSD1306_SWITCHCAPVCC, OLED_RESET);
display.clearDisplay();
setup_wifi();
client.setServer(mqtt_server, mqtt_port);
display.display();
}
void loop() {
if (!client.connected()) {
// reconnect();
}
client.loop();
float h = dht.readHumidity();
float t = dht.readTemperature();
if (isnan(h) || isnan(t)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
display.clearDisplay();
display.setTextSize(100);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println("Temp: " + String(t) + " C");
display.println("Hum: " + String(h) + " %");
Serial.println("Temp: " + String(t) + " C");
Serial.println("Hum: " + String(h) + " %");
display.display();
String temperature = "temperature " + String(t);
String humidity = "humidity " + String(h);
client.publish("outTopic/temp", temperature.c_str());
client.publish("outTopic/hum", humidity.c_str());
delay(2000); // Wait for 2 seconds before next reading
}
Loading
ssd1306
ssd1306