MicroPython Hava Teknesi
Bu proje MicroPython kullanarak yapılacaktır. MicroPython, Python standart kitaplığının küçük bir alt kümesini içeren ve mikrodenetleyiciler üzerinde çalışacak şekilde optimize edilmiş Python 3 programlama dilinin yalın ve verimli bir uygulamasıdır.
Bu projedeki amaç, bağımsız bir WiFi erişim noktası olan ve hava botu fanlarını kontrol etmek için küçük bir web sunucusu kullanan bir MicroPython uygulaması oluşturmaktır.
Donanım
Bu projede için gerekli donanımlar şunlardır:
- Loron veye Cellron Kartı
- 2 adet L9110 Fan
- Uno proto shield (isteğe bağlı) veya küçük bir devre tahtası kullanın
- 9V pil veya taşınabilir telefon şarj cihazı
- K-Nex blokları
- Küçük plastik kutu
- 2 adet plastik su şişesi
- Koli Bandı
MicroPython, bir dizi Wifi bağlantısında kartlarımızda desteklenir. Kartlarımızla ilgili satın alma ve teknik özellik bilgilerine sitemizde satın al kısmından ulaşabilirsiniz.
Fanlar 3.3V ile çalışacak ama 5V’da çok daha fazla rüzgar gücü üretiyorlar. Bu fanların dört pini vardır: VCC, GND, INA (yön) ve INB (açık/kapalı). Bu proje için sadece ileri dönen fanlar kullanıldı, bu yüzden sadece pin INB kullanıldı.
Tekne Yapımı
Tekne çerçevesi için K’Nex parçalarını kullandım çünkü bunlar hafif ve sağlam, ancak kullanılabilecek birçok başka malzeme var. Flotasyon için su şişeleri, şişeleri çerçeveye sabitlemek için koli bandı kullanıldı. Elektronik aksamın korunmasına yardımcı olmak için küçük bir plastik çerez kabı kullanıldı. Fanları tekne çerçevesine sarmalısınız.
MikroPython Kurulumu
MicroPython geliştirme için birkaç seçenek vardır. Biz bu proje de Thonny IDE’sini kullanmanızı öneririz:
Thonny IDE’sini indirmek için gerekli bilgiler sitemizin doküman kısmından Windows ve MacOS için bulunmaktadır.
MicroPython projeleri için genellikle 2 Python uygulaması, bir boot.py ve bir main.py dosyası oluşturulmalıdır. Bu proje de belgeleri basit tutmak için her şeyi boot.py dosyasına koydum, ancak daha büyük projeler için main.py kullanılması önerilir.
Erişim Noktası Oluşturma(Creating an Access Point)
Aşağıdaki resim, yalnızca birkaç satır kodla bir erişim noktasının nasıl kurulacağını gösterir. Bu örnekte erişim noktasının adı “ESP32” ve parolası “12345678”dir. Kod çalıştırıldığında, uzak bir kullanıcının erişim noktasına ne zaman bağlanıp bağlantısını kestiğini görebileceksiniz.
MikroPython Web Sunucusu
Erişim Noktasını çalıştırdıktan sonraki adım, bir Web sunucusu oluşturmaktır. Bu basit bir Web sunucusu projesidir, bu yüzden HTML içeriğini Python koduna yerleştireceğiz, ancak daha karmaşık bir uygulama için web sayfalarımı kesinlikle koddan bağımsız dosyalar olarak almanız gerekir.
Web Server örnek uygulaması için erişim noktası bağlantı kodu ile başlıyoruz, ardından port 80’e bir soket kuruyoruz. HTTP istek/yanıt(request/response) dizisi, web_page(request) adlı bir işlevden geçirilir. web_page(request) içinde kod, HREF isteğindeki anahtar kelimeleri arar.
#MicroPython boot.py - Erişim Noktası Web Sunucusu (Access Point Web Server) try: import usocket as socket except: import socket import network station= network.WLAN(network.AP_IF) station.active(True) station.config(essid=’ESP32′) station.config(authmode=3,password=’12345678′) while station.isconnected() == False: pass print(‘Connection successful’) print(station.ifconfig()) def web_page(request): fans_state=”” if request.find(‘/?forward’)>0: fans_state=”Going Forward” if request.find(‘/?Stopped’)>0: fans_state=”Stopped” html=””” Ice Boat Web Server ICE Boat: “”” +fans_state + “”” >button class=”button”>Forward >button class=”button button”>STOP “”” return html s=socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.bind((”,80)) s.listen(5) while True: conn,addr = s.accept() print(‘Got a connection from %s’ % str(addr)) request = conn.recv(1024) request= str(request) print(‘The Content = %s’ % request) response = web_page(request) conn.send(response) conn.close()
Gömülü HTML kodu, bağlantı etiketlerini kullanarak anahtar sözcükleri iletir, örneğin: <a href=’/?forward’>. Biçimlendirmeye yardımcı olması için genellikle Bootstrap gibi mobil çerçeveler kullanırız, ancak bağımsız bir erişim noktası çalıştırdığımız için tüm stil kodlarımızı manuel olarak tanımlamamız gerekir.
MicroPython web sunucumuza erişmek için şu adresi kullanın: 192.168.4.1. Bu varsayılan adrestir (erişim noktası kurulumunda bunu değiştirebilirsiniz). Web sunucumuz çalışırken stop/ileri (stop/forward) durumları arasında geçiş yapabilmeliyiz.
Çıktıları Yazma
MicroPython komut satırı arayüzü, çıktıları test etmenin iyi bir yoludur. Komut satırı arayüzüne erişmek için bağlan düğmesini kullanın ve ardından “Control-C” girin.
Donanımdaki pinleri yönetmek için machine kütüphanesi kullanılır:
from machine import Pin
Ardından pin nesneleri giriş veya çıkış olarak tanımlanabilir:
Pin14=Pin(14, Pin.IN)
Pin5 = Pin(5, Pin.OUT)
Bir pinin değeri pinobject.value() kullanılarak okunur ve pinobject.value (thevalue) ile ayarlanır.
Son Uygulama
Artık tüm parçalar birbirinden bağımsız çalıştığına göre hepsini bir araya getirebiliriz. Son kod için iki fan tanımlandı (motorR and motorL) ve web isteklerinden bir fan kontrol işlevi çağrılır.
# MicroPython boot.py - Erişim Noktası Web Sunucusu (Access Point Web Server) import time try: import usocket as socket except: import socket from machine import Pin import network #Sol, sağ ve arka fan pinini tanımlayın motorR = Pin(12,Pin.OUT) motorL = Pin(4,Pin.OUT) #Fanlar durdurulmuş olarak başla, Not: FAN'ları 0 da çalıştır motorR.value(1) motorL.value(1) station= network.WLAN(network.AP_IF) station.active(True) station.config(essid='ESP32') station.config(authmode=3,password='12345678') while station.isconnected() == False: pass print('Connection successful') print(station.ifconfig()) def fancontrol(left,right): motorL.value(left) motorR.value(right) def web_page(request): fans_state="Stopped" if request.find('/?forward')>0: fans_state="Going Forward" fancontrol(0,0) if request.find('/?left')>0: fans_state="Going Left" fancontrol(1,0) if request.find('/?right')>0: fans_state="Going Right" fancontrol(0,1) if request.find('/?stop')>0: fans_state="Stopped" fancontrol(1,1) html=""" Ice Boat Web Server ICE Boat: """ +fans_state + """ >button class="button">Forward >button class="button button2">LEFT >button class="button buuton2">RIGHT >button class="button button">STOP """ return html s=socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.bind(('',80)) s.listen(5) while True: conn,addr = s.accept() print('Got a connection from %s' % str(addr)) request = conn.recv(1024) request= str(request) print('The Content = %s' % request) response = web_page(request) conn.send(response) conn.close()
Özet
2 fanın bile hava botunu ne kadar hızlı hareket ettireceğine şaşıracaksınız. Düz bir yönde kalmasını sağlamak için fanların yönünü dengelemek veya basit bir dümen eklemek gerekebilir.
Aynı projeyi Arduino C++’da tamamen aynı donanım üzerinde yapılabilir ve yanıt hızı benzerdir. Ancak Python kodu biraz daha yalın olabilir.
Teşekkür ederiz..