#include "DHTesp.h"
#include <PubSubClient.h>
#include <WiFi.h>
//#include <LiquidCrystal_I2C.h>
//LiquidCrystal_I2C lcd(0x27, 16, 2);
DHTesp dhtSensor;
int DHT_PIN = 25;
const char *ssid = "Wokwi-GUEST";
const char *pass = "";
const char *mqtt_host = "broker.emqx.io";
const char *topic_temp = "ztemp";
const char *topic_hum = "zhumid";
const int port = 1883;
String client_id = "mqttx_diajdiwqhdoiawjdiosajdilasdjqwoijoawid36128362613898";
WiFiClient espClient;
PubSubClient client(espClient);
int waktu_sebelum, waktu_interval = 1*1000;
void setup() {
dhtSensor.setup(DHT_PIN, DHTesp::DHT22);
Serial.begin(115200);
WiFi.begin(ssid, pass);
client.setServer(mqtt_host, port);
while(WiFi.status() != WL_CONNECTED){
Serial.println("Still trying to connect to wifi...");
delay(500);
}
Serial.println("Connected");
while (!client.connected()) {
if (client.connect(client_id.c_str())) {
Serial.println("connected to mqtt broker");
} else {
Serial.print("still not connected to mqtt broker");
Serial.print(client.state());
delay(2000);
}
}
//lcd.init();
//lcd.backlight();
}
void loop() {
TempAndHumidity data = dhtSensor.getTempAndHumidity();//menyimpan data suhu & klmbp
float temp = data.temperature;
float hum = data.humidity;
client.loop();
if(millis() - waktu_sebelum >= waktu_interval){
client.publish(topic_temp, String(temp).c_str());
client.publish(topic_hum, String(hum).c_str());
waktu_sebelum = millis();
}
Serial.println("Temp: " + String(temp, 2) + "°C");//display suhu
Serial.println("Humidity: " + String(hum, 1) + "%");//display kelembapan
Serial.println("---");
/*lcd.setCursor(0,0);
lcd.print("Temp: ");
lcd.print(String(temp, 2));
lcd.print("°C");
lcd.setCursor(0,1);
lcd.print("Humidity: ");
lcd.print(String(hum, 2));
lcd.print("%"); */
delay(500); // this speeds up the simulation
}
/*
angka yang dibelankang koma seperti String(data.temperature, 2) + "°C" ===>> ",2" ini
menandakan kalau ada 2 angka dibelakang koma*/
//note = ada beberapa pin yang tidak berfungsi untyuk pin SDA dan SCL pada lcd.