Home » , , , , » Kode ESP32 untuk DHT22 & MQTT

Kode ESP32 untuk DHT22 & MQTT

Written By SBlog on Tuesday, February 18, 2025 | February 18, 2025

 Berikut contoh program ESP32 dengan MQTT:

#include <WiFi.h>

#include <PubSubClient.h>

#include <DHT.h>


// Konfigurasi WiFi

const char *ssid = "wifi";

const char *password = "passwordwifi";


// Konfigurasi MQTT Broker

const char *mqtt_broker = "broker.emqx.io";

const char* topic_temp = "sensor/dht22/temperature";

const char* topic_humid = "sensor/dht22/humidity";

const char *mqtt_username = "CobaID"; 

const char *mqtt_password = "xxxxxx"; 

const int mqtt_port = 1883;

String client_id = "mqttx_xxxxx" + String(random(0xffff), HEX); // ID unik untuk tiap koneksi


WiFiClient espClient;

PubSubClient client(espClient);


// ======= Konfigurasi DHT22 =======

#define DHTPIN 4       // Pin Data DHT22 (bisa disesuaikan)

#define DHTTYPE DHT22  // Tipe Sensor DHT

DHT dht(DHTPIN, DHTTYPE);


// Fungsi untuk koneksi WiFi

void connectWiFi() {

    Serial.print("Menghubungkan ke WiFi ");

    Serial.println(ssid);

    WiFi.begin(ssid, password);

    while (WiFi.status() != WL_CONNECTED) {

        delay(500);

        Serial.print(".");

    }

    Serial.println("\nTerhubung ke WiFi!");

    Serial.print("Alamat IP ESP32: ");

    Serial.println(WiFi.localIP());

}


// Callback MQTT untuk menerima pesan

void callback(char* topic, byte* payload, unsigned int length) {

    Serial.print("Pesan diterima dari topik: ");

    Serial.println(topic);

    Serial.print("Isi pesan: ");

    for (int i = 0; i < length; i++) {

        Serial.print((char)payload[i]);

    }

    Serial.println();

}


// Fungsi koneksi MQTT

void connectMQTT() {

    Serial.print("Menghubungkan ke MQTT broker...");

    client.setServer(mqtt_broker, mqtt_port);

    client.setCallback(callback);


    while (!client.connected()) {

        if (client.connect("ESP32_DHT22_Client")) {

            Serial.println(" Terhubung!");

            client.subscribe("sensor/dht22/command");  // Topik tambahan jika ingin menerima perintah

        } else {

            Serial.print(" Gagal, kode error: ");

            Serial.println(client.state());

            delay(5000);

        }

    }

}


void setup() {

    Serial.begin(115200);

    dht.begin();

    connectWiFi();

    connectMQTT();

}


void loop() {

    if (!client.connected()) {

        connectMQTT();

    }

    client.loop();


    // Baca suhu & kelembaban dari DHT22

    float temperature = dht.readTemperature(); // Celsius

    float humidity = dht.readHumidity();


    if (isnan(temperature) || isnan(humidity)) {

        Serial.println("Gagal membaca dari DHT22!");

        return;

    }


    Serial.print("Suhu: ");

    Serial.print(temperature);

    Serial.print(" °C, Kelembaban: ");

    Serial.print(humidity);

    Serial.println(" %");


    // Kirim data ke MQTT

    char tempStr[8], humidStr[8];

    dtostrf(temperature, 6, 2, tempStr);

    dtostrf(humidity, 6, 2, humidStr);

    client.publish(topic_temp, tempStr);

    client.publish(topic_humid, humidStr);


    delay(5000);  // Kirim data setiap 5 detik

}


Silahkan mencoba

0 comments:

Post a Comment

(^_^) [o_o] (^.^) (".") ($.$)