Rehberler · 12 dk okuma

ESP32 IoT Ders Planı: 8 Haftalık Nesnelerin İnterneti Modülü

ESP32 IoT ders planı: 8 haftalık tablo, okul ağı ve hotspot çözümü, Wi-Fi web sunucu kodu, güvenlik ve etik, 8 grupluk malzeme listesi ve final rubriği.

Lise ya da meslek eğitiminde bir ESP32 IoT ders planı kurarken modülü dört katmana böl: önce kart çevresini algılasın (GPIO ve sensörler), sonra ağa bağlansın (Wi-Fi), sonra veriyi paylaşsın (web sunucu, HTTP istemci, mesaj), en son da pille çalışmayı ve korunmayı öğrensin (deep sleep ve güvenlik). Haftada iki ders saatiyle bu dört katman sekiz haftaya rahat sığar: iki hafta donanım, iki hafta ağ ve sunucu, iki hafta veri alışverişi, bir hafta güç ve güvenlik, son hafta final projesi. Öğrenciler modülün sonunda bir sensörü okuyan, ölçümünü telefondan açılan bir sayfada gösteren ya da bir olayda telefona mesaj gönderen, pil ömrü hesaplanmış ve şifresi kodun içinde açıkta durmayan bir cihaz teslim eder.

Bu yazı ESP32 ilk ders planının devamı; kurulum, sürücü, BOOT düğmesi ve ilk LED orada anlatıldı, burada tekrar edilmiyor. Burada hafta hafta hedef, BlueGrays'teki gerçek proje, kavram ve çıktı tablosu, 80 dakikalık haftalık ders iskeleti, okul ağının ESP32'yi neden çoğu zaman içeri almadığı ve bunun çözümü, bilgi işlem birimine sorulacak beş soru, derlenebilir bir Wi-Fi web sunucu kodu, güvenlik ve etik bölümü, 8 grupluk malzeme listesi ve final projesi kriterleri var. Örnekler şu varsayımla kuruldu: 24 öğrencin var, üçerli 8 grup çalışıyor ve haftada iki ders saatin (2 × 40 dakika) var. Senin sınıfın farklıysa süreleri oranlayarak uyarla.

ESP32 IoT dersinde ışık ölçmek için kullanılan LDR
Modülün ortak sensörü: 2. haftada okunan LDR, 4. haftada telefondan açılan web sayfasında görünür.

Modülün mantığı: algıla, bağlan, paylaş, tasarruf et

Nesnelerin İnterneti (IoT) dersi, öğrenciye internetin kendisini değil, bir cihazın ağdaki öteki cihazlarla nasıl konuştuğunu öğretir. Bunun için önce ölçecek bir şey gerekir; Wi-Fi'ye bağlanan ama hiçbir şey ölçmeyen bir kartın ağda söyleyecek sözü yoktur. Bu yüzden ilk iki hafta bilinçli olarak Wi-Fi'siz geçer: öğrenciler buton, LDR ve sıcaklık-nem sensörüyle çalışır, pin seçimini ve ölçüm aralığını oturtur. Üçüncü haftada kart ağa bağlanır, dördüncü haftada sunucu olur, beşinci haftada başka bir sunucudan veri isteyen istemciye dönüşür, altıncı haftada bir olayı mesajla bildirir. Yedinci hafta, çoğu kısa IoT atölyesinde atlanan iki konuya ayrılır: pil ömrü ve güvenlik. Her katman bir öncekinin üstüne kurulduğu için sıra değiştirilmemeli; Wi-Fi haftası sorunlu geçerse bir sonraki haftaya geçmeden önce bağlantı sorununu çözmek gerekir.

Ön koşul: Modüle başlamadan önce her grubun ESP32'ye en az bir kez kod yüklemiş olması gerekir. Sınıfın henüz bu noktada değilse önce ilk ESP32 dersini yap; sürücü, kart paketi ve port sorunlarını Wi-Fi haftasına taşımamak modülün en büyük zaman kazancıdır.

8 haftalık ESP32 IoT ders planı

Tablodaki her proje BlueGrays'te devre şeması, parça listesi ve koduyla hazır. İlk dört haftanın projeleri, Wi-Fi bağlantısı ve web sunucu projeleri de dahil, tamamen ücretsiz; 5. haftadan itibaren kullanılan HTTP istemci, Telegram, WebSocket ve deep sleep projeleri Premium. Yani ilk ay hiçbir öğrencinin Premium'a ihtiyacı yoktur; Premium gerektiğinde ne yapacağını yazının sonunda bulacaksın.

HaftaHedefBlueGrays projesiKavramÇıktı
1Giriş okuyup çıkış sürmekESP32 Buton ile LED Kontrol (Push), ESP32 Buton ile LED Kontrol (Toggle) (Ücretsiz)GPIO, INPUT_PULLUP, dijital giriş ve çıkış, durum değişkeniButonla aç-kapa yapan LED ve grubun pin haritası
2Ortamı ölçmekESP32 LDR Modülü ile Işık Şiddeti Okuma, ESP32 DHT22 Sıcaklık ve Nem (LCD Ekranlı) (Ücretsiz)Analog okuma (12 bit, 0–4095), ADC1 ve ADC2, I2C, kütüphane, okuma aralığıSeri monitörde 10 ölçümlük ışık tablosu, LCD'de sıcaklık ve nem
3Kartı ağa bağlamakESP32 Wi-Fi STA Bağlantısı (LCD Ekranlı) (Ücretsiz)Wi-Fi istasyon (STA) modu, SSID, IP adresi, RSSI (dBm), WiFi.status(), yeniden bağlanmaAğ defterine IP, MAC adresi ve sinyal gücü kaydı
4Kartı sunucu yapmakESP32 Async Web Server (LCD'de IP Göstergeli) (Ücretsiz) ve bu yazıdaki kodWeb sunucu, HTTP isteği ve yanıtı, port 80, adres yolu (/, /on, /off)Telefondan LED yakan ve ışık değerini gösteren sayfa
5Kartı istemci yapmakESP32 HTTPClient + Hava Durumu API (LCD Ekranlı), ESP32 NTP ile İnternetten Gerçek Zaman (Premium)HTTP istemci, GET isteği, durum kodu (200, 404), JSON, NTP ile saatİnternetten çekilen hava durumu ya da saat; komşu grubun ölçümünü okuma
6Olayı mesajla bildirmekESP32 Hareket Alarm Sistemi (PIR + Buzzer + LED + Telegram), ESP32 WebSocket Sayaç (2 Buton + LCD + Web Realtime) (Premium)Bildirim, bot token'ı, HTTPS, WebSocket, yayınla-abone ol (MQTT) fikriHareket algılanınca telefona gelen mesaj ya da kendiliğinden güncellenen sayfa
7Pille çalışmak ve cihazı korumakESP32 Deep Sleep — Pil Tasarrufu (OLED + RTC RAM Sayaç) (Premium)Deep sleep, uyanma kaynakları, RTC belleği, ortalama akım, şifreleri ayrı dosyada tutmakBatarya ömrü hesabı ve şifresi secrets.h dosyasına taşınmış proje
8Final projesiGrubun seçtiği proje, örneğin ESP32 DHT22 Sıcaklık ve Nem (LCD Ekranlı) ve 4. haftanın web sayfasıKavramları birleştirmek, belgelemek, sunmakÇalışan cihaz, 3 dakikalık sunum, ağ defteri

Tabloyla ilgili üç not. Birincisi, uygulamada hazır bir MQTT projesi yok; 6. haftada MQTT'yi kavram olarak tahtada anlat (cihazlar birbirine doğrudan değil, aracı bir sunucuya, yani broker'a konu başlığıyla mesaj yayınlar, ilgilenenler o başlığa abone olur), uygulamayı ise Telegram bildirimiyle ve WebSocket sayfasıyla yap. Telegram tarafının ayrıntıları ESP32 Telegram bot yazısında var. İkincisi, 4. haftadaki Async Web Server projesi AsyncTCP ve ESPAsyncWebServer kütüphanelerini ister; bunları ders öncesinde her bilgisayara kur, yoksa derleme ilk satırda durur. Üçüncüsü, 5. haftanın komşu grup alıştırması internet istemez: A grubunun ESP32'si, B grubunun 4. haftada kurduğu sunucudaki /deger adresini okur. Okulda internet çıkışı yoksa bu hafta yine işler.

2. haftada sensör pinini seçerken Wi-Fi haftasını düşün. ESP32'nin ADC2 kanalındaki pinler (GPIO0, 2, 4, 12–15 ve 25–27) Wi-Fi açıkken analog okuma yapamaz; 2. haftada GPIO4'te sorunsuz çalışan potansiyometre 4. haftada hep aynı hatalı değeri verir. Analog sensörleri baştan ADC1 pinlerine (GPIO32–39) bağla; uygulamadaki LDR projesi de bu yüzden GPIO34'ü kullanır.

Haftalık ders iskeleti: 80 dakika

Her haftayı aynı iskeletle yürütmek öğrencilerin enerjisini yeni bir düzene alışmaya değil, yeni kavrama harcamasını sağlar. İki ders saatini arka arkaya alabiliyorsan aşağıdaki akış tek blok hâlinde, alamıyorsan 40'ar dakikalık iki parça hâlinde çalışır; ikinci durumda ilk dersin sonunda devreyi sökme, kutuya kurulu hâlde koy. Ağ defteri her grubun tuttuğu tek sayfalık kayıttır: tarih, kartın IP adresi, MAC adresi, sinyal gücü, karşılaşılan hata ve nasıl çözüldüğü. 3. haftadan itibaren hata ayıklamanın yarısı bu deftere bakarak yapılır.

DakikaAşamaNe yapılır?
0–10IsınmaGeçen haftanın çıkış sorusu tartışılır, gruplar ağ defterini açar, kutular dağıtılır.
10–20KavramHaftanın tek kavramı tahtada çizilir: 4. hafta için telefon, ESP32 ve ikisinin arasındaki istek ve yanıt okları.
20–30Kodu okumaHaftanın projesi projeksiyonda açılır, Kodu anla sekmesinden özet ve adım adım açıklama birlikte okunur, öğrenciler çıktıyı tahmin eder.
30–55Kur ve yükleGruplar devreyi kurar, kodu yükler, seri monitörde ilk çıktıyı görür. Öğretmen 3 dakikadan uzun takılan gruba yedek setle müdahale eder.
55–70DeğiştirHer grup tek bir şeyi değiştirir: yenileme süresi, sayfadaki metin, eşik değeri ya da uyku süresi. Değişiklik ağ defterine yazılır.
70–80KapanışÇıkış sorusu yazılı cevaplanır, devre sökülür ya da kurulu hâlde kutuya konur, parçalar sayılır.

Okul ağı gerçekleri: ESP32 neden okul Wi-Fi'sine bağlanmaz?

IoT modüllerinin çoğu kod yüzünden değil, ağ yüzünden aksar. Klasik ESP32 yalnız 2,4 GHz bandında çalışır; yalnız 5 GHz yayın yapan bir erişim noktasını hiç görmez. Okul ağları ise çoğu zaman ev ağı gibi tek şifreyle değil, kullanıcı adı ve şifre isteyen kurumsal kimlik doğrulamasıyla (WPA2-Enterprise) çalışır; ESP32 bunu kod tarafında ek ayarla destekleyebilir, ama bunun için bir öğrencinin ya da öğretmenin kişisel hesap şifresini koda yazmak gerekir ve bu derste kabul edilemez. Misafir ağlarda bağlantıdan sonra tarayıcıda bir onay sayfası (captive portal) açılır; ekranı ve tarayıcısı olmayan ESP32 bu sayfayı geçemez, bağlı görünür ama internete çıkamaz. Bazı okullar yalnız önceden kaydedilmiş cihazların MAC adresine izin verir. Son tuzak en az bilinenidir: misafir ağlar genellikle cihazları birbirinden yalıtır (istemci yalıtımı). Bu durumda ESP32 ağa bağlanır, IP adresini de gösterir, ama aynı ağdaki telefon o adrese ulaşamaz ve 4. haftanın web sunucusu hiç açılmaz.

Ağ türüESP32 bağlanır mı?Web sunucu haftası içinNot
2,4 GHz, tek şifreli (WPA2-PSK) ağEvetUygunEv ağının aynısı; okulda nadiren öğrencilere açıktır
Yalnız 5 GHz yayın yapan ağHayır, ağı hiç görmezUygun değilAğ listesinde görünmüyorsa ilk bakılacak şey bant
Kullanıcı adı ve şifreli kurumsal ağ (WPA2-Enterprise)Ek kodla teknik olarak mümkünÖnerilmezKişisel hesap şifresi koda yazılmak zorunda kalır
Onay sayfalı misafir ağ (captive portal)Bağlanır ama internete çıkamazGenellikle uygun değilÇoğunda istemci yalıtımı da açıktır
Telefonun kişisel erişim noktası (hotspot)Evet, 2,4 GHz açıksaUygunAynı anda bağlanabilecek cihaz sayısı sınırlı
Okul ağına bağlı olmayan ayrı 2,4 GHz routerEvetEn uygunİnternet gerekiyorsa bağlantısı bilgi işlemle konuşulur

Çözüm: telefon hotspot'u ya da ayrı bir router

En hızlı çözüm öğretmen telefonunun kişisel erişim noktasıdır. iPhone'da Kişisel Erişim Noktası ayarındaki Uyumluluğu En Üst Düzeye Çıkar seçeneği açılınca yayın 2,4 GHz'e geçer; Android'de erişim noktası ayarlarından bant 2,4 GHz seçilir. Bu yol internet de verir, ama telefonların aynı anda kabul ettiği cihaz sayısı sınırlıdır ve 8 grubun yanına bir de öğrenci telefonları eklenince sınır çabuk dolar. Pratik kural: 8 ESP32 öğretmen telefonuna, tarayıcı açacak 8 öğrenci telefonu ikinci bir telefona bağlanmaz; telefon ile ESP32 aynı ağda olmalıdır. Bu yüzden 3. ve 4. haftalarda bir hotspot'a 4 grup, ikinci bir hotspot'a diğer 4 grup bağlansın; her grup tek bir telefonla test etsin.

Modülü her yıl tekrarlayacaksan kalıcı çözüm, yalnız bu ders için kullanılan ayrı bir 2,4 GHz router'dır. Router okul ağına bağlanmadan da çalışır; 3. ve 4. haftalar ile komşu grup alıştırması internetsiz yapılabilir, çünkü ESP32 ile telefon aynı yerel ağdadır. İnternet yalnız 5. ve 6. haftalarda (hava durumu, NTP, Telegram) gerekir; o iki hafta için ya hotspot kullan ya da router'ın okul ağına bağlanmasını bilgi işlemle birlikte planla. Ağın adını ve şifresini her dönem değiştir, router'ın yönetim şifresini de ilk gün değiştir. Fiziksel bir ağ hiç yoksa uygulamadaki Wi-Fi projelerinin kodunda varsayılan ağ adı Wokwi-GUEST'tir; aynı kod tarayıcıda çalışan Wokwi simülatöründe bu ağla denenebilir. Bilgi işlem birimine modül başlamadan en az iki hafta önce şu beş soruyu sor:

  1. Okulda 2,4 GHz yayın yapan ve tek şifreyle (WPA2-PSK) bağlanılan bir ağ var mı, varsa sınıf cihazları için kullanılabilir mi?
  2. Misafir ağda onay sayfası (captive portal) ve istemci yalıtımı açık mı? Aynı ağdaki iki cihaz birbirine ulaşabiliyor mu?
  3. Ağa bağlanacak cihazların MAC adresleriyle önceden kaydedilmesi gerekiyor mu? Gerekiyorsa 9 kartın listesini ne zamana kadar vermeliyim?
  4. Laboratuvarda okul ağına bağlanmayan ayrı bir router ya da öğretmen telefonundan hotspot kullanmam okul kurallarına uygun mu?
  5. 5. ve 6. haftalarda ESP32'lerin internete çıkması gerekirse güvenlik duvarı hangi bağlantılara izin veriyor (web siteleri, saat sunucuları, mesajlaşma servisleri)?

Kod: ESP32 Wi-Fi'ye bağlanıp sayfada sensör değeri göstersin

Aşağıdaki kod 4. haftanın çekirdeğidir ve yalnız ESP32 kart paketiyle gelen WiFi.h ve WebServer.h kütüphanelerini kullanır, ek kütüphane kurmak gerekmez. Devre 2. haftadan kalır: LDR modülünün VCC ucu 3V3'e, GND ucu GND'ye, AO ucu GPIO34'e. GPIO34 ADC1'de olduğu için Wi-Fi açıkken de okunur. Kodu yüklemeden önce AG_ADI ve AG_SIFRESI yazan iki yer tutucuyu kendi 2,4 GHz ağının bilgileriyle değiştir ya da 7. haftada yapacağın gibi bu iki satırı secrets.h adlı ayrı bir dosyaya taşı; kod o dosyayı bulursa onu kullanır.

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}

Yükledikten sonra seri monitörü 115200 baud hızında aç. Noktalar bitince IP satırı görünür, örneğin 192.168.43.57. ESP32 ile aynı ağa bağlı bir telefonda tarayıcıyı açıp bu adresi yaz: sayfada ışık yüzdesi, ham değer ve sinyal gücü görünür, sayfa 5 saniyede bir kendini yeniler. Elini LDR'nin üstüne kapatınca yüzde düşer. Adresin sonuna /deger eklersen yalnız ham sayı döner; 5. haftada komşu grubun ESP32'si HTTP istemciyle tam olarak bu adresi okuyacak. Kart 20 saniye içinde ağa bağlanamazsa kendini yeniden başlatır, böylece öğrenci kartın donduğunu sanmaz. Bağlantı hiç kurulmuyorsa durum kodlarının anlamı için ESP32 WiFi bağlanmıyor yazısına bak.

Seri monitörde IP adresi göründüğü hâlde telefon sayfayı açamıyorsa sorun neredeyse her zaman koddan değil ağdandır. Telefon mobil veride ya da başka bir ağda olabilir, ya da ağda istemci yalıtımı açıktır. Önce telefonun Wi-Fi'sinin ESP32 ile aynı ağda olduğunu kontrol et; öyleyse ve sayfa yine açılmıyorsa hotspot'a geç.

Güvenlik ve etik: atlanmaması gereken hafta

IoT dersinde güvenlik ayrı bir sunum konusu olarak değil, öğrencinin kendi kodunda yaptığı değişiklik olarak öğretilir. Bu modülde öğrenciler zaten üç yerde gerçek bir sır taşır: Wi-Fi şifresi, 6. haftadaki bot token'ı ve kendi ölçtükleri veriler. 7. haftanın ikinci yarısını şu beş başlığa ayır ve her başlıkta grubun projesinde somut bir değişiklik iste:

  • Şifreleri koda gömme: Wi-Fi şifresini ve bot token'ını secrets.h adlı ayrı bir dosyaya taşı, kodu paylaşırken ya da ekran görüntüsü alırken o dosyayı dışarıda bırak. Projeksiyona yansıyan bir kod satırı, sınıftaki herkesin şifreyi öğrenmesi demektir.
  • Varsayılan şifreleri değiştir: Router'ların yönetim paneli, ESP32'nin kendi erişim noktası (AP) modu ve hazır örnek kodlardaki şifreler herkesin bildiği değerlerdir. Ders router'ının şifresini ilk gün değiştir; öğrencilerden de projelerinde örnek şifre bırakmamalarını iste.
  • Sayfan aynı ağdaki herkese açık: Bu yazıdaki web sunucuda giriş ekranı yok; aynı ağdaki herkes adresi bilirse sayfayı açar, /on adresi olan bir projede LED'i de yakar. Bu yüzden derste web üzerinden yalnız LED, buzzer ve ekran gibi zararsız çıktılar kontrol edilir; şebeke gerilimine (220 V) bağlı röle bu modülde kullanılmaz.
  • Kişisel veri toplama: Sıcaklık ve ışık kişisel veri değildir, ama hareket sensörünün koridordan geçen kişilerin saatini kaydetmesi, kamera ya da mikrofon kişisel veriye dönüşebilir. Final projesinde insanların hareketini, sesini ya da görüntüsünü kaydeden bir fikir varsa önce sınıfta "Kim görüyor, ne kadar saklanıyor, izin alındı mı?" sorularını cevaplat.
  • Güncelleme ve sorumluluk: İnternete açık bir cihaz bir kez kurulup unutulmaz. Öğrencilere, modül bitince ders router'ının kapatıldığını, bot token'larının iptal edildiğini ve kartların sıfırlandığını göster; cihazın ömrü boyunca kimin sorumlu olduğunu tartışın.

Malzeme listesi: grup başına ve 8 grup için

Liste 24 öğrenci ve üçerli 8 grup için hazırlandı; bir yedek setle 9 set yeterli. Parçaların çoğu ilk haftalarda alınır ve sonraki haftalarda yeniden kullanılır, örneğin LCD 2. haftadan 5. haftaya kadar dört projede yer alır. Lehim gerekmez; I2C LCD ve OLED gibi modüller erkek-dişi jumper kabloyla bağlanır. LDR modülü yerine çıplak LDR kullanacaksan her gruba bir 10 kΩ direnç ekle ve gerilim bölücüyü 2. haftada birlikte kur.

MalzemeGrup başınaSınıf için (8 grup + 1 yedek)Kullanıldığı hafta
ESP32 DevKit (30 pin, ESP32-WROOM-32)191–8
USB veri kablosu (test edilmiş)1111–8
Breadboard (830 delik)2181–8
Push buton2181, 6
5 mm LED ve 220 Ω direnç3 + 330 + 301, 3, 4
LDR modülü (AO çıkışlı)192, 4, 5
DHT22 sıcaklık ve nem sensörü192, 8
16x2 I2C LCD ekran192–5
0,96 inç SSD1306 OLED ekran (I2C)197
PIR hareket sensörü (HC-SR501) ve buzzer1 + 19 + 96
Jumper kablo (erkek-erkek ve erkek-dişi)20 + 10yaklaşık 180 + 901–8
2,4 GHz erişim noktası (hotspot açan telefon ya da ayrı router)-2 hotspot ya da 1 router3–8
BlueGrays açık telefon ya da tablet181–8

Değerlendirme: final projesi kriterleri

Final projesinin kuralı basit tutulmalı: bir sensör, bir Wi-Fi bağlantısı ve bir paylaşım yolu (web sayfası ya da mesaj). Gruplar fikirlerini 6. haftanın sonunda tek cümleyle yazar, 7. haftada malzeme listesini çıkarır, 8. haftanın ilk dersinde kurar, ikinci dersinde üçer dakikalık sunum yapar. Puanlamayı aşağıdaki altı ölçütle yap; her ölçüt 1–3 puan, toplam 18. Rubriğin genel mantığı, teslim formu ve portfolyo için Arduino dersi değerlendirme rubriği yazısındaki şablonu aynen kullanabilirsin.

Ölçüt1: Başlıyor2: Gelişiyor3: Hazır
Sensör ve devreDevre kurulu ama değer okunmuyor ya da anlamsızDeğer okunuyor, pin seçimi gerekçelendirilemiyorDeğer doğru okunuyor, ADC1 ya da dijital pin seçimi açıklanıyor
Wi-Fi bağlantısıBağlantı yalnız öğretmen yardımıyla kuruluyorBağlanıyor ama bağlantı kopunca cihaz duruyorBağlanıyor, koparsa yeniden bağlanıyor, IP ve sinyal gücü kayıtlı
Veri paylaşımıVeri yalnız seri monitördeSayfa ya da mesaj var ama elle yenilenmesi ya da tetiklenmesi gerekiyorSayfa kendini yeniliyor ya da mesaj olayda kendiliğinden gidiyor
Güç farkındalığıCihazın ne kadar akım çektiği bilinmiyorBatarya ömrü hesaplanmış ama uyku düşünülmemişUyku ve uyanma aralığıyla hesap yapılmış, sonuç yorumlanmış
Güvenlik ve etikŞifre kodda açıktaŞifre secrets.h dosyasında, veri tartışılmamışŞifre ayrı dosyada, toplanan veri ve kimin gördüğü yazılı
Belgeleme ve sunumAğ defteri eksik, sunum yalnız gösterimAğ defteri var, karşılaşılan hata anlatılmıyorAğ defteri tam, bir hata ve çözümü sunumda anlatılıyor

Haftalık çıkış soruları ve modül öncesi kontrol listesi

  1. 1. hafta: INPUT_PULLUP kullanılan bir pinde buton basılıyken digitalRead() hangi değeri döndürür, neden?
  2. 2. hafta: Wi-Fi açıkken GPIO4'e bağlı potansiyometre neden okunamaz? Hangi pinleri seçmeliyiz?
  3. 3. hafta: WiFi.status() bağlı değil diyorsa ilk kontrol edeceğin iki şey nedir?
  4. 4. hafta: Tarayıcıya yazdığın IP adresi gelecek hafta neden farklı olabilir?
  5. 5. hafta: Bu hafta senin ESP32'n sunucu muydu, istemci miydi? 200 ve 404 durum kodları ne anlatır?
  6. 6. hafta: Bot token'ı ekran görüntüsünde görünürse ne olur? MQTT'de broker'ın görevi nedir?
  7. 7. hafta: Aynı pille ESP32 hep açıkken günlerce, deep sleep'te aylarca çalışabilir. Farkı yaratan nedir?
  8. 8. hafta: Cihazın hangi veriyi topluyor, kim görebiliyor ve ne kadar saklanıyor?
  • Modülden iki hafta önce: Bilgi işleme beş soruyu sor, cevaba göre hotspot ya da router kararını ver.
  • Modülden iki hafta önce: Kartları say, her kartın MAC adresini etiketine yaz (gerekirse kayıt için listeyi bilgi işleme ver).
  • Modülden bir hafta önce: Her bilgisayara ESP32 kart paketini, DHT, LiquidCrystal I2C, AsyncTCP ve ESPAsyncWebServer kütüphanelerini kur; bir kartla test et.
  • Modülden bir hafta önce: Hotspot'u 2,4 GHz'e ayarla, ağ adını ve şifresini değiştir, bir ESP32'yi bağlayıp telefondan sayfasını aç.
  • Modülden bir hafta önce: Her grup için ağ defteri sayfasını çoğalt, sensörleri ve LCD'leri test ederek kutulara koy.
  • 5. haftadan önce: Premium projeler için kodları hazırla ve öğrencilere hangi bilgilerinin paylaşıldığını anlat.

BlueGrays'in modüldeki yeri

  • ESP32 projeleri: Keşfet › Projeler'de Filtrele ile platformu ESP32 seç; Wi-Fi bağlantısından deep sleep'e kadar yaklaşık 50 ESP32 projesi var. Her projede devre şeması, adetli parça listesi ve kopyalanabilir kaynak kodu bulunur. Kodu bilgisayarda açmak için Linki Kopyala işini görür.
  • Kodu anla: Her haftanın 20–30. dakikası bu sekmeyle geçer: Bu kod ne yapıyor? özeti, Adım adım açıklama, Takıldıysan ve Kendin dene görevi. İlk dört haftanın projelerinde ücretsiz, Premium projelerde Premium ile açılır.
  • Pinout aracı: Pinout aracında ESP32'nin her pini seçilince türü ve uyarısı görünür; ADC2'deki bir pin seçildiğinde Wi-Fi açıkken analog okuma yapılamayacağını, ADC1'deki bir pin seçildiğinde Wi-Fi açıkken de okunacağını söyler. 2. haftada pin seçerken projeksiyonda açmak için ideal. Pinout Premium bir araçtır.
  • Batarya ömrü aracı: Batarya ömrü aracında hazır profillerden ESP32 · deep sleep seçilir; pil kapasitesi, uyanık akım ve süre, uyku akımı ve döngü girilince tahmini çalışma süresi ve ortalama akım hesaplanır. 7. haftanın "hep açık ile uykulu çalışma" karşılaştırması bu ekranla yapılır. Araç Premium'dur; ücretsiz kullanıcılar örnek hesabı görebilir.
  • Eğitimci Paketleri: 5. haftadan itibaren Premium projeler gerektiği için grup başına bir hesap Premium olmalı. 8 grup ve öğretmen için 10 kodluk yıllık paket yeter; tek ödemedir, yenilenmez, öğrenci kart eklemez, kodu kimin kullandığını Kodlarım ekranında görürsün ve gelecek dönemin grubuna transfer edebilirsin. 30 günlük aylık kod, 5. haftanın ilk dersinde dağıtılırsa son dört haftayı ancak karşılar; araya bir tatil girerse yetmez. Ayrıntılar sınıfa toplu Premium kod yazısında.

Sekiz haftanın sonunda öğrencilerin elinde yalnız çalışan bir cihaz değil, bir cihazın ağda nasıl konuştuğuna, neden bağlanamadığına, ne kadar enerji harcadığına ve kimin verisini topladığına dair bir alışkanlık olur; meslek eğitiminde asıl aranan da budur. Haftaların projelerini, şemalarını ve Kodu anla açıklamalarını ders öncesinde gözden geçirmek istersen BlueGrays uygulamasında ESP32 filtresini açman yeterli.

Sıkça sorulan sorular

ESP32 ile IoT dersi kaç hafta sürmeli?

Haftada iki ders saatiyle 8 hafta, sensörden Wi-Fi'ye, web sunucudan bildirime ve deep sleep'e kadar temel IoT kavramlarına yeter. Haftada tek ders saatin varsa aynı planı 12–14 haftaya yay ya da 5. ve 6. haftaları tek haftada birleştir. Final projesine en az bir tam ders ayır.

Okul Wi-Fi'si olmadan ESP32 IoT dersi yapılır mı?

Evet. ESP32 ile telefon aynı yerel ağda olduğu sürece web sunucu ve cihazlar arası istekler internet gerektirmez; öğretmen telefonunun 2,4 GHz hotspot'u ya da okul ağına bağlı olmayan ayrı bir router yeter. İnternet yalnız hava durumu, saat ve Telegram gibi dış servisler için gerekir.

ESP32 neden okulun Wi-Fi ağına bağlanmıyor?

Klasik ESP32 yalnız 2,4 GHz bandında çalışır; ağ yalnız 5 GHz yayın yapıyorsa hiç görünmez. Okul ağları çoğu zaman kullanıcı adı ve şifre isteyen kurumsal kimlik doğrulaması ya da tarayıcıda açılan onay sayfası kullanır, bazıları da yalnız kayıtlı MAC adreslerine izin verir. Bu durumlarda en pratik yol hotspot ya da ayrı bir router'dır.

ESP32 web sunucusuna telefondan neden girilemiyor?

En sık neden telefonun ESP32 ile aynı ağda olmamasıdır: telefon mobil veride ya da başka bir Wi-Fi'de olabilir. İkinci neden misafir ağlardaki istemci yalıtımıdır; cihazlar aynı ağda olsa da birbirine ulaşamaz. Seri monitörde yazan IP adresini, telefon ve ESP32 aynı hotspot'tayken yeniden dene.

IoT dersinde MQTT öğretmek şart mı?

Şart değil ama kavram olarak anlatılmalı, çünkü gerçek IoT sistemlerinin çoğu cihazların bir broker üzerinden konu başlıklarıyla mesajlaştığı bu modeli kullanır. 8 haftalık bir modülde önce HTTP ile istemci-sunucu ilişkisini oturtmak, MQTT'yi altıncı haftada yayınla-abone ol fikri olarak tanıtmak yeterlidir.

BlueGrays'teki ESP32 projeleri ücretsiz mi?

Bir kısmı. Buton, LDR, DHT22, Wi-Fi bağlantısı ve Async Web Server gibi bu planın ilk dört haftasında kullanılan projeler tamamen ücretsiz. HTTP istemci, Telegram, WebSocket ve deep sleep projeleri Premium; sınıf için Profil ekranındaki Eğitimci Paketleri'nden toplu kod alınabilir.

Tüm projeleri gör
ESP32 Wi-Fi STA Bağlantısı (LCD Ekranlı)
#127İleri

ESP32 Wi-Fi STA Bağlantısı (LCD Ekranlı)

Bu projede ESP32'yi Station (STA) modunda evdeki Wi-Fi ağına güvenli ve hata toleranslı şekilde bağlıyoruz. SSID/şifreyi secrets.h dosyasına ayırarak Git'e sızmasını önlüyor, otomatik yeniden bağlanma mekanizması kuruyor, RSSI sinyal seviyesini ve IP adresini I2C LCD ekranda gösteriyoruz. Dahili LED durum göstergesi olarak çalışır. Üretim seviyesi bir bağlantı yöneticisidir.

4.4(21)
34
ESP32 Async Web Server (LCD'de IP Göstergeli)
#129İleri

ESP32 Async Web Server (LCD'de IP Göstergeli)

Bu projede ESP32'yi aynı Wi-Fi ağındaki telefonunuzdan veya bilgisayarınızdan kontrol edebileceğiniz asenkron bir web sunucusuna dönüştürüyoruz. ESPAsyncWebServer kütüphanesi sayesinde sunucu birden fazla isteği aynı anda işleyebiliyor (klasik WebServer.h gibi tek istekte bloklamıyor). Tarayıcıdan ESP32'nin IP adresine bağlanıp ON/OFF butonlarına basarak (/on ve /off adresleri) GPIO 5'e bağlı LED'i açıp kapatabileceksiniz.

4.8(16)
26
ESP32 Buton ile LED Kontrol (Push)
#104Başlangıç

ESP32 Buton ile LED Kontrol (Push)

Butona basılı tutulduğunda LED yanar, bırakıldığında söner. ESP32'nin dijital input pin'i ve dahili pull-up direncinin nasıl kullanıldığını gösterir. INPUT_PULLUP modu sayesinde harici direnç gerekmez.

4.6(36)
55
ESP32 LDR Modülü ile Işık Şiddeti Okuma
#113Başlangıç

ESP32 LDR Modülü ile Işık Şiddeti Okuma

LDR modülünün ham ADC değerini ve karanlık/aydınlık referanslarına göre hesaplanan göreli ışık yüzdesini Serial Monitor'da gerçek zamanlı izleme. Bu yüzde lux ölçümü değildir. Modülün kalibrasyon mantığını öğretir. Proje 10'un öncesinde yapılması ideal; çünkü eşik değerini belirlemek için kullanılır.

4.6(36)
55
ESP32 DHT22 Sıcaklık ve Nem (LCD Ekranlı)
#117Orta

ESP32 DHT22 Sıcaklık ve Nem (LCD Ekranlı)

DHT22 sensörü ile ortam sıcaklığını ve nem oranını ölçüp 16x2 I2C LCD ekranda gerçek zamanlı olarak gösteren bir projedir. Adafruit DHT kütüphanesi kullanılarak tek kablo (one-wire) protokolü ile sensörden veri okunur. Bu proje, IoT hava istasyonu, akıllı ev otomasyonu veya seralarda ortam takip sistemlerinin temelini oluşturur. ESP32'nin GPIO 4 pini üzerinden DHT22 ile haberleşme sağlanır.

4.8(38)
56
ESP32 HTTPClient + Hava Durumu API (LCD Ekranlı)
#133İleri
Premium

ESP32 HTTPClient + Hava Durumu API (LCD Ekranlı)

Bu projede ESP32 ile internet üzerinden hava durumu API'sine (wttr.in) HTTPClient.h kullanarak REST API çağrısı yapıyoruz. ArduinoJson v7 ile dönen JSON cevabını parse edip şehir, sıcaklık, nem, hava durumu ve rüzgar bilgilerini I2C LCD ekranda hem Türkçe hem İngilizce gösteriyoruz. wttr.in ücretsizdir, API key gerektirmez — herhangi bir şehir ismini yazarak o şehrin anlık hava durumunu çekebilirsiniz. 30 dakikada bir otomatik güncelleme, LED ile her ekran için farklı görsel feedback ve eksiks

4.7(13)
20
ESP32 Hareket Alarm Sistemi (PIR + Buzzer + LED + Telegram)
#145İleri
Premium

ESP32 Hareket Alarm Sistemi (PIR + Buzzer + LED + Telegram)

PIR sensörü hareket algıladığında buzzer ve LED'i aktif eden, aynı anda Telegram üzerinden sahibine anlık bildirim gönderen akıllı bir güvenlik alarm sistemidir. Tekrarlayan alarmların sıklığını sınırlamak için 30 saniyelik cooldown (bekleme süresi) mekanizması vardır; bu mekanizma PIR sensörünün yanlış algılamalarını doğrulamaz veya ortadan kaldırmaz. Ev güvenliği, garaj izleme, depo veya çalışma odası gibi alanlarda kullanılabilir. Telegram entegrasyonu sayesinde nerede olursanız olun anında h

0.0(0)
9
ESP32 Deep Sleep — Pil Tasarrufu (OLED + RTC RAM Sayaç)
#135İleri
Premium

ESP32 Deep Sleep — Pil Tasarrufu (OLED + RTC RAM Sayaç)

ESP32'nin Deep Sleep modu, CPU ve çoğu çevre birimini kapatarak akım tüketimini ~10µA seviyesine düşürür ve pille çalışan IoT cihazları için kritik öneme sahiptir. Bu projede üç farklı uyandırma kaynağını kullanıyoruz: zamanlayıcı (timer, 15sn), harici pin (EXT0 — buton GPIO 33) ve touch (T0/GPIO 4). RTC_DATA_ATTR ile işaretlenen değişkenler deep sleep boyunca korunur — boot sayacı, timer wake sayacı ve buton wake sayacı kalıcı olarak izlenir. SSD1306 OLED ekranda her uyanışta wake reason, say

4.3(10)
16