#include <WiFi.h>
#include <MQTT.h>
#include "DHT.h"
#include <Callmebot_ESP32.h>
#include <HTTPClient.h>
const char ssid[] = "Wokwi-GUEST";
const char pass[] = "";
WiFiClient net;
MQTTClient client;
#define DHT22Pin 5
#define ledRed 27
#define ledBlue 26
DHT dht(DHT22Pin, DHT22);
const int LDR_PIN = 33;
long duration;
int light;
float lightPercent;
String lightStatus;
unsigned long lastMillis = 0;
String phoneNumber = "6285171681103";
String apiKey = "8152098";
void connect(){
// Menghubungkan ke WiFi
Serial.print("Cek WiFi");
while(WiFi.status() != WL_CONNECTED){
Serial.print(".");
delay(1000);
}
Serial.println("");
Serial.println("Sukses Terhubung ke WiFi");
// Menghubungkan ke Broker
Serial.print("Cek Broker");
while(!client.connect("")){ // Client ID boleh dikosongkan
Serial.print(".");
delay(1000);
}
Serial.println("");
Serial.println("Sukses Terhubung ke Server");
// Callmebot.whatsappMessage("6285171681103", "8152098", "Ini aku dari Wokwi API Key : 8152098, Nomor : 6285171681103");
// Send Message to WhatsAPP
sendMessage("Hello from ESP8266! menggunakan prosedur");
Serial.println(Callmebot.debug());
client.subscribe("labskite/iot/#", 1); // subcribe dengan QoS 1
}
void sendMessage(String message){
// Data to send with HTTP POST
String urlcallmebot = "http://api.callmebot.com/whatsapp.php?phone=" + phoneNumber + "&apikey=" + apiKey + "&text=" + urlEncode(message);
String url = "http://api.textmebot.com/send.php?recipient=+6285171681103&apikey=jz5VnNuGAooY&text=This%20is%20a%20test";
WiFiClient client;
HTTPClient http;
http.begin(client, url);
// Specify content-type header
http.addHeader("Content-Type", "application/x-www-form-urlencoded");
// Send HTTP POST request
int httpResponseCode = http.POST(url);
if (httpResponseCode == 200){
Serial.print("Message sent successfully");
}
else{
Serial.println("Error sending the message");
Serial.print("HTTP response code: ");
Serial.println(httpResponseCode);
}
// Free resources
http.end();
}
void subscribeData(String &topic, String &data){
Serial.print("Topic: ");
Serial.println(topic);
Serial.print("Data: ");
Serial.println(data);
if(topic == "labskite/iot/led1"){
digitalWrite(ledRed, data.toInt()); //control led 1
if (digitalRead(ledRed) == HIGH){
Serial.println("merah nyala");
client.publish("labskite/iot/led1/status", "ON", true, 1);
} else {
Serial.println(("merah mati"));
client.publish("labskite/iot/led1/status", "OFF", true, 1);
}
}
if(topic == "labskite/iot/led2"){
digitalWrite(ledBlue, data.toInt()); //control led 2
if (digitalRead(ledBlue) == HIGH){
Serial.println("biru nyala");
client.publish("labskite/iot/led2/status", "ON", true, 1);
} else {
Serial.println(("biru mati"));
client.publish("labskite/iot/led2/status", "OFF", true, 1);
}
}
}
void publish(){
float hum = dht.readHumidity();
float temp = dht.readTemperature();
Serial.print("Temperature : ");
Serial.print(temp);
Serial.print(" C ");
Serial.print("Humidity : ");
Serial.print(hum);
Serial.println(" % ");
delay(500);
ldr();
client.publish("labskite/iot/dht/temp", String(temp), true, 1); // publish variabel temperatue ke topic labskite/iot/dht/temp dengan QoS 1
delay(500);
client.publish("labskite/iot/dht/humi", String(hum), true, 1); // publish variabel humidity ke topic labskite/iot/dht/humi dengan QoS 1
delay(500);
client.publish("labskite/iot/ldr/level", String(light), true, 1); // publish variabel humidity ke topic labskite/iot/dht/humi dengan QoS 1
delay(500);
client.publish("labskite/iot/ldr/percent", String(lightPercent), true, 1); // publish variabel humidity ke topic labskite/iot/dht/humi dengan QoS 1
delay(500);
client.publish("labskite/iot/ldr/state", String(lightStatus), true, 1); // publish variabel humidity ke topic labskite/iot/dht/humi dengan QoS 1
}
void ldr()
{
// Read the LDR value
light = analogRead(LDR_PIN);
lightPercent = (light / 4095.0) * 100.0;
if (lightPercent < 30) {
lightStatus = "Cerah";
} else if (lightPercent < 60) {
lightStatus = "Mendung";
} else {
lightStatus = "Malam";
}
// Serial.print("Light Level: ");
// Serial.println(light);
// Serial.print("Light Percent: ");
// Serial.print(lightPercent);
// Serial.println(" %");
// Serial.print("Status Cuaca: ");
// Serial.print(lightStatus);
// Convert the light level to a string
String lightLevelStr = String(lightPercent);
}
void setup() {
Serial.begin(115200);
pinMode(ledRed,OUTPUT);
pinMode(ledBlue,OUTPUT);
dht.begin();
Serial.begin(9600);
WiFi.begin(ssid, pass);
client.begin("broker.emqx.io", net);
client.onMessage(subscribeData);
connect();
// mengubah status indikator pada Io MQTT Panel
if (digitalRead(ledRed) == HIGH){
Serial.println("merah nyala");
client.publish("labskite/iot/led1/status", "ON", true, 1);
} else {
Serial.println(("merah mati"));
client.publish("labskite/iot/led1/status", "OFF", true, 1);
}
// mengubah status indikator pada Io MQTT Panel
if (digitalRead(ledBlue) == HIGH){
Serial.println("merah nyala");
client.publish("labskite/iot/led2/status", "ON", true, 1);
} else {
Serial.println(("merah mati"));
client.publish("labskite/iot/led2/status", "OFF", true, 1);
}
}
void loop() {
client.loop();
// publish a message roughly every second.
if (millis() - lastMillis > 1000) {
lastMillis = millis();
publish();
}
delay(100);
}