Raspberry-Οι εντολές της python για τον έλεγχο των GPIO με χρήση της βιβλιοθήκης gpiozero

Πλήρης αναφορά των εντολών εδώ

Λαμπάκια που ανάβουν και σβήνουν

1. LED

Για να διαχειριστούμε ένα απλό LED με λειτουργία on/off:

  1. Εισάγουμε στο πρόγραμμα την εντολή: from gpiozero import LED
  2. Για να δημιουργήσουμε αντικείμενο τύπου LED: led1= LED(20).
    Έτσι, ονομάσαμε led1 ένα αντικείμενο τύπου LED που συνδέσαμε στο pin 20.
  3. Διαθέσιμες εντολές: Μπορούμε να ανάψουμε ή να σβήσουμε ένα LED:
  • led1.on() είναι η εντολή για ν’ ανάψουμε το led1.
  • led1.off() είναι η εντολή για να σβήσουμε το led1.

Μπορούμε να ελέγξουμε την κατάσταση ενός LED με την εντολή led1.is_lit

Η Λογική τιμή που επιστρέφει είναι (True ή False) και περιγράφει την τρέχουσα κατάσταση του LED.

Π.χ. όταν το led1 ανάβει, η συνθήκη led1.is_lit έχει την τιμή True

2. PWMLED

Έχουμε δυνατότητα να ορίζουμε τη φωτεινότητα ενός LED με τις παρακάτω εντολές:

  1. Εισάγουμε στο πρόγραμμα την βιβλιοθήκη gpiozero το αντικείμενο PWMLED:
    from gpiozero import PWMLED
  2. Δημιουργούμε αντικείμενο τύπου PWMLED με την εντλή:led2= PWMLED(25)
    Ονομάζουμε led2 ένα αντικείμενο τύπου PWMLED που συνδέσαμε στο pin 25
  3. Διαθέσιμες εντολές: Μπορούμε να ανάψουμε ή να σβήσουμε ένα LED:
  • led2.on(), εντολή για ν’ ανάψουμε το led2.
  • led2.off(), εντολή για να σβήσουμε το led2.

Μπορούμε να ελέγξουμε την κατάσταση ενός LED: led2.is_lit έχει Λογική τιμή (True ή False) που περιγράφει την τρέχουσα κατάσταση του LED.

Π.χ. όταν το led ανάβει σε πλήρη φωτεινότητα, η led2.is_lit έχει την τιμή True.

Μπορούμε να ρυθμίσουμε την φωτεινότητα ενός LED αν δώσουμε μια πραγματική τιμή (float) μεταξύ 0 και 1

Με την εντολή: led2.value= 0.25 ορίζουμε τη φωτεινότητα στο 25%.

Είσοδος στα προγράμματά μας από συνδεμένα πλήκτρα ή αισθητήρες

3. Button

Μπορούμε να διαχειριστούμε ένα απλό πλήκτρο-διακόπτη (pushbutton) ως εξής:

  1. Εισάγουμε στο πρόγραμμα την εντολή:
    from gpiozero import Button
  2. Δημιουργούμε αντικείμενο τύπου Button με την εντολή:
    b= Button(12)
    Η εντολή αυτή δημιουργεί ένα αντικείμενο b τύπου Button που συνδέσαμε στο pin 12.
  3. Διαθέσιμες εντολές:

Μπορούμε να πούμε στο πρόγραμμά μας να περιμένει μέχρι να πατηθεί/αφεθεί ένα button:

  • b.wait_for_press() Με την εντολή αυτή το πρόγραμμά μας θα περιμένει μέχρι να πατηθεί το κουμπί b.
  • b.wait_for_release() Με την εντολή αυτή το πρόγραμμά μας θα περιμένει μέχρι να αφεθεί το κουμπί b.

Μπορούμε να ελέγξουμε την κατάσταση ενός button:

b.is_pressed η Λογική τιμή που επιστρέφει είναι True ή False ανάλογα με την τρέχουσα κατάσταση του button.

Μπορούμε να παρακολουθούμε συνεχώς εάν πατήθηκε ή αφέθηκε ένα κουμπί και να ορίσουμε τι θα γίνεται κάθε φορά που συμβαίνει αυτό το γεγονός:

  • b.when_pressed Παρακολουθεί συνεχώς την κατάσταση του κουμπιού b. Από μόνη της αυτή η εντολή δεν κάνει κάτι. Μπορούμε όμως να τη συνδυάσουμε με μια συνάρτηση που θα κάνει αυτά που επιθυμούμε.Π.χ. έστω η συνάρτηση:

def lights_on():

print(«Το κουμπί πατήθηκε, ανάβω τα 2 led!»)

led1.on()

led2.on()

Η παρακάτω εντολή θα καλεί τη συνάρτηση lights_on όποτε πατιέται το κουμπί b.

b.when_pressed=lights_on

  • b.when_released
    Αντιστοίχως, όποτε το κουμπί b αφεθεί, μπορούμε να καλούμε μια συνάρτηση π.χ. lights_off , με παρόμοιο τρόπο:

deflights_off():

print(«Το κουμπί αφέθηκε, τα led σβήνουν! «)

led1.off()

led2.off()

Η παρακάτω εντολή θα καλεί και θα εκτελεί τη συνάρτηση lights_offόποτε πατιέται το κουμπί b.

b.when_released=lights_off

Παρατήρηση:

Οι εντολές ανίχνευσης συμβάντων when_pressed και when_released αρκεί να εκτελεστούν μια φορά και παρακολουθούν συνεχώς το αντικείμενο στο οποίο αφορούν. Αυτό σημαίνει ότι δεν χρειάζεται να τις βάλουμε εντός κάποιας επανάληψης. Έτσι, μπορούμε να αποτρέψουμε τον τερματισμό της εκτέλεσης του προγράμματος τοποθετώντας την εντολή pause() από τη βιβιοθήκη signal στο τέλος του.

Π.χ.:

from signal import pause # Εισάγουμε την pause….

… # Εντολές (και δηλώσεις συναρτήσεων)

b.when_pressed=lights_on # Παρακολουθούμε πότε πατιέται το b

… # Κι άλλες εντολές

pause() # Η pause αποτελεί την τελευταία εντολή.

4. MotionSensor

Αισθητήρας ανίχνευσης κίνησης (PassiveIR sensor)

  1. Εισάγουμε στο πρόγραμμα:
    from gpiozero import MotionSensor
  2. Δημιουργία αντικειμένου τύπου MotionSensor:
    p= MotionSensor(18) # Δηλώνουμε έναν αισθητήρα με όνομα p συνδεδεμένο στο pin18.
  3. Διαθέσιμες εντολές: Μπορούμε να πούμε στο πρόγραμμά μας να περιμένει μέχρι να ανιχνευτεί/σταματήσει η κίνηση:
  • p.wait_for_motion() # Το πρόγραμμά μας θα περιμένει μέχρι o αισθητήρας p να ανιχνεύσει κίνηση.
  • p.wait_for_no_motion() # Το πρόγραμμά μας θα περιμένει μέχρι να σταματήσει η κίνηση.

Μπορούμε να ελέγξουμε την κατάσταση ενός αισθητήρα:

  • p.motion_detected # Λογική τιμή που περιγράφει την τρέχουσα κατάσταση του αισθητήρα.
    Μπορούμε να παρακολουθούμε συνεχώς εάν ανιχνεύεται κίνηση ή αν αυτή η κίνηση παύει να υφίσταται και να ορίσουμε τι θα γίνεται κάθε φορά που συμβαίνουν αυτά τα γεγονότα:
  • p.when_motion # Παρακολουθεί συνεχώς την κατάσταση του αισθητήρα p.

Όπως και στην περίπτωση του button, συνδυάζουμε την εντολή αυτή με μια συνάρτηση, η οποία μπορεί (μεταξύ άλλων) να καλεί και άλλες συναρτήσεις. Π.χ. :

def alarm():

print(«Ανίχνευσηκίνησης!»)

take_picture()

play_alarm_sound()

Η παρακάτω εντολή θα καλεί και θα εκτελεί τη συνάρτηση alarm όποτε ανιχνεύεται κίνηση

  • p.when_motion=alarm

p.when_no_motion# Αντιστοίχως, όποτε σταματάει η κίνηση, καλούμε μια άλλη συνάρτηση. Π.χ.:

def standby():

print(«Σε αναμονή…»)

led1.on()

Η παρακάτω εντολή θα καλεί και θα εκτελεί τη συνάρτηση standby όποτε σταματάει η κίνηση που ενεργοποίησε τον αισθητήρα.

  • p.when_no_motion=standby

Σύνδεση ενός PIR sensor στο Pi:

Οι αισθητήρες κίνησης διαθέτουν συνήθως 3 ποδαράκια τα οποία συνδέονται στο Pi

ως εξής:

  • VCC(ή +5V): σε ένα από τα (2) pins του Pi που παρέχουν σταθερά 5 Volt.
  • GND: σε οποιοδήποτε pin του Pi με την ένδειξη GND.
  • OUT: σε οποιοδήποτε GPIO pin του Pi.

Ορισμένοι αισθητήρες διαθέτουν 2 μικρούς ρυθμιστές (ποτενσιόμετρα):

  • Sx (Sensitivity): καθορίζει την ευαισθησία του αισθητήρα
  • Tx (Time): καθορίζει το χρόνο που παραμένει ενεργή η έξοδος του αισθητήρα από τη στιγμή που ανιχνεύεται κίνηση (συνήθως από 2.5 sec μέχρι μερικά λεπτά).