#if defined(ESP8266)
#include <ESP8266WiFi.h>
#elif defined(ESP32)
#include <WiFi.h>
#endif
#include <ArduinoJson.h>
#include "ThingsBoard.h"
#include <PubSubClient.h>
#include <DHTesp.h>
#include <LiquidCrystal_I2C.h>
#define DHT_PIN 15
#define LED 2
#define LDR 36
const float GAMMA = 0.7;
const float RL10 = 50;
const char *ssid = "Wokwi-GUEST";
const char *password = "";
#define TOKEN "zEkwDPjQM1CukI1HBHzY" //Access token of device Display
const char* mqtt_server = "thingsboard.cloud";
LiquidCrystal_I2C lcd = LiquidCrystal_I2C(0x27, 16, 2);
DHTesp dhtSensor;
WiFiClient wifiClient;
PubSubClient client(wifiClient);
int status = WL_IDLE_STATUS;
int berhasil = 0;
void setup()
{
Serial.begin(9600);
delay(10);
pinMode(LDR, INPUT);
pinMode(LED, OUTPUT);
lcd.init();
lcd.backlight();
lcd.clear();
lcd.setCursor(0,0); lcd.print("Connect to : ");
lcd.setCursor(0,1); lcd.print(ssid);
delay(3000);
WiFi.begin(ssid, password);
// WiFi.config(IP, NETWORK, NETMASK, DNS);
lcd.clear();
lcd.setCursor(0,0); lcd.print("Please wait");
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
lcd.setCursor(0,1); lcd.print(".");
}
lcd.clear();
lcd.setCursor(0,0); lcd.print("IP address : ");
lcd.setCursor(0,1); lcd.print(WiFi.localIP());
delay(3000);
client.setServer( mqtt_server, 1883);
// client.setCallback(callback);
dhtSensor.setup(DHT_PIN, DHTesp::DHT22);
}
void loop()
{
if ( !client.connected() )
{
reconnect();
}
getData();
delay(3000);
}
void getData()
{
int analogValue = analogRead(36);
float voltage = analogValue * 5/4095.0;
float resistance = 2000 * voltage / (1 - voltage / 5);
float lux = pow(RL10 * 1e3 * pow(10, GAMMA) / resistance, (1 / GAMMA));
TempAndHumidity data = dhtSensor.getTempAndHumidity();
// Serial.println(lux);
String payload = "{";
payload += "\"Intensitas Cahaya\":";payload += lux;payload += ",";
payload += "\"Temperatur\":";payload += String(data.temperature, 2);payload += ",";
payload += "\"Kelembaban\":";payload += String(data.humidity, 1);
payload += "}";
char attributes[1000];
payload.toCharArray( attributes, 1000 );
berhasil = client.publish( "v1/devices/me/telemetry", attributes);
// client.publish( "v1/devices/me/attributes",attributes);
lcd.clear();
if (berhasil) {
lcd.setCursor(0,0); lcd.print("Pengiriman");
lcd.setCursor(0,1); lcd.print("Berhasil");
// Serial.print("Pengiriman Berhasil: ");
// Serial.println( attributes );
digitalWrite(LED, HIGH);
} else {
lcd.setCursor(0,0); lcd.print("Pengiriman");
lcd.setCursor(0,1); lcd.print("Gagal");
// Serial.println("Pengiriman Gagal.");
digitalWrite(LED, LOW);
}
delay(3000);
digitalWrite(LED, LOW);
lcd.clear();
}
void reconnect() {
// Loop until we're reconnected
while (!client.connected()) {
status = WiFi.status();
if ( status != WL_CONNECTED) {
lcd.clear();
lcd.setCursor(0,0); lcd.print("Connect to : ");
lcd.setCursor(0,1); lcd.print(ssid);
delay(3000);
WiFi.begin(ssid, password);
lcd.clear();
lcd.setCursor(0,0); lcd.print("Please wait");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
lcd.setCursor(0,1); lcd.print(".");
}
lcd.clear();
lcd.setCursor(0,0); lcd.print("Connected to");
lcd.setCursor(0,1); lcd.print("AP");
delay(3000);
}
lcd.clear();
lcd.setCursor(0,0); lcd.print("Connecting to");
lcd.setCursor(0,1); lcd.print("ThingsBoard");
delay(3000);
lcd.clear();
// Attempt to connect (clientId, username, password)
if ( client.connect("3a90f960-1ad1-11ed-b480-cbe4cea4aa70", TOKEN, "") ) {
lcd.setCursor(0,0); lcd.print( "ThingsBoard" );
lcd.setCursor(0,1); lcd.print( "Connected" );
} else {
lcd.setCursor(0,0); lcd.print( "Fail to" );
lcd.setCursor(0,1); lcd.print( "Connect" );
delay( 500 );
}
}
}