#include <WiFi.h>
#include <PubSubClient.h>
#include <DHTesp.h>
#define G1 12
#define G2 13
#define G3 14
#define G4 2
#define P_in 22
#define P_out 23
#define S_u 18
#define S_s 19
#define T1 32
#define T2 33
#define T3 34
#define T4 35
#define T_Start 25
// WiFi
const char *ssid = "Wokwi-GUEST"; // Enter your WiFi name
const char *password = ""; // Enter WiFi password
// MQTT Broker
const char *mqtt_broker = "broker.emqx.io";
const char *topic = "esp32/fajar123";
const char *topic_temp = "esp32/fajar123/temp";
const char *topic_humi = "esp32/fajar123/humi";
const char *topic_gate = "esp32/fajar123/gate";
const char *topic_gatestate = "esp32/fajar123/gatestate";
const char *mqtt_username = "emqx";
const char *mqtt_password = "public";
const int mqtt_port = 1883;
byte* buffer;
boolean Rflag=false;
int r_len;
String pesan;
String gate;
unsigned int tombol;
float slider;
float tone_high;
float tone_low;
float tone_high2;
float tone_low2;
const int DHT_PIN = 21;
String StringTemp;
WiFiClient espClient;
PubSubClient client(espClient);
DHTesp dhtSensor;
void setup() {
pinMode(G1, OUTPUT);
pinMode(G2, OUTPUT);
pinMode(G3, OUTPUT);
pinMode(G4, OUTPUT);
pinMode(P_in, OUTPUT);
pinMode(P_out, OUTPUT);
pinMode(S_u, OUTPUT);
pinMode(S_s, OUTPUT);
pinMode(T1, INPUT);
pinMode(T2, INPUT);
pinMode(T3, INPUT);
pinMode(T4, INPUT);
pinMode(T_Start, INPUT);
// Set software serial baud to 115200;
Serial.begin(115200);
dhtSensor.setup(DHT_PIN, DHTesp::DHT22); // MULAI SENSOR DHT 22
// connecting to a WiFi network
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.println("Connecting to WiFi..");
}
Serial.println("Connected to the WiFi network");
//connecting to a mqtt broker
client.setServer(mqtt_broker, mqtt_port);
client.setCallback(callback);
while (!client.connected()) {
String client_id = "esp32-client-";
client_id += String(WiFi.macAddress());
Serial.printf("The client %s connects to the public mqtt broker\n", client_id.c_str());
if (client.connect(client_id.c_str(), mqtt_username, mqtt_password)) {
Serial.println("Public emqx mqtt broker connected");
} else {
Serial.print("failed with state ");
Serial.print(client.state());
delay(2000);
}
}
// publish and subscribe
client.publish(topic, "ESP32 Fajar Telah Siap Di Operasikan");
client.subscribe(topic);
client.subscribe(topic_gate);
}
void callback(char *topic, byte *payload, unsigned int length) {
Rflag=true;
r_len = length;
String messageTemp = "";
pesan = "";
gate = "";
//int tombol;
Serial.print("Message arrived in topic: ");
Serial.println(topic);
Serial.print("Message:");
for (int i = 0; i < length; i++) {
Serial.print((char) payload[i]);
messageTemp +=(char) payload[i];
}
Serial.println();
if(strcmp(topic,topic_gate) == 0){
Serial.print("ADA GATE MASUK : ");
gate = messageTemp;
} else {
pesan = messageTemp;
Serial.print("ADA PESAN MASUK : ");
Serial.println(pesan);
Serial.println("-----------------------");
}
}
void reconnect() {
// Loop until we're reconnected
while (!client.connected()) {
Serial.print("Attempting MQTT connection...");
// Attempt to connect
if (client.connect("ESP8266Client")) {
Serial.println("connected");
// Subscribe
client.subscribe("esp32/output");
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
// Wait 5 seconds before retrying
delay(5000);
}
}
}
void loop() {
if (!client.connected()) {
reconnect();
}
// unsigned int i;
// for(i=0;i++;i=10){
// client.loop();
// delay(200);
// }
// i=0;
tombol = 0;
TempAndHumidity data = dhtSensor.getTempAndHumidity();
//char* temp_buff ;
//sprintf(temp_buff, "%f", data.temperature);
//const char* humi_buff = data.humidity ;
client.loop();
delay(200);
if (digitalRead(T1) == 1) {
tombol = 1;
}
else if (digitalRead(T2) == 1) {
tombol = 2;
}
else if (digitalRead(T3) == 1) {
tombol = 3;
}
else if (digitalRead(T4) == 1) {
tombol = 4;
}
else if (digitalRead(T_Start) == 1) {
tombol = 5;
}
else if (pesan == "sawah 1") {
tombol = 1;
Serial.println("OKE");
}
else if (pesan == "sawah 2") {
tombol = 2;
}
else if (pesan == "sawah 3") {
tombol = 3;
}
else if (pesan == "sawah 4") {
tombol = 4;
}
else if (pesan == "sawah 5") {
tombol = 5;
}
else if (gate == "1") {
tombol = 1;
}
else if (gate == "2") {
tombol = 2;
}
else if (gate == "3") {
tombol = 3;
}
else if (gate == "4") {
tombol = 4;
}
else if (gate == "4") {
tombol = 5;
}
else {
tombol=0 ;
}
Serial.println("+++++++++++++++++++++++++");
Serial.print("Tombol : ");
Serial.println(tombol);
Serial.print("GATE : ");
Serial.println(gate);
Serial.println("+++++++++++++++++++++++++");
switch ( tombol) {
case 0 :
Serial.println("Gak Ada Jadwal, Silahkan Pencet Tombol");
delay(100);
break ;
case 1 :
digitalWrite(G1, HIGH);
Serial.println("Pengairan Sawah 1 Mohon menunggu");
client.publish(topic, "Pengairan Sawah 1 Mohon menunggu");
client.publish(topic_gatestate, "1");
for(int i=0;i<100;i++){
Serial.print(">");
delay(100);
}
digitalWrite(G1, LOW);
Serial.println("Sawah 1 berhasil di airi");
client.publish(topic, "Sawah 1 berhasil di airi");
client.publish(topic_gatestate, "");
break ;
case 2 :
digitalWrite(G2, HIGH);
Serial.println("Pengairan Sawah 2 Mohon menunggu");
client.publish(topic, "Pengairan Sawah 2 Mohon menunggu");
client.publish(topic_gatestate, "2");
for(int i=0;i<100;i++){
Serial.print(">");
delay(100);
}
digitalWrite(G2, LOW);
Serial.println("Sawah 2 berhasil di airi");
client.publish(topic, "Sawah 2 berhasil di airi");
client.publish(topic_gatestate, "");
break ;
case 3 :
digitalWrite(G3, HIGH);
Serial.println("Pengairan Sawah 3 Mohon menunggu");
client.publish(topic, "Pengairan Sawah 3 Mohon menunggu");
client.publish(topic_gatestate, "3");
for(int i=0;i<100;i++){
Serial.print(">");
delay(100);
}
digitalWrite(G3, LOW);
Serial.println("Sawah 3 berhasil di airi");
client.publish(topic, "Sawah 3 berhasil di airi");
client.publish(topic_gatestate, "");
break ;
case 4 :
digitalWrite(G4, HIGH);
Serial.println("Pengairan Sawah 4 Mohon menunggu");
client.publish(topic, "Pengairan Sawah 4 Mohon menunggu");
client.publish(topic_gatestate, "4");
for(int i=0;i<100;i++){
Serial.print(">");
delay(100);
}
digitalWrite(G4, LOW);
Serial.println("Sawah 4 berhasil di airi");
client.publish(topic, "Sawah 4 berhasil di airi");
client.publish(topic_gatestate, "");
break ;
default :
Serial.println("Gak Ada Jadwal, Silahkan Pencet Tombol");
delay(100);
break ;
}
Serial.print("Variable Data : ");
Serial.println(String(data.temperature).c_str());
Serial.println("Temp: " + String(data.temperature, 2) + "°C");
client.publish(topic_temp, String(data.temperature, 2).c_str());
Serial.println("Humidity: " + String(data.humidity, 1) + "%");
client.publish(topic_humi, String(data.humidity, 1).c_str());
Serial.println("---");
//client.publish(topic, "---");
delay(100);
client.publish(topic, "Menunggu Perintah boskuh");
delay(2000);
}