Praktik pengiriman data dari ESP32 ke Mosquitto, kemudian ESP32 tersebut mengambil data dari Mosquitto yang baru saja dikirim.
Wokwi
- Buka Wokwi dengan masuk di https://wokwi.com
- Buat projek baru dengan klik Add New Projects
- Pilih ESP32
Kode Program Simulasi MQTT
- Buatlah kode program seperti kode dibawah.
- Kode program tersebut digunakan untuk mengirimkan data/messages ke broker Mosquitto sekaligus menerima data yang telah dikirimkan ke broker dengan topic /d3tt.
- Data yang dikirim atau diterima ditampilkan di serial monitor.
include
include
const char* ssid = “Wokwi-GUEST”;
const char* password = “”;
const char* mqtt_server = “test.mosquitto.org”;
const char* mqtt_topic = “/d3tt”; //Disesuaikan dengan inisial nama
WiFiClient espClient;
PubSubClient client(espClient);
unsigned long lastMsg = 0;
define MSG_BUFFER_SIZE (50)
char msg[MSG_BUFFER_SIZE];
int value = 0;
void setup_wifi() {
delay(10);
// We start by connecting to a WiFi network
Serial.println();
Serial.print(“Connecting to “);
Serial.println(ssid);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(“.”);
}
Serial.println(“”);
Serial.println(“WiFi connected”);
Serial.print(“IP address: “);
Serial.println(WiFi.localIP());
}
void callback(char* topic, byte* payload, unsigned int length) {
Serial.print(“Message arrived [“);
Serial.print(topic);
Serial.print(“] “);
for (int i = 0; i < length; i++) {
Serial.print((char)payload[i]);
}
Serial.println();
}
void reconnect() {
// Loop until we’re reconnected
while (!client.connected()) {
Serial.print(“Attempting MQTT connection…”);
// Create a random client ID
String clientId = “ESP32Client-“;
clientId += String(random(0xffff), HEX);
// Attempt to connect
if (client.connect(clientId.c_str())) {
Serial.println(“Connected”);
// Once connected, publish an announcement…
client.publish(mqtt_topic, “D3-TT”); //Nama Server
// … and resubscribe
client.subscribe(mqtt_topic);
} else {
Serial.print(“failed, rc=”);
Serial.print(client.state());
Serial.println(” try again in 5 seconds”);
// Wait 5 seconds before retrying
delay(5000);
}
}
}
void setup() {
Serial.begin(115200);
setup_wifi();
client.setServer(mqtt_server, 1883);
client.setCallback(callback);
}
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
unsigned long now = millis();
if (now – lastMsg > 2000) {
lastMsg = now;
++value;
snprintf (msg, MSG_BUFFER_SIZE, “Nomor Urut #%ld”, value);
Serial.print(“Publish message: “);
Serial.println(msg);
client.publish(mqtt_topic, msg);
}
}
Simulasi MQTT
- Jalankan simulasi dengan klik Start Simulation.
- Tunggu sebentar hingga wifi terkoneksi.
- ESP32 akan mengirim data sesuai dengan program ke broker Mosquitto.
- ESP32 juga menerima data dari Mosquitto sesuai dengan topic.
Praktek MQTT dengan Mosquitto
Pengiriman data dari ESP32 ke Mosquitto, kemudian ESP32 yang lain mengambil data dari Mosquitto.
Langkah-langkah
- Buka Wokwi dengan masuk di https://wokwi.com
- Buat projek baru dengan klik Add New Projects
- Pilih ESP32 yang digunakan sebagai publisher.
- Buka jendela baru dan buka Wokwi lagi lalu tambahkan ESP32 yang digunakan sebagai subscriber.
- Sehingga total terdapat 2 tab Wokwi.
Kode Program ESP32 publisher
•Buatlah kode program seperti gambar disamping pada ESP32 yang berfungsi sebagai publisher. •Kode program tersebut digunakan untuk mengirimkan data/messages ke broker Mosquitto sekaligus menerima data yang telah dikirimkan ke broker dengan topic /d3tt.
Kode Program ESP32 subscriber
- Buatlah kode program seperti gambar disamping untuk ESP32 yang berfungsi sebagai subscriber.
- Kode program tersebut digunakan untuk menerima data yang telah dikirimkan oleh publisher ke broker dengan topic /d3tt.
//MQTT Publisher
include
include
const char* ssid = “Wokwi-GUEST”;
const char* password = “”;
const char* mqtt_server = “test.mosquitto.org”;
const char* mqtt_topic = “/d3tt”;
WiFiClient espClient;
PubSubClient client(espClient);
unsigned long lastMsg = 0;
define MSG_BUFFER_SIZE (50)
char msg[MSG_BUFFER_SIZE];
int value = 0;
void setup_wifi() {
delay(10);
// We start by connecting to a WiFi network
Serial.println();
Serial.print(“Connecting to “);
Serial.println(ssid);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(“.”);
}
//randomSeed(micros());
Serial.println(“”);
Serial.println(“WiFi connected”);
Serial.println(“IP address: “);
Serial.println(WiFi.localIP());
}
void callback(char* topic, byte* payload, unsigned int length) {
// Serial.print(“Message arrived [“);
// Serial.print(topic);
// Serial.print(“] “);
// for (int i = 0; i < length; i++) {
// Serial.print((char)payload[i]);
// }
// Serial.println();
}
void reconnect() {
// Loop until we’re reconnected
while (!client.connected()) {
Serial.print(“Attempting MQTT connection…”);
// Create a random client ID
String clientId = “ESP32Client-“;
clientId += String(random(0xffff), HEX);
// Attempt to connect
if (client.connect(clientId.c_str())) {
Serial.println(“Connected”);
// Once connected, publish an announcement…
client.publish(mqtt_topic, “D3-TT”);
// … and resubscribe
client.subscribe(mqtt_topic);
} else {
Serial.print(“failed, rc=”);
Serial.print(client.state());
Serial.println(” try again in 5 seconds”);
// Wait 5 seconds before retrying
delay(5000);
}
}
}
void setup() {
pinMode(2, OUTPUT); // Initialize the BUILTIN_LED pin as an output
Serial.begin(115200);
setup_wifi();
client.setServer(mqtt_server, 1883);
client.setCallback(callback);
}
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
unsigned long now = millis();
if (now – lastMsg > 2000) {
lastMsg = now;
++value;
snprintf (msg, MSG_BUFFER_SIZE, “Nomor Absen #%ld”, value);
Serial.print(“Publish message: “);
Serial.println(msg);
client.publish(mqtt_topic, msg);
}
}
Simulasi MQTT
- Buka tab ESP32 publisher, lalu jalankan simulasi.
- Buka tab ESP32 subscriber, lalu jalankan simulasi.
- Buka tab ESP32 publisher.
- Tunggu sebentar hingga Wifi terkoneksi dan mulai menirimkan data.
- Saat ESP32 sudah mengirimkan data, buka tab ESP32 subscriber dan pastikan data sudah diterima sesuai dengan yang dikirimkan oleh ESP32 publisher.
Praktek MQTT dengan Smartphone
Rangkaian ESP32 dengan Sensor DHT22
Kode Program
#include <WiFi.h> #include <PubSubClient.h> #include "DHTesp.h" const int DHT_PIN = 15; DHTesp dhtSensor; const char* ssid = "Wokwi-GUEST"; const char* password = ""; const char* mqtt_server = "test.mosquitto.org"; WiFiClient espClient; PubSubClient client(espClient); unsigned long lastMsg = 0; #define MSG_BUFFER_SIZE (50) float temp = 0; float hum = 0; int value = 0; void setup_wifi() { delay(10); // We start by connecting to a WiFi network Serial.println(); Serial.print("Connecting to "); Serial.println(ssid); WiFi.mode(WIFI_STA); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } randomSeed(micros()); Serial.println(""); Serial.println("WiFi connected"); Serial.println("IP address: "); Serial.println(WiFi.localIP()); } void callback(char* topic, byte* payload, unsigned int length) { Serial.print("Message arrived ["); Serial.print(topic); Serial.print("] "); for (int i = 0; i < length; i++) { Serial.print((char)payload[i]); } Serial.println(); // Switch on the LED if an 1 was received as first character if ((char)payload[0] == '1') { digitalWrite(2, LOW); // Turn the LED on (Note that LOW is the voltage level // but actually the LED is on; this is because // it is active low on the ESP-01) } else { digitalWrite(2, HIGH); // Turn the LED off by making the voltage HIGH } } void reconnect() { // Loop until we're reconnected while (!client.connected()) { Serial.print("Attempting MQTT connection..."); // Create a random client ID String clientId = "ESP8266Client"; clientId += String(random(0xffff), HEX); // Attempt to connect if (client.connect(clientId.c_str())) { Serial.println("Connected"); // Once connected, publish an announcement... client.publish("/d3tt", "Connected"); // ... and resubscribe client.subscribe("/d3tt"); } else { Serial.print("failed, rc="); Serial.print(client.state()); Serial.println(" try again in 5 seconds"); // Wait 5 seconds before retrying delay(5000); } } } void setup() { pinMode(2, OUTPUT); // Initialize the BUILTIN_LED pin as an output Serial.begin(115200); setup_wifi(); client.setServer(mqtt_server, 1883); client.setCallback(callback); dhtSensor.setup(DHT_PIN, DHTesp::DHT22); } void loop() { if (!client.connected()) { reconnect(); } client.loop(); unsigned long now = millis(); if (now - lastMsg > 2000) { lastMsg = now; TempAndHumidity data = dhtSensor.getTempAndHumidity(); String temp = String(data.temperature, 2); Serial.print("Temperature: "); Serial.println(temp); client.publish("/d3tt/temp", temp.c_str()); String hum = String(data.humidity, 1); Serial.print("Humidity: "); Serial.println(hum); client.publish("/d3tt/hum", hum.c_str()); } }
Library
Simulasi Program
Konfigurasi Smartphone
Install aplikasi MQTT Dashboard
Open Aplikasi dan Setting Broker
Untuk percobaan ini Broker name = D3 Teknologi Telekomunikasi, Address = tcp://test.mosquitto.org, port = 1883, Client ID, QoS dan lain-lainnya dibiarkan default
Buat Tile/Widget untuk keterangan Suhu dan Kelembaban.
Pilih Text, seperti gambar dibawah
Tile Suhu
Tile Kelembaban
Hasil
Keterangan nilai Suhu dan Kelembaban didapatkan dari simulasi Wokwi yang sudah dijalankan. Pastikan nilai topic dan alamat broker sudah sesuai.