Capaian Pembelajaran

  • Memahami arsitektur dan komponen sistem IoT
  • Mengimplementasikan koneksi WiFi dengan ESP8266/ESP32
  • Membuat program untuk komunikasi MQTT dan HTTP
  • Mengintegrasikan sensor dengan platform IoT cloud
  • Membangun dashboard monitoring data sensor

1. Internet of Things (IoT) Fundamentals

Internet of Things (IoT) adalah jaringan perangkat fisik yang tertanam dengan sensor, software, dan teknologi lainnya untuk tujuan menghubungkan dan bertukar data dengan perangkat dan sistem lain melalui internet.

Arsitektur Sistem IoT

Device Layer

Sensor, Aktuator, Mikrokontroler

Connectivity

WiFi, Bluetooth, LoRa, Cellular

Cloud Platform

Data Processing & Storage

Application

Dashboard & User Interface

Komponen Utama Sistem IoT

  • Sensors/Actuators: Mengumpulkan data dan melakukan aksi
  • Connectivity: WiFi, Bluetooth, LoRa, NB-IoT, etc.
  • Data Processing: Edge computing atau cloud processing
  • User Interface: Web dashboard, mobile apps, voice assistants

2. WiFi Connectivity dengan ESP8266/ESP32

Simulasi Koneksi WiFi

ESP8266 Device

ESP8266
Signal Strength
Strength: -
WiFi: DISCONNECTED
IP: Not assigned

WiFi Configuration

Network Test

Test: Ready

Kode Dasar Koneksi WiFi

wifi_connection.ino - Koneksi WiFi dengan ESP8266

#include 
#include 

ESP8266WiFiMulti wifiMulti;

// WiFi credentials
const char* ssid1 = "IoT_Lab";
const char* password1 = "iot12345";
const char* ssid2 = "Backup_Network";
const char* password2 = "backup123";

void setup() {
    Serial.begin(115200);
    delay(1000);
    
    Serial.println("ESP8266 WiFi Connection");
    
    // Add multiple WiFi networks
    wifiMulti.addAP(ssid1, password1);
    wifiMulti.addAP(ssid2, password2);
    
    Serial.println("Connecting to WiFi...");
    
    // Try to connect to any of the networks
    while (wifiMulti.run() != WL_CONNECTED) {
        delay(1000);
        Serial.print(".");
    }
    
    Serial.println("\nConnected successfully!");
    Serial.print("IP address: ");
    Serial.println(WiFi.localIP());
    Serial.print("Signal strength: ");
    Serial.print(WiFi.RSSI());
    Serial.println(" dBm");
}

void loop() {
    // Check WiFi connection status
    if (WiFi.status() == WL_CONNECTED) {
        // Connected - do your IoT tasks here
        digitalWrite(LED_BUILTIN, LOW);  // LED ON
        delay(1000);
        digitalWrite(LED_BUILTIN, HIGH); // LED OFF
        delay(1000);
    } else {
        // Not connected - try to reconnect
        Serial.println("WiFi disconnected. Reconnecting...");
        wifiMulti.run();
    }
}
                        

3. Protokol Komunikasi IoT

Protocol Type Use Case Power Range Data Rate
WiFi (802.11) Local Area High bandwidth, AC power High Medium High
Bluetooth/BLE Personal Area Mobile devices, wearables Low Short Medium
LoRaWAN Wide Area Long range, low power Very Low Long Low
Zigbee Local Area Home automation, mesh Low Medium Low
NB-IoT Wide Area Cellular IoT, infrastructure Low Very Long Low

MQTT Protocol untuk IoT

Keunggulan MQTT

  • Lightweight: Header hanya 2 bytes
  • Publish-Subscribe: Model komunikasi yang efisien
  • QoS Levels: Jaminan pengiriman pesan
  • Last Will Testament: Notifikasi ketika device offline
mqtt_client.ino - MQTT Client dengan ESP8266

#include 
#include 

// WiFi credentials
const char* ssid = "IoT_Lab";
const char* password = "iot12345";

// MQTT Broker settings
const char* mqtt_server = "broker.hivemq.com";
const int mqtt_port = 1883;
const char* mqtt_topic = "iot/lab/temperature";

WiFiClient espClient;
PubSubClient client(espClient);

void setup_wifi() {
    delay(10);
    Serial.println("Connecting to WiFi...");
    WiFi.begin(ssid, password);
    
    while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(".");
    }
    
    Serial.println("\nWiFi connected");
    Serial.println("IP address: " + WiFi.localIP());
}

void callback(char* topic, byte* payload, unsigned int length) {
    Serial.print("Message arrived [");
    Serial.print(topic);
    Serial.print("]: ");
    
    for (int i = 0; i < length; i++) {
        Serial.print((char)payload[i]);
    }
    Serial.println();
}

void reconnect() {
    while (!client.connected()) {
        Serial.print("Attempting MQTT connection...");
        
        // Create a random client ID
        String clientId = "ESP8266Client-";
        clientId += String(random(0xffff), HEX);
        
        if (client.connect(clientId.c_str())) {
            Serial.println("connected");
            // Subscribe to topic
            client.subscribe(mqtt_topic);
        } else {
            Serial.print("failed, rc=");
            Serial.print(client.state());
            Serial.println(" try again in 5 seconds");
            delay(5000);
        }
    }
}

void setup() {
    Serial.begin(115200);
    setup_wifi();
    client.setServer(mqtt_server, mqtt_port);
    client.setCallback(callback);
}

void loop() {
    if (!client.connected()) {
        reconnect();
    }
    client.loop();
    
    // Publish sensor data every 10 seconds
    static unsigned long lastMsg = 0;
    if (millis() - lastMsg > 10000) {
        lastMsg = millis();
        
        // Simulate temperature reading
        float temperature = 25.0 + (random(0, 100) / 10.0);
        
        String msg = "Temperature: " + String(temperature) + " C";
        client.publish(mqtt_topic, msg.c_str());
        Serial.println("Message published: " + msg);
    }
}
                        

4. Platform IoT Cloud

Adafruit IO

Platform IoT yang user-friendly dengan dashboard visual dan mudah diintegrasikan dengan ESP8266/ESP32.

Fitur:
  • Free tier available
  • REST API & MQTT
  • Visual dashboard

AWS IoT

Platform enterprise-scale dengan fitur security yang robust dan integrasi dengan layanan AWS lainnya.

Fitur:
  • Enterprise grade
  • High security
  • Scalable

Blynk

Platform mobile-first yang memungkinkan pembuatan aplikasi IoT dengan drag-and-drop interface.

Fitur:
  • Mobile app builder
  • Easy setup
  • Widget library

Node-RED

Platform visual programming untuk menghubungkan perangkat hardware, API, dan layanan online.

Fitur:
  • Visual programming
  • Open source
  • Extensible

Integrasi dengan Adafruit IO

adafruit_io.ino - Integrasi dengan Adafruit IO

#include 
#include "Adafruit_MQTT.h"
#include "Adafruit_MQTT_Client.h"

// WiFi credentials
#define WLAN_SSID       "IoT_Lab"
#define WLAN_PASS       "iot12345"

// Adafruit IO configuration
#define AIO_SERVER      "io.adafruit.com"
#define AIO_SERVERPORT  1883
#define AIO_USERNAME    "your_username"
#define AIO_KEY         "your_key"

WiFiClient client;
Adafruit_MQTT_Client mqtt(&client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);

// Setup feeds
Adafruit_MQTT_Publish temperature = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/temperature");
Adafruit_MQTT_Subscribe led = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/feeds/led");

void MQTT_connect();

void setup() {
    Serial.begin(115200);
    delay(10);
    
    // Connect to WiFi
    Serial.println(); 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");
    
    // Setup MQTT subscription for led feed
    mqtt.subscribe(&led);
}

void loop() {
    MQTT_connect();
    
    // Read subscription
    Adafruit_MQTT_Subscribe *subscription;
    while ((subscription = mqtt.readSubscription(5000))) {
        if (subscription == &led) {
            Serial.print("Got: ");
            Serial.println((char *)led.lastread);
            // Control LED based on message
        }
    }
    
    // Publish temperature every 10 seconds
    static unsigned long lastPublish = 0;
    if (millis() - lastPublish > 10000) {
        float temp = readTemperature(); // Your sensor reading function
        
        if (! temperature.publish(temp)) {
            Serial.println("Failed to publish temperature");
        } else {
            Serial.println("Temperature published!");
        }
        lastPublish = millis();
    }
}

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);
        retries--;
        if (retries == 0) {
            while (1);
        }
    }
    Serial.println("MQTT Connected!");
}
                        

5. Keamanan Sistem IoT

Ancaman Keamanan IoT

  • Unauthorized Access: Perangkat diakses tanpa izin
  • Data Interception: Data sensitif disadap
  • Device Hijacking: Perangkat dikendalikan penyerang
  • DDoS Attacks: Perangkat digunakan untuk serangan

Best Practices Security

  • Gunakan komunikasi encrypted (TLS/SSL)
  • Implementasikan authentication yang kuat
  • Update firmware secara berkala
  • Gunakan secure boot dan hardware security
  • Network segmentation dan firewall

Latihan Praktikum

Tugas implementasi sistem IoT dengan WiFi connectivity

Tugas 1: Basic WiFi Connection

Buat program untuk menghubungkan ESP8266 ke WiFi dengan fitur:

  • Koneksi ke multiple WiFi networks
  • LED indicator untuk status koneksi
  • Display IP address di Serial Monitor
  • Auto-reconnect ketika koneksi terputus

Tugas 2: IoT Data Logger

Implementasikan sistem data logging dengan:

  • Baca data dari sensor DHT11 (suhu & kelembaban)
  • Kirim data ke MQTT broker (HiveMQ/Adafruit IO)
  • Simpan data locally ketika offline
  • Sync data ketika koneksi tersedia

Tugas 3: Smart Home Controller

Rancang sistem smart home controller dengan:

  • Kontrol 4 relay via MQTT commands
  • Sensor monitoring (suhu, kelembaban, gerak)
  • Web dashboard untuk monitoring dan kontrol
  • Mobile notification untuk alerts