#include <ArduinoJson.h>
#include <ArduinoJson.hpp>

//de library van de tempratuur en vochtisheid sensor er bij pakken.
//moet je instaleren via linker tabje moet boeken en dan dht11 op te zoeke n in het zoek veld en daarna de dht11 extensie te installeren
#include <DHT11.h>
#include <WiFi.h>
#include <WiFiMulti.h>
#include <HTTPClient.h>


// LDR = 12, geeft gaan dat het variable LDR terugwijst naar 12.
#define LDR 17
#define Rood 6
#define Geel 4
#define Groen 5
//tegen DHT11 library zeggen dat we het variabel TLV(Temparatuur LuchtVochtigheid) willen geven en dat het de informatie van pin 18 kan halen.
DHT11 TLV(18);
WiFiMulti wifiMulti;
HTTPClient http;


void setup() {


  //hoeveel bits er per seconden worden gestuurd naar de pc, moet je ook instellen in arduino IDE anders krijg je gibberish terug in je serial monitor.
  Serial.begin(9600);
  pinMode(Rood, OUTPUT);
  pinMode(Geel, OUTPUT);
  pinMode(Groen, OUTPUT);
  digitalWrite(Rood, HIGH);

  //print het hardware ID van de esp32S3
  Serial.print("mac adress:");
  Serial.println(WiFi.macAddress());
  //verbinden met wifi
  WiFi.mode(WIFI_STA);
  wifiMulti.addAP("ObsidianAmstelveen", "drijversstraatmaastricht");
  wifiMulti.addAP("iotroam", "BcgrFpX3kl");
  //een loop zodat het script wacht tot de esp32s3 verbind met het internet
  while (wifiMulti.run() != WL_CONNECTED) {
  }
  //print het ip adress van de esp32s3 naar de console
  Serial.println(WiFi.localIP());

  //gebruikt deze website om posts requests naar toe te sturen
  http.begin("http://hva-onto.nl/api/ti/map/measurements/add?api-key=efffc47610ea6282a3416f71b51b3a");
  //lampje aan om aan te geven dat esp32S3 is verbonden met internet
  digitalWrite(Geel, HIGH);
}

void loop() {
  digitalWrite(Groen, LOW);

  //int geeft aan dat het een geheeld nummer moet zijn, als je float gebruikt kan het ook nog decimalen hebben
  // eerste 2 zijn van DHT om data van af te lezen en op te slaan in het variabel
  //laatste is om de lichtsensor analoog af te lezen en op te slaan in een variabel
  float Luchtvochtigheid = TLV.readHumidity();
  float Temparatuur = TLV.readTemperature();
  float Lichtsterkte = analogRead(LDR);
  //hier worden alle variabelen in de serial monitor uitgespuugt, en websites kunnen ook de Serial.print lezen.
 String JsArray = String("[") + Temparatuur + "," + Luchtvochtigheid + "," + Lichtsterkte +"]\n";

  Serial.print(JsArray);

  //voeg een header toe aan de post request
  http.addHeader("Content-Type", "application/x-www-form-urlencoded");
  //de data stoppen in een variabel voor de post request
  String httpRequestData = "type=temperature&value=" + String(Temparatuur);
  //stuur de post request naar de server toe
  int httpResponseCode = http.POST(httpRequestData);
  //wacht x aanal miliseconden
  digitalWrite(Groen, HIGH);
  delay(400);
}