const float GAMMA = 0.7; //nilai ketetapan gama untuk mencari tingkat kecerahan(lux)
const float RL10 = 50; //nilai ketetapan gama untuk mencari tingkat kecerahan(lux)
// SSID : Wokwi-GUEST
// PASS : ""
#include<PubSubClient.h>
#include "DHTesp.h"
#include "HTTPClient.h"
#include <DHT.h>
#include<WiFi.h>
#define ssid "Wokwi-GUEST"
#define password ""
#define DHTTYPE DHT22
#define DHTPIN 4
char* myMqttServer = "broker.hivemq.com";
const char* serverName = "http://platform.antares.id:8080/~/antares-cse/antares-id/Test-Dummy/dht22";
int myMqttPort = 1883;
unsigned long lastTime = 0;
unsigned long timerDelay = 5000;
String clientName = "001";
String yourTopic_1 = "edspert/batch15/temp";
String yourTopic_2 = "edspert/batch15/hum";
String yourTopic_3 = "edspert/batch15/kecerahan2";
DHTesp dht;
DHT dhtKita(DHTPIN,DHTTYPE);
WiFiClient wifiClient; // membuat objek wifiClient
PubSubClient mqttClient(wifiClient); // membuat objek mqttClient
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
Serial.println("Hello, ESP32!");
espConnectToWiFi(); // Fungsi untuk mengkoneksikan ESP ke AP
dhtKita.begin();
dht.setup(DHTPIN, DHTesp::DHT22);
init_to_broker(myMqttServer,myMqttPort);
}
void loop() {
if(!mqttClient.connected())
{
connect_to_broker(clientName);
}
else
{
// put your main code here, to run repeatedly:
delay(10); // this speeds up the simulation
float Hum = dhtKita.readHumidity();
float Temp = dhtKita.readTemperature();
int nilaiLdr = analogRead(2);
float voltase = nilaiLdr / 4096. * 5; //rumus mengubah nilai sinyal analog dari ldr menjadi nilai voltase
float resistansi = 2000 * voltase / (1-voltase / 5); //rumus mencari nilai resistansi dari nilai voltase sebelumnya
float kecerahan = pow(RL10 * 1e3 * pow(10, GAMMA) / resistansi, (1/GAMMA)); //rumus mencari nilai tingkat kecerahan (lux)
float kecerahan2 = ldr.readkecerahan();
Serial.print("Nilai Hum: ");
Serial.print(Hum);
Serial.print("\tNilai Temp: ");
Serial.print(Temp);
mqtt_publish(yourTopic_1, Temp);
mqtt_publish(yourTopic_2, Hum);
mqtt_publish(yourTopic_3, kecerahan2);
// rutin melakukan pengiriman data setiap waktu yang diset
if ((millis() - lastTime) > timerDelay)
{
// deklarasi objek untuk menampung data
// temperatur dan kelembapan dari DHT22
float Hum = dhtKita.readHumidity();
float Temp = dhtKita.readTemperature();
float kecerahan2 = ldr.readkecerahan();
// ekstrak data temperature
// ekstrak data humidity
// menampilkan data di serial
Serial.println("Suhu: " + String(Temp, 2) + "°C");
Serial.println("Kelembaban: " + String(Hum, 1) + "%");
Serial.println("---");
// waktu jeda sampling data
// minimal 2 detik
delay(5000);
// mengecek koneksi wifi
if(WiFi.status()== WL_CONNECTED)
{
WiFiClient client;
HTTPClient http;
// inisiasi komunikasi http
http.begin(client, serverName);
// inisiasi http header
http.addHeader("X-M2M-Origin", "33ea6ffdaf582d4d:6404bdba5011eeca");
http.addHeader("Content-Type", "application/json;ty=4");
http.addHeader("Accept", "application/json");
// inisiasi data yang dikirim di restful api
String httpRequestData ="{\"m2m:cin\": { \"con\":\"{\\\"Temp\\\":\\\"";
httpRequestData = httpRequestData + String(Temp, 2);
httpRequestData = httpRequestData + "\\\",\\\"Hum\\\":\\\"";
httpRequestData = httpRequestData + String(Hum,1);
httpRequestData = httpRequestData + "\\\"}\"}}";
// mengirimkan HTTP POST request
int httpResponseCode = http.POST(httpRequestData);
Serial.print("HTTP Response code: ");
Serial.println(httpResponseCode);
// menutup koneksi
http.end();
}
else
{
Serial.println("WiFi Disconnected");
}
lastTime = millis();
}
}
}
void espConnectToWiFi()
{
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
while(WiFi.status() != WL_CONNECTED)
{
Serial.println(WiFi.status());
delay(100);
}
Serial.println("ESP telah terkoneksi");
}
void connect_to_AP(String mySSID, String myPASSWORD)
{
WiFi.begin(mySSID, myPASSWORD); // MENCOBA KONEK KE WIFI
// Melakukan pengecekan status koneksi ke WIFI
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.print("Device telah terhubung ke: ");
Serial.println(mySSID);
Serial.print("IP Device: ");
Serial.println(WiFi.localIP());
}
void init_to_broker(char* myMqttServer, int myMqttPort)
{
mqttClient.setServer(myMqttServer, myMqttPort);
mqttClient.setCallback(callback);
}
void connect_to_broker(String clientName)
{
Serial.println("Connecting to MQTT Broker...");
while(!mqttClient.connected())
{
Serial.println("Reconnecting to MQTT Broker..");
String clientId = "ESP32Client-" + clientName;
// clientId += String(random(0xffff), HEX);
Serial.println(clientId);
if(mqttClient.connect(clientId.c_str()))
{
Serial.print(clientId);
Serial.println("Device to Broker Connected.");
}
else
{
Serial.print("failed, rc=");
Serial.print(mqttClient.state());
Serial.println("try again in 1 seconds");
delay (1000);
}
}
}
void callback(char* topic, byte* message, unsigned int length)
{
Serial.print("Callback - ");
Serial.print("Message:");
String stMessage;
for (int i = 0; i < length; i++)
{
Serial.print((char)message[i]);
stMessage += (char)message[i];
}
}
void mqtt_publish(String yourTopic, float yourPayload)
{
char yourPayloadString[8];
dtostrf(yourPayload, 1, 2, yourPayloadString);
mqttClient.publish(yourTopic.c_str(), yourPayloadString);
Serial.print(yourTopic);
Serial.print(" ==> ");
Serial.println(yourPayload);
}