// ESP32 Temperature Monitor with WiFi + LCD + ThingSpeak
// WiFi Simulated like Wokwi method
#include <WiFi.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <HTTPClient.h>
// LCD setup
LiquidCrystal_I2C lcd(0x27, 16, 2);
// DS18B20 setup
#define ONE_WIRE_BUS 4
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
// GPIOs
#define GREEN_LED 14
#define RED_LED 12
#define BUZZER 5
// WiFi & ThingSpeak config
const char* ssid = "Wokwi-GUEST"; // Use "Wokwi-GUEST" for simulation
const char* password = ""; // Empty password for Wokwi
const char* server = "http://api.thingspeak.com/update";
String apiKey = "AIZL2CMKJWPU8O0P"; // Your ThingSpeak Write API Key
void spinner() {
static int8_t counter = 0;
const char* glyphs = "\xa1\xa5\xdb";
lcd.setCursor(15, 1);
lcd.print(glyphs[counter++]);
if (counter == strlen(glyphs)) counter = 0;
}
void setup() {
Serial.begin(115200);
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Connecting to ");
lcd.setCursor(0, 1);
lcd.print("WiFi ");
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(250);
spinner();
}
Serial.println("\nWiFi connected");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("WiFi Connected");
delay(1000);
sensors.begin();
pinMode(GREEN_LED, OUTPUT);
pinMode(RED_LED, OUTPUT);
pinMode(BUZZER, OUTPUT);
}
void loop() {
sensors.requestTemperatures();
float tempC = sensors.getTempCByIndex(0);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.print(tempC, 1);
lcd.print(" C");
lcd.setCursor(0, 1);
if (tempC == -127.00 || tempC == 85.00) {
lcd.print("SENSOR ERROR!");
digitalWrite(RED_LED, HIGH);
digitalWrite(GREEN_LED, LOW);
digitalWrite(BUZZER, HIGH);
} else if (tempC >= 38.0) {
lcd.print("Fever!");
digitalWrite(RED_LED, HIGH);
digitalWrite(GREEN_LED, LOW);
digitalWrite(BUZZER, HIGH);
} else if (tempC < 20.0) {
lcd.print("FEVER!");
digitalWrite(RED_LED, HIGH);
digitalWrite(GREEN_LED, LOW);
digitalWrite(BUZZER, HIGH);
} else {
lcd.print("Normal");
digitalWrite(RED_LED, LOW);
digitalWrite(GREEN_LED, HIGH);
digitalWrite(BUZZER, LOW);
}
// Send to ThingSpeak
if (WiFi.status() == WL_CONNECTED) {
HTTPClient http;
String url = String(server) + "?api_key=" + apiKey + "&field1=" + String(tempC);
http.begin(url);
int httpCode = http.GET();
if (httpCode > 0) {
Serial.println("Sent to ThingSpeak");
} else {
Serial.println("ThingSpeak Send Failed");
}
http.end();
}
delay(20000); // Wait 20 seconds
}
Loading
ds18b20
ds18b20