#include <ArduinoJson.h>
#include <LiquidCrystal_I2C.h>
#include <WiFi.h>
#include "DHTesp.h"
#include <PubSubClient.h>
#define DHTPIN 15// you can use
//#define DHTTYPE DHT22
DHTesp dht;//you can also use pins 3, 4, 5, 12, 13 or 14
#define WIFI_SSID "Wokwi-GUEST"
#define WIFI_PASWORD ""
#define MQTT_SERVER "test.mosquitto.org"
WiFiClient espClient;
PubSubClient mqtt(espClient);
LiquidCrystal_I2C lcd(0x27,16,2);
#ifdef __cplusplus
extern "C" {
#endif
uint8_t temprature_sens_read();
#ifdef __cplusplus
}
#endif
uint8_t temprature_sens_read();
void connect_wifi()
{
lcd.setCursor(0,0);
lcd.print("Connecting to AP ... ");
WiFi.begin(WIFI_SSID, WIFI_PASWORD);
lcd.setCursor(0,1);
while (WiFi.status() != WL_CONNECTED ){
delay(500);
lcd.print(".");
}
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Connected to AP");
}
void connect_mqtt() {
// Loop until we're reconnected
while (!mqtt.connected()) {
Serial.print("Attempting MQTT connection...");
// Create a random client ID
String clientId = "ESP8266Client-";
clientId += String(random(0xffff), HEX);
// Attempt to connect
if (mqtt.connect(clientId.c_str())) {
Serial.println("Connected");
// Once connected, publish an announcement...
mqtt.publish("/mbkm/rizqi", "Connected");
} else {
Serial.print("failed, rc=");
Serial.print(mqtt.state());
Serial.println(" try again in 5 seconds");
// Wait 5 seconds before retrying
delay(5000);
}
}
}
void setup() {
dht.setup(DHTPIN, DHTesp::DHT22);// initialize the sensor
lcd.init();
lcd.backlight();
mqtt.setServer(MQTT_SERVER, 1883);
connect_wifi();
delay(1000);
lcd.clear();
}
void loop() {
char temp[10] = {0};
char humid[10] = {0};
connect_mqtt();
sprintf(humid, "%.2f", dht.getHumidity());
lcd.setCursor(0,0);// set the cursor on the first row and column
lcd.print("Humid=");
lcd.print(humid);//print the humidity
lcd.print("%");
// mqtt.publish("/mbkm/rizqi/humid", humid);
sprintf(temp, "%.2fC", dht.getTemperature());
lcd.setCursor(0,1);//set the cursor on the second row and first column
lcd.print("Temp=");
lcd.print(temp);//print the temperature
// mqtt.publish("/mbkm/rizqi/temp", temp);
float h = dht.getHumidity();
float t = dht.getTemperature();
float internal_temp = ((temprature_sens_read() - 32) / 1.8);
DynamicJsonDocument doc(1024);
doc["id"] = "sensor1";
doc["humid"] = h;
doc["temp"] = t;
doc["internal_temp"] = internal_temp;
// Serialize JSON document
String payload;
serializeJson(doc, payload);
mqtt.publish("/mbkm/rizqi/sensor", payload.c_str());
delay(30000);
}