Tutorial ESP32: Mengirim Data Sensor ke Internet dengan MQTT

Halo Sobat Maker! ๐Ÿ‘‹

Pada tutorial kali ini, kita akan belajar salah satu konsep dasar dari Internet of Things (IoT), yaitu bagaimana cara mengirim data dari sensor yang terhubung ke ESP32 ke internet. Kita akan menggunakan protokol MQTT yang sangat ringan dan populer di dunia IoT.

Proyek ini akan membaca nilai dari sebuah sensor analog, menghasilkan sebuah nilai acak, lalu mengirim kedua data tersebut ke sebuah MQTT Broker publik. Ayo kita mulai!


๐Ÿ“ Alat dan Bahan

Sebelum memulai, pastikan kamu sudah menyiapkan semua yang dibutuhkan:

Hardware:

  1. ESP32 Dev Kit: Otak dari proyek kita.
  2. Sensor Analog: Bisa menggunakan potensiometer (untuk simulasi), sensor LDR (cahaya), atau sensor suhu seperti LM35. Dalam tutorial ini, kita akan asumsikan menggunakan potensiometer karena paling mudah untuk testing.
  3. Breadboard dan Kabel Jumper.

Software:

  1. Arduino IDE yang sudah ter-install board ESP32.
  2. Library MQTT: Buka Library Manager di Arduino IDE (Sketch > Include Library > Manage Libraries...), cari ArduinoMqttClient, lalu install.

๐Ÿ› ๏ธ Rangkaian

Hubungkan komponen seperti pada diagram di bawah ini. Kita akan menyambungkan output sensor ke GPIO 34 di ESP32, yang merupakan pin Analog-to-Digital Converter (ADC).

  • Pin VCC atau 5V/3.3V sensor ke pin 3V3 ESP32.
  • Pin GND sensor ke pin GND ESP32.
  • Pin OUT/SIG sensor ke pin 34 ESP32.

Jika menggunakan potensiometer, sambungkan pin tengah ke GPIO 34, dan kedua pin sisinya ke 3V3 dan GND.


๐Ÿ’ป Kode Program

Berikut adalah kode lengkap yang akan kita gunakan. Salin dan tempel kode ini ke Arduino IDE Anda.

#include <WiFi.h>
#include <MQTT.h>

// --- KONFIGURASI ---
const char ssid[] = "HUAWEI"; // Ganti dengan nama WiFi Anda
const char pass[] = "sokpakeaja"; // Ganti dengan password WiFi Anda
const char* mqtt_server = "broker.emqx.io"; // MQTT Broker publik
const char* client_id = "CVSEJNVJSA"; // Ganti dengan ID unik Anda, misal: "esp32-projek-suhu"

WiFiClient net;
MQTTClient client;

unsigned long lastMillis = 0;

// --- PIN SENSOR ---
const int sensorPin = 34; // GPIO34 untuk ESP32 (ADC)

void connect() {
  Serial.print("Menghubungkan ke WiFi...");
  while (WiFi.status() != WL_CONNECTED) {
    Serial.print(".");
    delay(1000);
  }
  Serial.println("\nTerhubung ke WiFi!");

  Serial.print("Menghubungkan ke MQTT Broker...");
  while (!client.connect(client_id, "public", "public")) {
    Serial.print(".");
    delay(1000);
  }
  Serial.println("\nTerhubung ke MQTT Broker!");

  // Subscribe ke sebuah topic (opsional untuk proyek ini)
  client.subscribe("uniot/suhu");
}

void setup() {
  Serial.begin(9600);
  WiFi.begin(ssid, pass);

  pinMode(sensorPin, INPUT);

  client.begin(mqtt_server, net);
  connect();
}

void loop() {
  client.loop(); // Penting untuk menjaga koneksi MQTT
  delay(10);

  // Jika koneksi terputus, coba hubungkan kembali
  if (!client.connected()) {
    connect();
  }

  // Kirim data setiap 5 detik
  if (millis() - lastMillis > 5000) {
    lastMillis = millis();

    // --- Baca Nilai Sensor ---
    //int sensorValue = analogRead(sensorPin);
    // Konversi nilai ADC (0-4095) ke skala 0-100
    //int suhuSensor = map(sensorValue, 0, 4095, 0, 100);

    // --- Buat Nilai Acak (untuk testing) ---
    int suhuRandom = random(1, 30);

    // --- Publikasi (Publish) Data ke MQTT Broker ---
    //client.publish("uniot/suhu/sensor", String(suhuSensor));
    client.publish("uniot/suhu/random", String(suhuRandom));

    // Serial.print("Data terkirim -> Sensor: ");
    // Serial.print(suhuSensor);
    Serial.print(" | Random: ");
    Serial.println(suhuRandom);
  }
}

๐Ÿ” Penjelasan Kode

Mari kita bedah bagian-bagian penting dari kode di atas.

Bagian 1: Konfigurasi Awal

const char ssid[] = "HUAWEI"; 
const char pass[] = "sokpakeaja"; 
const char* mqtt_server = "broker.emqx.io"; 
const char* client_id = "CVSEJNVJSA";

Di sini kita mengatur semua konfigurasi.

  • ssid dan pass: Nama dan password jaringan WiFi Anda.
  • mqtt_server: Alamat server MQTT. broker.emqx.io adalah broker publik gratis yang bisa kita gunakan untuk belajar.
  • client_id: Nama unik untuk perangkat Anda. Ini harus unik! Jika ada perangkat lain di broker yang sama dengan ID yang sama, akan terjadi konflik. Ganti dengan nama yang unik, misalnya “esp32-lab-01”.

Bagian 2: Fungsi connect()

Fungsi ini melakukan dua hal:

  1. Menghubungkan ESP32 ke jaringan WiFi.
  2. Setelah terhubung ke WiFi, menghubungkan ESP32 ke MQTT Broker.

Bagian 3: Fungsi loop()

Ini adalah jantung dari program kita.

  • client.loop();: Baris ini sangat penting untuk menjaga koneksi MQTT tetap hidup dan memproses pesan yang masuk/keluar.
  • if (!client.connected()): Cek apakah koneksi ke broker masih tersambung. Jika tidak, ia akan memanggil fungsi connect() untuk menyambung ulang.
  • if (millis() - lastMillis > 5000): Ini adalah timer non-blocking. Daripada menggunakan delay(5000) yang akan “menghentikan” program, cara ini membuat program tetap berjalan dan hanya akan mengirim data jika sudah lewat 5 detik sejak pengiriman terakhir.
  • analogRead(sensorPin): Membaca nilai dari sensor di pin 34. ESP32 memiliki ADC 12-bit, sehingga nilainya berkisar dari 0 hingga 4095.
  • map(sensorValue, 0, 4095, 0, 100): Fungsi ini mengubah (memetakan) rentang nilai. Kita mengubah nilai ADC (0-4095) menjadi skala yang lebih mudah dibaca, misalnya persentase (0-100).
  • client.publish("topic", "pesan"): Inilah fungsi utama MQTT. Kita mempublikasikan sebuah pesan ke sebuah topic. Perangkat lain yang “mendengarkan” (subscribe) topic tersebut akan menerima pesan ini.
    • Topic: uniot/suhu/sensor adalah alamat data sensor.
    • Pesan: String(suhuSensor) adalah nilai sensor yang diubah menjadi teks.

๐Ÿš€ Uji Coba

  1. Ubah Konfigurasi: Pastikan Anda sudah mengganti ssid, pass, dan client_id di dalam kode.
  2. Upload Kode: Pilih board “ESP32 Dev Module” dan port yang benar, lalu klik tombol Upload.
  3. Buka Serial Monitor: Atur baud rate ke 9600. Anda akan melihat log koneksi dan data yang dikirim setiap 5 detik.

Integrasi Dengan UnIoT

Untuk bisa mengontrol relay dengan UnIoT hanya dengan memasukkan broker, port dan juga topik pada halaman button settings.


Diterbitkan

dalam

oleh

Tags:

Comments

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *