#include <WiFi.h>
#include <MQTT.h>
#include <DHTesp.h>
#include <ESP32Servo.h>
#include <NusabotSimpleTimer.h>
const char ssid[] = "Wokwi-GUEST";
const char pass[] = "";
DHTesp dht;
Servo myservo;
WiFiClient net;
MQTTClient client;
NusabotSimpleTimer timer;
#define DHT_PIN 15
#define ledH 26
#define ledB 33
#define trig 17
#define echo 16
#define ldrs 32
float temp, humid, luxs;
void connectWiFi(){
WiFi.begin(ssid, pass);
Serial.print("Menghubungkan ke WiFi");
while(WiFi.status() != WL_CONNECTED){
Serial.print(".");
delay(1000);
}
Serial.println("");
Serial.println("Berhasil Terhubung ke WiFi");
}
void connectMQTT(){
client.begin("broker.emqx.io", net);
Serial.print("Menghubungkan ke Broker");
while(!client.connect("98howeb")){
Serial.print(".");
delay(1000);
}
Serial.println("");
Serial.println("Berhasil Terhubung ke Server");
client.subscribe("unknownproject/aiot/#", 1);
client.onMessage(subscribeData);
}
void subscribeData(String &topic, String &data){
Serial.println("incoming: " + topic + " - " + data);
delay(10);
if(topic == "unknownproject/aiot/lamp1"){
if(data == "on"){
digitalWrite(ledB, 1);
} else {
digitalWrite(ledB, 0);
}
}
if(topic == "unknownproject/aiot/lamp2"){
if(data == "true"){
digitalWrite(ledH, 1);
} else {
digitalWrite(ledH, 0);
}
}
}
void dhts(){
temp = dht.getTemperature();
humid = dht.getHumidity();
client.publish("unknownproject/aiot/temp", String(temp), true, 1);
client.publish("unknownproject/aiot/humi",String(humid), true, 1);
}
float adc2Lux(int adcValue){
const float GAMMA = 0.7;
const float RL10 = 33;
float voltage = adcValue / 4096. * 3.3;
float resistance = 2000 * voltage / (1 - voltage / 3.3);
float luxValue = pow(RL10 * 1e3 * pow(10, GAMMA) / resistance, (1 / GAMMA));
return luxValue;
}
void ldr(){
int lux = analogRead(ldrs);
luxs = adc2Lux(lux);
client.publish("unknownproject/aiot/luxs", String(luxs), true, 1);
}
void dist(){
digitalWrite(trig, 0);
delayMicroseconds(2);
digitalWrite(trig, 1);
delayMicroseconds(10);
digitalWrite(trig, 0);
int duration = pulseIn(echo,1);
float distance = duration * 0.034/2;
client.publish("unknownproject/aiot/dist", String(distance), true, 1);
if(distance >= 200){
myservo.write(90);
}
else{
myservo.write(0);
}
}
void setup() {
Serial.begin(115200);
connectWiFi();
connectMQTT();
pinMode(ledB, OUTPUT);
pinMode(ledH, OUTPUT);
pinMode(trig, OUTPUT);
pinMode(echo, INPUT);
pinMode(ldrs, INPUT);
myservo.attach(32);
dht.setup(DHT_PIN, DHTesp::DHT22);
timer.setInterval(1000, dhts);
timer.setInterval(1000, ldr);
timer.setInterval(1000, dist);
}
void loop() {
delay(10);
// client.loop();
if (!client.connected()){
connectMQTT();
}
timer.run();
}