Seperti pada pembahasan sebelumnya kita telah belajar tentang protokol MQTT. Nah pada artikel kali ini kita akan langsung mempraktekkan bagaimana cara menggunakan protokol MQTT. MQTT broker yang digunakan adalah https://io.adafruit.com.
Pada project kali ini kita menggunakan board mikrokontroler Wemos yang sudah terintegrasi dengan modul komunikasi WiFi yang di konfigurasikan ke Arduino IDE dan web Adafruit IO.
Komponen Utama
- Wemos 1 pcs
- LM35 1 pcs
- LED 1 pcs
- Resistor 220 ohm
- Access Point 1 pcs
Diagram Rangkaian
- LM35 – pin A0 Wemos
- Tegangan supply 3,3V
- LED – pin D7 Wemos
Setting IO Adafruit
Sebelum mengintegrasikan Arduino IDE dan web Adafruit IO, langkah pertama yaitu buatlah akun di url berikut ini : https://accounts.adafruit.com/users/sign_up
Kemudian jika sudah selesai mendaftar dan berhasil login silahkan pilih menu “io” kemudian klik “new dashboard” dan buatlah dashboard baru pada akun Anda dengan nama project anda . Contoh : My Dashboard
Setelah itu klik “create” dan Masuk ke dahboard yang telah Anda buat sebelumnya
Klik menu disebelah kanan pada gambar lalu pilih ”Create New Block” lalu Buat block baru dengan cara memilih menu ”toggle”
Buatlah feed baru dengan cara Ketikkan nama project anda Contoh : “Led Control” lalu klik “Create”
Setelah itu klik “Next Step” dan Setting Seperti lalu Klik “Create block”
Buatlah block baru seperti langkah diatas, namun pada step ini pilih dengan tipe ”Gauge” dengan nama ”potensiometer” dan konfigurasi seperti berikut ini
Buatlah block baru dengan tipe Line Chart dengan nama temperature dan konfigurasi seperti berikut ini
Buatlah block baru dengan tipe Slider dengan nama led_pwm_control dan konfigurasi seperti berikut
Instal Library IO Adafruit ke Arduino IDE
Sebelum membuat program ESP8266 wemos d1 mini silahkan download dan pasang terlebih dahulu library Adafruit_MQTT.h atau bisa langsung download melalui software arduino IDE.
Kode Program
Silahkan ubah AIO username dan AIO key jika ingin menggunakan akun google sendiri dengan memilih opsi ” My key ” yang ada di menu Dashboard
Setelah library Adafruit IO sudah terinstall, langkah selanjutnya adalah buatlah program pada Arduino IDE berikut ini
#include <ESP8266WiFi.h>
#include "Adafruit_MQTT.h"
#include "Adafruit_MQTT_Client.h"
/************************* WiFi Access Point *********************************/
// Sesuaikan dengan access point yang digunakan
#define WLAN_SSID " username Wifi"
#define WLAN_PASS "Password Wifi"
/************************* Adafruit.io Setup *********************************/
// Sesuaikan dengan akun masing-masing
#define AIO_SERVER "io.adafruit.com"
#define AIO_SERVERPORT 1883 // port 8883 untuk SSL
#define AIO_USERNAME "praktekotodidak"
#define AIO_KEY "aio_utVX71hLCGHjzPa6YwLunIkrTvlS"
// Create an ESP8266 WiFiClient class to connect to the MQTT server.
WiFiClient client;
//WiFiFlientSecure untuk koneksi SSL
//WiFiClientSecure client;
// Setup MQTT client untuk koneksi ke MQTT broker
Adafruit_MQTT_Client mqtt(&client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);
// Feed data untuk di publish
Adafruit_MQTT_Publish potensiometer = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/potensiometer");
Adafruit_MQTT_Publish temperature = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/temperature");
//Adafruit_MQTT_Publish led_control_pub = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/led_control");
// Feed data untuk di subscribe
Adafruit_MQTT_Subscribe led_control = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/feeds/led_control");
Adafruit_MQTT_Subscribe led_pwm_control = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/feeds/led_pwm_control");
void MQTT_connect();
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
pinMode(D7, OUTPUT);
Serial.begin(115200);
delay(10);
Serial.println(F("MQTT Client"));
// Koneksi ke akses point
Serial.println();
Serial.print("Connecting to ");
Serial.println(WLAN_SSID);
WiFi.begin(WLAN_SSID, WLAN_PASS);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println();
Serial.println("WiFi connected");
Serial.println("IP address: "); Serial.println(WiFi.localIP());
// Aktifkan subscription
mqtt.subscribe(&led_control);
mqtt.subscribe(&led_pwm_control);
}
void loop() {
MQTT_connect();
Adafruit_MQTT_Subscribe *subscription;
while ((subscription = mqtt.readSubscription(5000))) {
if (subscription == &led_control) {
Serial.print(F("led_control data: "));
String led_data((char *)led_control.lastread);
Serial.println(led_data);
if (led_data.equals("ON")) {
digitalWrite(LED_BUILTIN, LOW);
}
else if (led_data.equals("OFF")) {
digitalWrite(LED_BUILTIN, HIGH);
}
}
if (subscription == &led_pwm_control) {
Serial.print(F("led_pwm_control data: "));
char *pwm_value = (char *)led_pwm_control.lastread;
Serial.println(pwm_value);
int pwm = atoi(pwm_value);
analogWrite(D7, pwm);
}
}
// Publish potensiometer data
int adc0 = analogRead(A0);
Serial.print(F("\nPublish potensiometer data : "));
Serial.print(adc0);
Serial.println();
if (!potensiometer.publish(adc0)) {
Serial.println(F("Publish Failed"));
} else {
Serial.println(F("Publish OK!"));
}
// Publish temperature data
float millivolts = (adc0 / 1024.0) * 3300;
float temp = millivolts / 10;
Serial.print(F("\nPublish temperature data : "));
Serial.print(temp);
Serial.println();
if (!temperature.publish(temp)) {
Serial.println(F("Publish Failed"));
} else {
Serial.println(F("Publish OK!"));
}
}
void MQTT_connect() {
int8_t ret;
if (mqtt.connected()) {
return;
}
Serial.print("Connecting to MQTT... ");
uint8_t retries = 3;
while ((ret = mqtt.connect()) != 0) {
Serial.println(mqtt.connectErrorString(ret));
Serial.println("Retrying MQTT connection in 5 seconds...");
mqtt.disconnect();
delay(5000); // wait 5 seconds
retries--;
if (retries == 0) {
while (1);
}
}
Serial.println("MQTT Connected!");
}
Pengujian Adafruit IO Arduino IDE
Lakukan kompilasi dan upload program dengan memilih tipe board Wemos D1 setelah itu lakukan percobaan dengan cara merubah nilai pada dashboard Anda.