RASPiTHON

Transcript

RASPiTHON
paolo macchi - serena arena
RASPiTHON
Introduzione a Raspberry+Python
ISIS Cipriano Facchinetti - Castellanza 2016-17
Introduzione a RASPiTON = Raspberry+Python
Questo testo è pubblicato sotto licenza Creative Commons - Attribuzione - Non commerciale - Condividi allo stesso modo 3.0
Unported - Per le condizioni consulta: ​http://creativecommons.org/licenses/by-nc-sa/3.0/deed.it . Le utilizzazioni consentite dalla legge sul diritto
d'autore e gli altri diritti non sono in alcun modo limitati da quanto sopra.
Il documento è scaricabile da ​http://moodle.isisfacchinetti.it/mod/data/view.php?d=21&rid=713​ per fini esclusivamente didattici e non commerciali
Segnalazioni di errori, critiche e consigli sono molto graditi e possono essere inoltrati a ​[email protected] , oppure lasciando un commento al
momento del download, per gli studenti registrati.
Sono grato alla prof. SERENA ARENA con cui ho condiviso il progetto iniziale e senza la quale non avrei mai cominciato. E’ sua la
parte relativa alla gestione delle bash. - Paolo Macchi -
ISIS “Cipriano Facchinetti” via Azimonti, 5 - 21053 Castellanza (VA) - ​http://www.isisfacchinetti.gov.it/​ Tel. 0331635718 fax 0331679586
​RASPiTHON
Convenzioni usate nel testo:
rappresenta una curiosità o un approfondimento
Paolo Macchi - Serena Arena
RASPiTHON – rel. 17.01.07
1
INDICE
Raspi : cosa, perché, per chi
Introduzione
L’hardware
Il software
Installazione
Python con Raspberry
Modalità Interattiva di programmazione
Modalità di programmazione Script con la creazione di un file con estensione .py
Modalità Python Shell
Variabili
LOOP
My first program
CLASS
General Purpose Input/Output
OUTPUT
Es.0 Prova per il pilotaggio di un output,
Es. 1 led0.py - GPIO24 (pin 18) in OUTPUT
Es. 2 led1.py (come led0.py ma con attesa tra I due stati del led)- GPIO24 (pin 18) in OUTPUT
INPUT
Es.3 Input button - GPIO18 (pin 12) in INPUT
INPUT/OUTPUT
Es.4 Input button / Output LED - GPIO18 (pin 12) in INPUT, GPIO24 (pin 18) in OUTPUT
Es.5 Input button / Output LED: riflessi pronti con Gpiozero
Raspbian shell
Es.S1 01_LED_Blink.sh
es.S2 02_PushButton_OnOff.sh
Es.S3 03_LED-PushButton.sh
IOT-lab
Gestione remota del Raspberry
Passo 0 - Configurazione di Raspberry (da effettuare una volta per tutte)
Passo 1 - Accesso a Raspberry da “Desktop Remoto”
Server Web
LAMP – Linux Apache MySQL PHP
Guida all’installazione
STEP 1 – PREPARAZIONE
STEP 2 – APACHE, il server web
STEP 3 – PHP, il linguaggio di scripting
Paolo Macchi - Serena Arena
RASPiTHON – rel. 17.01.07
2
STEP 4 – MySQL, il database
STEP OPZIONALE – PHPMYADMIN, il gestore di database
Paolo Macchi - Serena Arena
RASPiTHON – rel. 17.01.07
3
Raspi : cosa, perché, per chi
Introduzione
Raspberry Pi (​Raspi per gli amici, Pi sta per linguaggio ​Python​, ). è un “s​ingle-board computer” open-source, ideato e realizzato
nel Regno Unito dall'omonima fondazione, che comprende varie versioni che integrano elementi aggiuntivi (quali ad esempio
CPU migliorate oppure connettività wireless, come in Rasperry Pi 3 Model B ) ma che non stravolgono la struttura del progetto e
non intaccano i principi di funzionamento e il costo.
Grande poco più di una carta di credito, la scheda Raspberry può essere collegata al televisore di casa o al monitor e svolgere
molti compiti per i quali oggi è utilizzato un normale computer.
A cosa può servire?
● Educazione, Raspberry Pi è tagliato su misura per l'insegnamento della programmazione nelle scuole di ogni ordine e
grado (​http://www.computingatschool.org.uk/​ )
● Domotica. Date le sue dimensioni piuttosto ridotte e le sue specifiche tecniche, Raspberry Pi viene utilizzato spesso e
volentieri come controller in un sistema di ​home automatio​n come ad esempio il controllo della luminosità, sistemi di
sicurezza casalinghi
● Server domestico . Utilizzando le adeguate schede di espansione, un Raspberry Pi può essere utilizzato anche come
piccolo server personale.
● Media center
● Stazione meteo (​https://blog.retep.org/2012/07/30/installing-a-usb-weather-station-on-a-raspberry-pi-part-1/​ )
​https://www.raspberrypi.org/products/raspberry-pi-3-model-b/
Paolo Macchi - Serena Arena
RASPiTHON – rel. 17.01.07
4
L’hardware
Raspberry è un computer implementato su un'unica scheda elettronica che comprende il ​processore​, l'acceleratore grafico (GPU,​Graphics
Processing Unit​) e la ​RAM​. (​https://www.raspberrypi.org/documentation/hardware/raspberrypi/README.md​)
Alcu​ne caratteristiche di ​Raspberry Pi 3, ​ ​third generation Raspberry Pi (Raspberry Pi 3 ha la stessa form factor di Pi 2) sono le seguenti:
● 1.2GHz 64-bit quad-core ARMv8 CPU (*)
● 802.11n Wireless LAN
● Bluetooth 4.1, Bluetooth Low Energy (BLE)
● 1GB RAM
● 4 USB ports
● 40 GPIO pins
● Full HDMI port
● Ethernet port
● Combined 3.5mm audio jack and composite video
● Camera interface (CSI)
● Display interface (DSI)
● Micro SD card slot (now push-pull rather than push-push)
● VideoCore IV 3D graphics coreGPIO
NOTA Per comandare il Raspberry PI da remoto vi è
RaspController. L'app per i dispositivi Android è disponibile sul Google PlayStore:
https://play.google.com/store/apps/details?id=it.Ettore.raspcontroller
(*) - “L'architettura ARM (Acorn RISC Machine) indica una famiglia di microprocessori RISC a 32-bit sviluppata da ARM Holdings e utilizzata in una
moltitudine di sistemi embedded. Grazie alle sue caratteristiche di basso consumo elettrico (rapportato alle prestazioni) l'architettura ARM domina il settore
dei dispositivi mobili dove il risparmio energetico delle batterie è fondamentale” (Wikipedia). ARMv8-A introduce un’architettura a 64-bit.
La famiglia ARM
Paolo Macchi - Serena Arena
RASPiTHON – rel. 17.01.07
5
Il software
Raspberry Pi necessita per funzionare di un sistema operativo. ​Raspberry Pi è stato progettato e realizzato per far girare distribuzioni Linux ma,
attualmente, è possibile disporre di molte risorse tra cui Windows 10 (​https://developer.microsoft.com/it-it/windows/iot​).
Raspberry Foundation raccomanda agli utenti l'utilizzo della distribuzione Raspbian (“Raspbian is a free operating system based on Debian,
optimised for the Raspberry Pi hardware” ​ ​https://www.raspberrypi.org/downloads​ ).
NOTA DEBIAN (https://www.debian.org) “ Un sistema operativo è l'insieme dei programmi di base e altri vari strumenti che permettono al computer di
funzionare. Al centro di un sistema operativo c'è il kernel. Il kernel è il programma fondamentale sul computer ed esegue tutte le operazioni di base e
permette di eseguire programmi. I sistemi Debian attuali utilizzano il kernel Linux o quello FreeBSD. Linux è un software scritto inizialmente da Linus Torvalds
e che è supportato da migliaia di programmatori nel mondo. FreeBSD è un sistema operativo che comprende un kernel e vari applicativi.”
Numerose sono le applicazioni e linguaggi software che si possono usare, tra cui (​https://www.raspberrypi.org/documentation/​)
●
●
●
●
●
●
●
●
●
●
●
●
Scratch is a visual programming tool allowing the user to create animations and games with a drag-and-drop interface
Python is a general purpose programming language that is easy to pick up and also very powerful
Sonic Pi​ Write code to make music with Sonic Pi
Terminal​ The Linux terminal is a powerful tool for getting around the filesystem and issuing commands
GPIO: ​The General Purpose Input/Output pins allow you to control and interact with the real world from Python, Scratch or other
programming environments
Minecraft​ interact with the real world through GPIO
Python Games
WordPress​ Set up a web server on your Raspberry Pi and install Wordpress, a content management and blogging system
Mathematica​ is an industry leading computational platform
Camera Module is capable of taking full HD 1080p photo and video and can be controlled programmatically. Using a standard USB
webcam instead of the Raspberry Pi camera module
Kodi​ media centre software
Sonic per la musica
Installazione
NOTA:
Per
l’installazione
https://www.raspberrypi.org/downloads/
https://www.raspberrypi.org/learning/getting-started-with-raspberry-pi-lesson/
Paolo Macchi - Serena Arena
http://www.engeene.it/la-porta-gpio-della-raspberry-pi-1/
RASPiTHON – rel. 17.01.07
6
https://www.raspberrypi.org/help/
Le procedure di seguito descritte sono relative alla versione ufficiale di Raspbian disponibile dal maggio 2016, ma non dovrebbero esserci
differenze significative con altre versioni
Quando si inserisce l’alimentazione il ​sistema parte
●
●
allo start parte NOOBS (​NOOBS ​è​ un installer che permette di installare e configurare facilmente Raspbian.)
Dal menu cliccare su: Raspbian -> Install-> Yes …. Si attende il tempo di caricamento in cui è presentata una panoramica dei servizi
offerti da Raspbian (oppure Boot (rasi-config) -> Enable boot -> OK ; Desktop log -> invio; FINISH (tab) ; YES) e ...
Login: pi
Pass: raspberry
●
Per GUI: ​startx
….. Sperimentare, esplorare e divertirsi
Python con Raspberry
Python (​http://www.python.it/ ) è un linguaggio di programmazione (ideato da Guido van Rossum negli anni ‘90 al National Research Institute
for Mathematics and Computer Science in Olanda ed è disponibile sotto GNU) potente e facile da usare e con Raspberry Pi consente di
collegare il progetto al mondo reale .
●
●
●
●
Python è interpretato
Python è Interattivo: Python prompt interagisce con l’interprete
Python è Object-Oriented (classi, istanze, metodi, oggetti,..)
Python è un linguaggio semplice per iniziare ma è usato per un grandissimo numero di applicazioni in Web
Paolo Macchi - Serena Arena
RASPiTHON – rel. 17.01.07
7
In questo contesto (​https://www.raspberrypi.org/documentation/usage/python/ )offriremo solo alcuni cenni di programmazione e ci
serviremo massiiciamente delle note e dell’emulatore presente in http://www.tutorialspoint.com/python/ . Si consiglia anche ​il corso per
principianti http://www.python.it/doc/newbie/
Ci sono vari modi di lanciare il programma :
●
●
●
Modalità Interattiva di programmazione​ con terminale
Modalità di programmazione Script ​ con la creazione di un file con estensione .py
Modalità Python Shell
Modalità Interattiva di programmazione
In terminal, invocare l'interprete senza passare un file di script come parametro:. L’interprete Python permette l’esecuzione dei programmi,
appare uno specifico prompt, caratterizzato da 3 caratteri di maggiore (>>>). Ogni volta che viene invocato il comando python il codice scritto
viene trasformato in bytecode (file .pyc o .pyo) eseguiti da un interprete bytecode che è una macchina virtuale Python(PVM).
$ python
Python 2.4.3 (#1, Nov 11 2010, 13:34:43)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-48)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>>print ("Hello, Python!");. However in Python version 2.4.3, this produces the following result:
Hello, Python!
quit()
Modalità di programmazione Script con la creazione di un
file con estensione .py
Invocare l'interprete con un parametro di script fa iniziare l'esecuzione dello script che continua fino a quando lo script è terminato. I file
Python hanno estensione .py.
Digitare il seguente codice sorgente (ad esempio usando l’editor “​nano​”) in un file “test.py”:
print ("Hello");
eseguirlo nella riga di comando:
$ python test.py
che produce
Hello
Paolo Macchi - Serena Arena
RASPiTHON – rel. 17.01.07
8
Un altro modo per eseguire uno script Python è creare il file “test.py” e ​renderlo eseguibile:
#!/usr/bin/python
print ("Hello");
fornire le proprietà di esecuzione, nella riga di comando:
$ chmod +x test.py
# This is to make file executable
$./test.py
che produce:
Hello
Modalità Python Shell
Raspbian include un IDE - Integrated Development Environment - chiamato IDLE:
​https://www.cs.uky.edu/~keen/help/python-tutorial/Lab0.html
Paolo Macchi - Serena Arena
RASPiTHON – rel. 17.01.07
9
Per creare un file Python in IDLE fare clic su ​File > New Window ​e verrà dato una finestra vuota che, si tratta di un file vuoto , non un prompt
di Python!
Si scrive un file Python in questa finestra :
n=0
for i in range(1, 10):
n += i
print("La somma dei numeri da 1 a .. è:")
print(n)
---------------------------------------------------------------Quindi salvare il file ( ​File> Save o Ctrl + S , si salva ad esempio in /home/pi/Desktop il file hello.py) e, quindi si esegue ( Run > Run Module,
F5​) e si vedrà l l'output nella finestra di Python Shell.
Variabili
non c’è una dichiarazione esplicita:
#!/usr/bin/python
counter = 100
miles = 1000.0
name = "John"
# An integer assignment
# A floating point
# A string
print counter
print miles
print name
If … else
if expression:
statement(s)
Paolo Macchi - Serena Arena
RASPiTHON – rel. 17.01.07
10
else:
statement(s)
-------------------------------------------------#!/usr/bin/python
var1 = 100
if var1:
print "1 - Got a true expression value"
print var1
else:
print "1 - Got a false expression value"
print var1
-------------------------------------------------------
LOOP
while expression:
statement(s)
--------------------------------------------------------------#!/usr/bin/python
count = 0
while (count < 9):
print 'The count is:', count
count = count + 1
print "Good bye!"
------------------------------------------------------------------------------for iterating_var in sequence:
statements(s)
-------------------------------------------#!/usr/bin/python
for letter in 'Python': # First Example
print 'Current Letter :', letter
fruits = ['banana', 'apple', 'mango']
for fruit in fruits:
# Second Example
print 'Current fruit :', fruit
print "Good bye!"
----------------------------------------------------------
Funzioni
-------------------------------------------------------#!/usr/bin/python
# Function definition is here
def printme( str ):
"This prints a passed string into this function"
print str;
return;
# Now you can call printme function
printme("I'm first call to user defined function!");
Paolo Macchi - Serena Arena
RASPiTHON – rel. 17.01.07
11
printme("Again second call to the same function");
-------------------------------------------------
NOTA
https://docs.python.org/2/tutorial/index.html
http://www.thirdeyevis.com/pi-page-2.php
https://docs.python.org/2/tutorial/introduction.html
https://www.python.org/downloads/windows/ download per windows
tutti i programmi
http://www.tutorialspoint.com/codingground.htm
My first program
#my first Python program
username = input("Hello, I'm Raspberry Pi! What is your name? ")
print ('Nice to meet you, ' + username + ' have a nice day!')
----------------------------------------------------------------------------------------------------------------
#!/usr/bin/python3
# Fibonacci numbers module
def fib(n): # return Fibonacci series up to n
result = []
a, b = 0, 1
while b < n:
result.append(b)
a, b = b, a+b
return result
if __name__ == "__main__":
f=fib(100)
print(f)
------------------------------------------------------------oppure
f=fib(100)
print(f)
-----------------------------------
CLASS
#!/usr/bin/python3
Paolo Macchi - Serena Arena
RASPiTHON – rel. 17.01.07
12
class Employee:
'Common base class for all employees'
empCount = 0
def __init__(self, name, salary,age):
self.name = name
self.salary = salary
self.age= age
Employee.empCount += 1
def displayCount(self):
print ("Total Employee %d" % Employee.empCount)
def displayEmployee(self):
print ("Name : ", self.name, ", Salary: ", self.salary , "Age: ", self.age)
#This would create first object of Employee class"
emp1 = Employee("Zara", 2000)
#This would create second object of Employee class"
emp2 = Employee("Manni", 5000)
emp1.displayEmployee()
emp2.displayEmployee()
print ("Total Employee %d" % Employee.empCount)
--------------------------------------------------------------
General Purpose Input/Output
Un’ interfaccia GPIO è un insieme di 26 pin che comunicano direttamente con il processore e che sono facilmente programmabili per collegare
periferiche. Quest’ interfaccia digitale è una delle caratteristiche rilevanti di Raspberry: può inviare e ricevere segnali digitali (0V e 3.3 V).
Il modo piú semplice per programmare i pin GPIO è utilizzare Python con la libreria Python RPi.GPIO:
import RPi.GPIO as GPIO ## Import GPIO library
GPIO.setmode(GPIO.BCM) ## Use pin numbering
E per il settaggio, ad esempio, operare così:
GPIO.setup(24,GPIO.OUT) ## Setup GPIO24 to OUT
Paolo Macchi - Serena Arena
RASPiTHON – rel. 17.01.07
13
GPIO.output(24,1) ## Setup GPIO24 ON/HIGH/True
Attenzione. Se si accede a GPIO, potrebbero essere necessarie le autorizzazioni di superutente:
pi@raspberrypi ~ $ sudo idle3
Oppure direttamente:
pi@raspberrypi ~ $ sudo python nomefile.py
Ricordare di essere nella cartella in cui è stato salvato il file, o specificare la cartella
UART= Universal Asynchronous Receiver Transmitter, a popular serial communication interface which provides full duplex communication
between two devices. The term universal means that transmission speed and data format are configurable. As it is asynchronous it doesn’t
need to send clock signal along with the data signals. UART uses two data lines for sending (Tx) and receiving (Rx) data. The ground of both
devices should be made common.
Paolo Macchi - Serena Arena
RASPiTHON – rel. 17.01.07
14
SPI = Serial Peripheral Interface is a synchronous serial communication interface specification used for short distance communication. It’s a
“synchronous” data bus, which means that it uses separate lines for data and a “clock” that keeps both sides in perfect sync
(https://learn.sparkfun.com/tutorials/serial-peripheral-interface-spi ).
I2C= Inter-integrated Circuit (I2C) Protocol is a protocol intended to allow multiple “slave” digital integrated circuits (“chips”) to communicate
with one or more “master” chips. Like the Serial Peripheral Interface (SPI), it is only intended for short distance communications within a single
device. Like Asynchronous Serial Interfaces (such as RS-232 or UARTs), it only requires two signal wires to exchange information. I2C is a useful
bus that allows data exchange between microcontrollers and peripherals with a minimum of wiring (https://learn.sparkfun.com/tutorials/i2c ).
Questa interfaccia permette di collegare numerosi circuiti integrati adatti ad interagire col mondo reale: misurare temperature o tensioni,
gestire led, LCD e pulsanti, generare tensioni. Usare la libreria wiringPi ( http://wiringpi.com/ ) per interfacciarsi a questi bus.
Fig. 5. ​Descrizione hardware della porta GPIO. In programmazione vanno importate la libreria RPi.GPIO e attivato il pin numbering
OUTPUT
NOTA Doc per I/O con Raspberry
​http://www.thirdeyevis.com/pi-page-2.php​ ​https://www.raspberrypi.org/documentation/usage/gpio/
Anche : ​http://www.thirdeyevis.com/pi-page-2.php​ led
http://razzpisampler.oreilly.com/ch07.html​ button ---> capitoli vari su button motor etc
Es.0 Prova per il pilotaggio di un output,
iniziamo a provare se il nostro LED si accende usando lo schema sottostante che collega il pin di alimentazione a 3,3 V a quello di massa.
Calcolo resistenza per diodo LED
Per alimentare un LED é necessario limitare la corrente di alimentazione. Il limitatore di corrente più semplice é composto da
una resistenza.
Con la legge degli Ohm:
R = (Vcc - Vd) / I
ove: R e' la resistenza , Vcc e' la tensione in continua dell'alimentatore , Vd e' la caduta di tensione del Led e I è la corrente che si
vuole far transitare nel Led .
Paolo Macchi - Serena Arena
RASPiTHON – rel. 17.01.07
15
Tutte le porte GPIO di Raspberry hanno una tensione di 3.3V. La corrente massima raccomandata per Raspberry, NON dovrebbe
mai superare i 16 mA.
Es: Diodo rosso alimentato con alimentazione in CC di 3.3V e corrente di 10mA:
R = (3,3V -1,8V) / 10x10^-3 A = 150 Ohm .
(Per il calcolo automatico: http://www.muzique.com/schem/led.htm )
NOTA
Per la realizzazione dei prototipi ci serviremo di una breadboard (basetta) . Nella figura sottostante viene mostrata la basetta con un esempio
di circuiteria ei collegamenti elettrici di una basetta:
Lle linee di alimentazione, che sono generalmente poste ai lati e collegate lungo tutto l'asse, e le linee dedicate ai componenti, collegate in
posizione perpendicolare alle linee d'alimentazione e più corte
Es. 1 led0.py - ​GPIO24 (pin 18) in OUTPUT
NOTA
(NB agiamo su GPIO24 / pin 18 usiamo GPIO.BCM (import RPi.GPIO as GPIO ## Import GPIO library) ci riferiamo, cioè, ai numeri "Broadcom
SOC channel" , ex GPIO3,GPIO3,..GPIOx che corrispondono , rispettivamente, ai pin fisici 3,5, ..x.)
Paolo Macchi - Serena Arena
RASPiTHON – rel. 17.01.07
16
http://raspi.tv/2013/rpi-gpio-basics-5-setting-up-and-using-outputs-with-rpi-gpio
import RPi.GPIO as GPIO ## Import GPIO library
GPIO.setmode(GPIO.BCM) ## Use pin numbering
GPIO.setup(24,GPIO.OUT) ## Setup GPIO24 to OUT
GPIO.output(24,1) ## Setup GPIO24 ON/HIGH/True
Es. 2 led1.py (come led0.py ma con attesa tra I due stati del led)GPIO24 (pin 18) in OUTPUT
-----------------------------------
import RPi.GPIO as GPIO
from time import sleep
GPIO.setmode(GPIO.BCM) ## Use numbering of GPIOx
GPIO.setup(24,GPIO.OUT) ## Setup GPIO24 – pin 18
GPIO.output(24,1)
print ("start")
try:
while True:
GPIO.output(24, 1)
sleep(1)
# set GPIO24 (pin18) to 1/GPIO.HIGH/True
# wait a second
print ("wait 1")
GPIO.output(24, 0)
sleep(1)
# set GPIO24 (pin 18) to 0/GPIO.LOW/False
# wait a second
print ("wait 0")
Paolo Macchi - Serena Arena
RASPiTHON – rel. 17.01.07
17
except KeyboardInterrupt:
# trap a CTRL+C keyboard interrupt
GPIO.cleanup()
INPUT
Es.3 Input button - GPIO18 (pin 12) in INPUT
Il pulsante è cablato in modo che quando viene premuto, si collegherà il GPIO18 (pin 12) configurato come ingresso a GND (Il pin di ingresso è
normalmente pullappato a 3.3V da pull_up_down = GPIO.PUD_UP in GPIO.setup. Questo significa che quando si si preme il pulsante il valore
che si legge in ingresso (utilizzando GPIO.input), sarà False.
NOTA ogni pin GPIO è configurabile con i resistori in pull-up o pull-down. Quando si utilizza un pin GPIO come input, è possibile
configurare queste resistenze in modo che uno o entrambi o nessuno dei due resistori è attivato. Se questo parametro viene
omesso, allora nessuna resistenza verrà attivata. Ciò lascia l'ingresso flottante, il che significa che il suo valore può oscillare tra
valore alto e basso a seconda di ciò che raccoglie come rumore elettrico.
(se il parametro opzionale per pull_up_down GPIO.setup è impostato su GPIO.PUD_UP, la resistenza di pull-up è abilitato; se è
impostato su GPIO.PUD_DOWN, la resistenza di pull-down è abilitato).
----------------------------------------
http://razzpisampler.oreilly.com/ch07.html
https://www.cl.cam.ac.uk/projects/raspberrypi/tutorials/robot/buttons_and_switches/
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
GPIO.setup(12, GPIO.IN, pull_up_down=GPIO.PUD_UP)
Paolo Macchi - Serena Arena
RASPiTHON – rel. 17.01.07
18
while True:
input_state = GPIO.input(12)
if input_state == False:
print('Button Pressed')
time.sleep(0.2)
------------------------------------------------------------------------chiamata:
pi@raspberrypi ~ $ sudo python switch.py
INPUT/OUTPUT
Es.4 Input button / Output LED - GPIO18 (pin 12) in INPUT, GPIO24
(pin 18) in OUTPUT
--------------------------------------------
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
GPIO.setup(24,GPIO.OUT) ## Setup GPIO Pin 24 to OUT (GPIO8)
GPIO.output(24,0) ## LED off
GPIO.setup(18, GPIO.IN, pull_up_down=GPIO.PUD_UP)
print('Wait for Button Press')
while True:
input_state = GPIO.input(18)
if input_state == False:
GPIO.output(24, 1)
## LED on
Paolo Macchi - Serena Arena
RASPiTHON – rel. 17.01.07
19
print('Button Pressed')
time.sleep(0.5)
GPIO.output(24, 0)
## LED off
----------------------------------------------------------------
Prova su basetta
Es.5 Input button / Output LED: riflessi pronti con Gpiozero
Gpiozero è una libreria Python (“a simple interface to everyday GPIO components used with Raspberry Pi”. ) per la gestione
semplificata degli GPIO del Raspberry che contiene codice che va dalla gestione dei led e pulsanti agli oggetti per case intelligenti.
In ​https://gpiozero.readthedocs.io/en/v1.2.0/recipes.html trovate numerosi esempi, tra cui: gestione motori, semafori, robot, e il gioco dei
riflessi pronti: ​https://www.raspberrypi.org/learning/python-quick-reaction-game/worksheet/​ :
Paolo Macchi - Serena Arena
RASPiTHON – rel. 17.01.07
20
from gpiozero import LED, Button ##Gpiozero library
from time import sleep
from random import uniform
led = LED(4)
right_button = Button(15)
left_button = Button(14)
led.on()
sleep(uniform(5, 10))
led.off()
def pressed(button):
print(button.pin.number + ' won the game')
right_button.when_pressed = pressed
left_button.when_pressed = pressed
----------------------------------------------
Paolo Macchi - Serena Arena
RASPiTHON – rel. 17.01.07
21
Es.6 UART
Legge 10 characters dalla porta seriale e ne fa l’eco
import serial
ser = serial.Serial ("/dev/ttyAMA0") #Open named port
ser.baudrate = 9600
data = ser.read(10)
ser.write(data)
#Set baud rate to 9600
#Read ten characters from serial port to data
#Send back the received data
ser.close()
Raspbian shell
Es.S1 01_LED_Blink.sh
#!/bin/bash
# sudo sh LED_Blink.sh
# Pin setting: 3=LED(out)
echo 3 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio3/direction
for i in $(seq 1 10);
Do
echo 1 > /sys/class/gpio/gpio3/value
sleep 1
echo 0 > /sys/class/gpio/gpio3/value
sleep 1
echo $i
done
echo 3 > /sys/class/gpio/unexport
Paolo Macchi - Serena Arena
RASPiTHON – rel. 17.01.07
22
es.S2 02_PushButton_OnOff.sh
(a cura di Serena Arena)
#!/bin/bash
# sudo sh PushButton_OnOff.sh
# Pin setting: 4=PushButton(in)
echo 4 > /sys/class/gpio/export
echo in > /sys/class/gpio/gpio4/direction
for i in $(seq 1 10);
Do
PB=`cat /sys/class/gpio/gpio4/value`
echo $PB
sleep 1
done
echo 4 > /sys/class/gpio/unexport
-----------------------------------------------------------------------
Es.S3 03_LED-PushButton.sh
(a cura di Serena Arena)
#!/bin/bash
# sudo sh PushButton_OnOff.sh
# Pin setting: 3=LED(out) 4=PushButton(in)
echo 3 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio3/direction
echo 4 > /sys/class/gpio/export
echo in > /sys/class/gpio/gpio4/direction
# Variable settings:
DELAY=0.1
DELTAT=50
# PB=0: pulsante premuto; PB=1: pulsante non premuto
for i in $(seq 1 $DELTAT);
Do
PB=`cat /sys/class/gpio/gpio4/value`
echo $PB
sleep $DELAY
Paolo Macchi - Serena Arena
RASPiTHON – rel. 17.01.07
23
if [ $PB -eq 0 ]
then
echo 1 > /sys/class/gpio/gpio3/value
else
echo 0 > /sys/class/gpio/gpio3/value
fi
done
echo 3 > /sys/class/gpio/unexport
echo 4 > /sys/class/gpio/unexport
---------------------------
Paolo Macchi - Serena Arena
RASPiTHON – rel. 17.01.07
24
IOT-lab
Gestione remota del Raspberry
(con la collaborazione tecnica del sig. Marco Nascimben, e logistica del sig. Nino Amadore)
In un laboratorio didattico è spesso utile, per motivi pratici, gestire remotamente Raspberry. Il sistema permette di gestire, da una postazione
remota (in cui risiede lo studente) della stessa rete locale(Laboratorio Sistemi), un controller Raspberry .
Il PC dello studente è dotato, ad esempio, di sistema operativo Windows e accede al Raspberry remoto di sua competenza. La figura
sottostante mostra lo schema logico della rete.
Sulla destra è rappresentato ​IOT-lab ( l’insieme dei Raspberry rappresentati sottoforma di sistemi intelligenti: Appliance, Door, Monitor,..) che
sono collegati allo switch2 che, a sua volta, si collega a switch4 e che, tramite il router R1, accede a Internet e al server remoto (server1).
Nell’immagine sottostante è mostrato il tavolo di impiego reale.
Paolo Macchi - Serena Arena
RASPiTHON – rel. 17.01.07
25
Per operare dalle postazioni remote del laboratorio (ad esempio da Sistemi-PC1) è necessario attuare una serie di passi per la configurazione
del sistema complessivo.
Paolo Macchi - Serena Arena
RASPiTHON – rel. 17.01.07
26
Step 0 - Configurazione di Raspberry (da effettuare una
volta per tutte)
Step 0.1 - Impostazione IP statico (facoltativo)
Può essere comodo configurare raspberry con un indirizzo IP statico (se possiede un indirizzo assegnato da DHCP della rete locale) per poterlo
raggiungere più facilmente in occasione dei successivi collegamenti. A questo proposito seguire i passi seguenti:
●
Putty (porta 22 SSH) per accesso a raspberry
fig. 1 – putty con SSH su porta 22
Raspeberry risponde al prompt:
Login pi
Password raspberry
- abilitare l’interfaccia Ethernet
sudo nano /etc/network/interfaces
(alla riga 4)
auto eth0 (per attivare l’interfaccia eth0)
iface eth0 static
Paolo Macchi - Serena Arena
RASPiTHON – rel. 17.01.07
27
address 192.168.101.x
netmask 255.255.255.128
gateway 192.168.101.126
save and exit
- cambio nome raspberry
sudo nano /etc/hosts
.. raspsisx
salva
sudo nano etc/hostname
.. raspsisx
(​sudo reboot​)
Step 0.2 - Installazione XRDP-Remote Desktop Protocol su Raspberry
●
Aggiornamento delle dipendenze (facoltativo)
Accedere con Putty a Raspberry e aggiornare il sistema (consigliato)
sudo apt-get update
Attendere la fine .entro qualche minuto.
●
installazione del desktop remoto xrdp
sudo apt-get install xrdp
….
Attendere la fine entro qualche minuto
Step 1 - Accesso a Raspberry da “Desktop Remoto” di
Windows
Per accedere da remoto (da un PC con sistema operativo Windows) utilizzare l’applicazione “Desktop Remoto” di Microsoft (fig.2)
Paolo Macchi - Serena Arena
RASPiTHON – rel. 17.01.07
28
fig 2- l’applicazione Desktop Remoto su sistema operativo Windows
Ora si presenta la pagina di Raspberry mostrata in fig.3 ed è possibile lavorare da remoto (come in locale!)
Fig 3 controllo del raspberry da remoto
Paolo Macchi - Serena Arena
RASPiTHON – rel. 17.01.07
29
Server Web
Apache è un server web che è possibile installare sul Raspberry Pi . Di per sé, Apache può gestire i file HTML su protocollo HTTP e, con moduli
aggiuntivi, può gestire pagine web dinamiche utilizzando linguaggi di scripting come PHP.
(SETTING UP AN APACHE WEB SERVER ON A RASPBERRY PI: ​https://www.raspberrypi.org/documentation/remote-access/web-server/apache.md ,
https://www.glgprograms.it/?p=tricks/raspberrypi-4​ )
In questa sezione forniamo una GUIDA BASE all’Installazione per LAMP – Linux Apache MySQL PHP
Guida all’installazione di LAMP
(a cura di ​Marco Nascimben​)
STEP 1 – PREPARAZIONE
Diventiamo amministratori
sudo -i
Aggiorniamo i repository, in modo da scaricare tutti i pacchetti necessari
apt-get update
STEP 2 – APACHE, il server web
Installiamo Apache, il server web
apt-get install apache2
…
Una volta terminato il processo di installazione, possiamo provare il nostro ​web server​ visitando l'IP della macchina su cui esso gira.
Se tutto funziona, visualizzeremo la pagina di default.
Paolo Macchi - Serena Arena
RASPiTHON – rel. 17.01.07
30
-
Gli indirizzi IP sono quelli della macchina su cui è stato installato il server Web
Per utilizzare un nostro sito, basta creare la sottocartella html :
/var/www/html
e creare il nuovo file prova.html
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Nota: I file nella cartella ​/var/www/html hanno come proprietario l’utente di ​root. È necessario avere i privilegi di amministratore per
poterli creare o modificare.
Ricordiamo che al primo accesso al sistema si può effettuare con le credenziali fornite:
Utente:
pi
Password:
raspberry
L'utente pi è anche sudoers e ​può diventare amministratore​ digitando sulla riga di comando semplicemente
$ sudo su
( Per Impostare la password di root effettuiamo l'accesso come utente pi, dopodichè digitiamo:
$ sudo su
# passwd
)
Oppure
come
in
Paolo Macchi - Serena Arena
figura
sottostante
con
il
comando
​sudo
chmod
-R
777
/var/www
RASPiTHON – rel. 17.01.07
31
----------------------------------------------------------------------------------------------------------------------------------------
Chiamiamo ora il server web:
……………………………………………………………………………………...
STEP 3 – PHP, il linguaggio di scripting
Ora installiamo PHP (con le credenziali di root!), con il seguente comando
apt-get install php5 libapache2-mod-php5
Per sicurezza, riavviamo il servizio di Apache, in modo da caricare il modulo di PHP
service apache2 restart
----------------------------------------------------------------------Attenzione​: per rendere effettiva ogni modifica ai file di configurazione di Apache e PHP, è indispensabile riavviare il webserver (o, al limite,
ricaricare la sua configurazione), attraverso uno dei seguenti comandi
# service apache2 restart # riavvia il webserver
# service apache2 reload # ricarica la configurazione
# service apache2 stop # spegne il webserver
# service apache2 start # avvia il webserver
oppure riavviando completamente il Raspberry Pi.
---------------------------------------------------------------------------------------------------------------------------Possiamo ora testare se l'installazione è avvenuta con successo.
Creiamo in /var/www/html un file PHP e verifichiamo che il browser visualizzi correttamente la sua elaborazione.
Nota: Apache come usa prima pagina principale ​index.html. Se non esiste usa ​index.php.
Paolo Macchi - Serena Arena
RASPiTHON – rel. 17.01.07
32
Se hai creato una pagina con nome ​index.php, ricorda di rimuovere o rinominare index.html
STEP 4 – MySQL, il database
E per finire, installiamo MySQL, uno dei principali database in circolazione.
apt-get install mysql-server php5-mysql
Durante l'installazione verrà richiesta una password da assegnare all'account root del database, che permette l'accesso al database.
In un ambiente di prova ​può essere lasciata vuota​, ma se un giorno dovessimo pubblicare il nostro server sul web, è importante che essa sia
complicata.
Anche dopo il termine di questa installazione, riavviamo Apache in modo da caricare i moduli necessari.
service apache2 restart
Per prova, possiamo dare il comando
mysql
E verificare che ci venga aperta la console dei comandi di MySQL.
STEP OPZIONALE – PHPMYADMIN, il gestore di database
Per semplificarsi la vita con la gestione del database, è una scelta molto diffusa quella di installare assieme a MySQL un’applicazione web,
phpMyAdmin che consente di amministrare il database tramite browser anziché tramite riga di comando.
Paolo Macchi - Serena Arena
RASPiTHON – rel. 17.01.07
33
Installiamolo usando
apt-get install phpmyadmin
Nelle schermate successive, ci verrà chiesto:
●
●
●
●
Il server web da configurare, nel nostro caso “​apache2”
Se avviare la configurazione automatica o manuale. In caso mysql sia appena stato installato, è meglio usare quella automatica,
altrimenti se esiste già un database, è necessaria la configurazione manuale.
La password di MySQL, in modo da potervi accedere
La password per accedere alla configurazione di phpMyAdmin
Nota: è consigliato non lasciare questo campo vuoto. Genererebbe una password casuale.
Ora basterà andare su ​<IP>/phpmyadmin per poter eseguire il login e gestire il database da browser.
Nota: in caso in MySQL la password sia vuota, phpMyAdmin impedisce il login, per motivi di sicurezza. Per permettere ciò, bisogna modificare
il file ​/etc/phpmyadmin/config.inc.php e togliere il commento dalla riga
$cfg['Servers'][$i]['AllowNoPassword'] = TRUE;
Paolo Macchi - Serena Arena
RASPiTHON – rel. 17.01.07
34
FTP
E’ possibile accedere a Raspberry remoto anche tramite FTP
La gestione via FTP si ottiene ad esempio con Filezilla
Paolo Macchi - Serena Arena
RASPiTHON – rel. 17.01.07
35