//Mata Kuliah :Mobile Internett Of Things Kelas C
// Tugas : Broker MQTT mosquitto dengan NodeMCU ESP32
// Kelompok 9
#include <WiFi.h>
#include <PubSubClient.h>
#include <DHT.h>
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#define dhtPin 15 //Pin input DHT22
#define DHTTYPE DHT22 //Define tipe DHT
int ledPin = 14; // pin untuk led
int inputPin = 12; // pin untuk sensor pir
int pirState = LOW; // kondisi saat pir LOW
int val = 0; // nilai awal pir
DHT dht(dhtPin, DHTTYPE);
LiquidCrystal_I2C lcd(0x27, 20, 4);
#define MSG_BUFFER_SIZE (50)
char msg[MSG_BUFFER_SIZE];
unsigned long lastMsg = 0;
int value = 0;
// Koneksi WiFi
const char* ssid = "Wokwi-GUEST";
const char* password = "";
const char* mqtt_server = "test.mosquitto.org";
WiFiClient espClient;
PubSubClient client(espClient);
void setup_wifi() {
delay(10);
// Memulai koneksi dengan wifi
Serial.println();
Serial.print("Menghubungkan ... ");
Serial.println(ssid);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
randomSeed(micros());
Serial.println("");
Serial.println("WiFi Terhubung");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}
void callback(char* topic, byte* payload, unsigned int length) {
Serial.print("Menerima [");
Serial.print(topic);
Serial.print("]: ");
for (int i = 0; i < length; i++) {
Serial.print((char)payload[i]);
}
Serial.println();
// Menghidupkan LED dengan nilai 1
if ((char)payload[0] == '1') {
digitalWrite(BUILTIN_LED, LOW);
} else {
digitalWrite(BUILTIN_LED, HIGH); // Mematikan LED dengan nilai HIGH
}
}
void reconnect() {
// Loop until we're reconnected
while (!client.connected()) {
Serial.print("Menghubungkan ke MQTT...");
// Create a random client ID
String clientId = "ESP32-Kelompok9";
clientId += String(random(0xffff), HEX);
// Attempt to connect
if (client.connect(clientId.c_str())) {
Serial.println("Terhubung");
// Once connected, publish an announcement...
client.publish("MIOT/Kelompok-9", "Terhubung");
// ... and resubscribe
//client.subscribe("IoTK7");
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in a seconds");
delay(2500);
}
}
}
void setup() {
pinMode(dhtPin, INPUT);
pinMode(ledPin, OUTPUT); // declare LED sebagai output
pinMode(inputPin, INPUT); // declare sensor sebagai input
lcd.init();
lcd.backlight();
lcd.setBacklight(HIGH);
pinMode(BUILTIN_LED, OUTPUT); // LED_BUILTIN sebagai OUTPUT
Serial.begin(115200);
setup_wifi();
client.setServer(mqtt_server, 1883);
client.setCallback(callback);
dht.begin();
}
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
unsigned long now = millis();
// Membaca Sensor
long k = dht.readHumidity();
long s = dht.readTemperature();
val = digitalRead(inputPin); // membaca input value
lcd.setCursor(0,0);
lcd.print("Suhu : ");
lcd.print(s);
lcd.print(" Celsius");
lcd.setCursor(0,1);
lcd.print("Kelembaban : ");
lcd.print(k);
lcd.println(" %");
lcd.setCursor(0,3);
lcd.print("Gerakan: ");
// lcd.print(pirState);
if (val == 1) {
lcd.print("Terdeteksi!");
} else {
lcd.print("Aman...");
}
if (val == HIGH) { // check if the input is HIGH
digitalWrite(ledPin, HIGH); // turn LED ON
if (pirState == LOW) {
// we have just turned on
Serial.println("Gerakan terdeteksi!");
// We only want to print on the output change, not state
pirState = HIGH;
}
} else {
digitalWrite(ledPin, LOW); // turn LED OFF
if (pirState == HIGH) {
// we have just turned of
Serial.println("Gerakan tidak ada!");
// We only want to print on the output change, not state
pirState = LOW;
}
}
if (now - lastMsg > 3000) {
lastMsg = now;
++value;
snprintf(msg, MSG_BUFFER_SIZE, "Suhu = %ld°C, Kelembaban = %ldRH, Gerakan = %ld", s, k, val);
Serial.print("Publish : ");
Serial.println(msg);
client.publish("MIOT/Kelompok-9", msg);
}
}