-
Notifications
You must be signed in to change notification settings - Fork 0
Yazılım: Modül Yaratma
Python çerçevesi, işlevselliği ve davranışları genişletmek ve değiştirmek için ihtiyaç duyulan modülleri eklemek için tasarlanmıştır.
modules
Dizini içinde, çerçevede mevcut olan modüllerin mevcut listesi bulunmaktadır.
Bir modül aşağıdakileri içerir:
- Bir modül adını tanımlayan bir sınıf tanımı
- Oluşturulma sırasında modülü başlatmak için bir `__init__` yöntemi
- Genellikle döngü döngüsü sırasında davranışı tetikleyen bir `loop` yöntemi
- Modülle ilgili özel fonksiyonlar
Aşağıdaki Sensör örneğine bir göz atalım. İşlevselliği açıklamak için yorumlar eklendi.
import pigpio # Pin erişimi için PiGPIO kütüphanesini içe aktar
from pubsub import pub # Döngü olayına abone olmak için pubsub modülünü içe aktar
class Sensor:
def init(self, pin, **kwargs):
self.pi = kwargs.get('pi', pigpio.pi()) # PiGPIO örneğine referans oluştur
self.pin = pin # Sensörün bağlı olduğu pin'i tanımla
self.value = None # Sensörün mevcut değerini sakla
pub.subscribe(self.loop, 'loop:1') # Her döngüde ana tarafından yayınlanan döngüye abone ol
def loop(self):
if self.read():
pub.sendMessage('motion') # Sensör hareket algılarsa, diğer modüllerin tepki vermesi için bir mesaj gönder
def read(self):
self.value = self.pi.read(self.pin) # Sensörün pin değerini oku
return self.value
Bu, modülün temel yapısını göstermektedir.
Modül ile programın ana etkileşimi şu şekildedir.main.py
Dosyalar arasındaki ve modüller arasındaki temel etkileşim olaylar aracılığıyla gerçekleştirilir. Bu, diğer modüllere olan bağımlılığı ortadan kaldırır ve tüm modüllerin etkileşimde bulunma potansiyeline sahip olmasını sağlar.
Çalışma zamanında hangi modüllerin yüklendiğini belirlemek için,main.py
dosyası her bir modülü tek bir satırda başlatmak üzere yapılandırılmıştır.
motion = Sensor(Config.MOTION_PIN, pi=gpio)
Bazı durumlarda, başlatma koşullu olarak gerçekleştirilir ve bir bayrak veya değer kullanılarak belirlenir.modules/config.py
:
if Config.MOTION_PIN is not None:
motion = Sensor(Config.MOTION_PIN, pi=gpio)
Bu uygulama yaklaşımı, hareket sensörü olmadan çerçevenin kullanılması durumunda bile sabit olan tüm modüllerin başlatılmayacağı anlamına gelir.MOTION_PIN
bu durumda sabit sadece None
ayarlanabilir ve hareket kodu yürütülmez. Ayrıca, normalde etkinlik tarafından tetiklenen herhangi bir davranış, koşula bağlı olarak gerçekleştirilmez.motion
ancak çalışma zamanında hatalara neden olacak eksik bağımlılıklar olmadığı için herhangi bir davranış gerçekleştirilmez.
Kodun çalışması sırasında periyodik olarak ateşlenen birkaç olay bulunur.
-
loop
:main.py
kodunun her döngüsünde bir kez yayınlanır. -
loop:1
: her saniye yayınlanır -
loop:30
: her 30 saniyede bir yayınlanır -
loop:60
: her 60 saniyede bir yayınlanır -
loop:nightly
: her gece belirli bir saatte yayınlanır.
Bu değişen frekans, farklı davranışların uygun frekansta zamanlanabilmesini sağlar. Örneğin, bir hareket algılayıcısının her saniye çalışması gerekebilirkenloop
bir batarya izleyicisi sadece 60 saniyede bir çalışmayı gerektirebilir.loop:60
Benzer şekilde, bir yedekleme betiği sadece geceleyin, sistem üzerinde daha az talep olduğunda çalışabilir.