VIDEO
#include < WiFi . h > // v3.0.0
#include < WebServer . h > // v3.0.0
#include < FastLED . h > // v3.6.0
const char * ap_ag_adi = "ESP32_Led_Sistemi" ; // ESP32'nin yayacağı ağ adı belirlendi
const char * ap_sifre = "12345678" ; // Ağın şifresi belirlendi
WebServer sunucu ( 80 ) ; // Sunucu 80 portunda başlatıldı
const int veri_pini = 23 ; // Donanımsal VSPI MOSI pini atandı
const int saat_pini = 18 ; // Donanımsal VSPI SCK pini atandı
const int led_sayisi = 1 ; // Sistem tek piksel olarak tanımlandı
CRGB ledler [ led_sayisi ] ; // FastLED renk dizisi oluşturuldu
bool otomatik_mod = false ; // Otomatik döngü durumu kapalı yapıldı
int mevcut_adim = 0 ; // Adım sayacı sıfırlandı
unsigned long onceki_zaman = 0 ; // Süre ölçüm referansı ayarlandı
const unsigned long bekleme_5_saat = 18000000UL ; // 5 saat limiti belirlendi
const unsigned long bekleme_4_saat = 14400000UL ; // 4 saat limiti belirlendi
// HTML Arayüzü
const char * html_arayuz = R "rawliteral(
< ! DOCTYPE html >
< html lang = "tr" >
< head >
< meta charset = "UTF-8" >
< meta name = "viewport" content = "width=device-width, initial-scale=1.0" >
< title > P9813 Sürücü Paneli < / title >
< style >
body { font - family : sans - serif ; text - align : center ; margin - top : 50px ; background - color : #2c3e50 ; color : white ; }
. btn { padding : 15px 30px ; margin : 10px ; font - size : 18px ; cursor : pointer ; border : none ; border - radius : 8px ; color : white ; width : 160px ; font - weight : bold ; }
. kirmizi { background - color : #e74c3c ; }
. yesil { background - color : #2ecc71 ; }
. mavi { background - color : #3498db ; }
. mor { background - color : #9b59b6 ; }
. beyaz { background - color : #ffffff ; color : black ; }
. kapat { background - color : #000000 ; border : 1px solid white ; }
. oto { background - color : #f1c40f ; color : black ; }
< / style >
< script >
function komutGonder ( istek ) {
fetch ( '/aksiyon?tur=' + istek ) ;
}
< / script >
< / head >
< body >
< h2 > ESP32 Bağımsız Kontrol Paneli < / h2 >
< button class = "btn kirmizi" onclick = "komutGonder('kirmizi')" > Kırmızı < / button > < br >
< button class = "btn yesil" onclick = "komutGonder('yesil')" > Yeşil < / button > < br >
< button class = "btn mavi" onclick = "komutGonder('mavi')" > Mavi < / button > < br >
< button class = "btn mor" onclick = "komutGonder('mor')" > Mor < / button > < br >
< button class = "btn beyaz" onclick = "komutGonder('beyaz')" > Beyaz < / button > < br >
< button class = "btn kapat" onclick = "komutGonder('kapat')" > Kapat < / button > < br > < br >
< button class = "btn oto" onclick = "komutGonder('otomatik')" > Otomatik < / button >
< / body >
< / html >
) rawliteral ";
void ledleri_sur ( CRGB renk ) {
ledler [ 0 ] = renk ; // Diziye renk atandı
FastLED . show ( ) ; // Veri çipe iletildi
}
void sayfayi_yukle ( ) {
sunucu . send ( 200 , "text/html" , html_arayuz ) ; // İstek geldiğinde HTML arayüzü sunuldu
}
void istekleri_isle ( ) {
if ( sunucu . hasArg ( "tur" ) ) {
String komut = sunucu . arg ( "tur" ) ;
otomatik_mod = false ; // Kullanıcı komut gönderdiğinde döngü durduruldu
if ( komut == "kirmizi" ) ledleri_sur ( CRGB : : Red ) ;
else if ( komut == "yesil" ) ledleri_sur ( CRGB : : Green ) ;
else if ( komut == "mavi" ) ledleri_sur ( CRGB : : Blue ) ;
else if ( komut == "mor" ) ledleri_sur ( CRGB : : Purple ) ;
else if ( komut == "beyaz" ) ledleri_sur ( CRGB : : White ) ; // Beyaz ışık komutu eklendi
else if ( komut == "kapat" ) ledleri_sur ( CRGB : : Black ) ;
else if ( komut == "otomatik" ) {
otomatik_mod = true ; // Döngü yetkisi verildi
mevcut_adim = 0 ; // Adımlar sıfırlandı
onceki_zaman = millis ( ) ; // Başlangıç saati referans alındı
ledleri_sur ( CRGB : : Red ) ; // İlk adım başlatıldı
}
}
sunucu . send ( 200 , "text/plain" , "OK" ) ; // Fetch mimarisi için arka planda onay dönüldü
}
void donguyu_yonet ( ) {
if ( ! otomatik_mod ) return ; // Otomatik mod kapalıysa işlem yapılmadan dönüldü
unsigned long gecen_zaman = millis ( ) - onceki_zaman ; // Adım süresi hesaplandı
unsigned long hedef_zaman = ( mevcut_adim == 3 ) ? bekleme_4_saat : bekleme_5_saat ; // 4 saat / 5 saat hedefi belirlendi
if ( gecen_zaman >= hedef_zaman ) { // Bekleme süresi dolduğunda tetiklendi
onceki_zaman = millis ( ) ; // Kronometre sıfırlandı
mevcut_adim ++ ; // Sonraki adıma geçildi
if ( mevcut_adim > 4 ) mevcut_adim = 0 ; // Başa dönüldü
switch ( mevcut_adim ) { // Sıradaki renk modüle gönderildi
case 0 : ledleri_sur ( CRGB : : Red ) ; break ;
case 1 : ledleri_sur ( CRGB : : Green ) ; break ;
case 2 : ledleri_sur ( CRGB : : Blue ) ; break ;
case 3 : ledleri_sur ( CRGB : : Purple ) ; break ;
case 4 : ledleri_sur ( CRGB : : Black ) ; break ;
}
}
}
void setup ( ) {
Serial . begin ( 115200 ) ; // Sistem loglarını görmek için seri port açıldı
// Donanım uyuşmazlığını çözen 1MHz sınırlamalı başlatma
FastLED . addLeds < P9813 , veri_pini , saat_pini , RGB , DATA_RATE_MHZ ( 1 ) > ( ledler , led_sayisi ) ;
ledleri_sur ( CRGB : : Black ) ; // Açılış parlaması önlendi
// AP Modu (Kendi WiFi Ağını Yaratma)
Serial . println ( "AP Modu baslatiliyor..." ) ;
WiFi . softAP ( ap_ag_adi , ap_sifre ) ; // Harici modeme bağlanmak yerine kendi ağını kurdu
IPAddress ip_adresi = WiFi . softAPIP ( ) ; // Kurulan ağın varsayılan IP adresi değişkene alındı
Serial . print ( "Arayuz IP Adresi: " ) ;
Serial . println ( ip_adresi ) ; // Genellikle 192.168.4.1'dir ve ekrana yazdırıldı
sunucu . on ( "/" , sayfayi_yukle ) ; // Ana sayfa rotası bağlandı
sunucu . on ( "/aksiyon" , istekleri_isle ) ; // Komut rotası bağlandı
sunucu . begin ( ) ; // Sunucu dinlemeye başladı
}
void loop ( ) {
sunucu . handleClient ( ) ; // Ağdan gelen istekler dinlendi
donguyu_yonet ( ) ; // Non-blocking zamanlayıcı çalıştırıldı
}