#include <Wire.h> //Import the required libraries
#include "DHTesp.h"
#if defined(ESP32)
#include <WiFiMulti.h>
WiFiMulti wifiMulti;
#define DEVICE "ESP32"
#elif defined(ESP8266)
#include <ESP8266WiFiMulti.h>
ESP8266WiFiMulti wifiMulti;
#define DEVICE "ESP8266"
#endif
#include <InfluxDbClient.h>
#include <InfluxDbCloud.h>
#define WIFI_SSID "Wokwi-GUEST" //Network Name
#define WIFI_PASSWORD "" //Network Password
#define INFLUXDB_URL "https://ap-southeast-2-1.aws.cloud2.influxdata.com" //InfluxDB v2 server url, e.g. https://eu-central-1-1.aws.cloud2.influxdata.com (Use: InfluxDB UI -> Load Data -> Client Libraries)
#define INFLUXDB_TOKEN "3rnorcHWGDEMMbIfrQIfd2BKKmkA5eg0ItannFyrQdD-HMWFNFeca4PpxF0ClyIAwybxHZZupv7AGvNT_BKqvQ==" //InfluxDB v2 server or cloud API token (Use: InfluxDB UI -> Data -> API Tokens -> <select token>)
#define INFLUXDB_ORG "[email protected]" //InfluxDB v2 organization id (Use: InfluxDB UI -> User -> About -> Common Ids )
#define INFLUXDB_BUCKET "DHT22-SENSOR" //InfluxDB v2 bucket name (Use: InfluxDB UI -> Data -> Buckets)
#define TZ_INFO "ICT-7" //InfluxDB v2 timezone
InfluxDBClient client(INFLUXDB_URL, INFLUXDB_ORG, INFLUXDB_BUCKET, INFLUXDB_TOKEN, InfluxDbCloud2CACert); //InfluxDB client instance with preconfigured InfluxCloud certificate
Point sensor("DHT22-SENSOR"); //Data point
const int DHT_PIN = 15;
DHTesp dhtSensor;
#define LED_1 5
#define LED_2 18
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
dhtSensor.setup(DHT_PIN, DHTesp::DHT22);
pinMode(LED_1, OUTPUT);
pinMode(LED_2, OUTPUT);
WiFi.mode(WIFI_STA); //Setup wifi connection
wifiMulti.addAP(WIFI_SSID, WIFI_PASSWORD);
Serial.print("Connecting to wifi"); //Connect to WiFi
while (wifiMulti.run() != WL_CONNECTED)
{
Serial.print(".");
delay(100);
}
Serial.println();
sensor.addTag("device", DEVICE); //Add tag(s) - repeat as required
sensor.addTag("SSID", WIFI_SSID);
timeSync(TZ_INFO, "pool.ntp.org", "time.nis.gov"); //Accurate time is necessary for certificate validation and writing in batches
if (client.validateConnection()) //Check server connection
{
Serial.print("Connected to InfluxDB: ");
Serial.println(client.getServerUrl());
}
else
{
Serial.print("InfluxDB connection failed: ");
Serial.println(client.getLastErrorMessage());
}
}
void loop() {
TempAndHumidity data = dhtSensor.getTempAndHumidity();
float t = data.temperature;
float h = data.humidity;
sensor.clearFields(); //Clear fields for reusing the point. Tags will remain untouched
sensor.addField("temperature", t); // Store measured value into point
sensor.addField("humidity", h); // Store measured value into point
if (wifiMulti.run() != WL_CONNECTED) //Check WiFi connection and reconnect if needed
Serial.println("Wifi connection lost");
if (!client.writePoint(sensor)) //Write data point
{
Serial.print("InfluxDB write failed: ");
Serial.println(client.getLastErrorMessage());
}
if (t > 50) {
Serial.println("Temperature more than 50 °C");
char myCount = 10;
while (myCount) {
digitalWrite(LED_1, HIGH);
delay(1000);
digitalWrite(LED_1, LOW);
delay(1000);
myCount = myCount - 1;
}
}
if (h > 50) {
Serial.println("Humidity more than 50 %H");
char myCount = 10;
while (myCount) {
digitalWrite(LED_2, HIGH);
delay(1000);
digitalWrite(LED_2, LOW);
delay(1000);
myCount = myCount - 1;
}
}
Serial.println("Temp: " + String(t, 2) + "°C");
Serial.println("Humidity: " + String(h, 1) + "%");
Serial.println("---");
delay(5000);
}