/**
ESP32 + DHT22 Example for Wokwi
https://wokwi.com/arduino/projects/322410731508073042
*/
#include <WiFi.h>
#include <WiFiMulti.h>
#define LED 2
#include <SimpleDHT.h>
WiFiMulti wifiMulti;
WiFiClient wifiClient;
#include "DHTesp.h"
const int pinBuz = 12;
const int dash = 500;
const int dot = 200;
void connectWiFi() {
Serial.print("MAC: ");
Serial.println(WiFi.macAddress());
// while (wifiMulti.run() != WL_CONNECTED) {
// delay(250);
// Serial.print(".");
// digitalWrite(pinLED, !digitalRead(pinLED));
// }
// digitalWrite(pinLED, HIGH);
Serial.println();
Serial.println();
Serial.print("Connected to ");
Serial.println(WiFi.SSID());
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
}
const int DHT_PIN = 15;
// Button
DHTesp dhtSensor;
volatile boolean THReady = false;
void read_DHT11_1() {
TempAndHumidity data = dhtSensor.getTempAndHumidity();
THReady = true;
}
const char* TS_server = "api.thingspeak.com";
const char* TS_write_key = "ISEZNANLZDIY8ZWN";
const int p_button = 23;
volatile int n_presses = 0;
//button interrupt
int led_state=1;
void IRAM_ATTR ISR_button() {
n_presses++;
// pressed = true;
led_state = !led_state;
digitalWrite(LED, led_state);
}
//timer1
const int p_LED1 = 2;
long t_blink_1 = 0; //time last blinked
long T_blink_1 = 250; //period of blink
//***DHT11 Section
#include <SimpleDHT.h>
SimpleDHT11 dht11_1;
//read DHT11 every 2 sec
const int p_DHT11_1 = 4;
long t_dht11_1 = 0;
long T_dht11_1 = 2*1000;
//update thingspeak every 20 sec
long t_TS_1 = 0;
long T_TS_1 = 20*1000;
//timer 2
#include <Ticker.h>
//blink LED every 250ms
const int p_LED2 = 2;
long T_blink_2 = 250; //period of blink
Ticker tk_TH;
//***DHT11 Section
#include <SimpleDHT.h>
SimpleDHT11 dht11_2;
//read DHT11 every 2 sec
const int p_DHT11_2 = 4;
long T_dht11_2 = 2*1000;
Ticker tk_dht11_2;
//update thingspeak every 17 sec
long t_TS_2 = 0;
long T_TS_2 = 17*1000;
void setup() {
Serial.begin(115200);
//Button
pinMode(pinBuz, OUTPUT);
dhtSensor.setup(DHT_PIN, DHTesp::DHT22);
pinMode(p_button, INPUT_PULLUP);
attachInterrupt(p_button, ISR_button, FALLING);
//timer1
delay(10);
Serial.println("Busy Wait Demo");
pinMode(LED, OUTPUT);
//timer 2
pinMode(p_LED2, OUTPUT);
//ticker read every 2 seconds
tk_TH.attach_ms(T_dht11_1, read_DHT11_1);
// tk_dht11_2.attach_ms(T_dht11_2, read_DHT11_2);
WiFi.mode(WIFI_MODE_STA);
wifiMulti.addAP("APU-MYDEVICES");
wifiMulti.addAP("Wokwi-GUEST");
wifiMulti.addAP("Waseem", "waseem");
Serial.println("Connecting...");
connectWiFi();
}
long t_now_1;
long t_now_2;
void loop() {
//button
delay(1000);
char message[256];
int i_msg = Serial.readBytesUntil('\n', message, 255);
// wait for a second
for (int i =0; i < i_msg; i++){
char ch = message[i];
if(ch == '-'){
digitalWrite(LED_BUILTIN, HIGH);// turn the LED on (HIGH is the voltage level)
digitalWrite(pinBuz, HIGH);
// Serial.println("ON");
delay(dash); // wait for a second
digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW
digitalWrite(pinBuz, LOW);
// Serial.println("OFF");
//char ch = message[i];
Serial.print(ch);
delay(dash);
}
if(ch == '.')
{
digitalWrite(LED_BUILTIN, HIGH);// turn the LED on (HIGH is the voltage level)
digitalWrite(pinBuz, HIGH);
//Serial.println("ON");
delay(dot); // wait for a second
digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW
digitalWrite(pinBuz, LOW);
// Serial.println("OFF");
// char ch = message[i];
Serial.print(ch);
delay(dot);
}
}
if (THReady) {
TempAndHumidity data = dhtSensor.getTempAndHumidity();
Serial.println("Temp: " + String(data.temperature, 2) + "°C");
Serial.println("Humidity: " + String(data.humidity, 1) + "%");
Serial.println("---");
delay(1000);
THReady = false;
//timer1
t_now_1 = millis();
// if (t_now_1 - t_blink_1 >= T_blink_1) {
// digitalWrite(p_LED1, !digitalRead(p_LED1));
// Serial.println("BLINK");
// t_blink_1 = t_now_1;
// }
//update to thingspeak here
if (t_now_1 - t_dht11_1 >= T_dht11_1) {
read_DHT11_1();
// int buttonLevel=digitalRead(pinButton);
delay(1000);
// put your main code here, to run repeatedly:
// long t_now = millis();
// if (t_now - t_last_TS >= T_TS_update) {
// t_last_TS = t_now;
// buttonLevel = digitalRead(pinButton);
// Serial.print("Button: ");
// Serial.println(buttonLevel);
if (wifiClient.connect(TS_server, 80)) {
String getStr = String("/update?api_key=") +
TS_write_key +
"&field1=" + String(data.temperature, 2) + "°C" +
"&field2=" + String(data.humidity, 1) + "%";
// Serial.println("Temp: " + String(data.temperature, 2) + "°C");
// Serial.println("Humidity: " + String(data.humidity, 1) + "%");
String htmlStr = String("GET ") + getStr + " HTTP/1.1\n" +
"Host: " + TS_server + "\n" +
"Connection: close\n\n";
// String postStr = String(TS_write_key) +
// "&field1=" + buttonLevel + "&field2="
// + tempC
// + "&field3="
// + humPct
// +
// "\r\n\r\n";
// String htmlStr = String("POST /update HTTP/1.1\n") +
// "Host: " + TS_server + "\n" +
// "Connection: close\n" +
// "X-THINGSPEAKAPIKEY: " + TS_write_key + "\n" +
// "Content-Type: application/x-www-form-urlencoded\n" +
// "Content-Length: " + postStr.length() + "\n\n" +
// postStr;
wifiClient.print(htmlStr);
}
//delay(T_TS_update);
// }
t_dht11_1 = t_now_1;
}
}
//timer1
byte temperature_1 = 0;
byte humidity_1 = 0;
}
//timer2
// void update_blink() {
// digitalWrite(p_LED2, !digitalRead(p_LED2));
// Serial.println("BLINK");
// }
byte temperature_2 = 0;
byte humidity_2 = 0;
// void read_DHT11_2() {
// int err;
// err = dht11_2.read(p_DHT11_2, &temperature_2, &humidity_2, NULL);
// if (err) {
// Serial.print("Read DHT11_2 failed, err=");
// Serial.println(err);
// } else {
// Serial.print("Temp = ");
// Serial.print(temperature_2);
// Serial.print(", Humidity_2 = ");
// Serial.print(humidity_2);
// Serial.println("%");
// }
// Serial.println("Read DHT11_2");
// }
// void update_TS_2() {
// Serial.println("Update ThingSpeak");
// }
//button interrupt