Setelah sebelumnya memposting artikel tentang Installing MQTT Broker (EMQX) with Web Dashboard on VPS Debian 8 serta Download Arduino IDE 1.8.9 include additional library and ESP8266 board for Windows dan Download VS Code Portable with Arduino & C++ Extension for Windows. Maka kita kali ini akan mengintegrasikan antara Wemos D1 Mini dengan SCADA Indusoft melalui IoT dengan protokol MQTT.
Sekilas tentang Wemos D1 mini, menurut situsnya sendiri www.wemos.cc Wifi boards based ESP-8266EX, include D1 mini, D1 mini Pro, D1 mini Lite.There are lots of stackable shields for them, easy to use for IOT.
Baik Wemos, NodeMCU,ESP32 sama-sama dapat diprogram dengan arduino IDE, tentunya dengan additional board yang sudah diinstall terlebih dahulu. Sebelum melangkah lebih jauh mari kita kilas balik ke postingan sebelumnya tentang Apa itu MQTT? yang dapat dibaca di post sebelumnya Basic, Download and Installing HiveMQ Mqtt broker for Windows (Indonesia)
Pada postingan ini kita akan buat skenario sebagai berikut
Pada sisi sebelah kiri terdapat Wemos D1 Mini yang sudah terhubung ke LCD I2C 16x2 dan tentunya butuh koneksi internet, pada sisi ini akan dibuat increment +1 atau dengan kata lain sebuah variable integer yang akan bertambah 1 setiap 1 detik dan akan dipublish ke MQTT Broker (milik penulis) dengan topic ismaillowkey/random
Kemudian pada sisi sebelah kanan terdapat sebuah SCADA Indusoft Web Studio yang sudah include MQTT Client driver yang akan menSubscribe dengan topic ismaillowkey/random
Baik Pubslisher maupun subscriber akan terhubung ke MQTT Broker over internet dan alamat IP MQTT Broker yang akan digunakan sekarang yaitu 54.245.173.136 dengan port 1883 (tanpa TLS/SSL) atau dapat menggunakan MQTT Broker lainnya seperti iot.eclipse.org atau broker.hivemq.com
Ingat huruf besar dan kecil pada nama topic berifsat case-sensitife yang artinya huruf besar dan huruf kecil dibedakan
- Pertama-tama kita download dulu Arduino IDE yang sudah penulis modif, sudah include MQTT client library serta sudah terdapat additional board ESP8266 (termasuk Wemos dan NodeMCU) disini
http://www.ismaillowkey.net/2019/06/download-arduino-ide-189-include.html - Kemudian buat Project Baru dan setting board ke Wemos D1 Mini
- Kemudian copy code dibawah dan paste pada arduino IDE, pada text berwarna merah pastikan I2C address untuk LCD anda sudah sama yaotu 0x27, dan text berwarna biru silahkan ganti dengan nama Wifi anda serta password
- Kemudian pilih Serial port dan download
- Maka LCD akan muncul seperti dibawah
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <Thread.h>
#include <Wire.h>
#include <LCD.h>
#include <LiquidCrystal_I2C.h>
// Update these with values suitable for your network.
#define I2C_ADDR 0x27 // <<----- Add your address here. Find it from I2C Scanner
#define BACKLIGHT_PIN 3
#define En_pin 2
#define Rw_pin 1
#define Rs_pin 0
#define D4_pin 4
#define D5_pin 5
#define D6_pin 6
#define D7_pin 7
LiquidCrystal_I2C lcd(I2C_ADDR, En_pin, Rw_pin, Rs_pin, D4_pin, D5_pin, D6_pin, D7_pin);
const char* ssid = "Your Wifi";
const char* password = "Your wifi password";
const char* mqtt_server = "54.245.173.136";
Thread myThread = Thread();
WiFiClient espClient;
PubSubClient client(espClient);
long lastMsg = 0;
char msg[50];
int value = 0;
// callback for myThread
void niceCallback() {
if (!client.connected()) {
reconnect();
}
client.loop();
++value;
Serial.print("Publish message: ");
String m = "hello world:" + String(value);
Serial.println(m);
client.publish("ismaillowkey/random", m.c_str()); // .c_srt() convert string to char array
lcd.setCursor (0, 1); lcd.print(" ");
lcd.setCursor (0, 1); lcd.print(m);
}
void setup() {
Serial.begin(9600);
lcd.begin (16, 2); // <<----- My LCD was 16x2
// Switch on the backlight
lcd.setBacklightPin(BACKLIGHT_PIN, POSITIVE);
lcd.setBacklight(HIGH);
lcd.home (); // go home
setup_wifi();
client.setServer(mqtt_server, 1883);
myThread.onRun(niceCallback);
myThread.setInterval(1000);
}
void setup_wifi() {
delay(10);
// We start by connecting to a WiFi network
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
lcd.setCursor (0, 0); lcd.print(" Connecting to ");
lcd.setCursor (0, 1); lcd.print(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print("."); lcd.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
lcd.setCursor (0, 0); lcd.print(" WiFi connected");
Serial.println("IP address: ");
lcd.setCursor (0, 1); lcd.print(" ");
lcd.setCursor (0, 1); lcd.print(WiFi.localIP());
Serial.println(WiFi.localIP());
delay(2000);
lcd.clear();
lcd.setCursor (0, 0); lcd.print(" ");
lcd.setCursor (0, 0); lcd.print("Connected broker");
}
void reconnect() {
// Loop until we're reconnected
while (!client.connected()) {
Serial.print("Attempting MQTT connection...");
// Attempt to connect
if (client.connect("ESP8266Client")) {
Serial.println("connected");
lcd.setCursor (0, 0); lcd.print(" ");
lcd.setCursor (0, 0); lcd.print("Connected broker");
// Once connected, publish an announcement...
client.publish("outTopic", "hello world");
// ... and resubscribe
client.subscribe("inTopic");
} else {
lcd.setCursor (0, 0); lcd.print(" ");
lcd.setCursor (0, 0); lcd.print("reconnecting....");
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
// Wait 3 seconds before retrying
//delay(3000);
}
}
}
void loop() {
if (myThread.shouldRun())
myThread.run();
}
Test menggunakan indusoft
Test menggunakan mqff.fx software
Untuk Part 2 tutorial menggunakan indusoft akan dibahas pada postingan selanjutnya
Good Luck
Semoga bermanfaat
وَعَلَيْكُمْ السَّلاَمُ وَرَحْمَةُ اللهِ وَبَرَكَاتُهُ