Printfriendly

4:38:00 PM

IoT MQTT : #Part1 NodeMCU/Wemos/Arduino as Publisher and SCADA Indusoft as Subscriber

السَّلاَمُ عَلَيْكُمْ وَرَحْمَةُ اللهِ وَبَرَكَاتُهُ
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
  1. 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
  2. Kemudian buat Project Baru dan setting board ke Wemos D1 Mini
  3. 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
  4. #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();
    
    }
  5. Kemudian pilih Serial port dan download
  6. Maka LCD akan muncul seperti dibawah

Test menggunakan indusoft

Test menggunakan mqff.fx software

Untuk Part 2 tutorial menggunakan indusoft akan dibahas pada postingan selanjutnya


Good Luck
Semoga bermanfaat
وَعَلَيْكُمْ السَّلاَمُ وَرَحْمَةُ اللهِ وَبَرَكَاتُهُ



0 komentar "IoT MQTT : #Part1 NodeMCU/Wemos/Arduino as Publisher and SCADA Indusoft as Subscriber ", Baca atau Masukkan Komentar

Post a Comment

Jika artikel ini bermanfaat bisa dishare gan, tapi ingat selalu cantumkan sumber jika ingin copas artikel ini