#include <WiFi.h>
#include "ThingSpeak.h"
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DHT.h>
#define DHTPIN 33 // Pin pre DHT22
#define DHTTYPE DHT22 // Typ senzora DHT22
#define RED_LED 25 // Červená LED
#define BLUE_LED 26 // Modrá LED
const char* WIFI_NAME = "Wokwi-GUEST";
const char* WIFI_PASSWORD = "";
const int myChannelNumber = 2888899; // Sem vlož vlastné číslo kanála
const char* myApiKey = "3JTYX21SGNL1COPX"; // Sem vlož vlastný Write API Key
WiFiClient client;
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x27, 16, 2);
unsigned long previousMillis = 0;
void setup() {
Serial.begin(115200);
WiFi.begin(WIFI_NAME, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Wifi not connected");
}
Serial.println("Wifi connected!");
Serial.println("Local IP: " + String(WiFi.localIP()));
WiFi.mode(WIFI_STA);
ThingSpeak.begin(client);
dht.begin();
lcd.init();
lcd.backlight();
pinMode(RED_LED, OUTPUT);
pinMode(BLUE_LED, OUTPUT);
}
void loop() {
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
if (isnan(temperature) || isnan(humidity)) {
Serial.println("Chyba pri čítaní z DHT senzora");
return;
}
Serial.print("Teplota: "); Serial.print(temperature);
Serial.print("°C, Vlhkosť: "); Serial.print(humidity);
Serial.println("%");
lcd.setCursor(0, 0);
lcd.print("T: ");
lcd.print(temperature);
lcd.print("C H:");
lcd.print(humidity);
lcd.print("%");
lcd.setCursor(0, 1);
int barLength = map(temperature, 0, 40, 0, 16);
for (int i = 0; i < barLength; i++) {
lcd.print("x");
}
// Ovládanie LED
if (temperature < 10) {
digitalWrite(RED_LED, HIGH); // Červená LED svieti
digitalWrite(BLUE_LED, LOW); // Modrá LED nesvieti
} else if (temperature > 30) {
digitalWrite(RED_LED, LOW); // Červená LED nesvieti
digitalWrite(BLUE_LED, HIGH); // Modrá LED svieti
} else {
digitalWrite(RED_LED, LOW); // Ani jedna LED nesvieti
digitalWrite(BLUE_LED, LOW);
}
// Posielanie dát do ThingSpeak
ThingSpeak.setField(1, temperature); // Teplota do grafu 1
int ledStatus = (digitalRead(RED_LED) == HIGH) ? 0 : (digitalRead(BLUE_LED) == HIGH) ? 10 : 5;
ThingSpeak.setField(2, ledStatus); // Stav LED do grafu 2
int x = ThingSpeak.writeFields(myChannelNumber, myApiKey);
if (x == 200) {
Serial.println("Úspešná aktualizácia kanála.");
} else {
Serial.println("Chyba pri odosielaní dát: " + String(x));
}
lcd.setCursor(15, 0);
lcd.print("A");
delay(5000);
lcd.setCursor(15, 0);
lcd.print(" ");
delay(5000);
}