Upload
others
View
3
Download
0
Embed Size (px)
Citation preview
Το Raspberry Piκαι ο προγραμματισμός
του σε Python
Γιώργος ΧατζηνικολάκηςΥπεύθυνος ΚΕΠΛΗΝΕΤ Χίου
Φεβρουάριος 2016
Τι θα δούμε
• Τι είναι το Raspberry Pi• Πως μπορεί να φανεί χρήσιμο• Τι σχέση έχει με την Python
Τι θα κάνετε
• Θα εξασκηθείτε στην Python• Θα έρθετε σε επαφή με το physical computing• Θα υλοποιήσετε ένα μίνι project ή παιχνίδι
• Θα αποφασίσετε αν αξίζει να το δοκιμάσετε σπίτι σας ή/και στο σχολείο σας
Κάποιες γενικότερες έννοιεςπολύ σχετικές
IoT
Πηγή: http://brilliency.com/
Physical Computing
είσοδος έξοδοςυπολογιστής
Physical Computing
αισθητήρεςκινητήρες
αυτοματισμοί
φώτα
στο έδαφος ή …και στο διάστημα
στο φυσικό κόσμο
DIY
Do It Yourself
Το Raspberry Piυλικό και λογισμικό
"Raspberry Pi 2 Model B v1.1 top new (bg cut out)" by Multicherry. Licensed under CC BY-SA 4.0 via Wikimedia Commons
Model B+ Generation 2 Model B
CPU 700 MHz single-core ARM 900 MHz quad-core ARM Cortex-A7
RAM 512 MB 1 GB
GPU Broadcom VideoCore IV @ 250 MHz (1080p H.264 decoder & encoder)
USB ports 4 x USB 2.0
Network 100 Mb/sec
Storage MicroSD slot
Video output HDMI 1.3 & 1.4 (1920x1200) και 3.5mm composite Video + audio out
Power ratings 600 mA (3.0 W) 800 mA (4.0 W)
Τεχνικά χαρακτηριστικά
Raspberry Pi Zero
Βασικά χαρακτηριστικά:
• $5 computer• 65mm x 30mm• 1 GHz single-core CPU• 512 MB RAM• Mini-HDMI & USB on-the-go• 40-pin header
Δεν διαθέτει Ethernet και υποδοχή για την Raspberry camera
«Κοινότυπες» διεπαφές επικοινωνίας
• HDMI έξοδο εικόνας & ήχου• Ethernet για ενσύρματο δίκτυο• Υποδοχή microSD για αποθήκευση
• Δεν υπάρχει κουμπί On/Off
http://elinux.org/RPi_VerifiedPeripherals
«Κοινότυπες» διεπαφές επικοινωνίας
USB θύρες για σύνδεση:• Πληκτρολογίου - ποντικιού• Web camera• Bluetooth dongle (...)• Wi-Fi ή 3G/4G dongle• Σκληρών δίσκων• Arduino
http://elinux.org/RPi_VerifiedPeripherals
Λίγο πιο ιδιαίτερες διεπαφές επικοινωνίας
Ειδικές θύρες για σύνδεση:• Raspberry Pi Camera module• Touchscreen display
http://swag.raspberrypi.org/products/raspberry-pi-7-inch-touchscreen-display Camera Module (5MP - 1080p)
Χρήση ως αυτόνομος desktop υπολογιστής
Συνδέουμε οθόνη ή τηλεόραση με HDMI ή DVI (όχι VGA)
Δεν προτείνεται να αγοράσουμε ένα Pi για να αντικαταστήσουμε το pc μας
Επίσημο/προτεινόμενο λειτουργικό σύστημα
Η επιφάνεια εργασίας του Raspbian
Χρήση ως headless device (χωρίς οθόνη & πληκτρολόγιο)
Δύο εναλλακτικοί τρόποι απομακρυσμένης πρόσβασης:
Τρόπος Β: SSH (Secure Shell)
π.χ. Putty ή MobaXterm
Τρόπος Α: Remote Desktop / Control (VNC)
π.χ. TightVNC
Τρόπος Α: Remote Desktop / Control (TightVNC)
Τρόπος Β: SSH (MobaXterm)
Αυτονομία
Εφαρμογή Pi Power Estimator
• Εκτίμηση με βάση το μοντέλο, τις ενεργές συνδέσεις, τις μπαταρίες ή το Power Bank.
• Από λίγα λεπτά έως και μέρες.
Προτεινόμενος συνδυασμός για remote access
www.netsarang.com
Προσαρμόσιμη γραμμή εργαλείωνμε συχνά χρησιμοποιούμενεςή μακροσκελείς εντολές
Xshell SSH client
Xftp SFTP client+
http://tiny.cc/piapps
Δραστηριότητα
0απομακρυσμένη σύνδεση
εντολές στην κονσόλαλίγη python
Τα Pi του εργαστηρίου
chatzipi.local
eliaspi.local
papapi.local
parispi.local
blackpi.local
clearpi.local
rectapi.local
shinyblackpi.local
Τι προσδίδει στο Pi…το κάτι παραπάνωπέρα από το σχετικά χαμηλό κόστοςκαι τη φορητότητα
Πρόσθετεςπλακέτες (Add-ons)
Κουμπώνουν απευθείας πάνω στο Pi
https://www.raspberrypi.org/products/sense-hat/ https://astro-pi.org/
http://www.dexterindustries.com/Arduberry/
Πρόσθετεςπλακέτες(Add-ons)
http://piandbash.co.uk/
Adafruit Capacitive Touch HAT for Raspberry Pi
Πρόσθετεςπλακέτες (Add-ons)
http://thepihut.com/collections/raspberry-pi-hats/products/adafruit-capacitive-touch-hat-for-raspberry-pi
8 input capacitive touch sensor (~ £ 2.00)Παρόμοιος με το Makey Makey
http://www.ncl.ac.uk/computing/outreach/resources/cas-tyneside-hub-03-07-14/physical-computing-lamb.pptx
Πιθανές χρήσειςεκπαιδευτικές ή άλλες
Media Center (RaspBMC ή openELEC)
Server
• BitTorrent client/server (π.χ. Transmission)
• NAS/Backup server (π.χ. Samba, rSync)
• Ιδιωτικός cloud server (π.χ. Owncloud)
Minecraft Pi
http://www.raspberrypi.org/learning/getting-started-with-minecraft-pi/
Αξιοποίηση της κάμερας• Motion sensing camera
• Baby monitor
• Συναγερμός
• IP camera
• Time lapse camera
Αναγνώριση αντικειμένων με το OpenCVή με το SimpleCV
http://www.pyimagesearch.com/2015/10/26/how-to-install-opencv-3-on-raspbian-jessie/
Μετεωρολογικός Σταθμός
http://www.raspberrypi.org/school-weather-station-project/
Ρομποτική
https://learn.adafruit.com/simple-raspberry-pi-robot
https://www.cl.cam.ac.uk/projects/raspberrypi/tutorials/robot/
Συνοψίζονταςκαι επεκτείνονταςτα … περί ιδιαίτερων δυνατοτήτων του Pi
ανότανόσο
όποτε
αυτό εκείνοτότε κάνε
αυτό
• πατηθεί ένα κουμπί• ανιχνεύσεις κίνηση, θόρυβο, φωτιά, σκοτάδι• αναγνωρίσεις κάποιο πρόσωπο/αντικείμενο• σε πλησιάσουν αρκετά• η θερμοκρασία/υγρασία/άνεμος αυξηθεί• βρίσκεσαι κάπου (θέση, ύψος, περιοχή)• η στάθμη ξεπεράσει/κατέβει• η κλίση αυξηθεί• προβλέπεται καταιγίδα• λάβεις e-mail, SMS
διακόπτες(τηλε)χειριστήρια
αισθητήρεςμικρόφωνα
κάμερεςinternet
εκείνο
• τράβα φωτογραφία/βίντεο • παίξε ήχο/βίντεο• εκτέλεσε κάποιο πρόγραμμα/εντολή• δώσε ρεύμα σε συσκευή• δώσε εντολή σε κινητήρα• στείλε e-mail/tweet• ειδοποίησε σε κινητό (push notification)
οθόνες/ηχείασυσκευέςκινητήρες
internet
Πως γίνονται όλα αυτά τα ωραίαμε την Python
28 GPIO (general purpose input/output) pins
To breadboard a board for cutting bread on
https://learn.sparkfun.com/tutorials/how-to-use-a-breadboard
To breadboard
https://learn.sparkfun.com/tutorials/how-to-use-a-breadboard
To breadboard
Μόνιμα αναμμένο LED
R330 Ω
LED που ελέγχεται με κώδικαΧρήση της βιβλιοθήκης GPIO Zero
LED που ελέγχεται με κώδικαΧρήση της βιβλιοθήκης GPIO Zero
from gpiozero import LED
from time import sleep
led = LED(17)
led.on()
sleep(1)
led.off()
from gpiozero import LEDfrom time import sleep
led = LED(17)
led.on()sleep(1)led.off()
import RPi.GPIO as GPIO from time import sleep
GPIO.setmode(GPIO.BCM)GPIO.setwarnings(False)led = 17GPIO.setup(led,GPIO.OUT)
GPIO.output(led,GPIO.HIGH)sleep(1)GPIO.output(led,GPIO.LOW)
GPIO.cleanup()
Rpi.GPIOgpiozero
from gpiozero import LED
from time import sleep
led = LED(17)
led.on()
sleep(1)
led.off()
gpiozero scratch
1 beeper.off()2 sleep( )3 beeper = Buzzer( )4 from gpiozero import Buzzer5 beeper.on()6 from time import sleep
Παραγγελιά: ένα μπιπ διάρκειας 0.5 sec στο 4
1 from gpiozero import Buzzer2 from time import sleep 3 beeper = Buzzer(4)4 beeper.on()5 sleep(0.5)6 beeper.off()
Παραγγελιά: ένα μπιπ διάρκειας 0.5 sec στο 4
from gpiozero import LED, Buzzerfrom time import sleep……
for i in range(x):# εδώ μπαίνουν κατάλληλα στοιχισμένες οι εντολές # που έτσι θα εκτελεστούν x φορές
Ένα SOS παρακαλώ!
def onoma(parametros1, parametros2):# εντολές
Ένα SOS παρακαλώ!
play(3, 0.1) # Ssleep(.4)play(3, 0.3) # Osleep(.4)play(3, 0.1) # S
from time import sleepfrom gpiozero import LED, Buzzerbeeper = Buzzer(4)led = LED(21)
def play(n,t):for i in range(n):
beeper.on()led.on()sleep(t)beeper.off()led.off()sleep(0.2)
φύλλο δραστηριοτήτων
1έλεγχος LED ή/και Buzzer
Διακόπτης - πλήκτρο
Για μεγαλύτερη ασφάλεια
1 kΩ 10 kΩ
Ένας τρόπος ελέγχου του κουμπιού
from gpiozero import LED, Button
led = LED(17)
button = Button(2)
while True:
if button.is_pressed:
led.on()
else:
led.off()
sleep(0.2)
from gpiozero import LED, Buttonfrom time import sleep
led = LED(26)b1 = Button(12)b2 = Button(22)
def hello():print(“Button1 pressed")led.on()
b1.when_pressed = hellob2.when_pressed = led.off
while True:# …
from gpiozero import LED, Buttonfrom time import sleepfrom signal import pause
…
…
b1.when_pressed = hellob2.when_pressed = led.off
pause()
Ένας καλύτερος τρόπος ελέγχου του κουμπιού
Tο LED ανάβει μόνο για όσο το κουμπί είναι πατημένο
from gpiozero import LED, Button
from signal import pause
led = LED(17)
b = Button(2)
b.when_pressed = led.on
b.when_released = led.off
pause()
Tο LED ανάβει μόνο για όσο το κουμπί είναι πατημένο
state = Falsewhile True:if b.is_pressed and state==False:
if led.is_lit:led.off()
else:led.on()
state = b.is_pressedsleep(0.1)
state = Falsewhile True:b.wait_for_press()if b.is_pressed:if state == False:led.on()
else:led.off()
state = not statesleep(0.1)
state = Falsewhile True:b.wait_for_press()if b.is_pressed:state = not stateled.value = statesleep(0.1)
Αισθητήρας ανίχνευσης κίνησηςPassive Infra-Red Sensor
from gpiozero import MotionSensor, LEDfrom signal import pause
pir = MotionSensor(23)led = LED(16)
pir.when_motion = led.onpir.when_no_motion = led.off
pause()
Ιεραρχία κλάσεων gpiozero
Μαγνητικός διακόπτηςDoor Magnetic Switch (Reed)
φύλλο δραστηριοτήτων
2Button και άλλα
Περισσότερες πληροφορίες
και ιδέες
Raspberry Pi documentation
https://www.raspberrypi.org/documentation/
Ιδέες και tutorials για projects
http://www.raspberrypi.org/resources/
Ιδέες και tutorials για projects
http://www.modmypi.com/blog/tutorials http://www.instructables.com/id/Raspberry-Pi-Projects/
https://learn.adafruit.com/category/raspberry-pi
Κάνει για το σχολείο;
πως συγκρίνεται με ένα υπολογιστή ή ένα tablet;
Μπορεί το Raspberry Pi να αντικαταστήσει ένα tablet ή ένα PC;
Pi vs iPad vs PC
Μπορεί το Raspberry Pi να αντικαταστήσει ένα tablet ή ένα PC;
Εκπαιδευτικό εργαλείο• Look under the hood …• Tinker with the settings…• Experiment …• Be creative …
Pi vs iPad vs PC
ICT ή Computing ;
Μπορεί το Raspberry Pi να αντικαταστήσει ένα tablet ή ένα PC;
Pi vs iPad vs PC
https://www.raspberrypi.org/blog/what-does-a-good-computing-classroom-look-like/
Μπορεί το Raspberry Pi να αντικαταστήσει ένα tablet ή ένα PC;
Pi vs iPad vs PC
https://www.raspberrypi.org/blog/what-does-a-good-computing-classroom-look-like/
Παράρτημα
Όλα τα υπόλοιπα
Εγκατάσταση λειτουργικών συστημάτων
Λύση Β:Κατεβάζουμε έτοιμα imagesκαι τα γράφουμε σε SD: https://www.raspberrypi.org/downloads/
Λύση Α:NOOBS installer
Λειτουργικά συστήματα τρίτων
Δυνατότητα στησίματος εργαστηρίου τύπου LTSP
Server: Ubuntu Linux 14.04 (Οκτ. 2015)
http://pinet.org.uk/
Artwork by Andy Hunt and PiNet logo by Amy Mather
http://alkisg.mysch.gr/steki/index.php?topic=6441.0
Server: Ubuntu LTSP ≥ 12.04 (Νοε. 2015)
https://help.ubuntu.com/community/UbuntuLTSP/RaspberryPi
sch-scripts epoptes
Περίπου αυτοσχέδιο UPSγια επιπλέον σιγουριά και φορητότητα
Raspberry Pi UPS με τη χρήση ενός Power Bank και ενός LAN switchκαι της εφαρμογής upsd
To UPS ενεργοποιείται όταν διακοπεί η LAN σύνδεση με το switch
sudo nano /etc/wpa_supplicant/wpa_supplicant.conf
Εντοπισμός της IP διεύθυνσης
Τοπικάεκτέλεση της εντολής: ifconfig [eth0 ή wlan0]
Εντοπισμός της IP διεύθυνσης
Από άλλη συσκευή στο ίδιο LANΧρήση κάποιου IP scanner (π.χ. Advanced IP Scanner ή Angry IP Scanner)
Εντοπισμός της IP διεύθυνσης
Από κινητή συσκευή (Android ή iOS) στο ίδιο LANΧρήση κάποιου IP scanner (π.χ. Fing)
Εναλλακτική λύση (χωρίς IP)
Χρήση του <hostname>.local από Η/Υ με τη βοήθεια του zeroconf.
α) Εγκατάσταση στο Pi του Avahi service:sudo apt-get install avahi-daemon
β) Εγκατάσταση στον Η/Υ του Bonjour Print Services:Version 2.02: http://support.apple.com/kb/DL999Version 3.0: Εξαγωγή installer από τον iTunes installer.
Περισσότερα: https://learn.adafruit.com/bonjour-zeroconf-networking-for-windows-and-linux/
http://www.digikey.com/en/resources/conversion-calculators/conversion-calculator-resistor-color-code-4-band
LED πολλών χρωμάτων (RGBLED)
from gpiozero import RGBLEDled = RGBLED(14, 15, 18)
Ιδιότητες (όλες παίρνουν πραγματική τιμή από 0 μέχρι 1.0):● red η φωτεινότητα του κόκκινου (πραγματικός αριθμός)● green η φωτεινότητα του πράσινου (πραγματικός αριθμός)● blue η φωτεινότητα του μπλε (πραγματικός αριθμός)● value η φωτεινότητα καθενός εκ των 3 led
(λίστα 3 πραγματικών αριθμών - με δυνατότητα ορισμού των τιμών)
Breathing LED
while True:
for n in range(0,100,1):led.value = n/100sleep(0.02)
for n in range(100,0,-1):led.value = n/100sleep(0.02)
led.off()sleep(0.2)
Λήψη φωτογραφιών
from gpiozero import Buttonfrom picamera import PiCamera
button = Button(5)
with PiCamera() as camera:camera.vflip = Trueframe = 1while True:
button.wait_for_press()camera.capture('/home/pi/frame%03d.jpg' % frame)frame += 1
Pushbullet
#coding: utf-8
from pushbullet import Pushbullet
pb = Pushbullet(" το_μοναδικό_σας_κλειδί ")
# παραδείγματα pushed notification
push = pb.push_note("Τίτλος", "Κυρίως κείμενο")
push = pb.push_link("ΣΕΠ Χίου", "http://www.sepchiou.gr")
with open("intruder.jpg", "rb") as pic:
file_data = pb.upload_file(pic, "picture.jpg")
push = pb.push_file(**file_data)
https://pypi.python.org/pypi/pushbullet.py/0.9.1
https://www.pushbullet.com/