Panduan · 14 mnt baca

Kurikulum IoT ESP32: Modul Internet of Things 8 Minggu

Kurikulum IoT ESP32: tabel rencana 8 minggu, solusi jaringan sekolah dan hotspot, kode web server Wi-Fi, keamanan dan etika, daftar kit untuk 8 kelompok, dan rubrik akhir.

Ketika menyusun kurikulum IoT ESP32 untuk SMA atau SMK, bagi modulnya menjadi empat lapisan: pertama board merasakan lingkungannya (GPIO dan sensor), lalu bergabung ke jaringan (Wi-Fi), lalu berbagi data (web server, klien HTTP, pesan), dan terakhir belajar berjalan dengan baterai dan tetap terlindungi (deep sleep dan keamanan). Dengan dua jam pelajaran seminggu, keempat lapisan ini muat dengan lega dalam delapan minggu: dua minggu perangkat keras, dua minggu jaringan dan server, dua minggu pertukaran data, satu minggu daya dan keamanan, dan satu minggu proyek akhir. Di akhir modul, siswa menyerahkan perangkat yang membaca sensor, menampilkan hasilnya di halaman yang dibuka dari ponsel atau mengirim pesan ke ponsel ketika sesuatu terjadi, umur baterainya sudah dihitung, dan kata sandinya tidak tersimpan terang-terangan di dalam kode.

Tulisan ini melanjutkan rencana pelajaran ESP32 pertama; instalasi, driver, tombol BOOT, dan LED pertama sudah dibahas di sana dan tidak diulang di sini. Di sini kamu mendapat tabel per minggu berisi tujuan, proyek BlueGrays sungguhan, konsep, dan hasil; kerangka pelajaran mingguan 80 menit; alasan jaringan sekolah biasanya menolak ESP32 dan cara mengatasinya; lima pertanyaan untuk bagian IT sekolahmu; kode web server Wi-Fi yang bisa dikompilasi; bagian keamanan dan etika; daftar kit untuk 8 kelompok; dan kriteria proyek akhir. Contoh-contohnya memakai asumsi berikut: kamu punya 24 siswa yang bekerja dalam 8 kelompok bertiga, dan dua jam pelajaran seminggu (2 × 40 menit). Kalau kelasmu berbeda, sesuaikan durasinya secara proporsional.

LDR untuk mengukur cahaya di kelas IoT ESP32
Sensor bersama dalam modul ini: LDR yang dibaca di minggu 2 muncul lagi di minggu 4 pada halaman web yang dibuka dari ponsel.

Cara kerja modul: merasakan, terhubung, berbagi, menghemat daya

Kelas Internet of Things (IoT) tidak mengajarkan internet itu sendiri; yang diajarkan adalah bagaimana sebuah perangkat berbicara dengan perangkat lain di jaringan. Untuk itu kamu butuh sesuatu untuk diukur dulu: board yang terhubung ke Wi-Fi tetapi tidak mengukur apa pun tidak punya apa-apa untuk disampaikan di jaringan. Karena itu dua minggu pertama sengaja dijalankan tanpa Wi-Fi: siswa bekerja dengan tombol, LDR, serta sensor suhu dan kelembapan, lalu memantapkan pilihan pin dan interval pembacaan. Di minggu ketiga board bergabung ke jaringan, di minggu keempat menjadi server, di minggu kelima berubah menjadi klien yang meminta data dari server lain, dan di minggu keenam melaporkan sebuah peristiwa lewat pesan. Minggu ketujuh diberikan untuk dua topik yang dilewati sebagian besar workshop IoT singkat: umur baterai dan keamanan. Setiap lapisan dibangun di atas lapisan sebelumnya, jadi jangan ubah urutannya; kalau minggu Wi-Fi berjalan buruk, selesaikan masalah koneksinya sebelum lanjut.

Prasyarat: sebelum modul dimulai, setiap kelompok sebaiknya sudah pernah meng-upload kode ke ESP32 minimal sekali. Kalau kelasmu belum sampai di situ, jalankan dulu pelajaran ESP32 pertama; menjauhkan masalah driver, paket board, dan port dari minggu Wi-Fi adalah penghemat waktu terbesar di seluruh modul.

Rencana pelajaran IoT ESP32 8 minggu

Setiap proyek di tabel sudah siap di BlueGrays lengkap dengan skema rangkaian, daftar komponen, dan kodenya. Proyek-proyek di empat minggu pertama, termasuk proyek koneksi Wi-Fi dan web server, sepenuhnya gratis; proyek klien HTTP, Telegram, WebSocket, dan deep sleep yang dipakai mulai minggu 5 adalah Premium. Jadi tidak ada siswa yang butuh Premium di bulan pertama; apa yang perlu dilakukan ketika Premium diperlukan ada di akhir tulisan ini.

MingguTujuanProyek BlueGraysKonsepHasil
1Membaca input dan mengendalikan outputKendali LED dengan Tombol Tekan ESP32 (Tekan), Kendali LED dengan Tombol Tekan ESP32 (Toggle) (Gratis)GPIO, INPUT_PULLUP, input dan output digital, variabel statusLED yang dinyalakan dan dimatikan dengan tombol, serta peta pin kelompok
2Mengukur lingkunganMembaca Intensitas Cahaya dengan Modul LDR ESP32, Suhu dan Kelembapan DHT22 ESP32 (dengan Layar LCD) (Gratis)Pembacaan analog (12 bit, 0–4095), ADC1 dan ADC2, I2C, library, interval pembacaanTabel cahaya berisi 10 pembacaan di Serial Monitor, suhu dan kelembapan di LCD
3Menghubungkan board ke jaringanKoneksi Wi-Fi STA ESP32 (dengan Layar LCD) (Gratis)Mode station Wi-Fi (STA), SSID, alamat IP, RSSI (dBm), WiFi.status(), koneksi ulangIP, alamat MAC, dan kekuatan sinyal tercatat di log jaringan
4Menjadikan board sebagai serverWeb Server Asinkron ESP32 (dengan Tampilan IP di LCD) (Gratis) dan kode di tulisan iniWeb server, request dan response HTTP, port 80, path URL (/, /on, /off)Halaman yang menyalakan LED dari ponsel dan menampilkan nilai cahaya
5Menjadikan board sebagai klienHTTPClient + API Cuaca ESP32 (dengan Layar LCD), Jam Real-Time dari Internet lewat NTP ESP32 (Premium)Klien HTTP, request GET, kode status (200, 404), JSON, waktu lewat NTPCuaca atau waktu yang diambil dari internet; membaca nilai kelompok sebelah
6Melaporkan peristiwa lewat pesanSistem Alarm Gerakan ESP32 (PIR + Buzzer + LED + Telegram), Penghitung WebSocket ESP32 (2 Tombol + LCD + Web Real-Time) (Premium)Notifikasi, token bot, HTTPS, WebSocket, gagasan publish-subscribe (MQTT)Pesan di ponsel ketika gerakan terdeteksi, atau halaman yang memperbarui dirinya sendiri
7Berjalan dengan baterai dan melindungi perangkatDeep Sleep ESP32: Hemat Baterai (OLED + Penghitung RTC RAM) (Premium)Deep sleep, sumber bangun (wake-up), memori RTC, arus rata-rata, menyimpan kata sandi di file terpisahPerhitungan umur baterai dan proyek yang kata sandinya sudah dipindah ke secrets.h
8Proyek akhirPilihan kelompok, misalnya Suhu dan Kelembapan DHT22 ESP32 (dengan Layar LCD) ditambah halaman web dari minggu 4Menggabungkan konsep, mendokumentasikan, mempresentasikanPerangkat yang berfungsi, presentasi 3 menit, log jaringan

Tiga catatan tentang tabel. Pertama, tidak ada proyek MQTT siap pakai di aplikasi; di minggu 6 jelaskan MQTT sebagai konsep di papan tulis (perangkat tidak berbicara langsung satu sama lain, tetapi menerbitkan pesan dengan sebuah topik ke server perantara, yaitu broker, dan siapa pun yang berminat berlangganan topik itu), lalu lakukan praktiknya dengan notifikasi Telegram dan halaman WebSocket. Detail Telegram ada di artikel bot Telegram ESP32. Kedua, proyek Async Web Server di minggu 4 membutuhkan library AsyncTCP dan ESPAsyncWebServer; instal keduanya di setiap komputer sebelum pelajaran, kalau tidak kompilasi berhenti di baris pertama. Ketiga, latihan kelompok sebelah di minggu 5 tidak butuh internet: ESP32 kelompok A membaca alamat /deger (bahasa Turki untuk “nilai”) pada server yang dibuat kelompok B di minggu 4. Kalau sekolah tidak punya akses internet, minggu ini tetap bisa berjalan.

Ketika memilih pin sensor di minggu 2, pikirkan juga minggu-minggu Wi-Fi. Pin ESP32 di kanal ADC2 (GPIO0, 2, 4, 12–15, dan 25–27) tidak bisa membaca analog selama Wi-Fi aktif; potensiometer yang bekerja baik di GPIO4 pada minggu 2 akan terus mengembalikan nilai salah yang sama di minggu 4. Hubungkan sensor analog ke pin ADC1 (GPIO32–39) sejak awal; itu juga alasan proyek LDR di aplikasi memakai GPIO34.

Kerangka pelajaran mingguan: 80 menit

Menjalankan setiap minggu dengan kerangka yang sama berarti siswa menghabiskan energinya untuk konsep baru, bukan untuk membiasakan diri dengan rutinitas baru. Kalau kamu bisa menjadwalkan dua jam pelajaran berturut-turut, alur di bawah berjalan sebagai satu blok; kalau tidak, alur ini bisa dibagi menjadi dua bagian 40 menit, dan dalam hal itu jangan bongkar rangkaian di akhir pelajaran pertama, simpan dalam keadaan terpasang di kotak. Log jaringan adalah catatan satu halaman yang disimpan setiap kelompok: tanggal, alamat IP board, alamat MAC, kekuatan sinyal, error yang ditemui, dan cara mengatasinya. Mulai minggu 3, separuh dari seluruh debugging dilakukan dengan melihat log ini.

MenitTahapApa yang terjadi?
0–10PemanasanPertanyaan penutup minggu lalu didiskusikan, kelompok membuka log jaringannya, kotak dibagikan.
10–20KonsepSatu konsep minggu itu digambar di papan tulis: untuk minggu 4, sebuah ponsel, sebuah ESP32, dan panah request dan response di antara keduanya.
20–30Membaca kodeProyek minggu itu ditampilkan di proyektor, ringkasan dan penjelasan langkah demi langkah di tab Pahami kode dibaca bersama, siswa menebak output-nya.
30–55Rakit dan uploadKelompok merakit rangkaian, meng-upload kode, dan melihat output pertama di Serial Monitor. Kelompok yang macet lebih dari 3 menit mendapat kit cadangan darimu.
55–70Ubah satu halSetiap kelompok mengubah satu hal saja: interval refresh, teks halaman, ambang, atau durasi tidur. Perubahannya dicatat di log jaringan.
70–80PenutupPertanyaan penutup dijawab secara tertulis, rangkaian dibongkar atau disimpan dalam keadaan terpasang di kotak, komponen dihitung.

Realitas jaringan sekolah: kenapa ESP32 tidak mau terhubung ke Wi-Fi sekolah

Sebagian besar modul IoT tersendat karena jaringan, bukan karena kode. ESP32 klasik hanya bekerja di pita 2,4 GHz; ia tidak akan pernah melihat access point yang hanya memancar di 5 GHz. Jaringan sekolah sering tidak memakai satu kata sandi bersama seperti jaringan rumah, melainkan autentikasi enterprise dengan nama pengguna dan kata sandi (WPA2-Enterprise); ESP32 bisa mendukungnya dengan kode tambahan, tetapi itu berarti menulis kata sandi akun pribadi siswa atau guru ke dalam kode, dan itu tidak bisa diterima di kelas. Jaringan tamu membuka halaman persetujuan di browser setelah terhubung (captive portal); ESP32 tidak punya layar atau browser, jadi tidak bisa melewati halaman itu: terlihat terhubung tetapi tidak pernah sampai ke internet. Sebagian sekolah hanya mengizinkan perangkat yang alamat MAC-nya sudah didaftarkan sebelumnya. Jebakan terakhir paling jarang diketahui: jaringan tamu biasanya mengisolasi perangkat satu sama lain (client isolation). Dalam kasus itu ESP32 bergabung ke jaringan dan bahkan menampilkan alamat IP-nya, tetapi ponsel di jaringan yang sama tidak bisa menjangkau alamat itu dan web server minggu 4 tidak pernah terbuka.

Jenis jaringanApakah ESP32 bisa terhubung?Untuk minggu web serverCatatan
Jaringan 2,4 GHz dengan satu kata sandi (WPA2-PSK)YaCocokSama seperti jaringan rumah; di sekolah jarang dibuka untuk siswa
Jaringan yang hanya memancar di 5 GHzTidak, sama sekali tidak terlihatTidak cocokKalau tidak ada di daftar jaringan, cek pitanya dulu
Jaringan enterprise dengan nama pengguna dan kata sandi (WPA2-Enterprise)Secara teknis bisa dengan kode tambahanTidak disarankanKata sandi akun pribadi akhirnya tertulis di dalam kode
Jaringan tamu dengan halaman persetujuan (captive portal)Terhubung tetapi tidak bisa mengakses internetBiasanya tidak cocokSebagian besar juga mengaktifkan client isolation
Hotspot pribadi di ponselYa, kalau 2,4 GHz aktifCocokJumlah perangkat yang bisa terhubung bersamaan terbatas
Router 2,4 GHz terpisah yang tidak terhubung ke jaringan sekolahYaPilihan terbaikKalau butuh internet, sepakati koneksinya dengan bagian IT

Solusinya: hotspot ponsel atau router terpisah

Solusi tercepat adalah hotspot pribadi di ponselmu. Di iPhone, mengaktifkan Maksimalkan Kompatibilitas di pengaturan Hotspot Pribadi memindahkan siaran ke 2,4 GHz; di Android kamu memilih pita 2,4 GHz di pengaturan hotspot. Cara ini juga memberi akses internet, tetapi ponsel hanya menerima jumlah perangkat yang terbatas sekaligus, dan dengan 8 kelompok ditambah ponsel siswa, batasnya cepat penuh. Aturan praktis: kalau 8 board ESP32 terhubung ke ponsel guru, 8 ponsel siswa yang akan membuka browser tidak boleh terhubung ke ponsel kedua, karena ponsel dan ESP32 harus berada di jaringan yang sama. Jadi di minggu 3 dan 4, taruh 4 kelompok di satu hotspot dan 4 kelompok lainnya di hotspot kedua, dan minta setiap kelompok menguji dengan satu ponsel saja.

Kalau kamu akan mengulang modul ini setiap tahun, solusi permanennya adalah router 2,4 GHz terpisah yang hanya dipakai untuk kelas ini. Router bekerja tanpa harus terhubung ke jaringan sekolah; minggu 3 dan 4 serta latihan kelompok sebelah bisa dilakukan tanpa internet, karena ESP32 dan ponsel berada di jaringan lokal yang sama. Internet hanya dibutuhkan di minggu 5 dan 6 (cuaca, NTP, Telegram); untuk dua minggu itu, pakai hotspot atau rencanakan bersama bagian IT cara menghubungkan router ke jaringan sekolah. Ganti nama jaringan dan kata sandinya setiap semester, dan ganti kata sandi admin router di hari pertama. Kalau sama sekali tidak ada jaringan fisik, nama jaringan bawaan di kode proyek Wi-Fi aplikasi adalah Wokwi-GUEST; kode yang sama bisa dicoba dengan jaringan ini di simulator Wokwi di browser. Ajukan lima pertanyaan ini ke bagian IT sekolahmu minimal dua minggu sebelum modul dimulai:

  1. Apakah di sekolah ada jaringan yang memancar di 2,4 GHz dengan satu kata sandi bersama (WPA2-PSK), dan kalau ada, bolehkah perangkat kelas memakainya?
  2. Apakah jaringan tamu memakai captive portal dan client isolation? Bisakah dua perangkat di jaringan yang sama saling menjangkau?
  3. Apakah perangkat harus didaftarkan lebih dulu berdasarkan alamat MAC? Kalau ya, kapan paling lambat daftar 9 board harus diserahkan?
  4. Apakah aturan sekolah membolehkan pemakaian router terpisah di lab yang tidak terhubung ke jaringan sekolah, atau hotspot dari ponsel guru?
  5. Kalau board ESP32 butuh akses internet di minggu 5 dan 6, koneksi apa saja yang diizinkan firewall (situs web, server waktu, layanan pesan)?

Kodenya: ESP32 yang terhubung ke Wi-Fi dan menampilkan nilai sensor di halaman

Kode di bawah adalah inti minggu 4 dan hanya memakai library WiFi.h dan WebServer.h yang sudah ikut dalam paket board ESP32, jadi tidak perlu library tambahan. Rangkaiannya tetap dari minggu 2: pin VCC modul LDR ke 3V3, GND ke GND, AO ke GPIO34. GPIO34 ada di ADC1, jadi tetap bisa dibaca selama Wi-Fi aktif. Sebelum meng-upload, ganti dua placeholder AG_ADI (nama jaringan) dan AG_SIFRESI (kata sandi) dengan data jaringan 2,4 GHz milikmu, atau pindahkan dua baris ini ke file terpisah bernama secrets.h, seperti yang akan kamu lakukan di minggu 7; kalau kode menemukan file itu, kode akan memakainya.

C++ (Arduino IDE)
1// ESP32 Wi-Fi + web sunucu: LDR değerini tarayıcıda göster / ESP32 Wi-Fi + web server: show the LDR value in a browser
2#include <WiFi.h>
3#include <WebServer.h>
4
5// Ağ bilgileri: secrets.h varsa oradan gelir / Network credentials: taken from secrets.h if it exists
6#if __has_include("secrets.h")
7#include "secrets.h"
8#else
9const char* WIFI_SSID = "AG_ADI";       // 2,4 GHz ağın adı / Name of the 2.4 GHz network
10const char* WIFI_PASS = "AG_SIFRESI";   // Ağ şifresi / Network password
11#endif
12
13const int LDR_PIN = 34;   // ADC1 pini, Wi-Fi açıkken de okunur / ADC1 pin, still readable while Wi-Fi is on
14
15WebServer server(80);     // 80 numaralı portta web sunucu / Web server on port 80
16
17// Ana sayfa: ölçümü HTML olarak gönder / Home page: send the reading as HTML
18void handleRoot() {
19  int raw = analogRead(LDR_PIN);              // 0-4095 ham değer / Raw value 0-4095
20  int percent = map(raw, 4095, 0, 0, 100);    // Modülde ışık arttıkça değer düşer / On the module the value drops as light rises
21  String html = "<!DOCTYPE html><html><head><meta charset='utf-8'>";
22  html += "<meta name='viewport' content='width=device-width'>";
23  html += "<script>setTimeout(() => location.reload(), 5000);</script>";   // 5 saniyede bir yenile / Reload every 5 s
24  html += "<title>ESP32 Grup 1</title></head><body>";
25  html += "<h1>Isik: %" + String(percent) + "</h1>";
26  html += "<p>Ham deger: " + String(raw) + "</p>";
27  html += "<p>Sinyal: " + String(WiFi.RSSI()) + " dBm</p>";
28  html += "</body></html>";
29  server.send(200, "text/html", html);        // 200 = istek başarılı / 200 = request OK
30}
31
32// Yalnız sayıyı döndüren adres / Address that returns only the number
33void handleValue() {
34  server.send(200, "text/plain", String(analogRead(LDR_PIN)));
35}
36
37void setup() {
38  Serial.begin(115200);
39  analogReadResolution(12);                   // 12 bit: 0-4095
40  WiFi.mode(WIFI_STA);                        // İstasyon modu: var olan ağa katıl / Station mode: join an existing network
41  WiFi.begin(WIFI_SSID, WIFI_PASS);
42  Serial.print("Baglaniliyor / Connecting");
43  unsigned long start = millis();
44  while (WiFi.status() != WL_CONNECTED && millis() - start < 20000) {   // En fazla 20 sn bekle / Wait up to 20 s
45    delay(500);
46    Serial.print(".");
47  }
48  if (WiFi.status() != WL_CONNECTED) {
49    Serial.println("\nBaglanamadi, yeniden basliyor / No connection, restarting");
50    delay(2000);
51    ESP.restart();
52  }
53  Serial.print("\nIP: ");
54  Serial.println(WiFi.localIP());             // Telefonda bu adresi aç / Open this address on the phone
55  server.on("/", handleRoot);                 // Ana sayfa: IP/ / Home page: IP/
56  server.on("/deger", handleValue);           // Yalnız sayı: IP/deger / Number only: IP/deger
57  server.begin();
58}
59
60void loop() {
61  server.handleClient();                      // Gelen istekleri karşıla / Serve incoming requests
62}

Setelah meng-upload, buka Serial Monitor pada 115200 baud. Ketika titik-titiknya berhenti, baris IP muncul, misalnya 192.168.43.57. Di ponsel yang terhubung ke jaringan yang sama dengan ESP32, buka browser dan ketik alamat ini: halaman menampilkan persentase cahaya, nilai mentah, dan kekuatan sinyal, lalu memuat ulang dirinya setiap 5 detik. Tutup LDR dengan tanganmu dan persentasenya turun. Tambahkan /deger di akhir alamat dan kamu hanya mendapat angka mentahnya; di minggu 5, ESP32 kelompok sebelah akan membaca persis alamat ini dengan klien HTTP. Kalau board tidak bisa terhubung dalam 20 detik, board akan me-restart dirinya sendiri, jadi siswa tidak mengira board-nya macet. Kalau koneksi tidak pernah terbentuk, lihat artikel ESP32 tidak mau terhubung ke Wi-Fi untuk arti kode-kode status.

Kalau alamat IP muncul di Serial Monitor tetapi ponsel tidak bisa membuka halamannya, masalahnya hampir selalu ada di jaringan, bukan di kode. Ponsel mungkin memakai data seluler atau jaringan lain, atau client isolation sedang aktif. Pertama, pastikan Wi-Fi ponsel ada di jaringan yang sama dengan ESP32; kalau sudah dan halaman tetap tidak terbuka, pindah ke hotspot.

Keamanan dan etika: minggu yang jangan dilewati

Di kelas IoT, keamanan tidak diajarkan sebagai presentasi slide terpisah, tetapi sebagai perubahan yang dilakukan siswa di kodenya sendiri. Dalam modul ini siswa sudah membawa rahasia sungguhan di tiga tempat: kata sandi Wi-Fi, token bot dari minggu 6, dan data yang mereka ukur sendiri. Berikan paruh kedua minggu 7 untuk lima topik ini dan minta satu perubahan nyata di proyek setiap kelompok untuk masing-masing topik:

  • Jangan tanam kata sandi di kode: Pindahkan kata sandi Wi-Fi dan token bot ke file terpisah bernama secrets.h dan jangan ikutkan file itu ketika membagikan kode atau mengambil tangkapan layar. Satu baris kode di proyektor berarti semua orang di ruangan tahu kata sandinya.
  • Ganti kata sandi bawaan: Panel admin router, mode access point (AP) milik ESP32 sendiri, dan kata sandi di contoh kode siap pakai adalah nilai yang diketahui semua orang. Ganti kata sandi router kelas di hari pertama, dan minta siswa tidak meninggalkan kata sandi contoh di proyek mereka.
  • Halamanmu terbuka untuk semua orang di jaringan: Web server di tulisan ini tidak punya layar login; siapa pun di jaringan yang sama yang tahu alamatnya bisa membuka halaman itu, dan di proyek yang punya alamat /on juga bisa menyalakan LED. Karena itu di kelas hanya output yang tidak berbahaya seperti LED, buzzer, dan layar yang dikendalikan lewat web; relay yang terhubung ke tegangan listrik PLN tidak dipakai di modul ini.
  • Mengumpulkan data pribadi: Suhu dan cahaya bukan data pribadi, tetapi sensor gerak yang mencatat kapan orang lewat di koridor, kamera, atau mikrofon bisa menjadi data pribadi. Kalau ada ide proyek akhir yang merekam gerakan, suara, atau gambar orang, minta kelas menjawab dulu: “Siapa yang melihatnya, berapa lama disimpan, apakah sudah ada izin?”
  • Pembaruan dan tanggung jawab: Perangkat yang terhubung ke internet tidak dipasang sekali lalu dilupakan. Tunjukkan ke siswa bahwa di akhir modul router kelas dimatikan, token bot dicabut, dan board di-reset, lalu diskusikan siapa yang bertanggung jawab atas sebuah perangkat sepanjang umurnya.

Daftar kit: per kelompok dan untuk 8 kelompok

Daftar ini untuk 24 siswa dalam 8 kelompok bertiga; 9 kit termasuk satu cadangan sudah cukup. Sebagian besar komponen dibeli untuk minggu-minggu awal lalu dipakai lagi kemudian; LCD, misalnya, muncul di empat proyek dari minggu 2 sampai minggu 5. Tidak perlu menyolder; modul seperti LCD I2C dan OLED dihubungkan dengan kabel jumper male-to-female. Kalau kamu memakai LDR biasa, bukan modul LDR, tambahkan satu resistor 10 kΩ per kelompok dan rakit pembagi tegangan bersama-sama di minggu 2.

BahanPer kelompokUntuk kelas (8 kelompok + 1 cadangan)Minggu dipakai
ESP32 DevKit (30 pin, ESP32-WROOM-32)191–8
Kabel data USB (sudah dites)1111–8
Breadboard (830 lubang)2181–8
Push button (tombol tekan)2181, 6
LED 5 mm dan resistor 220 Ω3 + 330 + 301, 3, 4
Modul LDR (dengan output AO)192, 4, 5
Sensor suhu dan kelembapan DHT22192, 8
Layar LCD I2C 16x2192–5
Layar OLED SSD1306 0,96 inci (I2C)197
Sensor gerak PIR (HC-SR501) dan buzzer1 + 19 + 96
Kabel jumper (male-to-male dan male-to-female)20 + 10sekitar 180 + 901–8
Access point 2,4 GHz (hotspot ponsel atau router terpisah)-2 hotspot atau 1 router3–8
Ponsel atau tablet dengan BlueGrays181–8

Penilaian: kriteria proyek akhir

Buat aturan proyek akhir tetap sederhana: satu sensor, satu koneksi Wi-Fi, dan satu cara berbagi (halaman web atau pesan). Kelompok menulis idenya dalam satu kalimat di akhir minggu 6, mendaftar komponennya di minggu 7, merakit di jam pelajaran pertama minggu 8, dan presentasi tiga menit di jam pelajaran kedua. Beri nilai dengan enam kriteria di bawah; masing-masing bernilai 1–3 poin, total 18. Untuk logika umum rubrik, formulir pengumpulan, dan portofolio, kamu bisa memakai ulang templat dari artikel Rubrik Penilaian Proyek Arduino apa adanya.

Kriteria1: Mulai2: Berkembang3: Siap
Sensor dan rangkaianRangkaian sudah dirakit tetapi tidak ada nilai atau nilainya tidak bermaknaNilai terbaca, tetapi alasan pilihan pin tidak bisa dijelaskanNilai terbaca dengan benar, pilihan pin ADC1 atau digital dijelaskan
Koneksi Wi-FiHanya terhubung dengan bantuan guruTerhubung, tetapi perangkat berhenti ketika koneksi putusTerhubung, tersambung ulang setelah putus, IP dan kekuatan sinyal tercatat
Berbagi dataData hanya ada di Serial MonitorHalaman atau pesan sudah ada, tetapi harus di-refresh atau dipicu secara manualHalaman memperbarui dirinya sendiri atau pesan terkirim otomatis ketika peristiwa terjadi
Kesadaran dayaTidak ada yang tahu berapa arus yang ditarik perangkatUmur baterai sudah dihitung, tetapi mode tidur tidak diperhitungkanDihitung dengan interval tidur dan bangun, hasilnya ditafsirkan
Keamanan dan etikaKata sandi terlihat jelas di kodeKata sandi di secrets.h, data tidak didiskusikanKata sandi di file terpisah, data yang dikumpulkan dan siapa yang melihatnya sudah tertulis
Dokumentasi dan presentasiLog jaringan tidak lengkap, presentasi hanya berupa demoLog jaringan ada, tetapi error yang ditemui tidak dijelaskanLog jaringan lengkap, satu error dan cara mengatasinya dijelaskan dalam presentasi

Pertanyaan penutup mingguan dan daftar periksa sebelum modul

  1. Minggu 1: Pada pin yang diatur sebagai INPUT_PULLUP, apa yang dikembalikan digitalRead() selama tombol ditekan, dan kenapa?
  2. Minggu 2: Kenapa potensiometer di GPIO4 tidak bisa dibaca selama Wi-Fi aktif? Pin mana yang sebaiknya kita pilih?
  3. Minggu 3: Kalau WiFi.status() menyatakan tidak terhubung, dua hal apa yang pertama kamu cek?
  4. Minggu 4: Kenapa alamat IP yang kamu ketik di browser bisa berbeda minggu depan?
  5. Minggu 5: Apakah ESP32-mu menjadi server atau klien minggu ini? Apa arti kode status 200 dan 404?
  6. Minggu 6: Apa yang terjadi kalau token bot terlihat di tangkapan layar? Apa tugas broker di MQTT?
  7. Minggu 7: Dengan baterai yang sama, ESP32 bisa bertahan berhari-hari kalau selalu menyala dan berbulan-bulan dalam deep sleep. Apa yang membuat perbedaannya?
  8. Minggu 8: Data apa yang dikumpulkan perangkatmu, siapa yang bisa melihatnya, dan berapa lama data itu disimpan?
  • Dua minggu sebelum modul: Ajukan lima pertanyaan itu ke bagian IT dan putuskan antara hotspot atau router berdasarkan jawabannya.
  • Dua minggu sebelum modul: Hitung board-nya dan tulis alamat MAC setiap board di labelnya (serahkan daftarnya ke bagian IT kalau perlu pendaftaran).
  • Satu minggu sebelum modul: Instal paket board ESP32 serta library DHT, LiquidCrystal I2C, AsyncTCP, dan ESPAsyncWebServer di setiap komputer; uji dengan satu board.
  • Satu minggu sebelum modul: Atur hotspot ke 2,4 GHz, ganti nama dan kata sandinya, hubungkan satu ESP32, lalu buka halamannya dari ponsel.
  • Satu minggu sebelum modul: Perbanyak satu halaman log jaringan untuk setiap kelompok, uji sensor dan LCD, lalu masukkan ke kotak.
  • Sebelum minggu 5: Siapkan kode untuk proyek Premium dan beri tahu siswa data mereka yang mana yang dibagikan.

Peran BlueGrays dalam modul ini

  • Proyek ESP32: Di Jelajahi › Proyek, gunakan Filter untuk memilih platform ESP32; ada sekitar 50 proyek ESP32, dari koneksi Wi-Fi sampai deep sleep. Setiap proyek punya skema rangkaian, daftar komponen beserta jumlahnya, dan kode sumber yang bisa disalin. Salin tautan berguna untuk membuka kode di komputer.
  • Pahami kode: Menit 20–30 setiap minggu dihabiskan di tab ini: ringkasan Kode ini ngapain?, penjelasan Langkah demi langkah, Kalau mentok, dan tugas Coba sendiri. Tab ini gratis di proyek empat minggu pertama dan terbuka dengan Premium di proyek Premium.
  • Alat pinout: Di alat Pinout, memilih pin ESP32 mana pun akan menampilkan jenis dan peringatannya; untuk pin ADC2, alat ini menyebutkan bahwa pembacaan analog tidak bisa dilakukan selama Wi-Fi aktif, sedangkan untuk pin ADC1, alat ini menyebutkan bahwa pin tetap bisa dibaca dengan Wi-Fi aktif. Ideal ditampilkan di proyektor ketika memilih pin di minggu 2. Pinout adalah alat Premium.
  • Alat umur baterai: Di alat Umur baterai, kamu memilih profil siap pakai ESP32 · deep sleep; masukkan kapasitas baterai, arus dan durasi bangun, arus tidur, dan siklus, lalu alat ini menghitung perkiraan lama operasi dan arus rata-rata. Perbandingan “selalu menyala versus tidur” di minggu 7 dilakukan di layar ini. Alat ini Premium; pengguna gratis bisa melihat contoh perhitungan.
  • Paket pendidik: Mulai minggu 5 proyek Premium diperlukan, jadi satu akun per kelompok sebaiknya punya Premium. Paket tahunan 10 kode mencakup 8 kelompok dan guru; pembayarannya sekali, tidak diperpanjang otomatis, siswa tidak menambahkan kartu, kamu bisa melihat siapa yang memakai setiap kode di Kodeku, dan kamu bisa memindahkan kode ke kelompok semester berikutnya. Kode bulanan 30 hari yang dibagikan di pelajaran pertama minggu 5 hanya pas-pasan menutup empat minggu terakhir; kalau ada libur di tengahnya, kode itu tidak akan cukup. Detailnya ada di artikel kode Premium untuk kelasmu.

Setelah delapan minggu, siswa tidak hanya punya perangkat yang berfungsi; mereka punya kebiasaan berpikir tentang bagaimana perangkat berbicara di jaringan, kenapa perangkat gagal terhubung, berapa banyak energi yang dipakai, dan data siapa yang dikumpulkan, dan itulah yang dicari dalam pendidikan kejuruan. Kalau kamu ingin melihat proyek, skema, dan penjelasan Pahami kode setiap minggu sebelum kelas, cukup buka filter ESP32 di aplikasi BlueGrays.

Pertanyaan umum

Berapa minggu sebaiknya kursus IoT ESP32 berlangsung?

Dengan dua jam pelajaran seminggu, 8 minggu cukup untuk konsep inti IoT, dari sensor dan Wi-Fi sampai web server, notifikasi, dan deep sleep. Kalau kamu hanya punya satu jam pelajaran seminggu, rentangkan rencana yang sama menjadi 12–14 minggu atau gabungkan minggu 5 dan 6. Berikan minimal satu pertemuan penuh untuk proyek akhir.

Bisakah mengajar IoT ESP32 tanpa Wi-Fi sekolah?

Bisa. Selama ESP32 dan ponsel berada di jaringan lokal yang sama, web server dan request antarperangkat tidak butuh internet; hotspot 2,4 GHz di ponsel guru atau router terpisah yang tidak terhubung ke jaringan sekolah sudah cukup. Internet hanya dibutuhkan untuk layanan luar seperti cuaca, waktu, dan Telegram.

Kenapa ESP32-ku tidak mau terhubung ke Wi-Fi sekolah?

ESP32 klasik hanya bekerja di 2,4 GHz, jadi jaringan yang hanya memancar di 5 GHz tidak pernah muncul. Jaringan sekolah sering memakai autentikasi enterprise dengan nama pengguna dan kata sandi atau captive portal di browser, dan sebagian hanya mengizinkan alamat MAC yang terdaftar. Dalam kasus seperti ini, hotspot atau router terpisah adalah pilihan paling praktis.

Kenapa web server ESP32 tidak bisa dibuka dari ponselku?

Penyebab paling umum adalah ponsel tidak berada di jaringan yang sama dengan ESP32: ponsel mungkin memakai data seluler atau jaringan Wi-Fi lain. Penyebab kedua adalah client isolation di jaringan tamu, yang membuat perangkat di jaringan yang sama tidak bisa saling menjangkau. Coba lagi alamat IP dari Serial Monitor dengan ponsel dan ESP32 berada di hotspot yang sama.

Apakah aku perlu mengajarkan MQTT di kelas IoT?

Tidak wajib, tetapi sebaiknya dijelaskan sebagai konsep, karena sebagian besar sistem IoT nyata memakai model ini, di mana perangkat bertukar pesan berdasarkan topik melalui broker. Dalam modul 8 minggu, cukup mantapkan dulu hubungan klien-server dengan HTTP, lalu perkenalkan MQTT di minggu keenam sebagai gagasan publish-subscribe.

Apakah proyek ESP32 di BlueGrays gratis?

Sebagian. Proyek yang dipakai di empat minggu pertama rencana ini, seperti tombol, LDR, DHT22, koneksi Wi-Fi, dan Async Web Server, sepenuhnya gratis. Proyek klien HTTP, Telegram, WebSocket, dan deep sleep adalah Premium; untuk satu kelas, kamu bisa mendapatkan kode massal dari Paket pendidik di layar Profil.

Lihat semua proyek
Koneksi Wi-Fi STA ESP32 (dengan Layar LCD)
#127Mahir

Koneksi Wi-Fi STA ESP32 (dengan Layar LCD)

Di proyek ini, kita menyambungkan ESP32 ke jaringan Wi-Fi rumah dalam mode Station (STA) dengan cara yang aman dan tahan gangguan. Kita menyimpan SSID dan kata sandi di file secrets.h terpisah agar tidak bocor ke Git, menyiapkan mekanisme sambung ulang otomatis, dan menampilkan tingkat sinyal RSSI dan alamat IP di layar LCD I2C. LED bawaan bekerja sebagai indikator status. Ini adalah pengelola koneksi kelas produksi.

4.4(21)
34
Web Server Asinkron ESP32 (dengan Tampilan IP di LCD)
#129Mahir

Web Server Asinkron ESP32 (dengan Tampilan IP di LCD)

Di proyek ini, kita mengubah ESP32 menjadi web server asinkron yang bisa kamu kendalikan dari ponsel atau komputer di jaringan Wi-Fi yang sama. Berkat library ESPAsyncWebServer, server bisa memproses beberapa permintaan bersamaan (berbeda dengan WebServer.h klasik, yang memblokir pada satu permintaan). Kamu bisa membuka alamat IP ESP32 di browser dan mengklik tombol ON/OFF (rute /on dan /off) untuk menyalakan dan mematikan LED yang tersambung ke GPIO 5.

4.8(16)
26
Kendali LED dengan Tombol Tekan ESP32 (Tekan)
#104Pemula

Kendali LED dengan Tombol Tekan ESP32 (Tekan)

LED menyala ketika tombol ditekan dan mati ketika dilepas. Menunjukkan cara memakai pin input digital ESP32 dan resistor pull-up internalnya. Mode INPUT_PULLUP membuat resistor eksternal tidak diperlukan.

4.6(36)
55
Membaca Intensitas Cahaya dengan Modul LDR ESP32
#113Pemula

Membaca Intensitas Cahaya dengan Modul LDR ESP32

Memantau secara real-time di Serial Monitor nilai ADC mentah modul LDR dan persentase cahaya relatif yang dihitung dari nilai acuan gelap dan terang. Persentase ini bukan pengukuran lux. Mengajarkan logika kalibrasi modul. Ideal dikerjakan sebelum Proyek 10, karena dipakai untuk menentukan nilai ambang.

4.6(36)
55
Suhu dan Kelembapan DHT22 ESP32 (dengan Layar LCD)
#117Menengah

Suhu dan Kelembapan DHT22 ESP32 (dengan Layar LCD)

Proyek ini mengukur suhu dan kelembapan sekitar dengan sensor DHT22 dan menampilkan datanya secara real-time di LCD I2C 16x2. Data dibaca dari sensor dengan protokol satu kabel lewat library Adafruit DHT. Proyek ini menjadi dasar untuk stasiun cuaca IoT, otomasi rumah pintar, atau sistem pemantauan lingkungan di rumah kaca. Komunikasi dengan DHT22 dilakukan lewat pin GPIO 4 ESP32.

4.8(38)
56
HTTPClient + API Cuaca ESP32 (dengan Layar LCD)
#133Mahir
Premium

HTTPClient + API Cuaca ESP32 (dengan Layar LCD)

Di proyek ini, kita memakai ESP32 untuk melakukan panggilan REST API ke API cuaca (wttr.in) lewat internet dengan HTTPClient.h. Kita mengurai respons JSON yang diterima dengan ArduinoJson v7 dan menampilkan kota, suhu, kelembapan, cuaca, dan informasi angin di layar LCD I2C dalam bahasa Turki dan Inggris. wttr.in gratis dan tidak butuh kunci API; kamu cukup memasukkan nama kota apa pun untuk mengambil kondisi cuaca terkini kota itu. Data diperbarui otomatis setiap 30 menit.

4.7(13)
20
Sistem Alarm Gerakan ESP32 (PIR + Buzzer + LED + Telegram)
#145Mahir
Premium

Sistem Alarm Gerakan ESP32 (PIR + Buzzer + LED + Telegram)

Sistem alarm keamanan pintar yang menyalakan buzzer dan LED ketika sensor PIR mendeteksi gerakan, sekaligus mengirim notifikasi instan ke pemilik lewat Telegram. Cooldown 30 detik membatasi seberapa sering alarm berulang; mekanisme ini tidak memvalidasi deteksi PIR atau menghilangkan pemicu palsu. Cocok untuk rumah, garasi, gudang, atau ruang kerja. Dengan ESP32-CAM bisa ditambahkan notifikasi berfoto; dengan ESP32 DevKit V1 klasik, notifikasinya berupa teks.

0.0(0)
9
Deep Sleep ESP32: Hemat Baterai (OLED + Penghitung RTC RAM)
#135Mahir
Premium

Deep Sleep ESP32: Hemat Baterai (OLED + Penghitung RTC RAM)

Mode Deep Sleep ESP32 menurunkan konsumsi arus hingga ~10 µA dengan mematikan CPU dan sebagian besar periferal, sehingga sangat penting untuk perangkat IoT bertenaga baterai. Di proyek ini, kita memakai tiga sumber bangun yang berbeda: timer (15 detik), pin eksternal (EXT0, tombol GPIO 33), dan sentuhan (T0/GPIO 4). Variabel yang ditandai RTC_DATA_ATTR dipertahankan selama deep sleep; penghitung boot, penghitung bangun karena timer, dan penghitung bangun karena tombol terus dilacak.

4.3(10)
16