#include <WiFi.h>
#include "PubSubClient.h"
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h> //library blynk
#define pinMQ2 13 //deklarasi pin (GPIO13) data sensor MQ2
#define pinPIR 12 //deklarasi pin (GPIO12) data sensor PIR
#define warning 14 //deklarasi pin (GPIO14) untuk buzzer (MQ2)
#define warning2 27 //deklarasi pin (GPIO27) untuk lamp (PIR)
//Ganti Sesuai Template Pada Blynk
#define BLYNK_TEMPLATE_ID "TMPL6PL7rz_cQ"
#define BLYNK_TEMPLATE_NAME "Kelompok3"
#define BLYNK_AUTH_TOKEN "-pR8wkiKndabTSjShOU-JRl0lIVatCVg"
//setting awal MQTT
char* mqttServer = "broker.emqx.io"; //sesuai dengan aplikasi yang dipakai
int mqttPort = 1883;
String myClientID = "Kelompok3";
String Topic_1 = "alat/data/sensorMQ2";
//String Topic_2 = "alat/data/humidity";
//Membuat object MQTT client dan jenis koneksi
WiFiClient wifi;
PubSubClient mqttClient(wifi);
char auth[] = BLYNK_AUTH_TOKEN; //supaya manggil template token di atas
char* ssid = "Warkop1";
char* pass = "Pneumatik2024";
void setup() {
Serial.begin(115200);
WiFi.mode(WIFI_STA); //agar ESP jadi mode station
WiFi.begin(ssid,pass); //untuk meminta ESP connect
while(WiFi.status()!= WL_CONNECTED){
delay(100);
Serial.println("wait a minute...");
}
Serial.println("ESP 32 already connected");
//memerintahkan ESP untuk mengetahui alamat broker
init_to_broker(mqttServer, mqttPort);
//memerintahkan untuk connect broker
connect_to_broker(myClientID);
pinMode(pinPIR, INPUT);
pinMode(warning, OUTPUT);
pinMode(warning2, OUTPUT);
Blynk.begin(auth, ssid, pass);
timer.setInterval(100L,sensorMQ2);
}
void loop() {
int sensorMQ2 = analogRead(pinMQ2);
Serial.print("Nilai Sensor: ");
Serial.println(sensorMQ2);
if(sensorMQ2>8000){
analogWrite(warning, HIGH);
Serial.println("Bahaya! gas terdeteksi");
Blynk.virtualWrite(V1,sensorMQ2);
}
else{
analogWrite(warning, LOW);
Serial.println("Aman, tidak terdeteksi gas");
}
sendDataSensor(Topic_1, sensorMQ2);
//inisialisasi untuk PIR
int gerakan = 0;
BLYNK_WRITE (V0)
{
gerakan = digitalRead(pinPIR);
if(gerakan==HIGH){
digitalWrite(warning2, HIGH);
delay(200);
digitalWrite(warning2, LOW);
delay(200);
Serial.println("Stranger detected");
}
else{
digitalWrite(warning2, LOW);
Serial.println("There is no stranger");
}
}
Blynk.run();
timer.run();
delay(100);
}
//Fungsi untuk tahu alamat server dan port Broker
void init_to_broker(char* myMqttServer, int myMqttPort) {
mqttClient.setServer(myMqttServer, myMqttPort); // Mengatur detail broker target yang digunakan
// jika kita ingin menerima pesan untuk langganan yang dibuat oleh klien sebagai subscriber
// mqttClient.setCallback(callback);
}
//Fungsi untuk connect ke Broker
void connect_to_broker(String clientName) {
Serial.println("Connecting to MQTT Broker...");
String clientId = "ESP32Client-" + clientName;
mqttClient.connect(clientId.c_str()); // Connecting to Broker
while (!mqttClient.connected()) {
Serial.print("failed, rc=");
Serial.println(mqttClient.state());
Serial.println("Reconnecting to MQTT Broker..");
delay(1000);
}
Serial.print(clientId);
Serial.println(" Device to Broker Connected.");
}
void sendDataSensor(String Topic_1, float sensorMQ2){
char yourPayloadString[8];
// untuk mengonversi nilai sensor. sensorMQ2 (nilai yg ingin dikonversi), 1 (jumlah digit yg ingin dipertahankan sebelum desimal)
// 2 (jumlah digit setelah desimal), yourPayloadString (karakter array tempat hasil konversi disimpan)
dtostrf(sensorMQ2, 1, 2, yourPayloadString);
// untuk mengirim data ke server atau broker MQTT
mqttClient.publish(Topic_1.c_str(), yourPayloadString);
Serial.print(Topic_1);
Serial.print(" ==> ");
Serial.println(sensorMQ2);
}Loading
esp32-devkit-v1
esp32-devkit-v1