EiyaElang / Rumah-Kaca-Elangnesia-

0 stars 4 forks source link

Bangun Pasukan Penguasa IoT! #6

Open iwas108 opened 5 months ago

iwas108 commented 5 months ago

Instruksi

Well, setelah pasukan WiFi standby dan siap tempur, kita harus menyiapkan pasukan kedua yaitu pasukan Penguasa IoT! Segera setelah pasukan WiFi dikirim untuk masuk ke wilayah musuh, pasukan IoT harus siap sedia ketika dipanggil untuk menembus Internet. Pada misi ini, kalian akan membuat kode program untuk kelas UrusanIoT, misi ini harus dikerjakan setelah kalian mengerjakan misi sebelumnya: (Bangun Pasukan WiFi).

Step 1: Kode Pada File UrusanIoT.h

#ifndef UrusanIoT_h
#define UrusanIoT_h

#include <WiFi.h>
#include <MQTT.h>

class UrusanIoT {
    public:
        UrusanIoT(const char* _broker, int _port, const char* _clientId, 
            const char* brokerUsername, const char* brokerPassword);
        void konek();
        bool apakahKonek();
        void proses();
        void penangkapPesan(MQTTClientCallbackSimpleFunction penangkapPesan);
        void subscribe(String topic);
        void publish(String topic, String message);

    private:
        const char* _broker;
        const int _port;
        const char* _clientId;
        const char* _brokerUsername;
        const char* _brokerPassword;
        WiFiClient net;
        MQTTClient client;
};

#endif

Step 2: Kode Pada File UrusanIoT.cpp

#include "UrusanIoT.h"

/// @brief Inisiator untuk membuat instan dari kelas UrusanIoT.
/// @param broker 
/// @param port 
/// @param clientId 
/// @param brokerUsername 
/// @param brokerPassword 
UrusanIoT::UrusanIoT(const char* broker, const int port, const char* clientId, 
    const char* brokerUsername, const char* brokerPassword) : _broker(broker),
     _port(port), _clientId(clientId), _brokerUsername(brokerUsername), _brokerPassword(brokerPassword) {

}

/// @brief Konek ke MQTT Broker
void UrusanIoT::konek(){
    if(WiFi.status() != WL_CONNECTED){
      Serial.printf("UrusanIoT: Tidak ada koneksi!\n");
      delay(1000);
      return;
    }
    Serial.printf("UrusanIoT: Mencoba untuk konek ke %s:%d\n", _broker, _port);
    client.begin(_broker, _port, net);
    bool status = client.connect(_clientId, _brokerUsername, _brokerPassword);

    unsigned long timer = millis();
    while(!status){
      delay(100);
      if(millis() - timer > 10000){break;}
    }

    if(status){
        Serial.printf("UrusanIoT: Berhasil terhubung ke %s:%d\n", _broker, _port);
    }else{
        Serial.printf("UrusanIoT: Gagal terhubung ke %s:%d!\n", _broker, _port);
    }
}

/// @brief Cek apakah IoTnya konek.
/// @return 1 jika konek, 0 jika putus
bool UrusanIoT::apakahKonek() {
  if (client.connected()){
    return 1;
  }
  else {
    return 0;
  }
}

/// @brief Panggil fungsi ini agar mesin IoT berjalan.
void UrusanIoT::proses(){
  client.loop();
  delay(10);
}

/// @brief Fungsi penangkap pesan masuk dari IoT
/// @param penangkapPesan
void UrusanIoT::penangkapPesan(MQTTClientCallbackSimpleFunction penangkapPesan){
  client.onMessage(penangkapPesan);
}

/// @brief Kirim pesan ke broker
/// @param topic 
/// @param message 
void UrusanIoT::publish(String topic, String message){
  Serial.printf("UrusanIoT: Mempublish pesan: %s, ke topik: %s.\n", message.c_str(), topic.c_str());
  client.publish(topic.c_str(), message.c_str());
}

/// @brief Subscribe topik dari broker
/// @param topic 
void UrusanIoT::subscribe(String topic){
  Serial.printf("UrusanIoT: Mensubsribe topik: %s.\n", topic.c_str());
  client.subscribe(topic.c_str());
}

Cara Submit Misi

Setelah selesai melakukan misi ini, commit dan push kembali ke github, para leader divisi harus konfirm ke Signal Group dengan format NamaOrganisasi-NamaDivisi-URLBranch.

What Do You Have To Learn

Sama seperti UrusanWiFi, kode ini juga menjadi senjata multiguna untuk menghubungkan perangkat ke jaringan IoT. Kalian bisa perhatikan Doxygen comment yang ditandai dengan garis /// di atas setiap fungsi/method, ini akan menghasilkan dokumentasi pada autocomplete di Visual Studio code. Dokumentasi ini akan memberitahu kita bagaimana cara menggunakan fungsi/metode ini ketika kita memanggil objek/instan dari kelas UrusanWiFi di kode program utama kita (main.cpp).

Kelas UrusanIoT akan membantu kita untuk menghubungkan dan memelihara koneksi ke Broker IoT.