#include <WiFi.h>
#include <HTTPClient.h>
#include <Arduino_JSON.h>
#include "DHTesp.h"
const int DHT_PIN = 15;
DHTesp dhtSensor;
const char* ssid = "Wokwi-GUEST";
const char* password = "";
String access_token = "123456";
const String url = "http://smart-aquaponic.herokuapp.com/api/";
unsigned long lastTime = 0;
// Timer set to 10 minutes (600000)
//unsigned long timerDelay = 600000;
// Set timer to 5 seconds (5000)
unsigned long timerDelay = 3000;
void setup() {
Serial.begin(115200);
WiFi.begin(ssid, password, 6);
Serial.print("Connecting to WiFi");
while (WiFi.status() != WL_CONNECTED) {
delay(100);
Serial.print(".");
}
Serial.print("OK! IP=");
Serial.println(WiFi.localIP());
Serial.print("Fetching " + url + "... ");
}
void loop() {
if ((millis() - lastTime) > timerDelay) {
//Check WiFi connection status
if(WiFi.status()== WL_CONNECTED){
monitoring();
controlling();
}else {
Serial.println("WiFi Disconnected");
}
lastTime = millis();
}
}
void controlling(){
HTTPClient http;
http.begin(url+"control-device/token="+access_token);
int httpResponseCode = http.GET();
if (httpResponseCode > 0) {
Serial.print("HTTP ");
Serial.println(httpResponseCode);
String payload = http.getString();
JSONVar controlObject = JSON.parse(payload);
JSONVar status = "1";
for (int i = 0; i < controlObject["data"]["data_component"].length(); i++) {
JSONVar controlling_name = controlObject["data"]["data_component"][i]["controlling_name"];
int controlling_pin = (int) controlObject["data"]["data_component"][i]["controlling_pin"];
JSONVar controlling_value = controlObject["data"]["data_component"][i]["controlling_value"];
Serial.println();
if(controlling_value == status){
pinMode(controlling_pin, OUTPUT);
Serial.println(controlling_name);
Serial.println(controlling_pin);
Serial.println(controlling_value);
Serial.println("Aktif");
digitalWrite(controlling_pin, HIGH);
}else {
pinMode(controlling_pin, OUTPUT);
Serial.println(controlling_name);
Serial.println(controlling_pin);
Serial.println(controlling_value);
Serial.println("Non Aktif");
digitalWrite(controlling_pin, LOW);
}
}
}
else {
Serial.print("Error code: ");
Serial.println(httpResponseCode);
Serial.println(":-(");
}
http.end();
}
void monitoring(){
HTTPClient http;
http.begin(url+"monitoring-device/token="+access_token);
int httpResponseCode = http.GET();
if (httpResponseCode > 0) {
Serial.print("HTTP ");
Serial.println(httpResponseCode);
String payload = http.getString();
JSONVar dht22 = "DHT22";
JSONVar ldr = "LDR";
JSONVar monitoringObject = JSON.parse(payload);
for (int i = 0; i < monitoringObject["data"]["data_component"].length(); i++) {
int monitoring_device_id = (int) monitoringObject["data"]["data_component"][i]["monitoring_device_id"];
JSONVar monitoring_name = monitoringObject["data"]["data_component"][i]["monitoring_name"];
int monitoring_pin = (int) monitoringObject["data"]["data_component"][i]["monitoring_pin"];
JSONVar monitoring_value = monitoringObject["data"]["data_component"][i]["monitoring_value"];
JSONVar AllSensor;
if(monitoring_name == dht22){
dhtSensor.setup(monitoring_pin, DHTesp::DHT22);
TempAndHumidity data = dhtSensor.getTempAndHumidity();
Serial.println("Temp: " + String(data.temperature, 2) + "°C");
Serial.println("Humidity: " + String(data.humidity, 1) + "%");
Serial.println("---");
AllSensor["temperature"] = String(data.temperature, 2);
AllSensor["humidity"] = String(data.humidity, 1);
}
if(monitoring_name == ldr){
int analogValue = analogRead(monitoring_pin);
Serial.println("LDR: " + String(analogValue) + "%");
Serial.println("---");
AllSensor["ldr"] = String(analogValue);
}
Serial.println();
Serial.println(monitoring_name);
Serial.println(monitoring_pin);
Serial.println(monitoring_value);
JSONVar mySensor;
String monitoring_all = JSON.stringify(AllSensor);
mySensor["monitoring_value"] = AllSensor;
String monitoring_sensor = JSON.stringify(mySensor);
Serial.println(monitoring_sensor);
if ((millis() - lastTime) > timerDelay) {
HTTPClient https;
https.begin(url+"monitoring-device/update/"+monitoring_device_id);
https.addHeader("Content-Type", "application/json");
int httpResponseCodes = https.POST(monitoring_sensor);
https.end();
}
lastTime = millis();
}
}
else {
Serial.print("Error code: ");
Serial.println(httpResponseCode);
Serial.println(":-(");
}
http.end();
}
void fuzzy_logic(){
}