/**
ESP32 + DHT22 Example for Wokwi
https://wokwi.com/arduino/projects/322410731508073042
*/
#include "DHTesp.h"
#include "WiFi.h"
#include "ThingSpeak.h"
const int DHT_PIN = 15;
const int myChannelID = 2480948;
const char* myWriteAPIKey = "FMBJMG58EQEDADUJ";
unsigned long lastTransmissionTime = 0;
boolean transmissionFlag = 0;
DHTesp dht;
WiFiClient client;
void setup() {
Serial.begin(115200);
WiFi.disconnect(); //Disconnect from previously connected wifi
Serial.println("\nWifi disconnected");
delay(200);
WiFi.mode(WIFI_STA); //STAtion mode: the ESP8266 connects to an access point
ThingSpeak.begin(client);
dht.setup(DHT_PIN, DHTesp::DHT22);
}
void loop() {
// Check if wifi is connected
connectWifi();
getData();
delay(2000); // Wait for a new reading from the sensor (DHT22 has ~0.5Hz sample rate)
}
void connectWifi() {
if (WiFi.status() != WL_CONNECTED) {
Serial.println("Attempting to connect to WiFi");
WiFi.begin("Wokwi-GUEST", "");
while (WiFi.status() != WL_CONNECTED) {
Serial.println(".");
delay(1000);
}
Serial.println("Wifi Connected");
return;
}
}
void getData() {
// TempAndHumidity data = dht.getTempAndHumidity();
// Serial.println("Temp: " + String(data.temperature, 2) + "°C");
// Serial.println("Humidity: " + String(data.humidity, 1) + "%");
// Serial.println("-------");
// float temp = dht.getTemperature();
// float humidity = dht.getHumidity();
float randomDecimal = random(0,100)/100.0;
float temp = random(0,100) + randomDecimal;
float humidity = random(0,100) + randomDecimal;
Serial.println("----------------");
Serial.print("Temp: " + String(temp) + "°C , ");
Serial.println("Humidity: " + String(humidity) + "%");
unsigned long currentTime = millis();
int time_elapsed = currentTime - lastTransmissionTime;
Serial.println("Time left to transmit: " + String(time_elapsed));
sendCommand();
if ((time_elapsed >= 15500) && transmissionFlag) {
sendDataOnline(humidity, temp); // Send data to thingspeak
// lastTransmissionTime = currentTime;
}
}
void sendCommand() {
if (Serial.available() > 0) { // Check if any command is received from Serial Monitor
char command = Serial.read(); // Read the command character
if (command == 's') {
transmissionFlag = 1;
Serial.println("Thingspeak send command received, Flag: " + String(transmissionFlag));
} else if (command == 't') {
transmissionFlag = 0;
Serial.println("Thingspeak stop command received, Flag: " + String(transmissionFlag));
}
}
}
void sendDataOnline(float humidity, float temp) {
ThingSpeak.setField(1, humidity); // Set value of Field 1 of ThingSpeak Channel
ThingSpeak.setField(2, temp); // Set value of Field 2 of ThingSpeak Channel
// Write data to Thingspeak channel and get HTTP code
int httpCode = ThingSpeak.writeFields(myChannelID, myWriteAPIKey);
if ((httpCode == 200)) {
Serial.println("Channel write successful.");
} else {
Serial.println("Problem writing to channel. HTTP error code " + String(httpCode));
}
lastTransmissionTime = millis();
}