#include <WiFi.h> //library untuk menghubungkan ke wifi
#include "DHTesp.h" //library untuk mengakses ke sensor dht pada esp
#include "ThingSpeak.h" //library untuk menghubungkan ke Thingspeak
const int DHT_PIN = 15; //pin data sensor DHT terhubung ke pin 15
const int LED_PIN = 13; //pin LED terhubung ke pin 13
const char* WIFI_NAME = "Wokwi-GUEST"; //nama wifi (SSID wifi) [dalam simulasi ini pakai "Wokwi-GUEST"]
const char* WIFI_PASSWORD = ""; //password wifi (pass wifi) [dalam simulasi ini tidak ada {""}]
const int myChannelNumber = 2486028; //kode channel number pada server thingspeak
const char* myWriteApiKey = "SMOQTWJROVFMZ8UU"; //kode write API KEY pada channel number di server thingspeak
const char* myReadApiKey = "BNEZE7ISJDC8YCAR"; //kode write API KEY pada channel number di server thingspeak
const char* server = "api.thingspeak.com"; //server API KEY di server thingspeak
DHTesp dhtSensor; //memanggil fungsi dari library DHTesp dengan nama dhatSensor
WiFiClient client; //memanggil fungsi WifiClient dari library wifi dengan nama client
void setup() { //pengaturan awal
Serial.begin(115200); //Mulai komunikasi serial dengan bautrate 115200
dhtSensor.setup(DHT_PIN, DHTesp::DHT22); //sensor dht di atur dengan membaca DHT_PIN dan tipe DHT22
pinMode(LED_PIN, OUTPUT); //LED_PIN di atur sebagai output
WiFi.begin(WIFI_NAME, WIFI_PASSWORD); //wifi di mulai dengan mencari SSID dan password yang diatur
Serial.print("Wifi Connecting."); //Mengirimkan data serial bertuliskan "Wifi Connecting" setelah itu ganti baris
while (WiFi.status() != WL_CONNECTED){ //perulangan terus menerus jika status wifi belum tersambung
delay(1000); //Jeda waktu 1000ms atau 1 detik
Serial.print("."); //Mengirimkan data serial bertuliskan "." tanpa ganti garis
}
Serial.println("Wifi connected !"); //Mengirimkan data serial bertuliskan "Wifi connected" setelah itu ganti baris
Serial.println("Local IP: " + String(WiFi.localIP())); //Mengirimkan data serial bertuliskan "Local IP: [IP WIFI]" setelah itu ganti baris
ThingSpeak.begin(client); //Thingspeak di mulai dengan menhubungkan melalui client
}
void loop() {
TempAndHumidity data = dhtSensor.getTempAndHumidity(); //Membaca data suhu dan kelembaban pada sensor DHT kemudian di masukan ke variable data array
ThingSpeak.setField(1,data.temperature); //Thingspeak mengatur peletakan data pada field 1 dengan data yang akan dikirimkan adalah data suhu
ThingSpeak.setField(2,data.humidity); //Thingspeak mengatur peletakan data pada field 2 dengan data yang akan dikirimkan adalah data kelembaban
int x = ThingSpeak.writeFields(myChannelNumber,myWriteApiKey); //Thingspeak mengirimkan data ke server sesuai kode channel dan Write API KEY
float hasilbaca_t = ThingSpeak.readFloatField(myChannelNumber,1, myReadApiKey); //Thingspeak membaca data dari server sesuai kode channel, field dan Read API KEY
float hasilbaca_h = ThingSpeak.readFloatField(myChannelNumber,2, myReadApiKey); //Thingspeak membaca data dari server sesuai kode channel, field dan Read API KEY
Serial.println("Temp : " + String(hasilbaca_t) + "°C"); //Mengirimkan data serial bertuliskan "Temp:(hasilbaca_t)%" setelah itu ganti baris
Serial.println("Humidity: " + String(hasilbaca_h) + "%"); //Mengirimkan data serial bertuliskan "Temp:(hasilbaca_h)%" setelah itu ganti baris
if(x == 200){ //Jika x = 200 (dalam hal ini kode 200 menunjukan bahwa data terkirim ke server) maka....
Serial.println("Data sudah terkirim"); //Mengirimkan data serial bertuliskan "Data sudah terkirim" setelah itu ganti baris
}else{ //jika x != 200 maka.....
Serial.println("Data tidak terkirim" + String(x)); //Mengirimkan data serial bertuliskan "Data tidak terkirim dan kode x" setelah itu ganti baris
}
Serial.println("---"); //Mengirimkan data serial bertuliskan "---" setelah itu ganti baris
delay(15000); //jeda waktu 15000ms atau 15 detik
}