Tutorial Mengintegrasikan Mikrokontroler ESP32 ke Broker MQTT sebagai Publisher dan Subscriber
Implementasi MQTT pada mikrokontroler ESP32 akan melibatkan beberapa langkah. Berikut adalah langkah-langkahnya:
Instalasi Library pada Arduino IDE
Buka Arduino IDE dan pilih "Sketch" > "Include Library" > "Manage Libraries" Cari library "PubSubClient," dan instal library tersebut.
Pengaturan Koneksi Wi-Fi dan Konfigurasi Broker MQTT
Buat atau buka proyek Arduino IDE untuk ESP32. Sisipkan kode untuk mengonfigurasi koneksi Wi-Fi. Anda perlu menyediakan SSID dan kata sandi Wi-Fi Anda. Berikut kode nya:
// WiFi
const char *ssid = "****"; // Enter your Wi-Fi name
const char *password = "****"; // Enter Wi-Fi password
Kemudian untuk konfigurasi Broker, Anda perlu menyediakan alamat IP broker dan port (biasanya 1883 untuk MQTT). Berikut merupakan contoh kode nya:
// MQTT Broker (Anda dapat menggunakan broker ini jika hanya ingin mencoba komunikasi anatar MQTT dan ESP32
// Broker ini public
const char *mqtt_broker = "broker.emqx.io";
const char *topic = "emqx/ESP32";
const char *mqtt_username = "emqx";
const char *mqtt_password = "public";
const int mqtt_port = 1883;
Inisialisasi Klien MQTT dan Koneksi ke Broker MQTT, Publish & Subscribe Pesan, Penanganan Pesan Serta Disconnect dan Reconnect
Pertama anda dapat Inisialisasikan klien MQTT dengan mengatur nama klien dan menghubungkannya ke broker. Caranya seperti berikut:
WiFiClient espClient;
PubSubClient client(espClient);
Selanjutnya di dalam fungsi setup(), tambahkan kode untuk menghubungkan ESP32 ke broker MQTT, Publish dan Subscribe Pesan, Penanganan Pesan dan Disconnect dan Reconnect. Berikut merupakan contoh kode yang mungkin dapat anda terapkan:
void setup() {
// Mengatur kecepatan baud rate untuk koneksi serial ke 115200
Serial.begin(115200);
// Menghubungkan ke jaringan WiFi dengan nama SSID (ssid) dan kata sandi (password)
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.println("Menghubungkan ke WiFi..");
}
Serial.println("Terhubung ke jaringan Wi-Fi");
// Menghubungkan ke broker MQTT dengan alamat dan port yang ditentukan
client.setServer(mqtt_broker, mqtt_port);
client.setCallback(callback);
while (!client.connected()) {
String client_id = "esp32-client-";
client_id += String(WiFi.macAddress());
Serial.printf("Klien %s terhubung ke broker MQTT publik\n", client_id.c_str());
// Mencoba menghubungkan ke broker MQTT dengan ID klien, nama pengguna, dan kata sandi yang ditentukan
if (client.connect(client_id.c_str(), mqtt_username, mqtt_password)) {
Serial.println("Terhubung ke broker MQTT publik EMQX");
} else {
Serial.print("Gagal dengan status ");
Serial.print(client.state());
delay(2000);
}
}
// Publish pesan dan berlangganan ke topik tertentu
client.publish(topic, "Halo, saya ESP32 dari nauval^^");
client.subscribe(topic);
}
void callback(char *topic, byte *payload, unsigned int length) {
Serial.print("Pesan tiba di topik: ");
Serial.println(topic);
Serial.print("Pesan: ");
for (int i = 0; i < length; i++) {
Serial.print((char) payload[i]);
}
Serial.println();
Serial.println("-----------------------");
}
Output hasil pada Arduino IDE dan MQTT
Arduino IDE:
MQTT:
Full Code
#include <WiFi.h>
#include <PubSubClient.h>
// WiFi
const char *ssid = "***"; // Enter your Wi-Fi name
const char *password = "****"; // Enter Wi-Fi password
// MQTT Broker (Anda dapat menggunakan broker ini jika hanya ingin mencoba komunikasi anatar MQTT dan ESP32
// Broker ini public
const char *mqtt_broker = "broker.emqx.io";
const char *topic = "emqx/ESP32";
const char *mqtt_username = "emqx";
const char *mqtt_password = "public";
const int mqtt_port = 1883;
WiFiClient espClient;
PubSubClient client(espClient);
void setup() {
// Mengatur kecepatan baud rate untuk koneksi serial ke 115200
Serial.begin(115200);
// Menghubungkan ke jaringan WiFi dengan nama SSID (ssid) dan kata sandi (password)
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.println("Menghubungkan ke WiFi..");
}
Serial.println("Terhubung ke jaringan Wi-Fi");
// Menghubungkan ke broker MQTT dengan alamat dan port yang ditentukan
client.setServer(mqtt_broker, mqtt_port);
client.setCallback(callback);
while (!client.connected()) {
String client_id = "esp32-client-";
client_id += String(WiFi.macAddress());
Serial.printf("Klien %s terhubung ke broker MQTT publik\n", client_id.c_str());
// Mencoba menghubungkan ke broker MQTT dengan ID klien, nama pengguna, dan kata sandi yang ditentukan
if (client.connect(client_id.c_str(), mqtt_username, mqtt_password)) {
Serial.println("Terhubung ke broker MQTT publik EMQX");
} else {
Serial.print("Gagal dengan status ");
Serial.print(client.state());
delay(2000);
}
}
// Publish pesan dan berlangganan ke topik tertentu
client.publish(topic, "Halo, saya ESP32 dari nauval^^");
client.subscribe(topic);
}
void callback(char *topic, byte *payload, unsigned int length) {
Serial.print("Pesan tiba di topik: ");
Serial.println(topic);
Serial.print("Pesan: ");
for (int i = 0; i < length; i++) {
Serial.print((char) payload[i]);
}
Serial.println();
Serial.println("-----------------------");
}
void loop() {
// Memproses pesan MQTT dan menjaga koneksi
client.loop();
}
Komentar
Posting Komentar