/////// ThingSpeak ///////
#include <WiFi.h>
#include "DHTesp.h"
#include "ThingSpeak.h"
#include <Adafruit_Sensor.h>
const int DHT_PIN = 15;
const char* ssid = "Wokwi-GUEST";
const char* pass = "";
WiFiClient client;
unsigned long myChannelNumber = 2;
const char* myWriteAPIKey = "AELB8LKV6ECFJ7KS";
const char* server = "api.thingspeak.com";
unsigned long lastTime = 0;
unsigned long timerDelay = 30000;
int temperatureC;
int humidity;
DHTesp dhtSensor;
/////// LDR ///////
#define LDR_PIN 2
const float GAMMA = 0.7;
const float RL10 = 50;
/////// Ultrasonic ///////
#define ECHO_PIN 12
#define TRIG_PIN 13
void setup() {
Serial.begin(115200);
/////// Ultrasonic ///////
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
/////// LDR ///////
pinMode(LDR_PIN, INPUT);
/////// ThingSpeak ///////
dhtSensor.setup(DHT_PIN, DHTesp::DHT22);
dhtSensor.getPin();
delay(10);
WiFi.begin(ssid, pass);
while(WiFi.status() != WL_CONNECTED) {
delay(100);
Serial.println(".");
}
Serial.println("WiFi Connected!");
Serial.println(WiFi.localIP());
WiFi.mode(WIFI_STA);
ThingSpeak.begin(client);
}
void loop() {
/////// DHT ///////
dht22();
delay(5000);
/////// LDR ///////
ldr();
delay(5000);
/////// Ultrasonic ///////
ultrasonic();
delay(5000);
}
void ldr(){
int analogValue = analogRead(34);
float voltage = analogValue / 1024. * 5;
float resistance = 2000 * voltage / (1 - voltage / 5);
float lux = pow(RL10 * 1e3 * pow(10, GAMMA) / resistance, (1 / GAMMA));
Serial.println(lux);
ThingSpeak.setField(3, lux);
int x = ThingSpeak.writeFields(myChannelNumber, myWriteAPIKey);
delay(2000);
if (x == 200) {
Serial.println("Channel update successful.");
}
else {
Serial.println("Problem updating channel. HTTP error code " + String(x));
}
}
void dht22(){
temperatureC = dhtSensor.getTemperature();
humidity = dhtSensor.getHumidity();
Serial.print("Temperature (°C): ");
Serial.println(temperatureC);
Serial.print("Humidity (%); ");
Serial.println(humidity);
ThingSpeak.setField(1, temperatureC);
ThingSpeak.setField(2, humidity);
int x = ThingSpeak.writeFields(myChannelNumber, myWriteAPIKey);
delay(2000);
if (x == 200) {
Serial.println("Channel update successful.");
}
else {
Serial.println("Problem updating channel. HTTP error code " + String(x));
}
}
float readDistanceCM() {
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
int duration = pulseIn(ECHO_PIN, HIGH);
return duration * 0.034 / 2;
}
void ultrasonic(){
float distance = readDistanceCM();
bool isNearby = distance < 100;
digitalWrite(LED_BUILTIN, isNearby);
Serial.print("Measured distance: ");
Serial.println(distance);
delay(100);
ThingSpeak.setField(4, distance);
int x = ThingSpeak.writeFields(myChannelNumber, myWriteAPIKey);
delay(2000);
if (x == 200) {
Serial.println("Channel update successful.");
}
else {
Serial.println("Problem updating channel. HTTP error code " + String(x));
}
}