Cara Aman Hubungkan ESP32/ESP8266 ke MQTT Cloud Broker Private Gratis dengan SSL/TLS 8883
Ingin membuat proyek IoT yang aman tanpa menguras dompet? Di artikel ini, kamu akan belajar cara mudah dan aman menghubungkan ESP32/ESP8266 ke MQTT Broker Private gratis menggunakan SSL/TLS di port 8883.
Dengan langkah-langkah sederhana, kamu bisa memastikan data perangkat IoT kamu terlindungi dari potensi serangan, tanpa perlu khawatir soal biaya.
Tidak perlu jadi ahli, siapa pun bisa melakukannya! Yuk, simak panduan lengkapnya dan lihat betapa mudahnya membangun koneksi IoT yang anti-hack dengan MQTT Broker Private yang gratis ini.
***
Daftar ke HiveMQ Cloud
Silakan buka web: https://www.hivemq.com/products/mqtt-cloud-broker/
Silakan klik Sign Up Free:
Pada bagian ini, biar gampang silakan LOG IN WITH GOOGLE.
Selanjutnya silakan pilih Akun Google yang mau digunakan, kemudian pilih Lanjutkan.
Ketika muncul form dibawah ini, silakan isi Nama, Job Title, dan Company.
Lalu klik Continue.
Sip sampai sini kamu sudah berhasil Daftar ke HiveMQ Cloud.
***
Membuat Cluster HiveMQ Cloud
Silakan klik tombol Create New Cluster.
Silakan pilih yang Serverless, yang FREE dengan klik tombol Create Serverless Cluster.
Jika berhasil maka akan muncul tampilan seperti dibawah ini, dan silakan klik Manage Cluster.
Setelahnya akan muncul tampilan dibawah ini, yang menampilkan Cluster Detail dari MQTT Broker punya Kamu.
Cluster URL adalah MQTT Broker Private kamu, sebaiknya jangan disebarkan kemanapun ya.
Kemudian untuk Port disitu ada 8883 untuk Port TLS menggunakan TCP/IP.
Membuat Akun Baru di Cluster
Selanjutkan kita akan membuat Akun, silakan bukan ACCESS MANAGEMENT.
Kemudian silakan isi username dan password dan permission pilih Publish and Subscribe.
Kemudian klik CREATE CREDENTIAL.
Jika berhasil maka dibawahnya akan muncul seperti dibawah ini:
***
Sesuaikan Library dan Lainnya
Sebelum mulai copy paste coding arduinonya, pastikan bahwa Library dan lainnya sudah sesuai.
- Saya menggunakan Software Arduino IDE versi 1.8.19, kalo misalkan kamu menggunakan Arduino IDE versi 2 harusnya bisa-bisa aja.
- Saya sudah menambahkan Library Board ESP32 ke Arduino IDE, kalo misalkan kamu belum menambahkan silakan ikuti tutorial berikut: https://www.youtube.com/watch?v=ucTZPu5FU_k
- Saya menggunakan Library Board ESP32 versi 2.0.17, pastikan yang ini sesuai ya.
Silakan sesuaikan dulu dan Pastikan sesuai, kemudian selanjutnya baru Install Library PubSubClient:
Download library pubsubclient: https://github.com/knolleary/pubsubclient/archive/refs/heads/master.zip
Jika sudah didownload silakan ditambah ke Arduino IDE Librarynya, jika tidak paham cara menambahkan library Arduino IDE silakan ikuti panduan berikut: https://kelasrobot.com/blog/2016/09/15/bagaimana-cara-memasukan-library-ke-aplikasi-arduino-ide
Coding Arduino MQTT TLS SSL
Silakan copy paste coding berikut dan masukan ke Arduino IDE:
#ifdef ESP8266
#include <ESP8266WiFi.h>
#else
#include <WiFi.h>
#define BUILTIN_LED 2
#endif
#include <PubSubClient.h>
#include <WiFiClientSecure.h>
// WiFi credentials
const char* ssid = "isi nama wifi";
const char* password = "isi password wifi";
// MQTT Broker settings
const char* mqtt_server = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.s1.eu.hivemq.cloud";
const char* mqtt_username = "isi username";
const char* mqtt_password = "isi password";
const int mqtt_port = 8883;
// Topics
const char* sensor_topic = "sensor";
const char* led_topic = "led";
// MQTT Client
WiFiClientSecure espClient;
PubSubClient client(espClient);
unsigned long lastMsg = 0;
#define MSG_BUFFER_SIZE 50
char msg[MSG_BUFFER_SIZE];
// Root certificate for secure connection
static const char *root_ca PROGMEM = R"EOF(
-----BEGIN CERTIFICATE-----
MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAw
TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh
cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4
WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJu
ZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBY
MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54rVygc
h77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+
0TM8ukj13Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6U
A5/TR5d8mUgjU+g4rk8Kb4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sW
T8KOEUt+zwvo/7V3LvSye0rgTBIlDHCNAymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyH
B5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ4Q7e2RCOFvu396j3x+UC
B5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf1b0SHzUv
KBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWn
OlFuhjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTn
jh8BCNAw1FtxNrQHusEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbw
qHyGO0aoSCqI3Haadr8faqU9GY/rOPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CI
rU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV
HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY9umbbjANBgkq
hkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL
ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ
3BebYhtF8GaV0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KK
NFtY2PwByVS5uCbMiogziUwthDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5
ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJwTdwJx4nLCgdNbOhdjsnvzqvHu7Ur
TkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nxe5AW0wdeRlN8NwdC
jNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZAJzVc
oyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq
4RgqsahDYVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPA
mRGunUHBcnWEvgJBQl9nJEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57d
emyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc=
-----END CERTIFICATE-----
)EOF";
// Connect to WiFi
void setup_wifi() {
delay(10);
Serial.println("\nConnecting to WiFi...");
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nWiFi connected! IP address: ");
Serial.println(WiFi.localIP());
}
// Reconnect to MQTT broker
void reconnect() {
while (!client.connected()) {
Serial.println("Attempting MQTT connection...");
String clientId = "ESPClient-" + String(random(0xffff), HEX);
if (client.connect(clientId.c_str(), mqtt_username, mqtt_password)) {
Serial.println("Connected to MQTT broker");
client.subscribe(led_topic);
} else {
Serial.print("Failed, rc=");
Serial.println(client.state());
Serial.println(" Trying again in 5 seconds...");
delay(5000);
}
}
}
// MQTT callback
void callback(char* topic, byte* payload, unsigned int length) {
String message;
for (int i = 0; i < length; i++) {
message += (char)payload[i];
}
Serial.println("Message received [" + String(topic) + "]: " + message);
if (strcmp(topic, led_topic) == 0) {
if (message.equals("1")) digitalWrite(BUILTIN_LED, LOW); // Turn on LED
else digitalWrite(BUILTIN_LED, HIGH); // Turn off LED
}
}
// Publish a message
void publishMessage(const char* topic, String payload, boolean retained) {
if (client.publish(topic, payload.c_str(), retained)) {
Serial.println("Message published [" + String(topic) + "]: " + payload);
}
}
void setup() {
Serial.begin(115200);
setup_wifi();
pinMode(BUILTIN_LED, OUTPUT);
#ifdef ESP8266
espClient.setInsecure();
#else
espClient.setCACert(root_ca);
#endif
client.setServer(mqtt_server, mqtt_port);
client.setCallback(callback);
}
int counter = 0;
void loop() {
if (!client.connected()) reconnect();
client.loop();
unsigned long now = millis();
if (now - lastMsg > 10000) {
lastMsg = now;
counter++;
String msg = String(counter);
publishMessage(sensor_topic, msg, false);
}
}
Silakan sesuaikan bagian ssid dan password dengan wifi kamu, bisa gunakan Tathering. Kemudian sesuaikan juga bagian mqtt_server, mqtt_username dan mqtt_password.
Jika semua sudah sesuai silakah Pilih Board yang sesuai, pilih Port yang sesuai terus Upload.
***
Pengujian Cek Pada Serial Monitor
Silakan buka serial monitor, set baud rate ke 115200 dan coba tekan tombol rst di ESP32 atau ESP8266, jika berhasil tampilan serial monitornya seperti gambar dibawah ini:
Oke terakhir kamu juga bisa nguji pake MQTT Client ya, untuk uji coba Kirim dan Terima data.