Γράφει ο Στέλιος
Αδειούχος Ηλεκτρολόγος 1ης ομάδας Α ειδικότητας και τελειόφοιτος ηλεκτρονικός.
Αφού έχετε σετάρει το Raspberry Pi σας σύμφωνα με τις οδηγίες του πρώτου μέρους http://users.sch.gr/kgiannaras/index.php/raspberry-pi είστε έτοιμοι για το πρώτο πραγματικό έργο σας. Θα ανάψετε ένα LED χρησιμοποιώντας τη γλώσσα προγραμματισμού Python με τις θύρες GPIO από το Raspberry Pi σας.
Τι θα μάθετε:
- Θα κατασκευάσετε ένα βασικό ηλεκτρικό κύκλωμα και να το συνδέσετε στις θύρες GPIO του raspberrypi σας.
- θα γράψετε ένα απλό πρόγραμμα σε Python για να ελέγξετε το κύκλωμα.
Τι θα χρειαστείτε:
- ένα Raspberry Pi ρυθμισμένο με τη βιβλιοθήκη GPIO
- ένα LED, οποιοδήποτε χρώμα,
- μια 220 ohm αντίσταση μικρού διαμετρήματος (1/4 watt) συμπαγές σύρμα.
- ένα Breadboard και
- καλώδια με κλιπ για τις συνδέσεις.
Ας ξεκινήσουμε:
Πριν αρχίσουμε με το γράψιμο του κώδικα, πρώτα ας εξοικειωθούμε με την αρίθμηση των ακίδων του Raspberry Pi μας δημιουργώντας ένα απλό κύκλωμα. Θα ξεκινήσουμε ανάβοντας το LED μας χρησιμοποιώντας μια ακίδα την ακίδα 5.5Volt και την ακίδα γείωσης από το Raspberry Pi μας. Θα χρησιμοποιήσουμε τον ακόλουθο πίνακα για να εξοικειωθούμε, προσέξτε ότι είναι χρωματισμένα και κάθε χρώμα αντιπροσωπεύει κατηγορίες επικοινωνιών πχ οι 2 κίτρινες ακίδες για ασύγχρονες σειριακές επικοινωνίες, οι 5 ακίδες με το μωβ χρώμα για σύγχρονες σειριακές επικοινωνίες, οι 2 κόκκινες ακίδες παρέχουν σταθεροποιημένη τάση στα 5 βολτ και μια ακίδα πορτοκαλί παρέχει 3.3 βολτ για κάποια περιφερειακά που όταν συνδεθούν απαιτούν για την λειτουργία τους τη συγκεκριμένη αυτή τάση.
Πριν ξεκινήσετε αποσυνδέστε Raspberry Pi σας. Μην διακινδυνεύσετε κάνοντας τις συνδέσεις ενώ αυτό τροφοδοτείται. Χρησιμοποιήστε τα υλικά σας, δημιουργώντας το κύκλωμα στο breadboard σας. Στο Pin 2 (+5.5βολτ) θα πρέπει να πάει στο μακρύτερο ποδαράκι του LED σας. Αυτή η ακίδα παρέχει μια σταθερή τροφοδοσία των 5,5Volt. Σε αντίθεση με τις ακίδες GPIO του Raspberry Pi, αυτή η ακίδα δεν είναι προγραμματιζόμενη, και δεν μπορεί να ελεγχθεί από το λογισμικό.
Συνδέστε το κοντό σκέλος του LED στην αντίσταση. Τέλος, συνδέστε το άλλο άκρο της αντίστασης στο Pin 6 (GND γείωση) του Raspberry Pi σας.
Ελέγξτε διπλά τις συνδέσεις σας.
Όταν τελειώσετε, το κύκλωμά σας θα πρέπει να μοιάζει έτσι:
Ενεργοποιήστε το Raspberry Pi σας - η λυχνία LED θα πρέπει να ανάψει αμέσως.
Ελέγξτε το LED σας με την γλώσσα προγραματισμού python
Τώρα που έχουμε δοκιμάσει τo βασικό κύκλωμά μας, ήρθε η ώρα για να μετακινήσετε το θετικό πόλο από την μόνιμη τροφοδοσία pin (ακίδα 2 +5.5Volt) σε μία από τις προγραμματιζόμενες ακίδες GPIO. απενεργοποιήστε ξανά το Raspberry Pi σας πριν κάνετε οποιαδήποτε αλλαγή στην καλωδίωση σας. Μετακινήστε το θετικό καλώδιο από την ακίδα 2 στην ακίδα 40.
Οταν τελειώσετε το κύκλωμά σας θα πρέπει να μοιάζει έτσι
Σύνταξη του κώδικα
Είναι σημαντικό να σημειωθεί ότι κατά τη σύνταξη του κώδικα με την γλώσσα προγραματισμού Python για την χρησιμοποίηση των ακίδων GPIO, θα πρέπει να εκτελέσετε ως διαχειριστής (super user) διαφορετικά τα σενάρια σας δεν θα εκτελεστούν σωστά. Ενεργοποιήστε το Raspberry Pi σας και μπείτε στο γραφικό περιβάλλον του λειτουργικού συστήματος (επιφάνεια εργασίας)
πληκτρολογώντας: startx
Ανοίξτε το τερματικό (lxterminal) και να ξεκινήστε ως διαχειριστής πληκτρολογώντας: sudoidle
Περιμένετε μέχρι να ανοίξει,το περιβάλλον στη συνέχεια, κάντε κλικ στην επιλογή File > New για να ανοίξει ένα νέο παράθυρο ή πατήστε τα ακόλουθα πλήκτρα (Ctrl + N).
Πληκτρολογήστε τον ακόλουθο κώδικα στο παράθυρο:
Με τα πράσινα γράμματα βλέπουμε τις εντολές της Python ενώ με μπλε που ακολουθούν σε κάθε γραμμή αφορούν επεξηγητικά σχόλια για τον αναγνώστη.
import RPi.GPIO as GPIO ## χρήση GPIO βιβλιοθήκης
GPIO.setmode(GPIO.BOARD) ## χρήση του board με pin αρίθμηση
GPIO.setup(40, GPIO.OUT) ## Ορίζουμε την ακίδα 40 ως έξοδο
GPIO.output(40,True) ## Ενεργοποίηση της ακίδας 40
Κάντε κλικ στο File > Save όταν τελειώσετε ή πατήστε τα ακόλουθα πλήκτρα (Ctrl + S).
Για να εκτελέσετε το πρόγραμμά σας, κάντε κλικ στην επιλογή Run> Run ή πατήστε τα ακόλουθα πλήκτρα (Ctrl + F5). Θα πρέπει να δείτε το LED να ανάβει. Μόλις είπατε στο Raspberry Pi σας να δώσει τροφοδοσία (+ 5,5Volt) στο κύκλωμα χρησιμοποιώντας GPIO ακίδα 40. Αν το LED σας δεν ανάβει, ελέγξτε την καλωδίωση σας, και βεβαιωθείτε ότι έχετε εγκαταστήσει τη βιβλιοθήκη GPIO Python σύμφωνα με τις οδηγίες μου. Εδώ είναι ένα ελαφρώς πιο προχωρημένο σενάριο που αναβοσβήνει το LED on και off. Η μόνη διαφορά είναι ότι χρησιμοποιούμε την λειτουργία sleep για να ορίσουμε το χρονικό διάστημα που το φως θα είναι ενεργοποιημένο ή απενεργοποιημένο.
Πληκτρολογήστε τον ακόλουθο κώδικα στο παράθυρο:
Με τα πράσινα γράμματα βλέπουμε τις εντολές της Python ενώ με μπλε που ακολουθούν σε κάθε γραμμή αφορούν επεξηγητικά σχόλια για τον αναγνώστη.
import RPi.GPIO as GPIO ## Import GPIO library
import time ## Import 'time' library. Allows us to use 'sleep'
GPIO.setmode(GPIO.BOARD) ## Use board pin numbering
GPIO.setup(40, GPIO.OUT) ## Setup GPIO Pin 40 to OUT
##Define a function named Blink()
def Blink(numTimes,speed):
for i in range(0,numTimes):## Run loop numTimes
print "Iteration " + str(i+1)## Print current loop
GPIO.output(40,True)## Switch on pin 40
time.sleep(speed)## Wait
GPIO.output(40,False)## Switch off pin 40
time.sleep(speed)## Wait
print "Done" ## When loop is complete, print "Done"
GPIO.cleanup()
## Ask user for total number of blinks and length of each blink
iterations = raw_input("Enter total number of times to blink: ")
speed = raw_input("Enter length of each blink(seconds): ")
## Start Blink() function. Convert user input from strings to numeric data types and pass to Blink() as parameters
Blink(int(iterations),float(speed))
Στήν περίπτωση που δεν μπορούμε να εκτελέσουμε τα python αρχεία που έχουν πρόσβαση στα gpio του rpi
RuntimeError: No access to /dev/mem. Try running as root!
ακολουθούμε τα παρακάτω :
sudo apt-get update
sudo apt-get upgrade
Για να είμαστε βέβαιοι πως χρησιμοποιούμε τα πρόσφατα GPIO ΤΟΥ RPI
επίσης θα πρέπει να σιγουρευτέιτε ότι είστε μέλος του gpio
group:
sudo adduser pi gpio
Ελέγξτε ότι το /dev/gpiomem έχει τα σωστά δικαιώματα.
$ ls -l /dev/gpiomem
crw-rw---- 1 root gpio 244, 0 Dec 28 22:51 /dev/gpiomem
Εάν τα δικαιώματα δεν είναι όπως παραπάνω τότε πληκτρολογήστε :
sudo chown root.gpio /dev/gpiomem
sudo chmod g+rw /dev/gpiomem