Takip et

Projeto Sirios: Banana Pi Üzerinde Web ile LED Kontrolü (Apache + Python)

Gelişen teknolojiyle birlikte, fiziksel dünyayı dijital arayüzler üzerinden kontrol etme arzusu hiç bu kadar güçlü olmamıştı. Akıllı ev sistemlerinden endüstriyel otomasyona kadar birçok alanda karşımıza çıkan bu ihtiyaç, mikrodenetleyiciler ve web teknolojilerinin birleşimiyle somutlaşıyor. Peki, Banana Pi gibi uygun maliyetli bir donanım üzerinde Apache ve Python kullanarak LED’leri web üzerinden nasıl kontrol edebilirsiniz? Bu makale, Projeto Sirios adını verdiğimiz bu heyecan verici projeyi adım adım hayata geçirmeniz için size kapsamlı bir rehber sunuyor.

Günümüzde, nesnelerin interneti (IoT) kavramı hayatımızın her alanına nüfuz etmiş durumda. Evdeki ışıkları uzaktan açıp kapatmaktan, bahçe sulama sistemlerini otomatikleştirmeye kadar birçok senaryoda, fiziksel cihazlarla dijital etkileşim kurma ihtiyacı hissediyoruz. Bu noktada, Projeto Sirios gibi bir proje, size sadece bir dizi LED’i kontrol etme becerisi kazandırmakla kalmaz, aynı zamanda IoT dünyasının temel prensiplerini ve donanım-yazılım entegrasyonunun inceliklerini keşfetmeniz için sağlam bir başlangıç noktası sunar. Düşünsenize, bir web sayfasındaki basit bir buton tıklamasıyla fiziksel bir LED’in anında yanıt verdiğini görmek, teknolojiye olan merakınızı körükleyecek ve daha karmaşık projelere yelken açmanız için ilham verecektir.

Peki, tam olarak neden bu projeye odaklanmalıyız? Öncelikle, Banana Pi gibi tek kart bilgisayarlar (SBC’ler), Raspberry Pi muadilleri olarak oldukça uygun maliyetli ve güçlü alternatifler sunar. Bu cihazlar, genel amaçlı giriş/çıkış (GPIO) pinleri sayesinde dış dünyayla kolayca etkileşime geçebilir. İkincisi, Apache web sunucusu, istikrarlı yapısı ve geniş topluluk desteğiyle web tabanlı uygulamalar için mükemmel bir platform sağlar. Son olarak, Python programlama dili, basit sözdizimi, zengin kütüphane ekosistemi ve donanım kontrolüne yönelik güçlü yetenekleriyle bu tür projeler için biçilmiş kaftandır. Bu üç bileşenin bir araya gelmesiyle, hem yazılım hem de donanım becerilerinizi geliştirebileceğiniz, gerçek dünya sorunlarına uygulanabilir çözümler üretebileceğiniz bir ekosistem inşa etmiş olursunuz.

Projeto Sirios sadece bir LED yakma-söndürme demosundan ibaret değildir; aynı zamanda akıllı ev otomasyonu, uzaktan sensör okuma, robotik uygulamalar veya hobi elektroniği projeleriniz için temel bir altyapı oluşturur. Bu projenin sunduğu esneklik sayesinde, öğrendiğiniz bilgileri farklı senaryolara kolayca adapte edebilir ve yaratıcılığınızı sınır tanımadan kullanabilirsiniz. Örneğin, LED’lerin yerine bir röle bağlayarak evdeki bir lambayı kontrol edebilir veya bir sıcaklık sensöründen gelen verileri web arayüzünde görüntüleyerek bir iklim izleme sistemi oluşturabilirsiniz. Bu makalenin ilerleyen bölümlerinde, bu temel bileşenlerin her birini detaylıca inceleyecek ve adım adım Projeto Sirios’u nasıl kurup çalıştıracağınızı öğreneceksiniz. Haydi, dijitalin fizikselle buluştuğu bu heyecan verici dünyaya birlikte adım atalım!

Uzman İpucu: Bu projeyi tamamladıktan sonra, Arduino veya ESP32 gibi daha küçük mikrodenetleyicilerle Raspberry Pi/Banana Pi arasındaki entegrasyonları araştırarak IoT yeteneklerinizi bir üst seviyeye taşıyabilirsiniz. Böylece, Banana Pi’yi merkezi bir kontrol ünitesi olarak kullanıp, daha spesifik görevler için optimize edilmiş küçük cihazlarla kablosuz iletişim kurabilirsiniz.

Temel Kavramlar: Banana Pi, Apache ve Python’ın Rolü Nedir?

Projeto Sirios’u hayata geçirmek için üç temel bileşene ihtiyacımız var: Banana Pi donanımı, Apache web sunucusu ve Python programlama dili. Her birinin projedeki rolünü ve neden tercih edildiğini anlamak, sistemin bütününe hakim olmanızı sağlayacaktır.

Banana Pi Nedir ve Neden Tercih Edilmeli?

Banana Pi, Raspberry Pi gibi tek kartlı bir bilgisayardır (Single Board Computer – SBC). Çeşitli modelleri bulunmakla birlikte, genellikle Allwinner işlemcilere sahip olup, Linux tabanlı işletim sistemlerini çalıştırabilirler. Raspberry Pi’ye göre bazı modellerinde daha fazla RAM, Gigabit Ethernet veya SATA arayüzü gibi özellikler sunabilen Banana Pi, bu projede GPIO pinleri üzerinden LED’leri kontrol etmek için ideal bir platformdur. Uygun maliyeti, küçük boyutu ve düşük güç tüketimi sayesinde, sürekli çalışan bir sunucu veya otomasyon kontrol ünitesi olarak kullanılmaya oldukça elverişlidir.

Banana Pi’nin tercih edilme nedenleri arasında esneklik ve erişilebilirlik ilk sıralarda yer alır. Üzerindeki GPIO pinleri, harici elektronik bileşenlerle (sensörler, motorlar, LED’ler) kolayca iletişim kurmasını sağlar. Ayrıca, tam teşekküllü bir Linux dağıtımı çalıştırabildiği için, Apache gibi bir web sunucusunu kurmak ve Python kodlarını çalıştırmak sorunsuz bir deneyim sunar. Yani, küçük bir bilgisayardan bekleyeceğiniz tüm yazılım yeteneklerini, donanım kontrolü ile birleştirme gücüne sahiptir. Bu da onu, hem başlangıç seviyesindeki hobiciler hem de daha deneyimli geliştiriciler için cazip bir seçenek haline getirir. Raspberry Pi’nin piyasada bulunabilirliğinin zorlaştığı zamanlarda, Banana Pi gibi alternatifler projenizi kesintisiz bir şekilde ilerletmenize olanak tanır.

Apache Web Sunucusu: Projede Neden Kritik?

Apache HTTP Sunucusu, dünyanın en yaygın kullanılan web sunucularından biridir. Açık kaynak kodlu olması, güçlü modüler yapısı ve geniş topluluk desteği sayesinde, web uygulamalarını barındırmak için oldukça popüler bir tercihtir. Projeto Sirios’ta Apache, kullanıcıların web tarayıcıları üzerinden LED’leri kontrol etmelerini sağlayan arayüzü sunmakla görevlidir. Yani, bir web sayfasında gördüğünüz butonlar veya durum göstergeleri, Apache tarafından istemcilere gönderilir ve kullanıcı etkileşimleri yine Apache üzerinden işlenir.

Apache’nin bu projede kritik olmasının temel nedeni, Python kodumuz ile web arayüzü arasında köprü görevi görmesidir. Mod_wsgi gibi modüller veya CGI (Common Gateway Interface) mekanizması aracılığıyla, web isteklerini Python betiklerine yönlendirebilir ve bu betiklerin donanım kontrol işlemlerini gerçekleştirmesini sağlayabiliriz. Ayrıca, Apache’nin sanal ana bilgisayar (virtual host) yapılandırma yetenekleri, gelecekte projenizi genişletmek istediğinizde birden fazla web uygulamasını aynı sunucu üzerinde barındırmanıza olanak tanır. Güvenlik ve performans açısından da kanıtlanmış bir sicile sahip olması, Apache’yi bu tür embedded web projeleri için sağlam ve güvenilir bir seçim yapar. Dolayısıyla, web tarayıcınızdan gönderilen bir komutun Banana Pi’ye ulaşarak LED’i yakması veya söndürmesi sürecinde Apache, merkezi bir rol üstlenir.

Python ve GPIO: Donanım Kontrolünün Anahtarları

Python programlama dili, basitliği, okunabilirliği ve geniş kütüphane desteği sayesinde donanım projelerinde oldukça popülerdir. Özellikle tek kart bilgisayarlar üzerinde GPIO pinlerini kontrol etmek için PyAIO gibi özel kütüphaneler sayesinde donanım ile yazılım arasında etkili bir köprü kurulmasını sağlar. GPIO (General Purpose Input/Output) pinleri ise Banana Pi’nin dış dünyaya açılan kapılarıdır. Bu pinler aracılığıyla, elektrik sinyalleri gönderip alabilir, böylece LED’ler gibi çıkış cihazlarını kontrol edebilir veya sensörler gibi giriş cihazlarından veri okuyabiliriz.

Python’ın bu projede kullanılmasının başlıca nedenleri şunlardır: hızlı prototipleme imkanı, anlaşılır kod yapısı ve GPIO kontrol kütüphanelerinin zenginliği. PyAIO kütüphanesi (veya Banana Pi’nin belirli modeline uygun diğer bir GPIO kütüphanesi) sayesinde, Python kodundan sadece birkaç satır ile bir GPIO pinini çıkış olarak ayarlayabilir ve ona yüksek (1) veya düşük (0) voltaj sinyalleri göndererek bir LED’i açıp kapatabiliriz. Bu doğrudan ve basit etkileşim, donanım kontrolünü karmaşık bir görev olmaktan çıkarıp, daha erişilebilir hale getirir. Sonuç olarak, Python, web arayüzünden gelen talepleri alıp, bu talepleri Banana Pi’nin GPIO pinleri üzerinden fiziksel LED kontrolüne dönüştüren anahtar bileşen görevini üstlenir. Bu sayede, “düğmeye bas” komutunu “pini yüksek yap” elektrik sinyaline çeviren sihirli değnek Python olur.

Adım Adım Kurulum ve Uygulama: LED’leri Web’den Yakın!

Şimdi teoriden pratiğe geçme zamanı! Bu bölümde, Projeto Sirios’u Banana Pi’nizde adım adım nasıl kurup çalıştıracağınızı öğreneceksiniz. Her aşama detaylıca açıklanacak, böylece süreci kolayca takip edebilirsiniz.

Banana Pi İlk Kurulum ve Sistem Hazırlığı Nasıl Yapılır?

Projenin ilk adımı, Banana Pi’nizin temel sistemini hazırlamaktır. Bu, işletim sistemi kurulumu ve temel sistem ayarlarını içerir.

  1. İşletim Sistemi Kurulumu: Banana Pi için genellikle Armbian veya Debian tabanlı bir işletim sistemi tercih edilir. İlgili Banana Pi modelinize uygun işletim sistemi imajını, Banana Pi’nin resmi web sitesinden veya Armbian’ın sitesinden indirip, balenaEtcher gibi bir araçla bir microSD karta yazın. Kartı Banana Pi’ye takın.
  2. İlk Çalıştırma ve Ağ Ayarları: Banana Pi’nizi Ethernet kablosuyla ağınıza bağlayın (veya Wi-Fi modülünüz varsa kablosuz ağa bağlayın) ve güç verin. SSH (Secure Shell) ile cihaza erişmek, genellikle klavye, fare ve monitör bağlamaktan daha pratik bir yoldur. Ağınızdaki Banana Pi’nin IP adresini bulduktan sonra (örneğin router arayüzünden veya Nmap ile), bir terminalden aşağıdaki komutla bağlanın:
    
    ssh kullanıcıadı@banana_pi_ip_adresi
            


    Varsayılan kullanıcı adı genellikle 'pi' veya 'root' olabilir, varsayılan şifreleri belgelerinden kontrol edin ve ilk girişte değiştirmeniz istenir.

  3. Sistem Güncellemesi: Her yeni kurulumda olduğu gibi, sisteminizi güncel tutmak önemlidir. Paket listelerini güncelleyin ve yüklü paketleri yükseltin:
    
    sudo apt update
    sudo apt upgrade -y
            

  4. Python ve Geliştirme Araçları: Python genellikle kurulu gelir, ancak GPIO kütüphaneleri için pip paket yöneticisinin ve diğer geliştirme araçlarının yüklü olduğundan emin olun:
    
    sudo apt install python3 python3-pip git -y
            

Bu adımlarla Banana Pi'niz Projeto Sirios için temel olarak hazır hale gelmiş olacaktır. Unutmayın, doğru IP adresini bulmak ve güvenli bir SSH bağlantısı kurmak, projenin sonraki adımları için hayati öneme sahiptir. Ayrıca, varsayılan şifrenizi güçlü bir şifreyle değiştirmeyi asla ihmal etmeyin.

Apache Web Sunucusu Kurulumu ve Python Entegrasyonu

Banana Pi'niz hazır olduğuna göre, web sunucumuzu kurmaya ve Python betiklerimizle iletişim kurmasını sağlamaya geçebiliriz.

  1. Apache Kurulumu: Apache'yi yüklemek oldukça basittir:
    
    sudo apt install apache2 -y
            


    Kurulum tamamlandıktan sonra, Banana Pi'nizin IP adresini web tarayıcınıza yazarak Apache varsayılan sayfasını görmeniz gerekir. Bu, Apache'nin düzgün çalıştığını gösterir.

  2. Python ile Apache Entegrasyonu (mod_wsgi): Python betiklerini Apache üzerinden çalıştırmanın en etkili yollarından biri mod_wsgi kullanmaktır. Bu modül, Python uygulamalarını doğrudan Apache sürecinde barındırır, bu da daha iyi performans sağlar.
    
    sudo apt install libapache2-mod-wsgi-py3 -y
    sudo a2enmod wsgi
    sudo systemctl restart apache2
            

  3. Apache Sanal Ana Bilgisayar (Virtual Host) Yapılandırması: Projemiz için özel bir yapılandırma dosyası oluşturalım. Örneğin, /etc/apache2/sites-available/projeto-sirios.conf adında bir dosya oluşturun:
    
    sudo nano /etc/apache2/sites-available/projeto-sirios.conf
            

    İçeriğini aşağıdaki gibi doldurun (kendi projenize göre düzenleyebilirsiniz):



    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html/projeto-sirios
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    WSGIDaemonProcess projeto-sirios user=www-data group=www-data threads=5
    WSGIScriptAlias / /var/www/html/projeto-sirios/app.wsgi


    WSGIProcessGroup projeto-sirios
    WSGIApplicationGroup %{GLOBAL}
    Require all granted


    Bu yapılandırma, /var/www/html/projeto-sirios dizinini web kök dizini olarak atar ve app.wsgi dosyasını Python uygulamanızın giriş noktası olarak belirler. Şimdi bu dizini oluşturalım ve sanal ana bilgisayarı etkinleştirelim:

    
    sudo mkdir /var/www/html/projeto-sirios
    sudo a2ensite projeto-sirios.conf
    sudo a2dissite 000-default.conf # Varsayılan siteyi devre dışı bırakın
    sudo systemctl restart apache2
            

Bu adımlarla Apache, Python uygulamanızla etkileşime geçmeye hazır hale gelecektir. Artık web isteklerini işleyebilecek ve Python betikleriniz aracılığıyla donanım kontrolünü tetikleyebileceksiniz. Bu entegrasyon, web tabanlı arayüzünüz ile Banana Pi'nin GPIO pinleri arasındaki iletişimin anahtarını oluşturur.

Python ile Banana Pi GPIO Pinlerini Yönetmek

Şimdi sıra geldi Python ile LED'lerimizi kontrol etmeye. Banana Pi'de GPIO pinlerini yönetmek için PyAIO veya benzeri bir kütüphane kullanabiliriz. Eğer özel bir kütüphane bulmakta zorlanırsanız, /sys/class/gpio yoluyla doğrudan Linux çekirdeği ile etkileşime geçmek de bir seçenektir, ancak kütüphane kullanımı daha pratiktir.

  1. GPIO Kütüphanesini Kurma: Banana Pi'nizde GPIO kontrolü için en uygun kütüphaneyi kurun. Eğer PyAIO kullanacaksanız:
    
    pip3 install PyAIO # Eğer PyAIO mevcut değilse, alternatif bir Banana Pi GPIO kütüphanesi arayın.
                       # Bazı Banana Pi modelleri, "WiringPi" veya özel "gpio_sunxi" gibi C tabanlı kütüphaneler gerektirebilir.
                       # Bu durumda Python için bir sarıcı (wrapper) kullanmanız gerekebilir.
            


    *Not: Banana Pi modelleri arasında GPIO pinout ve kütüphane uyumluluğu farklılık gösterebilir. Kendi Banana Pi modelinizin belgelerini kontrol etmeniz önemlidir. Bu örnekte genel bir kütüphane kullanımı üzerinden ilerleyeceğiz.*

  2. Basit Bir LED Kontrol Betiği (led_control.py): Proje dizininizde (/var/www/html/projeto-sirios) led_control.py adında bir dosya oluşturun:
    
    # /var/www/html/projeto-sirios/led_control.py
    import sys
    import time
    
    # PyAIO kütüphanesini kullanıyorsanız:
    # import AIO
    
    # Eğer PyAIO mevcut değilse ve /sys/class/gpio kullanıyorsanız:
    # Bu kısım daha düşük seviyeli bir yaklaşımdır ve hata yönetimi içermez.
    # Gerçek projelerde daha sağlam bir kütüphane kullanmak önerilir.
    def set_gpio_direction(pin, direction):
        with open(f"/sys/class/gpio/gpio{pin}/direction", "w") as f:
            f.write(direction)
    
    def write_gpio_value(pin, value):
        with open(f"/sys/class/gpio/gpio{pin}/value", "w") as f:
            f.write(str(value))
    
    def export_gpio(pin):
        try:
            with open("/sys/class/gpio/export", "w") as f:
                f.write(str(pin))
        except IOError:
            pass # Pin zaten dışa aktarılmış olabilir
    
    def unexport_gpio(pin):
        try:
            with open("/sys/class/gpio/unexport", "w") as f:
                f.write(str(pin))
        except IOError:
            pass # Pin zaten dışa aktarılmamış olabilir
    
    # Kullanacağımız GPIO pini. Banana Pi modelinize göre değiştirmelisiniz.
    # Örneğin, 12 numaralı pin için, lütfen kendi Banana Pi pinout şemanızı kontrol edin!
    LED_PIN = 12
    
    def control_led(action):
        export_gpio(LED_PIN)
        set_gpio_direction(LED_PIN, "out")
    
        if action == "on":
            write_gpio_value(LED_PIN, 1)
            return "LED AÇIK"
        elif action == "off":
            write_gpio_value(LED_PIN, 0)
            return "LED KAPALI"
        else:
            return "Geçersiz Eylem"
    
    if __name__ == "__main__":
        if len(sys.argv) > 1:
            action = sys.argv[1]
            print(control_led(action))
        else:
            print("Kullanım: python3 led_control.py [on|off]")
    
            

    Bu betik, komut satırından 'on' veya 'off' parametresi alarak LED'i kontrol eder. /sys/class/gpio doğrudan dosya sistemini manipüle ederek çalışır. Fiziksel olarak bir LED'i bağlarken, akım sınırlayıcı bir direnç (genellikle 220-330 Ohm) kullanmayı unutmayın.

  3. WSGI Uygulama Betiği (app.wsgi): Apache'nin Python betiğinizi çalıştırması için app.wsgi adında bir dosya oluşturun:
    
    # /var/www/html/projeto-sirios/app.wsgi
    import sys
    sys.path.insert(0, '/var/www/html/projeto-sirios')
    
    from led_control import control_led
    
    def application(environ, start_response):
        status = '200 OK'
        headers = [('Content-type', 'text/plain')]
        start_response(status, headers)
    
        query_string = environ.get('QUERY_STRING', '')
        action = None
        if query_string:
            params = dict(qc.split('=') for qc in query_string.split('&') if '=' in qc)
            action = params.get('action')
    
        if action:
            response_message = control_led(action)
        else:
            response_message = "Eylem belirtilmedi. Örnek: /?action=on"
    
        return [response_message.encode('utf-8')]
            

    Bu betik, HTTP isteklerinden action parametresini okur ve led_control.py içindeki control_led fonksiyonunu çağırır. Ardından, işlemin sonucunu bir HTTP yanıtı olarak geri döndürür.

  4. İzinleri Ayarlamak: Web sunucusunun GPIO dosyalarına erişebilmesi için gerekli izinleri vermelisiniz. /sys/class/gpio dizinine www-data kullanıcısının erişimini sağlamak için UDEV kuralları veya grup atamaları kullanmak en güvenli yoldur. Basit bir başlangıç için, www-data kullanıcısını gpio grubuna ekleyebilirsiniz:
    
    sudo usermod -aG gpio www-data
    sudo chmod -R 775 /sys/class/gpio # Geçici ve güvenlik açığı içeren bir çözüm, uzun vadede UDEV kullanın.
    sudo systemctl restart apache2
            


    *UYARI: chmod -R 775 /sys/class/gpio komutu bir güvenlik riski oluşturabilir. Daha güvenli bir yöntem için UDEV kuralları oluşturarak sadece belirli GPIO pinlerine www-data kullanıcısının erişimini sağlayın. Örneğin, /etc/udev/rules.d/99-gpio.rules dosyasına aşağıdaki gibi bir kural ekleyerek belirli bir pinin (örn: gpio12) izinlerini düzenleyebilirsiniz:*

    
    # /etc/udev/rules.d/99-gpio.rules
    SUBSYSTEM=="gpio", KERNEL=="gpio12", MODE="0660", GROUP="gpio"
    SUBSYSTEM=="gpio", KERNEL=="gpiochip*", MODE="0660", GROUP="gpio"
            


    *Sonrasında sudo udevadm control --reload-rules && sudo udevadm trigger komutlarını çalıştırın.*

Bu adımlarla, Python betikleriniz Apache üzerinden tetiklenebilir hale gelir. Artık tek yapmanız gereken, kullanıcıların bu betikleri çağırabileceği bir web arayüzü oluşturmaktır.

Web Arayüzü Geliştirme: HTML, CSS ve JavaScript ile Kontrol Paneli

Kullanıcıların LED'leri web üzerinden kontrol edebilmesi için basit ama işlevsel bir web arayüzü tasarlayacağız. Bu arayüz HTML, CSS ve JavaScript kullanılarak oluşturulacak.

  1. HTML Yapısı (index.html): Proje dizininize (/var/www/html/projeto-sirios) index.html adında bir dosya oluşturun:
    
    
    
    
        
        
        Projeto Sirios - LED Kontrolü
        
    
    
        

    Projeto Sirios: LED Kontrol Paneli

    LED Durumu: Bilinmiyor

  2. CSS Stilleri (style.css): Aynı dizine style.css adında bir dosya oluşturarak arayüzümüzü güzelleştirelim:
    
    /* /var/www/html/projeto-sirios/style.css */
    body {
        font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
        background-color: #f0f2f5;
        display: flex;
        justify-content: center;
        align-items: center;
        min-height: 100vh;
        margin: 0;
        color: #333;
    }
    
    .container {
        background-color: #ffffff;
        padding: 30px;
        border-radius: 10px;
        box-shadow: 0 4px 15px rgba(0, 0, 0, 0.1);
        text-align: center;
        width: 90%;
        max-width: 400px;
    }
    
    h1 {
        color: #007bff;
        margin-bottom: 25px;
        font-size: 1.8em;
    }
    
    .led-status {
        font-size: 1.2em;
        margin-bottom: 25px;
        padding: 10px;
        background-color: #e9ecef;
        border-radius: 5px;
    }
    
    #statusText {
        font-weight: bold;
        color: #dc3545; /* Varsayılan olarak kapalı */
    }
    
    .controls button {
        background-color: #28a745;
        color: white;
        border: none;
        padding: 12px 25px;
        margin: 10px;
        border-radius: 5px;
        cursor: pointer;
        font-size: 1em;
        transition: background-color 0.3s ease;
    }
    
    .controls button:hover {
        background-color: #218838;
    }
    
    #offButton {
        background-color: #dc3545;
    }
    
    #offButton:hover {
        background-color: #c82333;
    }
    
    .response-message {
        margin-top: 20px;
        padding: 10px;
        border-radius: 5px;
        background-color: #fff3cd;
        color: #856404;
        border: 1px solid #ffeeba;
        font-size: 0.9em;
        visibility: hidden; /* Başlangıçta gizli */
    }
    
    .response-message.show {
        visibility: visible;
    }
    
    /* Mobil Uyumlu Tasarım */
    @media (max-width: 600px) {
        .container {
            padding: 20px;
            width: 95%;
        }
        h1 {
            font-size: 1.5em;
        }
        .controls button {
            width: 100%;
            margin: 5px 0;
        }
    }
            

    Yukarıdaki CSS, butonların ve genel düzenin mobil cihazlarda da iyi görünmesini sağlayan bir media query örneği içermektedir. Bu sayede, akıllı telefonunuzdan da kontrol paneline rahatça erişebilirsiniz.

  3. JavaScript Fonksiyonelliği (script.js): Aynı dizine script.js adında bir dosya oluşturarak butonlara tıklama olaylarını ekleyelim ve Python betiğimizle etkileşim kuralım:
    
    // /var/www/html/projeto-sirios/script.js
    document.addEventListener('DOMContentLoaded', function() {
        const onButton = document.getElementById('onButton');
        const offButton = document.getElementById('offButton');
        const statusText = document.getElementById('statusText');
        const responseDiv = document.getElementById('response');
    
        function updateStatus(text, color) {
            statusText.textContent = text;
            statusText.style.color = color;
        }
    
        function showResponse(message, type = 'info') {
            responseDiv.textContent = message;
            responseDiv.className = 'response-message show'; // show sınıfını ekle
    
            if (type === 'error') {
                responseDiv.style.backgroundColor = '#f8d7da';
                responseDiv.style.color = '#721c24';
                responseDiv.style.borderColor = '#f5c6cb';
            } else {
                responseDiv.style.backgroundColor = '#d4edda';
                responseDiv.style.color = '#155724';
                responseDiv.style.borderColor = '#c3e6cb';
            }
    
            setTimeout(() => {
                responseDiv.classList.remove('show'); // 3 saniye sonra gizle
            }, 3000);
        }
    
        async function sendCommand(action) {
            try {
                const response = await fetch(/?action=${action});
                const data = await response.text();
                showResponse(data);
                if (action === 'on') {
                    updateStatus('AÇIK', '#28a745');
                } else {
                    updateStatus('KAPALI', '#dc3545');
                }
            } catch (error) {
                console.error('LED kontrol hatası:', error);
                showResponse('Komut gönderilirken bir hata oluştu.', 'error');
                updateStatus('HATA', '#6c757d');
            }
        }
    
        onButton.addEventListener('click', () => sendCommand('on'));
        offButton.addEventListener('click', () => sendCommand('off'));
    
        // Sayfa yüklendiğinde varsayılan durumu ayarla (isteğe bağlı)
        updateStatus('KAPALI', '#dc3545');
    });
            

    Bu JavaScript kodu, "LED'i Aç" ve "LED'i Kapat" butonlarına tıklama olaylarını dinler. Her tıklamada, Fetch API kullanarak Apache sunucusuna bir HTTP isteği gönderir. İstek, Python betiğimizin beklediği action=on veya action=off parametresini içerir. Python betiği işlemi tamamladığında, web arayüzü yanıtı alır ve kullanıcıya bir bildirim gösterir.

Artık tüm bileşenler yerli yerinde! Banana Pi'nizin IP adresini web tarayıcınıza yazarak kontrol paneline erişebilir ve butonlara tıklayarak LED'inizi web üzerinden kontrol etmenin keyfini çıkarabilirsiniz. Bu etkileşimli arayüz, projenizi daha da cazip hale getirecek ve IoT deneyiminizi somutlaştıracaktır.

Projenizi Geliştirmek: Güvenlik, Ölçeklenebilirlik ve Vaka Analizi

Projeto Sirios'un temelini attıktan sonra, projenizi daha güvenli, daha işlevsel ve daha geniş kapsamlı hale getirmek için bazı ileri düzey konulara değinelim. Bu bölümde, güvenlik ipuçları, performans optimizasyonları ve gerçek dünya senaryolarında nasıl kullanılabileceğine dair bir vaka analizi bulacaksınız.

Güvenlik Önlemleri ve Performans İpuçları Nelerdir?

Web üzerinden donanım kontrolü yaparken güvenlik, asla göz ardı edilmemesi gereken bir konudur. Banana Pi'niz doğrudan internete açıksa, kötü niyetli saldırılara karşı savunmasız kalabilir. İşte alabileceğiniz bazı temel güvenlik önlemleri:

  • Sıkı İzinler: Daha önce de belirttiğimiz gibi, chmod 777 gibi geniş izinler vermekten kaçının. /sys/class/gpio dizinine veya Python betiklerinize sadece www-data kullanıcısının ihtiyacı olan en düşük düzeyde izinleri verin. UDEV kuralları, belirli GPIO pinlerine kontrollü erişim sağlamanın en iyi yoludur.
  • Kimlik Doğrulama ve Yetkilendirme: Web arayüzünüze basit bir kullanıcı adı/şifre sistemi ekleyin. Apache'nin .htaccess özelliği veya Python tabanlı bir kimlik doğrulama mekanizması (örneğin Flask veya Django ile basit bir oturum yönetimi) kullanarak sadece yetkili kişilerin LED'leri kontrol etmesini sağlayın.
  • SSL/TLS Kullanımı: HTTP yerine HTTPS kullanarak web trafiğini şifreleyin. Let's Encrypt gibi hizmetlerle ücretsiz SSL sertifikaları alabilir ve Apache'nizi HTTPS üzerinden hizmet verecek şekilde yapılandırabilirsiniz. Bu, hassas verilerin (örneğin kimlik bilgileri) şifrelenmeden gönderilmesini engeller.
  • Ağ Güvenliği (Firewall): Banana Pi'nizde bir güvenlik duvarı (örneğin UFW - Uncomplicated Firewall) kurarak sadece belirli portlardan (SSH için 22, HTTP için 80, HTTPS için 443) gelen bağlantılara izin verin. Diğer tüm portları kapatarak potansiyel saldırı yüzeyini azaltın.
  • Sistem Güncellemeleri: İşletim sisteminizi ve tüm yazılımlarınızı düzenli olarak güncelleyin. Bu, bilinen güvenlik açıklarının kapatılmasına yardımcı olur.

Performans açısından ise, mod_wsgi kullanımı Python betiklerinin daha hızlı çalışmasını sağlar. Ancak, her web isteğinde GPIO pinlerini dışa aktarıp içe aktarmak (export/unexport) yerine, Python betiği başladığında pinleri bir kez ayarlayıp açık tutmak daha verimli olabilir. Ayrıca, eğer çok sayıda eş zamanlı istek bekliyorsanız, Apache'nin süreç yönetimi ayarlarını optimize etmeniz gerekebilir.

Uzman İpucu: Güvenlik ve ölçeklenebilirlik için, doğrudan GPIO erişimi yerine bir MQTT broker kullanarak Raspberry Pi'nizi bir IoT cihazı olarak tasarlayabilirsiniz. Web arayüzünüz MQTT broker'a komut gönderir, Banana Pi ise bu komutları dinleyerek LED'i kontrol eder. Bu yapı, sistemi daha modüler ve genişletilebilir hale getirir.

Projeto Sirios ile Akıllı Aydınlatma Vaka Analizi

Projeto Sirios'un temel konseptini kullanarak gerçek bir akıllı aydınlatma sistemi nasıl tasarlanabilir, gelin bir vaka analiziyle inceleyelim.

Senaryo: Evinizdeki oturma odası lambalarını web üzerinden kontrol etmek istiyorsunuz. Ayrıca, odadaki ışık seviyesine göre lambaların otomatik olarak açılıp kapanmasını, ancak manuel olarak da müdahale edebilmeyi arzuluyorsunuz.

Uygulama:

  1. Donanım Genişletme:
    • LED yerine, evinizdeki prizleri kontrol edebilecek bir röle modülü bağlayın (Banana Pi'nin GPIO pinleri üzerinden röleyi tetikleyin). Her bir lamba için ayrı bir röle kullanabilirsiniz.
    • Ortam ışığını ölçmek için bir LDR (Light Dependent Resistor) veya BH1750 gibi dijital bir ışık sensörü entegre edin. Bu sensörler, analog veya I2C/SPI arayüzleri üzerinden Banana Pi'ye bağlanabilir.
  2. Python Betiği Geliştirme:
    • Sensör Okuma: Python betiğinizi, sensörden periyodik olarak ışık verilerini okuyacak şekilde güncelleyin. Örneğin, her 5 saniyede bir ortam ışığını okuyun.
    • Otomatik Kontrol Mantığı: Okunan ışık değeri belirli bir eşiğin altına düştüğünde (örneğin akşam olduğunda), röleleri tetikleyerek lambaları açın. Işık yeterli olduğunda lambaları kapatın.
    • Web Arayüzü ile Çakışma Yönetimi: Otomatik sistem çalışırken bile web arayüzünden manuel müdahaleye izin verin. Örneğin, manuel olarak açılan bir lamba, bir sonraki otomatik döngüde "manuel olarak açık" durumunu koruyacak bir bayrakla işaretlenebilir.
  3. Web Arayüzü Güncelleme:
    • Kontrol paneline her lamba için ayrı açma/kapama butonları ekleyin (eğer birden fazla lamba varsa).
    • Ortam ışık seviyesini gösteren bir grafik veya sayısal gösterge ekleyin.
    • "Otomatik Mod"u açıp kapama butonu ekleyerek kullanıcının otomasyonu devre dışı bırakıp manuel kontrolü ele almasını sağlayın.
  4. Veritabanı Entegrasyonu (Opsiyonel ama Önerilir):
    • SQLite gibi hafif bir veritabanı kullanarak lamba durumlarını (açık/kapalı, otomatik/manuel), ışık sensörü verilerini ve zaman damgalarını kaydedin.
    • Bu veriler, daha sonra geçmiş performansı analiz etmek veya belirli saatlerdeki kullanım alışkanlıklarını öğrenmek için kullanılabilir.

Bu vaka analizi, Projeto Sirios'un sadece LED yakmaktan çok daha fazlasını yapabileceğini göstermektedir. Temel web kontrol mekanizmasını genişleterek, gerçek dünya ihtiyaçlarına yanıt veren, etkileşimli ve akıllı sistemler geliştirebilirsiniz. Bu, sadece bir başlangıç noktası olup, hayal gücünüzle birleştiğinde sınırsız potansiyele sahiptir.

Sonuç ve Gelecek: Projeto Sirios ile Neler Yapılabilir?

Projeto Sirios, Banana Pi, Apache ve Python'ın gücünü birleştirerek dijital dünyadan fiziksel kontrolün kapılarını aralayan, oldukça eğitici ve pratik bir projedir. Bu makale boyunca, Banana Pi'nin ilk kurulumundan Apache web sunucusunun yapılandırılmasına, Python ile GPIO pinlerinin yönetilmesinden kullanıcı dostu bir web arayüzünün geliştirilmesine kadar her adımı detaylıca inceledik. Ayrıca, projenizi daha güvenli ve ölçeklenebilir hale getirmek için önemli ipuçları sunduk ve bir akıllı aydınlatma vaka analiziyle gerçek dünya uygulamalarına nasıl geçiş yapabileceğinizi gösterdik.

Bu proje, IoT ve gömülü sistemler dünyasına adım atmak isteyen herkes için mükemmel bir başlangıç noktasıdır. Öğrendiğiniz bu temel prensipleri kullanarak, sadece LED'leri değil, röleleri, motorları, sensörleri ve diğer birçok elektronik bileşeni web üzerinden kontrol edebilirsiniz. Ev otomasyon sistemleri, uzaktan izleme istasyonları, robotik projeler veya endüstriyel kontrol uygulamaları gibi çeşitli alanlarda Projeto Sirios'un sunduğu altyapıyı kullanabilirsiniz. Önemli olan, bu projenin size kazandırdığı bilgi birikimi ve problem çözme becerileridir. Bu becerilerle donatılmış olarak, gelecekteki teknolojik zorlukların üstesinden gelmeye hazır olacaksınız. Unutmayın, her büyük proje küçük bir adımla başlar ve Projeto Sirios, sizin için o ilk büyük adım olabilir. Şimdi sıra sizde: donanım ve yazılımı bir araya getirmenin büyülü dünyasını keşfetmeye devam edin!

Sıkça Sorulan Sorular

  1. Projeto Sirios için neden Banana Pi tercih ettik, Raspberry Pi daha popüler değil mi?

    Evet, Raspberry Pi daha popülerdir ancak Banana Pi, özellikle bazı modellerinde daha fazla RAM, Gigabit Ethernet veya SATA arayüzü gibi ek özellikler sunabilir ve piyasada Raspberry Pi'ye alternatif olarak daha kolay bulunabilir olabilir. Projenin temel prensipleri Raspberry Pi üzerinde de benzer şekilde uygulanabilir, bu yüzden seçim tamamen sizin erişilebilirliğinize ve tercihlerinize bağlıdır.

  2. GPIO pinlerini kontrol ederken neden /sys/class/gpio yöntemini kullandık, daha basit bir kütüphane yok mu?

    Banana Pi modelleri için Raspberry Pi'deki RPi.GPIO kadar standart ve evrensel bir Python GPIO kütüphanesi bulunmayabilir. PyAIO gibi kütüphaneler mevcut olsa da, doğrudan /sys/class/gpio üzerinden dosya sistemi manipülasyonu, evrensel ve kütüphane bağımsız bir yöntem sunar. Kendi Banana Pi modeliniz için optimize edilmiş bir kütüphane bulursanız, elbette onu kullanmak daha pratiktir.

  3. Web arayüzümü internetten erişilebilir hale getirmek güvenli mi?

    Doğru güvenlik önlemleri alınmadan internete açmak kesinlikle güvenli değildir. Kimlik doğrulama (kullanıcı adı/şifre), HTTPS (SSL/TLS şifreleme), güvenlik duvarı (firewall) kuralları ve düzenli sistem güncellemeleri gibi önlemleri almadan web arayüzünüzü doğrudan internete açmaktan kaçının. Aksi takdirde, sisteminiz kötü niyetli kişiler tarafından ele geçirilebilir.

  4. LED'leri kontrol etmek yerine başka hangi cihazları bu yöntemle kontrol edebilirim?

    Bu projenin temel prensipleriyle röleler (elektrikli cihazları açıp kapamak için), servo motorlar (açı kontrolü), DC motorlar (hız ve yön kontrolü) veya hatta diğer sensörlerden gelen verileri okuyup web arayüzünde görüntüleyebilirsiniz. Önemli olan, kontrol etmek istediğiniz cihazın Banana Pi'nin GPIO pinleri ile uyumlu olması ve gerekli Python kütüphanelerinin mevcut olmasıdır.


Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Gönder

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.
Exit mobile version