際際滷

際際滷Share a Scribd company logo
RASPBERRY PI
PROGRAMMAZIONE
19 maggio 2015 - TechBar presso Cowo42 - Osimo
Chi sono
Gabriele Guizzardi
http://www.brainandbytes.com
guizzardi@brainandbytes.com
NOTA
Questo incontro e queste slide possono essere considerate
il naturale continuo del Workshop fatto presso il Warehouse
Coworking di Pesaro.
Consiglio quindi di visualizzare prima tali slide enchesse
presenti sul mio account 際際滷Share.
http://www.slideshare.net/guizzardigabriele
Quali SO sono disponibili
- Raspbian (porting di Debian Wheezy 7)
- Ubuntu Mate (RPi 2)
- Windows 10 IoT (RPi 2)
- Arch
- Debian
- Pidora (Fedora)
- RISC OS (non 竪 Linux)
- OpenElec e altri (media center)
- ...e altri...
GPIO della RPi B+ e della 2
I2C
UART
I protocolli del GPIO
Il RPi ha tre protocolli seriali: UART, SPI e I2C
UART (Universal Asynchronous Receiver-Trasmitter) trasmetti flussi di dati
in modo seriale. Asincrono significa che usa i dati stessi per sincronizzare la
trasmissione.
SPI (Serial Peripheral Interface) 竪 una trasmissione seriale sincrona che
opera in modalit Full Duplex cio竪 permette la comunicazione bidirezionale
simultaneamente.
I2C (I quadro C, Inter-Integrated Circuit) bus di tipo sincrono, si basa su due
linee, una per i dati (sda) e una per il clock di sincronizzazione (scl).
Pulse Width Modular (PWM)
La modulazione di larghezza di impulso, 竪 un tipo
dimodulazione digitale che permette di ottenere una
tensione media variabile dipendente dal rapporto tra la
durata dell'impulso positivo e di quello negativo (duty-
cycle), allo stesso modo 竪 utilizzato per protocolli di
comunicazione in cui l'informazione 竪 codificata sotto forma
di durata nel tempo di ciascun impulso. Grazie ai moderni
microcontrollori 竪 possibile attivare o inattivare un
interruttore ad alta frequenza e allo stesso modo rilevare lo
stato e il periodo di un impulso. (wikipedia)
Pulse Width Modular
Pulse Width Modular GPIO
p = GPIO.PWM(channel, frequency) #istanzia PWM
p.start(dc) #avvia PWM dove dc 竪 il duty cycle (0.0 <= dc <= 100.0)
p.ChangeFrequency(freq) #cambiare frequenza dove freq 竪 la nuova frequenza in Hz
p.ChangeDutyCycle(dc) #cambiare il duty cycle dove 0.0 <= dc <= 100.0
p.stop() #ferma PWM
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BOARD)
GPIO.setup(12, GPIO.OUT)
p = GPIO.PWM(12, 0.5)
p.start(1)
input('Premi un tasto per fermare')
p.stop()
GPIO.cleanup()
Come funziona I2C
Usando 7 bit per gli indirizzi si possono collegare fino a 128 Slave (alcuni riservati quindi sono meno)
Come funziona i2c
Abilitiamo I2C
disabilitato ma presente:
nano /etc/modules
Abilitiamo I2C
nano /etc/modprobe.d/raspi-blacklist.conf
(aggiungere il carattere sharp alla riga i2c-bcm2708 per abilitarlo)
Abilitiamo I2C
- apt-get install i2c-tools
- reboot
- modprobe i2c-dev
- ls /dev/i2c* (vedremo le porte)
- chmod o+rw /dev/i2c*
(ora possiamo usare le porte, dovremo rilanciare modprobe
e chmod ad ogni avvio. Se vogliamo automatizzare il
processo inseriamo i due comandi in /etc/rc.local)
Controlliamo I2C
- i2cdetect -y 0 oppure - i2cdetect -y 1
Installare una dash board
apt-get install curl php5-curl php-json
(andare nella cartella /var/www)
git clone https://github.com/afaqurk/linux-dash.git
(oppure scaricare lo script)
sul browser digitare: 192.168.n.n/linux-dash
Utility utili
apt-get install mc (il vecchio Norton Commander)
apt-get install jed (editor)
apt-get install tree
apt-get install epiphani-browser (browser)
apt-get install fbi (visualizza immagini da shell)
apt-get install iptraf (analizza il traffico di rete)
apt-get install nmon (monitorare Linux da riga di comando)
Pulsante + LED
Versione della GPIO
Python 竪 il linguaggio principale e ufficiale della Raspberry Pi
pertanto troviamo gi presente una libreria per usare la GPIO:
RPi.GPIO
Per sapere quale versione 竪 installata eseguire:
- find /usr | grep -i gpio
Python
import RPi.GPIO as GPIO # carica la libreria per gestire la PGIO
from time import sleep # importa sleep da time per gestire la pausa
GPIO.setmode(GPIO.BCM) # settiamo BCM come numerico
GPIO.setwarnings(0) # sopprimo i messaggi di errore
GPIO.setup(17, GPIO.IN) # settiamo GPIO17 come input (pulsante)
GPIO.setup(18, GPIO.OUT) # settiamo GPIO18 come output (LED)
print "Lampeggio LED con GPIO 18"
try:
while True: # eseguiamo fino a che non si preme CTRL+C
if GPIO.input(17): # se NON premo il pulsante, stato = 1 (alto)
print "LED SPENTO"
GPIO.output(18, 0) # settiamo la porta a 0
else:
print "LED ACCESO"
GPIO.output(18, 1) # settiamo la porta a 1
sleep(0.5) # attende mezzo secondo
finally: # * vedi testo
GPIO.cleanup() # pulisce gli stati
Accendiamolo usando il C
Possiamo usare una libreria inizialmente scritta per Arduino
e adattata per RPi: WiringPi.
La libreria pu嘆 essere usata anche per Python, Ruby e
Perl.
- git clone git://git.dragon.net/wiringPi
- cd wiringPi
- ./build
C
#include <stdio.h> //libreria standard IO
#include <wiringPi.h> //libreria WiringPi
//vedi tabella pin della GPIO, colonna wiringPi
#define LED12 1 //alla variabile LED12 assegno il pin 0
#define PULSANTE11 0 //alla variabile PULSANTE11 assegno il pin 1
int main(void)
{
printf("Lampeggio LED su GPIO 18n");
wiringPiSetup(); //inizializzo la libreria
pinMode(LED12,OUTPUT); //essendo un LED lo imposto come "output"
pinMode(PULSANTE11,INPUT); //essendo un pulsante lo imposto come "input"
C
for (;;) //ciclo infinito
{
if (digitalRead(PULSANTE11)==LOW) //premuto il pulsante
{
printf("LED ACCESOn");
digitalWrite(LED12,HIGH); //accendo il LED
delay(1000); //acceso per 1 sec.
}
printf("LED spenton");
digitalWrite(LED12,LOW); //spengo il LED
delay(1000); //rallento un po'
}
return 0; //chiudo main
}
gcc -o PulsanteLed PulsanteLed.c -lwiringPi
Setup di wiringPi
wiringPiSetup();
(usa la numerazione semplificata, 11 = 0)
wiringPiSetupGpio();
(usa la numerazione Broadcom, 11 = 17)
 ce ne sono altre meno importanti (vedi sito).
Tabella pin di wiringPi
Utilizziamo MONO e C#
apt-get install mono-complete
apt-get install monodevelop
apt-get install gtk-sharp2
Utilizzare Java
http://pi4j.com
(utilizza http://wiringpi.com)
- curl -s get.pi4j.com | sudo bash
Java
import com.pi4j.io.gpio.GpioController;
import com.pi4j.io.gpio.GpioFactory;
import com.pi4j.io.gpio.GpioPinDigitalOutput;
import com.pi4j.io.gpio.PinState;
import com.pi4j.io.gpio.RaspiPin;
import com.pi4j.io.gpio.GpioPinDigitalInput;
import com.pi4j.io.gpio.PinPullResistance;
import com.pi4j.io.gpio.event.GpioPinDigitalStateChangeEvent;
import com.pi4j.io.gpio.event.GpioPinListenerDigital;
public class PulsanteLed {
public static void main(String args[]) throws InterruptedException {
System.out.println("Lampeggio LED alla pressione di un pulsante");
//creo il controller
final GpioController gpio = GpioFactory.getInstance();
Java
//imposto myButton come input dal pin 0 (GPIO17) e imposto pin come output
sul pin 1 (GPIO18)
final GpioPinDigitalInput myButton = gpio.provisionDigitalInputPin
(RaspiPin.GPIO_00, PinPullResistance.PULL_DOWN);
final GpioPinDigitalOutput pin = gpio.provisionDigitalOutputPin
(RaspiPin.GPIO_01, "MyLED", PinState.LOW);
//mi metto in ascolto dello stato del pin in input (listener)
myButton.addListener(new GpioPinListenerDigital() {
@Override
public void handleGpioPinDigitalStateChangeEvent
(GpioPinDigitalStateChangeEvent event) {
Java
System.out.println("PULSANTE: " + event.getState());
pin.toggle(); //cambio di stato il LED
System.out.println("LED ACCESO");
try {
Thread.sleep(1000); //attendo 1 sec.
}
catch (InterruptedException ie) {
//gestisci eccezzione
}
}
});
//creo un loop infinito solo per attendere l'evento (pulsante
premuto)
for (;;) {
Thread.sleep(500);
}
}
}
Java
javac -classpath .:classes:/opt/pi4j/lib* -d . PulsanteLed.java
java -classpath .:classes:/opt/pi4j/lib* PulsanteLed
Web Server LAMP
- apt-get install apache2 (collegandosi a localhost si pu嘆
vedere che funziona)
- apt-get install mysql-server mysql-client
(durante linstallazione chiede di cambiare la password)
- apt-get install php5 libapache2-mod-php5 php5-mysql
(andare in /var/www e creare un file .php)
<?php phpinfo(); ?>
Ricollegarsi a localhost, lanciare il file .php creato e se tutto ok
viene visualizzato un elenco delle funzionalit di php
Web Server Python
python -m CGIHTTPServer
Da un altro PC collegarsi a
http://[indirizzo ip]:8000
PHP
<?php
/* l'istruzione exec esegue un comando da shell */
exec("gpio read 0", $stato);
$led = '<img src=/slideshow/programmare-raspberry-pi-cowo42-osimo-an/48517875/"spento.png">&
if (isset($_POST['accendi']))
{
exec("gpio mode 1 out");
exec("gpio write 1 1");
$led = '<img src="acceso.png">';
}
if (isset($_POST['spegni']))
{
exec("gpio mode 1 out");
exec("gpio write 1 0");
$led = '<img src="spento.png"';
}
PHP
if (isset($_POST['lettura']))
{
exec("gpio read 0", $stato);
}
?>
<html>
<head>
<title> EMCelettronica - by Gabriele Guizzardi </title>
</head>
<body>
<H2 align=center> Accensione LED tramite pulsante web </H2>
<form method="post" action="">
<p align=center>
PHP
LED : <button name="accendi">Accendi</button>
<button name="spegni">Spegni</button>
<?php echo $led; ?>
</p>
</form>
<form method="post" action="">
<p align=center>
Valore Pulsante : <button name="lettura"> Leggi stato </button>
<input type="text" name="valor" value= "<?php echo $stato[0]; ?>" >
</p>
<p align=center>Tenete premuto il pulsante del circuito e cliccate Leggi
Stato.</p>
</form>
</body>
</html>
Lazarus (Free Pascal)
- apt-get install fpc
- apt-get install lazarus
Windows 10 IoT
Visual Studio 2015
...lavventura inizia adesso...
CIAO

More Related Content

What's hot (20)

Internet of Things for Dummies
Internet of Things for DummiesInternet of Things for Dummies
Internet of Things for Dummies
Paolo Aliverti
Arduino & Smartphone
Arduino & SmartphoneArduino & Smartphone
Arduino & Smartphone
dega1999
Lezione 3 arduino - corso 20 ore
Lezione 3 arduino - corso 20 oreLezione 3 arduino - corso 20 ore
Lezione 3 arduino - corso 20 ore
Mirko Mancin
Introduzione ad Arduino
Introduzione ad ArduinoIntroduzione ad Arduino
Introduzione ad Arduino
Simone Lusenti
Lezione 1 arduino - corso 20 ore
Lezione 1 arduino - corso 20 oreLezione 1 arduino - corso 20 ore
Lezione 1 arduino - corso 20 ore
Mirko Mancin
Workshop su Arduino
Workshop su ArduinoWorkshop su Arduino
Workshop su Arduino
Paolo Aliverti
Android-Arduino interaction via Bluetooth
Android-Arduino interaction via BluetoothAndroid-Arduino interaction via Bluetooth
Android-Arduino interaction via Bluetooth
Open Makers Italy
Arduino: domotica OpenSource
Arduino: domotica OpenSourceArduino: domotica OpenSource
Arduino: domotica OpenSource
Emanuele Palazzetti
Raspberry Pi - Il computer che hai sempre voluto avere
Raspberry Pi - Il computer che hai sempre voluto avereRaspberry Pi - Il computer che hai sempre voluto avere
Raspberry Pi - Il computer che hai sempre voluto avere
Nicola Corti
Arduino wifi logger node
Arduino wifi logger nodeArduino wifi logger node
Arduino wifi logger node
Mirco Piccin
Corso Arduino Base - Basi Pratiche con Arduino Genuino
Corso Arduino Base - Basi Pratiche con Arduino GenuinoCorso Arduino Base - Basi Pratiche con Arduino Genuino
Corso Arduino Base - Basi Pratiche con Arduino Genuino
Mauro Alfieri
Raspberry
RaspberryRaspberry
Raspberry
PasqualeMarasca
Arduino basic workshop
Arduino basic workshopArduino basic workshop
Arduino basic workshop
Daniele Iori
Come rendere Arduino professionale
Come rendere Arduino professionaleCome rendere Arduino professionale
Come rendere Arduino professionale
Emanuele Bonanni
Arduino: breve introduzione & progetti
Arduino: breve introduzione & progettiArduino: breve introduzione & progetti
Arduino: breve introduzione & progetti
Mirco Piccin
Arduino galileo edison_udoo
Arduino galileo edison_udooArduino galileo edison_udoo
Arduino galileo edison_udoo
Vincenzo Virgilio
Arduino ICT2016 [IT]
Arduino ICT2016 [IT]Arduino ICT2016 [IT]
Arduino ICT2016 [IT]
Francesco Pascale
Open Hardware: Arduino, un prodotto italiano
Open Hardware: Arduino, un prodotto italianoOpen Hardware: Arduino, un prodotto italiano
Open Hardware: Arduino, un prodotto italiano
Riccardo Lemmi
Introduzione a Arduino
Introduzione a ArduinoIntroduzione a Arduino
Introduzione a Arduino
Pietro Aiuola
Intro to Arduino
Intro to ArduinoIntro to Arduino
Intro to Arduino
trevisoAUG
Internet of Things for Dummies
Internet of Things for DummiesInternet of Things for Dummies
Internet of Things for Dummies
Paolo Aliverti
Arduino & Smartphone
Arduino & SmartphoneArduino & Smartphone
Arduino & Smartphone
dega1999
Lezione 3 arduino - corso 20 ore
Lezione 3 arduino - corso 20 oreLezione 3 arduino - corso 20 ore
Lezione 3 arduino - corso 20 ore
Mirko Mancin
Introduzione ad Arduino
Introduzione ad ArduinoIntroduzione ad Arduino
Introduzione ad Arduino
Simone Lusenti
Lezione 1 arduino - corso 20 ore
Lezione 1 arduino - corso 20 oreLezione 1 arduino - corso 20 ore
Lezione 1 arduino - corso 20 ore
Mirko Mancin
Workshop su Arduino
Workshop su ArduinoWorkshop su Arduino
Workshop su Arduino
Paolo Aliverti
Android-Arduino interaction via Bluetooth
Android-Arduino interaction via BluetoothAndroid-Arduino interaction via Bluetooth
Android-Arduino interaction via Bluetooth
Open Makers Italy
Raspberry Pi - Il computer che hai sempre voluto avere
Raspberry Pi - Il computer che hai sempre voluto avereRaspberry Pi - Il computer che hai sempre voluto avere
Raspberry Pi - Il computer che hai sempre voluto avere
Nicola Corti
Arduino wifi logger node
Arduino wifi logger nodeArduino wifi logger node
Arduino wifi logger node
Mirco Piccin
Corso Arduino Base - Basi Pratiche con Arduino Genuino
Corso Arduino Base - Basi Pratiche con Arduino GenuinoCorso Arduino Base - Basi Pratiche con Arduino Genuino
Corso Arduino Base - Basi Pratiche con Arduino Genuino
Mauro Alfieri
Arduino basic workshop
Arduino basic workshopArduino basic workshop
Arduino basic workshop
Daniele Iori
Come rendere Arduino professionale
Come rendere Arduino professionaleCome rendere Arduino professionale
Come rendere Arduino professionale
Emanuele Bonanni
Arduino: breve introduzione & progetti
Arduino: breve introduzione & progettiArduino: breve introduzione & progetti
Arduino: breve introduzione & progetti
Mirco Piccin
Arduino galileo edison_udoo
Arduino galileo edison_udooArduino galileo edison_udoo
Arduino galileo edison_udoo
Vincenzo Virgilio
Open Hardware: Arduino, un prodotto italiano
Open Hardware: Arduino, un prodotto italianoOpen Hardware: Arduino, un prodotto italiano
Open Hardware: Arduino, un prodotto italiano
Riccardo Lemmi
Introduzione a Arduino
Introduzione a ArduinoIntroduzione a Arduino
Introduzione a Arduino
Pietro Aiuola
Intro to Arduino
Intro to ArduinoIntro to Arduino
Intro to Arduino
trevisoAUG

Similar to Programmare raspberry pi - Cowo42 - Osimo (AN) (20)

CodingGym - Lezione 3 - Corso Linux, Android e Internet of Things
CodingGym - Lezione 3 - Corso Linux, Android e Internet of ThingsCodingGym - Lezione 3 - Corso Linux, Android e Internet of Things
CodingGym - Lezione 3 - Corso Linux, Android e Internet of Things
Mirko Mancin
Arduino PLC : Modulo 1 programaci坦n Arduino Rev. 2.0
Arduino PLC : Modulo 1 programaci坦n Arduino Rev. 2.0Arduino PLC : Modulo 1 programaci坦n Arduino Rev. 2.0
Arduino PLC : Modulo 1 programaci坦n Arduino Rev. 2.0
SANTIAGO PABLO ALBERTO
Presentazione
PresentazionePresentazione
Presentazione
cesario
Internet delle cose
Internet delle coseInternet delle cose
Internet delle cose
Biagio (Gino) Zingales Al狸
TuxIsAlive
TuxIsAliveTuxIsAlive
TuxIsAlive
Claudio Mignanti
Italian Agile Day 2011 - Corso di cucina fusion elettro-agile con Arduino
Italian Agile Day 2011 - Corso di cucina fusion elettro-agile con ArduinoItalian Agile Day 2011 - Corso di cucina fusion elettro-agile con Arduino
Italian Agile Day 2011 - Corso di cucina fusion elettro-agile con Arduino
Paolo Aliverti
Openmoko
OpenmokoOpenmoko
Openmoko
guestec2667
Introduzione a RaspBerry PI
Introduzione a RaspBerry PIIntroduzione a RaspBerry PI
Introduzione a RaspBerry PI
Paolo Aliverti
TechDay: Internet delle cose - Paolo Aliverti
TechDay: Internet delle cose - Paolo Aliverti TechDay: Internet delle cose - Paolo Aliverti
TechDay: Internet delle cose - Paolo Aliverti
Codemotion
Anatomia di un'istruzione in Arduino Pt.1
Anatomia di un'istruzione in Arduino Pt.1Anatomia di un'istruzione in Arduino Pt.1
Anatomia di un'istruzione in Arduino Pt.1
袖鞄温界一
Workshop Arduino by Fiore Basile
Workshop Arduino by Fiore BasileWorkshop Arduino by Fiore Basile
Workshop Arduino by Fiore Basile
Commit University
Introduzione ad Arduino del Maker DevLab
Introduzione ad Arduino del Maker DevLabIntroduzione ad Arduino del Maker DevLab
Introduzione ad Arduino del Maker DevLab
Biagio (Gino) Zingales Al狸
Anatomia di un'istruzione in Arduino Pt.2
Anatomia di un'istruzione in Arduino Pt.2Anatomia di un'istruzione in Arduino Pt.2
Anatomia di un'istruzione in Arduino Pt.2
袖鞄温界一
Elettronica digitale with Example
Elettronica digitale with ExampleElettronica digitale with Example
Elettronica digitale with Example
Claudio Mignanti
Arkanoid on Altera DE-1
Arkanoid on Altera DE-1Arkanoid on Altera DE-1
Arkanoid on Altera DE-1
Matteo Gazzin
Microcontrollori
MicrocontrolloriMicrocontrollori
Microcontrollori
samu97
Arduino - Cosa sono e come funzionano i display
Arduino - Cosa sono e come funzionano i displayArduino - Cosa sono e come funzionano i display
Arduino - Cosa sono e come funzionano i display
Biagio (Gino) Zingales Al狸
Domotica per il risparmio energetico
Domotica per il risparmio energeticoDomotica per il risparmio energetico
Domotica per il risparmio energetico
Giuseppe Salinaro
Con Aruba, a lezione di Cloud #lezione 30 - parte 2: 'GitLab e Cloud Server ...
Con Aruba, a lezione di Cloud  #lezione 30 - parte 2: 'GitLab e Cloud Server ...Con Aruba, a lezione di Cloud  #lezione 30 - parte 2: 'GitLab e Cloud Server ...
Con Aruba, a lezione di Cloud #lezione 30 - parte 2: 'GitLab e Cloud Server ...
Aruba S.p.A.
Matteo Baccan - Valerio Tognozzi - Novara LinuxDay 2015
Matteo Baccan - Valerio Tognozzi - Novara LinuxDay 2015Matteo Baccan - Valerio Tognozzi - Novara LinuxDay 2015
Matteo Baccan - Valerio Tognozzi - Novara LinuxDay 2015
Matteo Baccan
CodingGym - Lezione 3 - Corso Linux, Android e Internet of Things
CodingGym - Lezione 3 - Corso Linux, Android e Internet of ThingsCodingGym - Lezione 3 - Corso Linux, Android e Internet of Things
CodingGym - Lezione 3 - Corso Linux, Android e Internet of Things
Mirko Mancin
Arduino PLC : Modulo 1 programaci坦n Arduino Rev. 2.0
Arduino PLC : Modulo 1 programaci坦n Arduino Rev. 2.0Arduino PLC : Modulo 1 programaci坦n Arduino Rev. 2.0
Arduino PLC : Modulo 1 programaci坦n Arduino Rev. 2.0
SANTIAGO PABLO ALBERTO
Presentazione
PresentazionePresentazione
Presentazione
cesario
Italian Agile Day 2011 - Corso di cucina fusion elettro-agile con Arduino
Italian Agile Day 2011 - Corso di cucina fusion elettro-agile con ArduinoItalian Agile Day 2011 - Corso di cucina fusion elettro-agile con Arduino
Italian Agile Day 2011 - Corso di cucina fusion elettro-agile con Arduino
Paolo Aliverti
Introduzione a RaspBerry PI
Introduzione a RaspBerry PIIntroduzione a RaspBerry PI
Introduzione a RaspBerry PI
Paolo Aliverti
TechDay: Internet delle cose - Paolo Aliverti
TechDay: Internet delle cose - Paolo Aliverti TechDay: Internet delle cose - Paolo Aliverti
TechDay: Internet delle cose - Paolo Aliverti
Codemotion
Anatomia di un'istruzione in Arduino Pt.1
Anatomia di un'istruzione in Arduino Pt.1Anatomia di un'istruzione in Arduino Pt.1
Anatomia di un'istruzione in Arduino Pt.1
袖鞄温界一
Workshop Arduino by Fiore Basile
Workshop Arduino by Fiore BasileWorkshop Arduino by Fiore Basile
Workshop Arduino by Fiore Basile
Commit University
Anatomia di un'istruzione in Arduino Pt.2
Anatomia di un'istruzione in Arduino Pt.2Anatomia di un'istruzione in Arduino Pt.2
Anatomia di un'istruzione in Arduino Pt.2
袖鞄温界一
Elettronica digitale with Example
Elettronica digitale with ExampleElettronica digitale with Example
Elettronica digitale with Example
Claudio Mignanti
Arkanoid on Altera DE-1
Arkanoid on Altera DE-1Arkanoid on Altera DE-1
Arkanoid on Altera DE-1
Matteo Gazzin
Microcontrollori
MicrocontrolloriMicrocontrollori
Microcontrollori
samu97
Arduino - Cosa sono e come funzionano i display
Arduino - Cosa sono e come funzionano i displayArduino - Cosa sono e come funzionano i display
Arduino - Cosa sono e come funzionano i display
Biagio (Gino) Zingales Al狸
Domotica per il risparmio energetico
Domotica per il risparmio energeticoDomotica per il risparmio energetico
Domotica per il risparmio energetico
Giuseppe Salinaro
Con Aruba, a lezione di Cloud #lezione 30 - parte 2: 'GitLab e Cloud Server ...
Con Aruba, a lezione di Cloud  #lezione 30 - parte 2: 'GitLab e Cloud Server ...Con Aruba, a lezione di Cloud  #lezione 30 - parte 2: 'GitLab e Cloud Server ...
Con Aruba, a lezione di Cloud #lezione 30 - parte 2: 'GitLab e Cloud Server ...
Aruba S.p.A.
Matteo Baccan - Valerio Tognozzi - Novara LinuxDay 2015
Matteo Baccan - Valerio Tognozzi - Novara LinuxDay 2015Matteo Baccan - Valerio Tognozzi - Novara LinuxDay 2015
Matteo Baccan - Valerio Tognozzi - Novara LinuxDay 2015
Matteo Baccan

More from Gabriele Guizzardi (7)

Gestione in tempo reale commesse per camion
Gestione in tempo reale commesse per camionGestione in tempo reale commesse per camion
Gestione in tempo reale commesse per camion
Gabriele Guizzardi
ESP32: Sblocca il potenziale dei tuoi progetti IoT!
ESP32: Sblocca il potenziale dei tuoi progetti IoT!ESP32: Sblocca il potenziale dei tuoi progetti IoT!
ESP32: Sblocca il potenziale dei tuoi progetti IoT!
Gabriele Guizzardi
Blockchain: fuffa, innovazione o met e met?
Blockchain: fuffa, innovazione o met e met?Blockchain: fuffa, innovazione o met e met?
Blockchain: fuffa, innovazione o met e met?
Gabriele Guizzardi
Prototipare col raspberry pi
Prototipare col raspberry piPrototipare col raspberry pi
Prototipare col raspberry pi
Gabriele Guizzardi
Coding @ coworking
Coding @ coworkingCoding @ coworking
Coding @ coworking
Gabriele Guizzardi
Codemotion 2012 creare un proprio linguaggio di programmazione
Codemotion 2012 creare un proprio linguaggio di programmazioneCodemotion 2012 creare un proprio linguaggio di programmazione
Codemotion 2012 creare un proprio linguaggio di programmazione
Gabriele Guizzardi
Non so assolutmente niente di informatica o web ma devo comunque creare un pr...
Non so assolutmente niente di informatica o web ma devo comunque creare un pr...Non so assolutmente niente di informatica o web ma devo comunque creare un pr...
Non so assolutmente niente di informatica o web ma devo comunque creare un pr...
Gabriele Guizzardi
Gestione in tempo reale commesse per camion
Gestione in tempo reale commesse per camionGestione in tempo reale commesse per camion
Gestione in tempo reale commesse per camion
Gabriele Guizzardi
ESP32: Sblocca il potenziale dei tuoi progetti IoT!
ESP32: Sblocca il potenziale dei tuoi progetti IoT!ESP32: Sblocca il potenziale dei tuoi progetti IoT!
ESP32: Sblocca il potenziale dei tuoi progetti IoT!
Gabriele Guizzardi
Blockchain: fuffa, innovazione o met e met?
Blockchain: fuffa, innovazione o met e met?Blockchain: fuffa, innovazione o met e met?
Blockchain: fuffa, innovazione o met e met?
Gabriele Guizzardi
Prototipare col raspberry pi
Prototipare col raspberry piPrototipare col raspberry pi
Prototipare col raspberry pi
Gabriele Guizzardi
Codemotion 2012 creare un proprio linguaggio di programmazione
Codemotion 2012 creare un proprio linguaggio di programmazioneCodemotion 2012 creare un proprio linguaggio di programmazione
Codemotion 2012 creare un proprio linguaggio di programmazione
Gabriele Guizzardi
Non so assolutmente niente di informatica o web ma devo comunque creare un pr...
Non so assolutmente niente di informatica o web ma devo comunque creare un pr...Non so assolutmente niente di informatica o web ma devo comunque creare un pr...
Non so assolutmente niente di informatica o web ma devo comunque creare un pr...
Gabriele Guizzardi

Programmare raspberry pi - Cowo42 - Osimo (AN)

  • 1. RASPBERRY PI PROGRAMMAZIONE 19 maggio 2015 - TechBar presso Cowo42 - Osimo
  • 3. NOTA Questo incontro e queste slide possono essere considerate il naturale continuo del Workshop fatto presso il Warehouse Coworking di Pesaro. Consiglio quindi di visualizzare prima tali slide enchesse presenti sul mio account 際際滷Share. http://www.slideshare.net/guizzardigabriele
  • 4. Quali SO sono disponibili - Raspbian (porting di Debian Wheezy 7) - Ubuntu Mate (RPi 2) - Windows 10 IoT (RPi 2) - Arch - Debian - Pidora (Fedora) - RISC OS (non 竪 Linux) - OpenElec e altri (media center) - ...e altri...
  • 5. GPIO della RPi B+ e della 2 I2C UART
  • 6. I protocolli del GPIO Il RPi ha tre protocolli seriali: UART, SPI e I2C UART (Universal Asynchronous Receiver-Trasmitter) trasmetti flussi di dati in modo seriale. Asincrono significa che usa i dati stessi per sincronizzare la trasmissione. SPI (Serial Peripheral Interface) 竪 una trasmissione seriale sincrona che opera in modalit Full Duplex cio竪 permette la comunicazione bidirezionale simultaneamente. I2C (I quadro C, Inter-Integrated Circuit) bus di tipo sincrono, si basa su due linee, una per i dati (sda) e una per il clock di sincronizzazione (scl).
  • 7. Pulse Width Modular (PWM) La modulazione di larghezza di impulso, 竪 un tipo dimodulazione digitale che permette di ottenere una tensione media variabile dipendente dal rapporto tra la durata dell'impulso positivo e di quello negativo (duty- cycle), allo stesso modo 竪 utilizzato per protocolli di comunicazione in cui l'informazione 竪 codificata sotto forma di durata nel tempo di ciascun impulso. Grazie ai moderni microcontrollori 竪 possibile attivare o inattivare un interruttore ad alta frequenza e allo stesso modo rilevare lo stato e il periodo di un impulso. (wikipedia)
  • 9. Pulse Width Modular GPIO p = GPIO.PWM(channel, frequency) #istanzia PWM p.start(dc) #avvia PWM dove dc 竪 il duty cycle (0.0 <= dc <= 100.0) p.ChangeFrequency(freq) #cambiare frequenza dove freq 竪 la nuova frequenza in Hz p.ChangeDutyCycle(dc) #cambiare il duty cycle dove 0.0 <= dc <= 100.0 p.stop() #ferma PWM import RPi.GPIO as GPIO GPIO.setmode(GPIO.BOARD) GPIO.setup(12, GPIO.OUT) p = GPIO.PWM(12, 0.5) p.start(1) input('Premi un tasto per fermare') p.stop() GPIO.cleanup()
  • 10. Come funziona I2C Usando 7 bit per gli indirizzi si possono collegare fino a 128 Slave (alcuni riservati quindi sono meno)
  • 12. Abilitiamo I2C disabilitato ma presente: nano /etc/modules
  • 13. Abilitiamo I2C nano /etc/modprobe.d/raspi-blacklist.conf (aggiungere il carattere sharp alla riga i2c-bcm2708 per abilitarlo)
  • 14. Abilitiamo I2C - apt-get install i2c-tools - reboot - modprobe i2c-dev - ls /dev/i2c* (vedremo le porte) - chmod o+rw /dev/i2c* (ora possiamo usare le porte, dovremo rilanciare modprobe e chmod ad ogni avvio. Se vogliamo automatizzare il processo inseriamo i due comandi in /etc/rc.local)
  • 15. Controlliamo I2C - i2cdetect -y 0 oppure - i2cdetect -y 1
  • 16. Installare una dash board apt-get install curl php5-curl php-json (andare nella cartella /var/www) git clone https://github.com/afaqurk/linux-dash.git (oppure scaricare lo script) sul browser digitare: 192.168.n.n/linux-dash
  • 17. Utility utili apt-get install mc (il vecchio Norton Commander) apt-get install jed (editor) apt-get install tree apt-get install epiphani-browser (browser) apt-get install fbi (visualizza immagini da shell) apt-get install iptraf (analizza il traffico di rete) apt-get install nmon (monitorare Linux da riga di comando)
  • 19. Versione della GPIO Python 竪 il linguaggio principale e ufficiale della Raspberry Pi pertanto troviamo gi presente una libreria per usare la GPIO: RPi.GPIO Per sapere quale versione 竪 installata eseguire: - find /usr | grep -i gpio
  • 20. Python import RPi.GPIO as GPIO # carica la libreria per gestire la PGIO from time import sleep # importa sleep da time per gestire la pausa GPIO.setmode(GPIO.BCM) # settiamo BCM come numerico GPIO.setwarnings(0) # sopprimo i messaggi di errore GPIO.setup(17, GPIO.IN) # settiamo GPIO17 come input (pulsante) GPIO.setup(18, GPIO.OUT) # settiamo GPIO18 come output (LED) print "Lampeggio LED con GPIO 18" try: while True: # eseguiamo fino a che non si preme CTRL+C if GPIO.input(17): # se NON premo il pulsante, stato = 1 (alto) print "LED SPENTO" GPIO.output(18, 0) # settiamo la porta a 0 else: print "LED ACCESO" GPIO.output(18, 1) # settiamo la porta a 1 sleep(0.5) # attende mezzo secondo finally: # * vedi testo GPIO.cleanup() # pulisce gli stati
  • 21. Accendiamolo usando il C Possiamo usare una libreria inizialmente scritta per Arduino e adattata per RPi: WiringPi. La libreria pu嘆 essere usata anche per Python, Ruby e Perl. - git clone git://git.dragon.net/wiringPi - cd wiringPi - ./build
  • 22. C #include <stdio.h> //libreria standard IO #include <wiringPi.h> //libreria WiringPi //vedi tabella pin della GPIO, colonna wiringPi #define LED12 1 //alla variabile LED12 assegno il pin 0 #define PULSANTE11 0 //alla variabile PULSANTE11 assegno il pin 1 int main(void) { printf("Lampeggio LED su GPIO 18n"); wiringPiSetup(); //inizializzo la libreria pinMode(LED12,OUTPUT); //essendo un LED lo imposto come "output" pinMode(PULSANTE11,INPUT); //essendo un pulsante lo imposto come "input"
  • 23. C for (;;) //ciclo infinito { if (digitalRead(PULSANTE11)==LOW) //premuto il pulsante { printf("LED ACCESOn"); digitalWrite(LED12,HIGH); //accendo il LED delay(1000); //acceso per 1 sec. } printf("LED spenton"); digitalWrite(LED12,LOW); //spengo il LED delay(1000); //rallento un po' } return 0; //chiudo main } gcc -o PulsanteLed PulsanteLed.c -lwiringPi
  • 24. Setup di wiringPi wiringPiSetup(); (usa la numerazione semplificata, 11 = 0) wiringPiSetupGpio(); (usa la numerazione Broadcom, 11 = 17) ce ne sono altre meno importanti (vedi sito).
  • 25. Tabella pin di wiringPi
  • 26. Utilizziamo MONO e C# apt-get install mono-complete apt-get install monodevelop apt-get install gtk-sharp2
  • 28. Java import com.pi4j.io.gpio.GpioController; import com.pi4j.io.gpio.GpioFactory; import com.pi4j.io.gpio.GpioPinDigitalOutput; import com.pi4j.io.gpio.PinState; import com.pi4j.io.gpio.RaspiPin; import com.pi4j.io.gpio.GpioPinDigitalInput; import com.pi4j.io.gpio.PinPullResistance; import com.pi4j.io.gpio.event.GpioPinDigitalStateChangeEvent; import com.pi4j.io.gpio.event.GpioPinListenerDigital; public class PulsanteLed { public static void main(String args[]) throws InterruptedException { System.out.println("Lampeggio LED alla pressione di un pulsante"); //creo il controller final GpioController gpio = GpioFactory.getInstance();
  • 29. Java //imposto myButton come input dal pin 0 (GPIO17) e imposto pin come output sul pin 1 (GPIO18) final GpioPinDigitalInput myButton = gpio.provisionDigitalInputPin (RaspiPin.GPIO_00, PinPullResistance.PULL_DOWN); final GpioPinDigitalOutput pin = gpio.provisionDigitalOutputPin (RaspiPin.GPIO_01, "MyLED", PinState.LOW); //mi metto in ascolto dello stato del pin in input (listener) myButton.addListener(new GpioPinListenerDigital() { @Override public void handleGpioPinDigitalStateChangeEvent (GpioPinDigitalStateChangeEvent event) {
  • 30. Java System.out.println("PULSANTE: " + event.getState()); pin.toggle(); //cambio di stato il LED System.out.println("LED ACCESO"); try { Thread.sleep(1000); //attendo 1 sec. } catch (InterruptedException ie) { //gestisci eccezzione } } }); //creo un loop infinito solo per attendere l'evento (pulsante premuto) for (;;) { Thread.sleep(500); } } }
  • 31. Java javac -classpath .:classes:/opt/pi4j/lib* -d . PulsanteLed.java java -classpath .:classes:/opt/pi4j/lib* PulsanteLed
  • 32. Web Server LAMP - apt-get install apache2 (collegandosi a localhost si pu嘆 vedere che funziona) - apt-get install mysql-server mysql-client (durante linstallazione chiede di cambiare la password) - apt-get install php5 libapache2-mod-php5 php5-mysql (andare in /var/www e creare un file .php) <?php phpinfo(); ?> Ricollegarsi a localhost, lanciare il file .php creato e se tutto ok viene visualizzato un elenco delle funzionalit di php
  • 33. Web Server Python python -m CGIHTTPServer Da un altro PC collegarsi a http://[indirizzo ip]:8000
  • 34. PHP <?php /* l'istruzione exec esegue un comando da shell */ exec("gpio read 0", $stato); $led = '<img src=/slideshow/programmare-raspberry-pi-cowo42-osimo-an/48517875/"spento.png">& if (isset($_POST['accendi'])) { exec("gpio mode 1 out"); exec("gpio write 1 1"); $led = '<img src="acceso.png">'; } if (isset($_POST['spegni'])) { exec("gpio mode 1 out"); exec("gpio write 1 0"); $led = '<img src="spento.png"'; }
  • 35. PHP if (isset($_POST['lettura'])) { exec("gpio read 0", $stato); } ?> <html> <head> <title> EMCelettronica - by Gabriele Guizzardi </title> </head> <body> <H2 align=center> Accensione LED tramite pulsante web </H2> <form method="post" action=""> <p align=center>
  • 36. PHP LED : <button name="accendi">Accendi</button> <button name="spegni">Spegni</button> <?php echo $led; ?> </p> </form> <form method="post" action=""> <p align=center> Valore Pulsante : <button name="lettura"> Leggi stato </button> <input type="text" name="valor" value= "<?php echo $stato[0]; ?>" > </p> <p align=center>Tenete premuto il pulsante del circuito e cliccate Leggi Stato.</p> </form> </body> </html>
  • 37. Lazarus (Free Pascal) - apt-get install fpc - apt-get install lazarus