#include <DHT.h>
#include <LiquidCrystal_I2C.h>
#include <WiFi.h>
#include "ThingSpeak.h"
#define DHT_pin 5
#define Cervena_led 17
#define Modra_led 16
#define BarGrafMin 10 //minimálna teplota
#define BarGrafMax 30 //maximálna teplota
#define stlpce 16
#define riadky 2
DHT Teplomer = DHT(DHT_pin,DHT22);
LiquidCrystal_I2C lcd = LiquidCrystal_I2C(0x27,stlpce,riadky);
bool aktualizacia_lcd = true;
bool aktualizacia_Thing_Speak = false;
bool posielanie = false;
float teplota;
unsigned long cas;
unsigned long casovanie_thing_speak;
const int interval = 1000;
const char* WIFI_NAME = "Wokwi-GUEST";
const char* WIFI_PASSWORD = "";
const int myChannelNumber = 2889651;
const char* myApiKey = "THAO8MO5QEW1N92J"; //sem vlož vlastny kanal – write API key
const char* server = "api.thingspeak.com";
WiFiClient client;
void setup()
{
lcd.init();
lcd.backlight();
Serial.begin(115200);
WiFi.begin(WIFI_NAME, WIFI_PASSWORD, 6);
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);
pinMode(Cervena_led, OUTPUT);
pinMode(Modra_led, OUTPUT);
digitalWrite(Cervena_led, LOW);
digitalWrite(Modra_led, LOW);
}
void loop()
{
if(aktualizacia_lcd)
{
//nacitanie zo senzora
teplota = Teplomer.readTemperature();
//vypisanie na lcd
lcd.clear();
lcd.print("T = ");
lcd.print(teplota,1);
lcd.print(" C");
if(posielanie)
{
lcd.setCursor(14,0);
lcd.print("A");
}
lcd.setCursor(0,1);
float nieco = ((teplota - BarGrafMin)/((BarGrafMax - BarGrafMin)/stlpce));
for(byte i = 0; i < stlpce; i++)
if(i < nieco)
lcd.print("]");
else
lcd.print(" ");
aktualizacia_lcd = false;
}
if(millis() > (cas + interval))
{
aktualizacia_lcd = true;
cas += interval;
}
if(aktualizacia_Thing_Speak)
{
ThingSpeak.setField(1,teplota);
ThingSpeak.setField(2,digitalRead(Cervena_led));
int x = ThingSpeak.writeFields(myChannelNumber,myApiKey);
if(x == 200)
{
Serial.println("Odoslanie dat uspesne");
}
else
{
Serial.println("Chyba pri odosielani" + String(x));
}
Serial.println("---");
aktualizacia_Thing_Speak = false;
}
if(millis() > (casovanie_thing_speak + 20000))
{
aktualizacia_Thing_Speak = true;
casovanie_thing_speak += 20000;
posielanie = true;
}
if((millis() > (casovanie_thing_speak + 5000)) && posielanie)
posielanie = false;
if(teplota < BarGrafMin)
digitalWrite(Cervena_led, HIGH);
if(teplota > BarGrafMax)
digitalWrite(Modra_led, HIGH);
if((teplota > BarGrafMin) && (teplota < BarGrafMax))
{
digitalWrite(Cervena_led, LOW);
digitalWrite(Modra_led, LOW);
}
}