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
Signal Strength
WiFi Configuration
Network Test
Kode Dasar Koneksi WiFi
#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
#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.
- Free tier available
- REST API & MQTT
- Visual dashboard
AWS IoT
Platform enterprise-scale dengan fitur security yang robust dan integrasi dengan layanan AWS lainnya.
- Enterprise grade
- High security
- Scalable
Blynk
Platform mobile-first yang memungkinkan pembuatan aplikasi IoT dengan drag-and-drop interface.
- Mobile app builder
- Easy setup
- Widget library
Node-RED
Platform visual programming untuk menghubungkan perangkat hardware, API, dan layanan online.
- Visual programming
- Open source
- Extensible
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