EiyaElang / Rumah-Kaca-Elangnesia-

0 stars 4 forks source link

Bangun Pasukan Penguasa WiFi! #5

Open iwas108 opened 2 months ago

iwas108 commented 2 months ago

Instruksi

Tanpa adanya konektivitas WiFi, sistem IoT kalian adalah omong kosong. Pada misi ini tulis kode program untuk menjaga WiFi agar tetap hidup. Pastikan kalian sudah mengerjakan isu Project Directory Refactor untuk bisa mengerjakan misi ini, karena semua file dan folder yang disampaikan di misi ini sudah di buat di misi sebelumnya.

Step 1: Kode Pada File UrusanWiFi.h

#ifndef UrusanWiFi_h
#define UrusanWiFi_h

#include <Arduino.h> // Sertakan senjata Arduino core
#include <WiFi.h> // Sertakan senjata WiFi

/// @brief Kelas untuk menangani segala urusan WiFi.
class UrusanWiFi {
public:
  /// @brief Inisiator kelas UrusanWiFi
  /// @param ssid 
  /// @param pass 
  UrusanWiFi(const char* ssid, const char* pass);
  UrusanWiFi(const char* ssid);

  void konek();
  bool apakahKonek();

private:

  const char* _ssid;
  const char* _pass;

  void onWiFiEvent(WiFiEvent_t event, WiFiEventInfo_t info);
};

#endif

Step 2: Kode Pada File UrusanWiFi.cpp

#include "UrusanWiFi.h"

UrusanWiFi::UrusanWiFi(const char* ssid, const char* pass) : _ssid(ssid), _pass(pass) {}
UrusanWiFi::UrusanWiFi(const char* ssid) : _ssid(ssid) {}

/// @brief Fungsi untuk memulai konek ke WiFi
void UrusanWiFi::konek() {
  Serial.printf("UrusanWiFi: Mencoba konek ke %s...\n", _ssid);

  if(_pass != nullptr){
    WiFi.begin(_ssid, _pass);
  }else
  {
    WiFi.begin(_ssid);
  }

  WiFi.onEvent([this](WiFiEvent_t event, WiFiEventInfo_t info){
    this->onWiFiEvent(event, info);
  });

  unsigned long timer = millis();
  while(WiFi.status() != WL_CONNECTED){
    delay(100);

    if(millis() - timer > 10000){break;}
  }
}

/// @brief Cek apakah WiFinya konek.
/// @return 1 jika konek, 0 jika putus
bool UrusanWiFi::apakahKonek() {
  if (WiFi.status() == WL_CONNECTED){
    return 1;
  }else{
    return 0;
  }

}

/// @brief Fungsi private untuk menangani event WiFi
/// @param event 
/// @param info 
void UrusanWiFi::onWiFiEvent(WiFiEvent_t event, WiFiEventInfo_t info) {
  if(event == ARDUINO_EVENT_WIFI_STA_DISCONNECTED){
    Serial.printf("UrusanWiFi: Koneksi dengan %s terputus!\n", info.wifi_sta_connected.ssid);
  }
  else if(event == ARDUINO_EVENT_WIFI_STA_CONNECTED){
    Serial.printf("UrusanWiFi: Berhasil terhubung dengan %s.\n", info.wifi_sta_connected.ssid);
  }
  else if(event == ARDUINO_EVENT_WIFI_STA_GOT_IP){
    Serial.printf("UrusanWiFi: Alamat IP %s.\n", WiFi.localIP().toString().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

Kode diatas akan menjadi senjata rakitan multipakai yang bisa kalian gunakan untuk mengkoneksikan perangkat ke WiFi, ini dapat disalin dan digunakan di projek lain. Ini adalah konsep kode program yang moduler. Tulis sekali dan gunakan di tempat lainnya.

Kelas UrusanWiFi dapat kalian instansiasi, Instan dari kelas itu punya kemampuan bernama "konek()" untuk memulai proses konek ke WiFi dan kemampuan bernama apakahKonek() untuk mengecek apakah WiFi sudah konek. Ini akan mereturn 1 jika konek dan 0 jika tidak. Logikanya adalah, kita tidak akan menerjunkan pasukan IoT apabila pasukan WiFi berlum berhasil memasuki lokasi tempur, jika tidak pasukan IoT akan mati sia-sia.

Untuk menginstansiasi kelas UrusanWiFi kalian perlu menyediakan dua hal untuk mereka: SSID dan Password dari jaringan WiFi yang akan dimasuki.