#include <NusabotSimpleTimer.h>
#include <LiquidCrystal_I2C.h>
#include <ArduinoJson.h>
#include "LDRModule.h"
#include <DHTesp.h>
#include <WiFi.h>
#include <MQTT.h>
#include <Wire.h>
#define WIFI_SSID "Wokwi-GUEST"
#define WIFI_PASSWORD ""
#define WIFI_CHANNEL 6
#define kec_angin 4
#define ints_cahaya 2
#define DHT_PIN 18
#define ints_hujan 14
#define led_merah 26
#define led_hijau 25
#define led_biru 33
#define buzzer 27
LiquidCrystal_I2C lcd(0x27, 20, 4);
LDRModule ldr1(ints_cahaya);
NusabotSimpleTimer timer;
MQTTClient client;
WiFiClient net;
DHTesp dht;
// StaticJsonDocumet<200> doc;
// String dataString;
int kec, kecepatan, intens, lux, rain, rains;
float temp, humid;
String days = " ";
String raini = " ";
unsigned long lastMillis = 0;
void connect() {
Serial.print("checking wifi...");
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(1000);
}
Serial.print("\nConnected To WiFi");
Serial.print("\nconnecting...");
while (!client.connect("UnknownIoTM")) {
Serial.print(".");
delay(1000);
}
Serial.println("\nConnected To MQTT Broker!");
// client.subscribe("edspertid/project/weatherstation/#", 1);
}
void mqtt() {
client.publish("edspertid/project/weatherstation/angin", String(kecepatan), true, 1);
client.publish("edspertid/project/weatherstation/suhu", String(temp), true, 1);
client.publish("edspertid/project/weatherstation/kelembaban", String(humid), true, 1);
client.publish("edspertid/project/weatherstation/cahaya", String(days), true, 1);
client.publish("edspertid/project/weatherstation/hujan", String(raini), true, 1);
}
void angin(){
kec = analogRead(kec_angin);
kecepatan = map(kec, 0, 4095, 0, 12);
}
void cahaya(){
intens = ldr1.adcValue();
lux = map(intens, 4095, 0, 0, 1000);
if (lux >= 900) {
//01234567891234567890
days = "Cuaca Sangat Terang";
digitalWrite(led_merah, 0);
}
else if (lux >= 700){
//01234567891234567890
days = " Cuaca Terang ";
digitalWrite(led_merah, 0);
}
else if (lux >= 400){
//01234567891234567890
days = " Cuaca Mendung ";
digitalWrite(led_merah, 1);
}
else if (lux < 400){
//01234567891234567890
days = " Cuaca Gelap ";
digitalWrite(led_merah, 1);
}
}
void suhu(){
temp = dht.getTemperature();
humid = dht.getHumidity();
if ((temp >= 28) || (temp <= 16)){
digitalWrite(led_hijau, 1);
}
else{
digitalWrite(led_hijau, 0);
}
}
void hujan(){
rain = analogRead(ints_hujan);
rains = map(rain, 0, 4095, 0, 100);
if (rains >= 80){
digitalWrite(led_biru, 1);
//01234567891234567890
raini = " Hari Hujan Lebat ";
}
else if (rains >= 60){
digitalWrite(led_biru, 1);
//01234567891234567890
raini = " Hari Hujan ";
}
else if (rains >= 40){
digitalWrite(led_biru, 0);
//01234567891234567890
raini = " Hari Gerimis ";
}
else if (rains < 40){
digitalWrite(led_biru, 0);
//01234567891234567890
raini = " Hari Tidak Hujan ";
}
}
void tampil(){
lcd.clear();
lcd.setCursor(5, 0);
lcd.print("V : ");
lcd.print(kecepatan);
lcd.print(" m/s");
lcd.setCursor(1, 1);
lcd.print("T : ");
lcd.print(temp, 1);
lcd.print("C");
lcd.setCursor(11, 1);
lcd.print("H : ");
lcd.print(humid, 1);
lcd.print("%");
lcd.setCursor(0, 2);
lcd.print(days);
lcd.setCursor(0, 3);
lcd.print(raini);
}
void setup() {
Serial.begin(115200);
pinMode(kec_angin, INPUT);
// pinMode(ints_hujan, INPUT);
pinMode(buzzer, OUTPUT);
pinMode(led_merah, OUTPUT);
pinMode(led_hijau, OUTPUT);
pinMode(led_biru, OUTPUT);
dht.setup(DHT_PIN, DHTesp::DHT22);
digitalWrite(buzzer, LOW);
digitalWrite(led_merah, LOW);
digitalWrite(led_hijau, LOW);
digitalWrite(led_biru, LOW);
lcd.init();
lcd.backlight();
int progress = 0;
while (progress <= 100) {
lcd.setCursor(2, 1);
lcd.print("Progress : ");
lcd.print(progress);
lcd.print(" %");
delay(100);
progress += 10;
}
delay(1000);
lcd.clear();
timer.setInterval(1000, angin);
timer.setInterval(1000, cahaya);
timer.setInterval(1000, suhu);
timer.setInterval(1000, hujan);
timer.setInterval(1000, tampil);
WiFi.mode(WIFI_STA);
WiFi.begin(WIFI_SSID, WIFI_PASSWORD, WIFI_CHANNEL);
client.begin("broker.emqx.io", net);
connect();
timer.setInterval(1000, mqtt);
}
void loop() {
delay(10);
timer.run();
if (kecepatan >= 8){
tone(buzzer, 500);
delay(500);
noTone(buzzer);
delay(250);
}
else{
noTone(buzzer);
}
// if (millis() - lastMillis > 1000) {
// lastMillis = millis();
// tampil();
// }
}
// void sendjson(){
// doc["angin"] = angin;
// doc["suhu"] = suhu;
// doc["kelembaban"] = kelembaban;
// doc["cahaya"] = days;
// doc["hujan"] = raini;
// dataString = "";
// serializeJson(doc, dataString);
// }Loading
esp32-devkit-v1
esp32-devkit-v1