#include <PubSubClient.h>
#include <WiFi.h>
#include "DHT.h"
#define DHTPIN 5
// Uncomment whatever type you're using!
//#define DHTTYPE DHT11 // DHT 11
#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321
DHT dht(DHTPIN, DHTTYPE);
const char* ssid = "Wokwi-GUEST";
const char* password = "";
#define ldrPin 34
const float gama = 0.7;
const float rl10 = 50;
float temp, humi;
float lux;
char thingsboardServer[] = "demo.thingsboard.io";
#define TOKEN "GQutbHH4i22N8bRvFxt1"
WiFiClient wifiClient;
PubSubClient client(wifiClient);
int status = WL_IDLE_STATUS;
unsigned long lastSend;
void get_network_info(){
if(WiFi.status() == WL_CONNECTED) {
Serial.print("[*] Network information for ");
Serial.println(ssid);
Serial.println("[+] BSSID : " + WiFi.BSSIDstr());
Serial.print("[+] Gateway IP : ");
Serial.println(WiFi.gatewayIP());
Serial.print("[+] Subnet Mask : ");
Serial.println(WiFi.subnetMask());
Serial.println((String)"[+] RSSI : " + WiFi.RSSI() + " dB");
Serial.print("[+] ESP32 IP : ");
Serial.println(WiFi.localIP());
}
}
void setup(){
Serial.begin(115200);
delay(1000);
InitWiFi();
client.setServer(thingsboardServer,1883);
dht.begin();
}
void loop(){
if(!client.connected()){
reconnect();
}
delay(2000); // this speeds up the simulation
int LDR_ADC = analogRead(ldrPin);
int LDR_value = map(LDR_ADC, 4095, 0, 1024, 0);
float voltage = (float)LDR_value / 1024.*5;
float resistant = 2000 * voltage / (1-voltage/5);
float kecerahan = pow(rl10*1e3*pow(10,gama)/resistant,(1/gama));
//Serial.print("Cuong do sang:");
//Serial.print(kecerahan);Serial.println(" lux");
lux = kecerahan;
/*
if (kecerahan < 40) {
Serial.println(" => Dark");
} else if (kecerahan < 800) {
Serial.println(" => Dim");
} else if (kecerahan < 2000) {
Serial.println(" => Light");
} else if (kecerahan < 3200) {
Serial.println(" => Bright");
} else {
Serial.println(" => Very bright");
}
*/
// Reading temperature or humidity takes about 250 milliseconds!
humi = dht.readHumidity();
// Read temperature as Celsius (the default)
temp = dht.readTemperature();
// Check if any reads failed and exit early (to try again).
if (isnan(humi) || isnan(temp)) {
Serial.println(F("Failed to read from DHT sensor!"));
return;
}
/*
Serial.print(F("Humidity: "));
Serial.print(humi);
Serial.print(F("% Temperature: "));
Serial.print(temp);
Serial.print(F("°C "));
*/
Serial.print(F("Humidity:"));Serial.print(humi);Serial.print(",");
Serial.print(F("Temperature:"));Serial.print(temp);Serial.print(",");
Serial.print(F("Lux:"));Serial.println(kecerahan);
uploadTB_v2();
}
void uploadTB(){
String temperature = String(temp);
String humidity = String(humi);
Serial.print( "Sending temperature : [" );
Serial.print( temperature );
Serial.println( "]->" );
Serial.print( "Sending humidity : [" );
Serial.print( humidity );
Serial.println( "]->" );
String payload1 = "{";
payload1 += "\"temperature\":"; payload1 += temperature;
payload1 += "}";
String payload2 = "{";
payload2 += "\"humidity\":"; payload2 += humidity;
payload2 += "}";
// char telemetry[100];
// payload.toCharArray( telemetry, 100 );
client.publish( "v1/devices/me/telemetry", String(payload1).c_str() );
Serial.println( payload1);
client.publish( "v1/devices/me/telemetry", String(payload2).c_str() );
Serial.println( payload2);
Serial.println(lastSend);
}
void uploadTB_v2(){
String TBpayload = "{";
TBpayload += "\"temperature\":"; TBpayload += String(temp);
TBpayload += ",\"humidity\":"; TBpayload += String(humi);
TBpayload += ",\"lux\":"; TBpayload += String(kecerahan);
TBpayload += "}";
client.publish( "v1/devices/me/telemetry", String(TBpayload).c_str() );
Serial.println( TBpayload);
}
void InitWiFi(){
Serial.println("Connecting to AP ...");
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED){
delay(500);
Serial.print(".");
}
Serial.println("Connected to AP");
}
//kiem tra va ket noi voi may chu IoT Thingsboard
void reconnect(){
while (!client.connected()){
status = WiFi.status();
if(status != WL_CONNECTED){
WiFi.begin(ssid, password);
while(WiFi.status() != WL_CONNECTED){
delay(500);
Serial.print(".");
}
Serial.println("Connected to AP");
}
Serial.print("Connecting to ThingsBoard node ...");
if ( client.connect("IoT ESP32", TOKEN, NULL)){
Serial.println( "[DONE]" );
}
else {
Serial.print("[FAILED] [ rc = " );
Serial.print(client.state() );
Serial.println( " : retrying in 5 seconds]");
delay( 5000 );
}
}
}