/**
ESP32 + DHT22 Example for Wokwi
https://wokwi.com/arduino/projects/322410731508073042
*/
//Code created by Lara Jbara
//Added by Lara Jbara: Check https://lastminuteengineers.com/esp32-pinout-reference/ for ESP32 datasheet
#include "DHTesp.h"
#define maxRGBVal 255
const int DHT_PIN = 15;
/* Constants - define pin numbers for LEDs
GPIOs: 36 - 39 - 34 and 35 are only Inputs */
const uint8_t redLedPins = 13;
const uint8_t greenLedPins = 33;
const uint8_t blueLedPins = 12;
//We should use PWM pins so we cannot use pins 34 - 35 - 36 and 39
//Do not forget to add ""attrs": {"common": "cathode"} " in diagram.json file
const uint8_t redRGBPins = 5;
const uint8_t greenRGBPins = 18;
const uint8_t blueRGBPins = 19;
DHTesp dhtSensor;
void setup() {
Serial.begin(115200);
dhtSensor.setup(DHT_PIN, DHTesp::DHT22);
//Initialize all Leds as Outputs
pinMode(redLedPins, OUTPUT);
pinMode(greenLedPins, OUTPUT);
pinMode(blueLedPins, OUTPUT);
//Initialize RGB Led as Output
pinMode(redRGBPins, OUTPUT);
pinMode(greenRGBPins, OUTPUT);
pinMode(blueRGBPins, OUTPUT);
//Turn off all Leds after initialization
digitalWrite(redLedPins, LOW);
digitalWrite(greenLedPins, LOW);
digitalWrite(blueLedPins, LOW);
analogWrite(redRGBPins, 0);
analogWrite(greenRGBPins, 0);
analogWrite(blueRGBPins, 0);
}
void loop() {
TempAndHumidity data = dhtSensor.getTempAndHumidity();
Serial.println("Temp: " + String(data.temperature, 2) + "°C");
Serial.println("Humidity: " + String(data.humidity, 1) + "%");
Serial.println("---");
changeLedColor(data);
changeRGBColor(data);
delay(50);
}
void changeLedColor(TempAndHumidity data)
{
int redValue = 0;
int greenValue = 0;
int blueValue = 0;
if (data.temperature > 5)
{
Serial.println("Red: " + String(data.temperature, 2) + "°C");
digitalWrite(greenLedPins, LOW);
digitalWrite(blueLedPins, LOW);
digitalWrite(redLedPins, HIGH);
}
else if ((data.temperature >= 0) && (data.temperature <= 5))
{
Serial.println("Green: " + String(data.temperature, 2) + "°C");
digitalWrite(redLedPins, LOW);
digitalWrite(blueLedPins, LOW);
digitalWrite(greenLedPins, HIGH);
}
else if(data.temperature < 0)
{
Serial.println("Blue: " + String(data.temperature, 2) + "°C");
digitalWrite(redLedPins, LOW);
digitalWrite(greenLedPins, LOW);
digitalWrite(blueLedPins, HIGH);
}
}
void changeRGBColor(TempAndHumidity data)
{
int redValue = 0;
int greenValue = 0;
int blueValue = 0;
int variableValue = 0;
if((data.temperature <= 30) && (data.temperature >= 5))//Between Red and Green Colors
{
blueValue = 0;
variableValue = (int) round(10.2 * (30 - data.temperature));//10.2=255/((30+20)/2)
redValue = 255 - variableValue;
greenValue = variableValue;
}
else if((data.temperature < 5) && (data.temperature >= -20))//Between Green and Blue Colors
{
redValue = 0;
variableValue = (int) round(10.2 * (5 - data.temperature));
greenValue = 255 - variableValue;
blueValue = variableValue;
}
analogWrite(redRGBPins,redValue);
analogWrite(greenRGBPins,greenValue);
analogWrite(blueRGBPins,blueValue);
}