Cara menghubungkan ESP8266 ke MQTT public Gratis
MQTT adalah salah satu jenis protokol ringan yang bisa melakukan komunikasi secara full duplex untuk bertukar data secara online.
kali ini saya akan mencoba bagaimana menghubungkan ESP8266 ke MQTT broker secara gratis.tapi sebelum itu ada beberapa komponen atau peratan yang diperlukan seperti :
- esp8266
- arduino IDE
- MQTT x : MQTT broker gratis
- The free public MQTT broker
- Broker: broker.emqx.io
- TCP Port: 1883
- Websocket Port: 8083
setelah anda mempersiapakan esp8266 dan arduino IDE sudah terinstall di komputer, maka selanjtunya adalah kita install dulu MQTT x nya..caranya silahkankan klik link ini kemudian download aplikasi MQTTx nya serta sesuaikan dengan sistem operasi komputer anda.
setelah anda download aplikasi dari MQTT x ini silahkan anda instal ke laptop anda masing-masing hingga muncul tampilan seperti dibawah ini.
langkah selanjutya adalah kita membuat koneksi baru.caranya adalah silahkan klik tombol new connection pada gambar diatas hingga muncul tampilan seperti dibawah ini .
selanjutnya adalah silahkan isi :
- nama : esp8266
- username : instrument
- password : instrument83
setelah anda isi semua text box yang ada di tab general langkah selanjutnya adalah silahkan klik tombol connect.
setelah anda klik tombol connect akan muncul tampilan seperti dibawah ini.
ok kita sudah selesai untuk setting MQTT x nya, langkah selanjutnya adalah kita akan membuat coding di ESP8266 menggunakan arduino IDE.
pertama-tama kita akan menggunakan 2 buah library, dimana library yang pertama berfungsi untuk menghubungkan ESP8266 ke wifi di tempat kita, kemudian library yang kedua berfungsi untuk menghubungkan esp8266 ke MQTT broker ( dalam hal ini kita menggunakan MQTT x).berikut ini adalah syntax codingnya :
#include <ESP8266WiFi.h> #include <PubSubClient.h>
setelah kita menambahkan library di coding arduino ide langkah selanjutnya adalah kita membuat program untuk menghubungkan ESP8266 ke WIFI dan esp8266 ke MQTT broker.
/ WiFi const char *ssid = "omahrungkat"; // Enter your WiFi name const char *password = "abcghy"; // Enter WiFi password // MQTT Broker const char *mqtt_broker = "broker.emqx.io"; const char *topic = "esp8266/praktikum"; const char *mqtt_username = "instrumentasi"; const char *mqtt_password = "instrumentasi83"; const int mqtt_port = 1883; selanjutnya kita akan mendeklarasikan objek class dari WIFIClient dan PubSubClient dimana fungsi dari objek class ini adalah untuk mendapatkan IP dan port secara spesifik WiFiClient espClient; PubSubClient client(espClient);
selanjutnya adalah kita akan membuat program komunikasi serial yang fungsi dari program ini adalah untuk menampilkan informasi apakah esp8266 sudah terkoneksi ke WIFI atau belum
// Set software serial baud to 115200; Serial.begin(115200); // connecting to a WiFi network WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.println("Connecting to WiFi.."); }
selanjutnya kita akan membuat program yang fungsinya untkuk menampilkan informasi apakah ESP8266 kita sudah terkoneksi ke MQTT broker atau belum
client.setServer(mqtt_broker, mqtt_port); client.setCallback(callback); while (!client.connected()) { String client_id = "esp8266-client-"; client_id += String(WiFi.macAddress()); Serial.printf("The client %s connects to the public mqtt broker\n", client_id.c_str()); if (client.connect(client_id.c_str(), mqtt_username, mqtt_password)) { } else { Serial.print("failed with state "); Serial.print(client.state()); delay(2000); } } void callback(char *topic, byte *payload, unsigned int length) { Serial.print("Message arrived in topic: "); Serial.println(topic); Serial.print("Message:"); for (int i = 0; i < length; i++) { Serial.print((char) payload[i]); } Serial.println(); Serial.println("-----------------------"); }
setelah esp8266 berhasil terhubung ke MQTT broker, ESP8266 akan mengirimkan sebuah pesan ke MQTT broker
// publish and subscribe client.publish(topic, "Praktikum MQTT"); client.subscribe(topic);
kemudian kita akan membuat program untuk memastikan bahwa pesan yang dikirim oleh esp8266 sudah diterima oleh MQTT broker.
void callback(char *topic, byte *payload, unsigned int length) { Serial.print("Message arrived in topic: "); Serial.println(topic); Serial.print("Message:"); for (int i = 0; i < length; i++) { Serial.print((char) payload[i]); } Serial.println(); Serial.println("-----------------------"); }
berikut ini adalah coding program penuhnya :
#include <ESP8266WiFi.h> #include <PubSubClient.h> // WiFi const char *ssid = "omahrungkut"; // Enter your WiFi name const char *password = "nadjib1955"; // Enter WiFi password // MQTT Broker const char *mqtt_broker = "broker.emqx.io"; const char *topic = "esp8266/praktikum"; const char *mqtt_username = "instrumentasi"; const char *mqtt_password = "instrumentasi83"; const int mqtt_port = 1883; WiFiClient espClient; PubSubClient client(espClient); void setup() { // Set software serial baud to 115200; Serial.begin(115200); // connecting to a WiFi network WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.println("Connecting to WiFi.."); } Serial.println("Connected to the WiFi network"); //connecting to a mqtt broker client.setServer(mqtt_broker, mqtt_port); client.setCallback(callback); while (!client.connected()) { String client_id = "esp8266-client-"; client_id += String(WiFi.macAddress()); Serial.printf("The client %s connects to the public mqtt broker\n", client_id.c_str()); if (client.connect(client_id.c_str(), mqtt_username, mqtt_password)) { Serial.println("Public emqx mqtt broker connected"); } else { Serial.print("failed with state "); Serial.print(client.state()); delay(2000); } } // publish and subscribe client.publish(topic, "Praktikum MQTT"); client.subscribe(topic); } void callback(char *topic, byte *payload, unsigned int length) { Serial.print("Message arrived in topic: "); Serial.println(topic); Serial.print("Message:"); for (int i = 0; i < length; i++) { Serial.print((char) payload[i]); } Serial.println(); Serial.println("-----------------------"); } void loop() { client.loop(); }
output dari program ESP8266 ke MQTT broker
output dari serial monitor