#include <OneWire.h>
#include <DallasTemperature.h>
#include <ESP8266WiFi.h>
#include <LiquidCrystal_I2C.h>
#include "DHT.h"

#define pinDHT D7    // Pin MOSI D7
#define typDHT22 DHT22  

LiquidCrystal_I2C lcd(0x3F, 20,4);

int ldr = A0;
int ldr_value = 0;
int procenta = 0;

#define ONE_WIRE_BUS D2    // Pin SDA D4

DHT mojeDHT(pinDHT, typDHT22);

const char* ssid = "ACER-PC_Network_2";
const char* password = "nemamnemam";
const char* server = "api.thingspeak.com";
const char* api_key = "DUP9PEE9IXK9HAZ9";
 
WiFiClient client;

OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

void setup() 
{
Serial.begin(115200);
delay(10);
WiFi.begin(ssid, password);

 mojeDHT.begin();
 
Serial.println();
Serial.println();
Serial.println("Connecting to Wifi ");

lcd.begin();

lcd.backlight();
 
WiFi.begin(ssid, password);
 
while (WiFi.status() != WL_CONNECTED) 
{
delay(500);
Serial.print(".");
}
Serial.println("WiFi connected");
sensors.begin();

}
 
void loop() 
{
if (client.connect(server,80)) {

int err;

  ldr_value = analogRead(ldr);
  procenta = map(ldr_value, 0, 1023, 0, 100);

 float tep = mojeDHT.readTemperature();
  float vlh = mojeDHT.readHumidity();

 if (isnan(tep) || isnan(vlh)) 

 
Serial.println("Connect to ThingSpeak - OK"); 

sensors.requestTemperatures();

String dataToThingSpeak = "";
dataToThingSpeak+="GET /update?api_key=";
dataToThingSpeak+=api_key;

dataToThingSpeak+="&field1=";
dataToThingSpeak+=String(sensors.getTempCByIndex(1));

dataToThingSpeak+="&field2=";
dataToThingSpeak+=String(sensors.getTempCByIndex(0));

dataToThingSpeak+="&field3=";
dataToThingSpeak+=String(tep);

dataToThingSpeak+="&field4=";
dataToThingSpeak+=String(vlh);


dataToThingSpeak+="&field5=";
dataToThingSpeak+=String(procenta);

lcd.clear();
lcd.setCursor(0,0);
lcd.print("I:");
lcd.setCursor(2,0);           
lcd.print(sensors.getTempCByIndex(0));
lcd.setCursor(6,0);
lcd.print("C");

lcd.setCursor(8,0);
lcd.print("O:");
lcd.setCursor(11,0);
lcd.print(sensors.getTempCByIndex(1));
lcd.setCursor(15,0);
lcd.print("C");

lcd.setCursor(0,1);
lcd.print("I:");
lcd.setCursor(2,1);
lcd.print(tep);
lcd.setCursor(6,1);
lcd.print("C");

lcd.setCursor(8,1);
lcd.print("H:");
lcd.setCursor(11,1);
lcd.print(vlh);
lcd.setCursor(15,1);
lcd.print("%");


dataToThingSpeak+=" HTTP/1.1\r\nHost: a.c.d\r\nConnection: close\r\n\r\n";
dataToThingSpeak+="";
client.print(dataToThingSpeak);

int timeout = millis() + 5000;
while (client.available() == 0) {
    if (timeout - millis() < 0) {
      Serial.println(">>> Client Timeout !");
      client.stop();
      return; 
    }
  }
}
 while(client.available()){
    String line = client.readStringUntil('\r');
    Serial.print(line);
  }
Serial.println();  

 
Serial.println();
delay(1000*60); // each 1 min
}
