Cara Mengirim Suhu dan Kelembapan ESP32 ke MQTT — Simulasi Online

Di proyek IoT sungguhan, data sensor dikirim ke server untuk dipantau sebagai grafik. Template ini menirunya: ESP32 menerbitkan suhu ke topik noviot/suhu dan kelembapan ke noviot/kelembapan setiap 2 detik, dan hasilnya digambar di tab Dashboard IoT.

Board: ESP323 komponen

Komponen yang dipakai

  • ESP32
  • Breadboard (setengah)
  • LED
  • Resistor

Cara kerja

  1. ESP32 terhubung ke WiFi lalu ke broker MQTT virtual broker.noviot.local port 1883.
  2. Setiap 2 detik (dijadwalkan dengan millis()) nilai suhu dan kelembapan simulasi berubah sedikit.
  3. Kedua nilai diterbitkan (publish) ke topiknya masing-masing; LED GPIO2 berkedip singkat tanda pengiriman.
  4. Buka tab Dashboard IoT untuk melihat grafik suhu dan kelembapan yang terus bergerak.

Konsep yang dipelajari

MQTT dengan banyak topikDashboard IoTPublish berkala dengan millis()Data iklim simulasi

Kode program

#include <WiFi.h>
#include <PubSubClient.h>

#define WIFI_SSID "NOVIOT"
#define WIFI_PASSWORD "12345678"

// Broker MQTT virtual NOVIOT (tab MQTT di samping editor).
const char* MQTT_SERVER = "broker.noviot.local";
const int MQTT_PORT = 1883;

const char* TOPIK_SUHU = "noviot/suhu";
const char* TOPIK_LEMBAP = "noviot/kelembapan";

const int LED_AKTIVITAS = 2;

WiFiClient espClient;
PubSubClient client(espClient);

// Dua nilai sensor disimulasikan: berubah perlahan seperti ruangan asli.
int suhu = 28;
int kelembapan = 60;
int arah = 1;
unsigned long terakhirKirim = 0;

void setup() {
  Serial.begin(115200);
  pinMode(LED_AKTIVITAS, OUTPUT);

  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
  Serial.print("Menghubungkan ke WiFi");
  while (WiFi.status() != WL_CONNECTED) {
    delay(100);
    Serial.print(".");
  }
  Serial.println(" Terhubung!");

  client.setServer(MQTT_SERVER, MQTT_PORT);
}

void loop() {
  if (!client.connected()) {
    Serial.print("Menghubungkan ke broker MQTT... ");
    if (client.connect("noviot-iklim")) {
      Serial.println("Terhubung!");
    } else {
      Serial.println("gagal, coba lagi 1 detik...");
      delay(1000);
      return;
    }
  }
  client.loop();

  if (millis() - terakhirKirim >= 2000) {
    terakhirKirim = millis();

    suhu += arah;
    if (suhu >= 34) arah = -1;
    if (suhu <= 28) arah = 1;
    kelembapan += (arah > 0 ? -2 : 2);
    if (kelembapan > 72) kelembapan = 72;
    if (kelembapan < 54) kelembapan = 54;

    // LED berkedip singkat setiap kali data dikirim.
    digitalWrite(LED_AKTIVITAS, HIGH);
    client.publish(TOPIK_SUHU, String(suhu).c_str());
    client.publish(TOPIK_LEMBAP, String(kelembapan).c_str());
    digitalWrite(LED_AKTIVITAS, LOW);

    Serial.print("Publish: suhu=");
    Serial.print(suhu);
    Serial.print(" C, kelembapan=");
    Serial.print(kelembapan);
    Serial.println(" %");
    Serial.println("Lihat grafiknya di tab Dashboard IoT!");
  }
}

Template ESP32 lainnya