Panduan Penyelesaian Mid-Term IoT 2026
1 Registrasi IoT Devices ke Server 15 Poin
Menghubungkan perangkat IoT (Fan, Lamp, Door) ke server registrasi home.com dan mengkonfigurasi Bluetooth tethering antara Smartphone dan Laptop menggunakan Cisco Packet Tracer.
Peralatan
- Cisco Packet Tracer (download dari NetAcad)
- File aktivitas awal: github.com/jdpark7/unsia-iot/tree/main/week8
Bagian 1: Registrasi Device ke Server home.com
home.com → login dengan username home dan password home. Saat ini belum ada perangkat terdaftar karena semua masih terhubung ke Home Gateway.- Klik Fan → tab Config → ubah IoT Server dari Home Gateway ke Remote Server
- Server Address:
home.com - Username:
home, Password:home - Klik Connect
- Ulangi untuk Lamp dan Door
home.com di browser Tablet → periksa bahwa Fan, Lamp, dan Door muncul di jendela IoT Server – Devices. Jika ada yang offline, kembali ke konfigurasi device dan klik Refresh.Bagian 2: Bluetooth Tethering Smartphone ke Laptop
ping home.com. Jika ada balasan, koneksi berhasil. Bisa juga buka browser dan akses home.com.2 LCD 2-Baris di Tinkercad 10 Poin
Menggunakan sensor di Tinkercad dan menampilkan output-nya pada LCD 16×2.
Peralatan
- Sketch awal Tinkercad
- Akun Tinkercad (daftar gratis di tinkercad.com)
Langkah Penyelesaian
- TMP36 (sensor suhu) — paling mudah, output tegangan analog
- Photoresistor (sensor cahaya)
- Ultrasonic Distance Sensor (sensor jarak)
- VCC TMP36 → 5V Arduino
- GND TMP36 → GND Arduino
- OUT TMP36 → A0 Arduino
- LCD: RS → pin 12, E → pin 11, D4 → pin 5, D5 → pin 4, D6 → pin 3, D7 → pin 2
- VCC LCD → 5V, GND LCD → GND, V0 → GND (via potensiometer untuk kontras)
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
const int sensorPin = A0;
void setup() {
lcd.begin(16, 2);
Serial.begin(9600);
}
void loop() {
int reading = analogRead(sensorPin);
float voltage = reading * 5.0 / 1023.0;
float temperatureC = (voltage - 0.5) * 100.0; // TMP36
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Suhu: ");
lcd.print(temperatureC, 1);
lcd.print(" C");
lcd.setCursor(0, 1);
lcd.print("ADC: ");
lcd.print(reading);
delay(1000);
}
3 Rangkaian Lampu ON/OFF dengan Transistor 10 Poin
Membuat rangkaian saklar lampu berbasis transistor di Tinkercad, dengan resistor 90 kΩ dan 100 Ω. Menentukan VBE dan arus maksimum lampu.
Komponen
- Transistor NPN (contoh: 2N2222 atau BC547)
- Resistor 90 kΩ (basis) — kode warna: White-Brown-Orange
- Resistor 100 Ω (kolektor) — kode warna: Brown-Black-Brown
- Lampu (Light Bulb)
- Fotodioda (sebagai sensor cahaya untuk mengontrol)
- Catu daya (baterai 9V atau power supply)
- Multimeter
Kode Warna Resistor
| Nilai | Gelang 1 | Gelang 2 | Gelang 3 (Pengali) | Kode |
|---|---|---|---|---|
| 90 kΩ | Putih (9) | Coklat (0) | Oranye (×10³) | White-Brown-Orange |
| 100 Ω | Coklat (1) | Hitam (0) | Coklat (×10¹) | Brown-Black-Brown |
Langkah Penyelesaian
- Hubungkan fotodioda ke basis transistor melalui resistor 90 kΩ
- Hubungkan lampu ke kolektor transistor melalui resistor 100 Ω
- Hubungkan emitor langsung ke ground
- Hubungkan VCC sesuai spesifikasi lampu
Jawaban
Penjelasan: Ketika transistor NPN dalam mode aktif/saturasi, tegangan antara basis dan emitor (VBE) selalu sekitar 0.6–0.7V untuk transistor silikon. Ini adalah karakteristik fisik junction PN.
Penjelasan: Arus maksimum yang melewati lampu ditentukan oleh resistor 100 Ω di jalur kolektor. Jika catu daya 9V dan transistor saturasi penuh (VCE ≈ 0), maka:
4 Current Gain Transistor 10 Poin
Mengukur arus basis (IB) dan arus kolektor (IC) menggunakan multimeter untuk menghitung penguatan arus (β) transistor.
Konsep
Penguatan arus transistor (β atau hFE) adalah rasio antara arus kolektor dan arus basis:
Langkah Penyelesaian
- Multimeter 1: seri dengan basis transistor → untuk mengukur IB
- Multimeter 2: seri dengan kolektor transistor → untuk mengukur IC
Contoh Perhitungan
Misalkan hasil pengukuran:
- IB = 20 μA = 0.000020 A
- IC = 4 mA = 0.004 A
Nilai β tipikal untuk transistor sinyal kecil (2N2222, BC547) berkisar antara 100–300.
5 Rangkaian Non-Inverting Op-Amp 10 Poin
Menggambar rangkaian non-inverting op-amp di Tinkercad, menentukan tegangan di pin 2, dan menghitung rasio amplifikasi tegangan.
Konsep Non-Inverting Op-Amp
Pada rangkaian non-inverting amplifier, sinyal input masuk ke pin non-inverting (pin 3), dan feedback diberikan ke pin inverting (pin 2).
Karakteristik Penting
- Virtual Short: Tegangan di pin 2 (inverting) ≈ tegangan di pin 3 (non-inverting) ≈ Vin
- Penguatan tegangan: Av = 1 + (Rf / Rin)
- Output sefasa dengan input (tidak terbalik)
Langkah Penyelesaian
- Pin 3 (non-inverting): hubungkan ke sumber sinyal input (Vin)
- Pin 2 (inverting): hubungkan ke pembagi tegangan Rf dan Rin
- Rin: dari pin 2 ke ground
- Rf (feedback): dari output (pin 6) ke pin 2
- Pin 7: VCC+ (misal +9V)
- Pin 4: VCC− (misal −9V atau GND untuk single supply)
Jawaban
Penjelasan: Karena prinsip virtual short pada op-amp ideal, tegangan di pin inverting (pin 2) sama dengan tegangan di pin non-inverting (pin 3), yaitu tegangan input (Vin). Feedback negatif memaksa kondisi ini.
Penjelasan: Rasio amplifikasi tegangan untuk non-inverting op-amp adalah 1 + (Rf / Rin). Berbeda dengan inverting amplifier yang memiliki gain = −Rf/Rin.
- Inverting (−): Input masuk ke pin 2 melalui Rin, output berlawanan fasa, gain = −Rf/Rin
- Non-Inverting (+): Input masuk ke pin 3, output sefasa, gain = 1 + Rf/Rin
6 VSCode + PlatformIO + DHT11 15 Poin
Setup lingkungan pengembangan PlatformIO di VSCode, membuat project untuk Wemos D1 Mini, menghubungkan sensor DHT11, dan menampilkan data suhu & kelembaban di Serial Monitor.
Peralatan
- Visual Studio Code (download)
- Extension PlatformIO IDE (install dari VSCode Extensions, Ctrl+Shift+X)
- Board Wemos D1 Mini (ESP8266)
- Sensor DHT11
- Kabel USB Micro-USB
Wiring DHT11
| DHT11 | Wemos D1 Mini |
|---|---|
| VCC (+) | 3.3V |
| GND (−) | GND |
| DATA (out) | Pin D3 (GPIO 0) |
Langkah 1: Install VSCode + PlatformIO
Langkah 2: Buat Project Baru
- Name: DHT11_Wemos
- Board: LOLIN(WEMOS) D1 R2 & mini
- Framework: Arduino
- Klik Finish
Langkah 3: Install Library DHT
Langkah 4: Tulis Kode
Buka src/main.cpp dan ganti dengan kode berikut:
#include <Arduino.h>
#include "DHT.h"
#define DHTPIN 0 // GPIO 0 = pin D3 pada Wemos D1 Mini
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(115200);
delay(10);
dht.begin();
Serial.println("=== DHT11 Sensor Reading ===");
}
void loop() {
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
if (isnan(humidity) || isnan(temperature)) {
Serial.println("Gagal membaca sensor DHT11!");
delay(5000);
return;
}
Serial.print("Kelembaban: ");
Serial.print(humidity);
Serial.print(" %\t");
Serial.print("Suhu: ");
Serial.print(temperature);
Serial.println(" °C");
delay(5000); // baca setiap 5 detik
}
Langkah 5: Build & Upload
File platformio.ini
[env:d1_mini]
platform = espressif8266
board = d1_mini
framework = arduino
monitor_speed = 115200
lib_deps =
adafruit/DHT sensor library@^1.4.6
adafruit/Adafruit Unified Sensor@^1.1.14
7 Secure HTTPS Data Transmission 15 Poin
Mengirim data suhu dan kelembaban dari Wemos D1 Mini ke server melalui HTTPS yang aman menggunakan WiFiClientSecure dengan fingerprint SHA-1 (bukan setInsecure()).
Konsep Kunci
- BearSSL::WiFiClientSecure — implementasi TLS/SSL yang aman untuk ESP8266
- Fingerprint SHA-1 — hash 20-byte dari sertifikat server yang digunakan untuk certificate pinning
- Certificate Pinning — hanya percaya koneksi jika fingerprint sertifikat server cocok, mencegah MITM attack
Perbedaan dengan Kode Awal
| Kode Awal (Tidak Aman) | Kode Tugas (Aman) |
|---|---|
WiFiClientSecure client; | std::unique_ptr<BearSSL::WiFiClientSecure> client(new BearSSL::WiFiClientSecure); |
client.setInsecure(); ← JANGAN | client->setFingerprint(fingerprint); |
| Tidak verifikasi sertifikat | Verifikasi fingerprint SHA-1 |
Langkah Penyelesaian
platformio.ini:[env:d1_mini]
platform = espressif8266
board = d1_mini
framework = arduino
monitor_speed = 115200
lib_deps =
adafruit/DHT sensor library@^1.4.6
adafruit/Adafruit Unified Sensor@^1.1.14
src/main.cpp dengan modifikasi berikut (perhatikan komentar "PENTING"):#include <Arduino.h>
#include <ESP8266WiFi.h>
#include <WiFiClientSecureBearSSL.h> // PENTING: gunakan BearSSL
#include <ESP8266HTTPClient.h>
#include <DHT.h>
#define DHTPIN 0
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
// GANTI dengan kredensial WiFi Anda
#define STASSID "Your Wi-Fi SSID"
#define STAPSK "Your Wi-Fi Password"
// GANTI dengan Student ID Anda
#define STUDENTID "Your Student ID"
const char* ssid = STASSID;
const char* password = STAPSK;
const char* server = "https://iot.learnina.org/dht.php";
const char* stationid = STUDENTID;
// Fingerprint SHA-1 untuk iot.learnina.org
const uint8_t fingerprint[] = {
0x89, 0x8F, 0xCB, 0x0C, 0x27, 0x08, 0xAC, 0xCF,
0x25, 0x06, 0x88, 0xBA, 0xCE, 0xDE, 0x98, 0xB0,
0x4A, 0xD3, 0x39, 0x08
};
// PENTING: gunakan unique_ptr BearSSL
std::unique_ptr<BearSSL::WiFiClientSecure> client(
new BearSSL::WiFiClientSecure
);
void setup() {
Serial.begin(115200);
Serial.println("\n=== HTTPS Secure DHT11 Sender ===");
WiFi.begin(ssid, password);
Serial.print("Menghubungkan ke WiFi");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nWiFi Terhubung!");
Serial.print("IP Address: ");
Serial.println(WiFi.localIP());
dht.begin();
// PENTING: gunakan setFingerprint, BUKAN setInsecure()
client->setFingerprint(fingerprint);
client->setTimeout(15);
}
void loop() {
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
if (isnan(temperature) || isnan(humidity)) {
Serial.println("Gagal membaca sensor DHT11!");
delay(2000);
return;
}
Serial.print("Suhu: "); Serial.print(temperature, 1);
Serial.print(" °C, Kelembaban: "); Serial.print(humidity, 1);
Serial.println(" %");
if (WiFi.status() == WL_CONNECTED) {
HTTPClient https;
String url = String(server) + "?stationid=" + stationid
+ "&temperature=" + String(temperature, 1)
+ "&humidity=" + String(humidity, 1);
Serial.print("Mengirim ke: ");
Serial.println(url);
// Gunakan client BearSSL (bukan WiFiClient biasa)
https.begin(*client, url);
int httpCode = https.GET();
if (httpCode > 0) {
String payload = https.getString();
Serial.print("HTTP "); Serial.println(httpCode);
Serial.print("Response: "); Serial.println(payload);
} else {
Serial.print("Error HTTPS: "); Serial.println(httpCode);
}
https.end();
} else {
Serial.println("WiFi terputus!");
}
delay(10000); // kirim setiap 10 detik
}
https://iot.learnina.org/station_data.php?stationid=your-student-id
curl -k untuk mensimulasikan pengiriman data:
curl -k "https://iot.learnina.org/dht.php?stationid=unsia&temperature=24.3&humidity=55.6"
Screenshot hasilnya. Ini membuktikan bahwa endpoint menerima data dengan format yang benar.
https://iot.learnina.org/station_data.php?stationid=your-student-id yang menampilkan data suhu dan kelembaban yang sudah terkirim.
8 ThingSpeak Weather Station Map 15 Poin
Membuat channel di ThingSpeak, mengatur lokasi (latitude/longitude), dan mendaftarkan channel di peta cuaca iot.learnina.org.
Peralatan
- Akun ThingSpeak (daftar gratis di thingspeak.com)
- Google Maps (untuk mencari koordinat lokasi)
Langkah 1: Buat Channel ThingSpeak
- Name: Weather Station - [Nama/ID Anda]
- Description: IoT weather monitoring station
- Field 1: Temperature
- Field 2: Humidity
- Centang "Make Public" agar bisa diakses publik
Langkah 2: Atur Latitude & Longitude
- Latitude: (contoh: -6.2088 untuk Jakarta)
- Longitude: (contoh: 106.8456 untuk Jakarta)
- Klik "Save Channel"
Langkah 3: Verifikasi & Share Channel
Langkah 4: Daftarkan di Weather Map
- Channel ID: (dari ThingSpeak)
- Nama/NIM: sesuai data Anda
- Info lain yang diminta
Langkah 5: Lihat di Map
curl "https://api.thingspeak.com/update.json?api_key=YOUR_WRITE_API_KEY&field1=25&field2=55"
Ganti YOUR_WRITE_API_KEY dengan Write API Key dari Channel Settings ThingSpeak Anda. Data akan muncul di channel.
iot.learnina.org/map.php) yang menunjukkan channel Anda sudah terdaftar di lokasi yang benar.
Format Pengumpulan (Submission)
Semua file dikumpulkan dalam satu file ZIP dengan nama StudentID.zip.
Isi File ZIP
| File | Task | Keterangan |
|---|---|---|
*.pkt | Task 1 | File Packet Tracer yang sudah 100% selesai |
answers.docx | Task 1–8 | File Word berisi: screenshot Task 1, 2, 6, 7, 8 + jawaban Task 3, 4, 5 |
DHT11_Wemos.zip | Task 6 | Folder project PlatformIO dalam bentuk .zip |
Checklist Sebelum Submit
- Task 1: Packet Tracer completion 100% (autograded)
- Task 2: Screenshot simulasi Tinkercad dengan LCD menampilkan data sensor
- Task 3: Jawaban VBE dan Imax
- Task 4: Jawaban β = IC / IB
- Task 5: Gambar rangkaian + jawaban Vpin2 dan Av
- Task 6: Project .zip + screenshot Serial Monitor (minimal 3 set data)
- Task 7: Screenshot halaman station_data.php dengan data terkirim
- Task 8: Screenshot peta dengan channel terdaftar