Sei sulla pagina 1di 92

Nota del 20 luglio 2013:

Il materiale dell'evento SBC Raspberry Pi & BeagleBone Black del 20 luglio 2013 sono disponibili su
https://drive.google.com/folderview?id=0Bz2gtYAx46W-MXFSY2lvbmI2WDg&usp=sharing Contiene alcuni aggiornamenti della presente. Levento su
Google+
https://plus.google.com/u/0/events/cnch83bolqai9oiipfrndmp2ul8

Introduzione alla
Raspberry Pi
7 luglio 2012, Pozzuolo del Friuli (UD)
e via Google+
---
hacklabudine.it

Massimiliano iv3unm

HackLabUdine.it
Si ringrazia il gruppo
FESN e il Comune di Pozzuolo del Friuli
per la disponibilit della sala in cui si tiene
questo incontro

HackLabUdine.it
Cos' la Raspberry Pi
Storia di come nata
il lancio sul mercato
hardware della raspi

Di
foto raspi con altre board
mappa nel mondo della Raspberry Pi
cosa si puo fare con la Raspberry Pi
con cosa si sviluppa con la Raspberry Pi
Comparazione Raspberry Pi e Arduino

cosa Raspberry Pi + boards di espansioni


MSP430 e ARM Low Cost
GertBoard
MCP23017

parliamo



Raspberry Pi e le altre
iniziare con la Raspberry Pi
Raspberry Pi links
Raspberry Pi, OS, il boot..
Raspberry Pi firmware

oggi


Raspberry Pi e Python
PIP
Raspberry Pi e Django Framework WEB
Raspberry Pi + Elettronica

...


Raspberry Pi + GPIO
esempi in Python
esempi da riga di comando
Raspberry Pi + Arduino

HackLabUdine.it
Cos' la Raspberry Pi
La Raspberry PI (raspi o RPi) un piccolo computer in una
scheda dalle dimensioni di una carta di credito (85,60mm x
53,98mm).
Dispone gi del hardware necessario per funzionare compreso
la parte ethernet e come in un PC aggiungete alcune periferiche
come tastiera, mouse USB e un monitor con ingresso HDMI.

Per farlo funzionare serve un sistema operativo da installare in


una SD. Essendo un computer servono anche dei programmi.
Questi posso essere installati nella SD e/o in cloud.

Dispone di alcune General Purpose Input/Output ( GPIO ) per


interfacciarsi a basso livello con altri dispositivi o componenti
elettronici.

Questo rientra in quello che viene definito embedded Single


Board Computer (SBC)

Avete tra le mani computer in una piccola scheda a basso


consumo in poco pi di euro 30,00.

Quando pensate alla Raspberry Pi pensate a un computer e


cosa potete farci. Vedremo le sue caratteristiche e cosa farci tra
qualche slides, ora un breve storia

HackLabUdine.it
Cos' la Raspberry Pi
alcune foto

HackLabUdine.it
Storia di come nata
Nel 2006 Eben Upton con i suoi colleghi della University of
Computer Laboratory di Cambridge ebbero l'idea di avere un
piccolissimo ed economico computer che potessero usare i
bambini per entrare nel mondo dell'informatica
Osservando gli studenti avevano notato non erano come
quelli degli anni 90 dove si applicavano di pi nella
programmazione.
Questo era dovuto in parte anche al fatto che la strada aperta
dalle varie console come Amiga, ZX Spectrum e Commodore
64 dove chi li possedeva aveva passione nell'informatica e
nell'elettronica, li aveva portato nella strada
dell'informatica/elettronica. I PC avevano in parte modificato
questo approccio. Lo stesso insegnamento era cambiano nel
limitarsi a non spiegare il computer ma i vari pacchetti
software come office.

Sinteticamente da ci nata l'idea della Raspberry Pi.


Dopo alcuni prototipi nel corso di questi'anni, si giunti alla
versione definitiva.
Nasce la Fondazione Raspberry Pi per portare avanti il
progetto ormai pronto per il pubblico.

fonte http://www.raspberrypi.org/about

HackLabUdine.it
il lancio sul mercato
Ore 6.00z (UTC) del 29 febbraio 2012 stato il lancio
ufficiale della Raspberry Pi

In tanti speravamo di avere tra le mani la raspi nel giro di


pochi giorni. Invece ci non stato.

La Fondazione Raspberry Pi annuncia che Farnell


Premier/Element14 e RS Components, noti distributori
europei di componenti elettronici, sono i distributtori ufficiali e
partner nella realizzazione e test della Raspberry Pi.
Per il mercato americano come distributore viene scelto
Allied Elettronics consorella della RS.

In quella data i siti della Farnell e RS in breve tempo


cominciano ad avere dei problemi di accesso causa l'elevato
traffico, per collassare definitivamente nelle ore successive e
per gran parte della giornata.
I pi fortunati sono riusciti a piazzare un pre-ordine. in tale
giorno.

HackLabUdine.it
il lancio sul mercato
Avevano programmate di produrre 10.000 schede,
andate esaurite.

A marzo sono iniziati i test per le conformit europee e


americane.

Le prime consegne al grande pubblico inizia 13 aprile.

Ho ricevuta la mia Raspberry Pi dalla Farnell il 25


maggio e dalla RS il 13 giugno ordinate il 29/02.

A tutt'oggi la disponibilit e scarsa. Per averla devi fare


un preordine alla Farnell o/e RS. Man mano che sono
disponibili vi mandano un email per confermare l'ordine.

Forse qualche cosa sta cambiano in questi giorni da


parte di Farnell che dovrebbe eliminare la necessit del
preordine

HackLabUdine.it
Hardware della Raspi
Questo progetto opensource nel hardware e nel
software. Trovate lo schema comprese molte altre
informazioni su Embedded Linux Wiki http://elinux.
org/R-Pi_Hub

La board si basa su un SoC Broadcom BCM2835. Un


SoC (System on Chip) un chip specifico con all'interno
diverse parti, in questo caso troviamo

CPU 700 MHz ARM11 ARM1176JZF-S (ARMv6)

GPU che una Broadcom VideoCore IV,OpenGL


ES 2.0,OpenVG 1080p30 H.264 high-profile
encode/decode

SDRAM da 256MB di cui una parte condivisa con la


GPU

La scheda disponibile in due versioni


A: 1 porta USB2 via BCM2835; NO ethernet

B: 2 porta USB2 via LAN9512 + Ethernet


10/100Mbps

fonte http://elinux.org/Rpi_Hardware

HackLabUdine.it
Hardware della Raspi
Ci sono due modelli di Raspberry Pi ma in commerciosi trova solo
la versione B.

il modello B dispone di un chip LAN9512 della SMSC che


fornisce:
ethernet 10/100MBps
2 porte USB 2.0

alimentazione a DC 5V tramite connettore MicroUSB (non


una porta USB)
Personalmente avrei preferito anche un altro connettore,
soprattutto per chi deve fare un minimo di prototipizzazione.

SD/MMC/SDIO memory card slot. Usata per lo storage e per


il sistema operativo, programmi ecc.

5 LED di stato]:
D5(verde) - OK - accesso alla SD Card R/W (via
GPIO16)
D6(rosso) - PWR - 3.3V Power
D7(verde) - FDX - Full Duplex (LAN) (modelo B)
D8(verde) - LNK - Link/Activity (LAN) (modelo B)
D9(giallo) - 10M - 10/100Mbit (LAN) (modelo B)
fonte http://elinux.org/Rpi_Hardware

HackLabUdine.it
Hardware della Raspi
Altra vista dello slot della scheda di
memoria Secure Digital (SD) che si trova
sotto la scheda

fonte http://elinux.org/Rpi_Hardware

HackLabUdine.it
Hardware della Raspi

interfaccia DSI per panello LCD


uscita HDMI 1.3a con connettore tipo A
uscita Video Composite con connettore
RCA
connettore un modulo camera con
specifiche Camera Serial Interface
MIPI CSI-2.
(foto nella slide successiva)
USCITA audio su connettore da 3.5mm
stereo jack

fonte http://elinux.org/Rpi_Hardware

HackLabUdine.it
Hardware della Raspi
esempio di un modulo camera collegato alla raspi sul connettore DSI
fonte http://www.raspberrypi.org/archives/1254

HackLabUdine.it
Hardware della Raspi
P1 connettore a 26 pin su due linee (13x2) 2.54mm
di tipo IDC (sono come quelli dei HDD IDE e dei lettori
per floppy disk solo che qua sono a 26 pin) e troviamo:

P1: 26-pin 2.54mm header expansion


8 GPIOs at 3v3
2-pin UART serial console, 3v3 TTL
(debug); oppure 2 GPIOs at 3v3
I2C interface (3v3); oppure 2 GPIO - 3v3
SPI interface (3v3); oppure 5 GPIO - 3v3
per per fornire 3v3, 5v e GND a device
ARM JTAG
una seconda interfaccia I2C (3v3)
6 pins per un futuro uso

vedere
http://elinux.org/Rpi_Low-level_peripherals
http://elinux.org/Rpi_Hardware

HackLabUdine.it
Hardware della Raspi
Sono presenti alcuni punti di test (TP)
Per provare la tensione di alimentazione si
posizionano i puntali del tester su TP1 (+) e TP2 (-).
La tensione deve essere compresa tra 4,75V e 5,25V.
Se non tra i parametri indicati, pu causare del danni
hardware se troppo elevata e/o dei problemi di stabilit
se troppo bassa.
P2: 8-pin per GPU JTAG
P3: 7-pin per LAN9512 JTAG

http://elinux.org/R-Pi_Troubleshooting

HackLabUdine.it
Foto Raspi con altre board
Alcune foto della raspi
con altre board e non:

1. PentiumII +
RPi

2. Arduino + RPi

3. RPi+
Arduino+
MSP430
LaunchPad+
BeagleBoard
(vB)

4. RPi +
Freescale
Kinetis
TWR+53N512
MCU
HackLabUdine.it
Mappa della Raspberry Pi
Su http://rastrack.ryanteck.org.uk/ trovate una mappa dove si pu registrare la tua RPi e la tua citt

HackLabUdine.it
Cosa si puo fare con la Raspberry Pi
Come detto Raspberry Pi un computer ARM a 700Mhz con una GPU 3D e alcune GPIO.
Tenendo conto del hardware a tua disposizione, si puoi usare
media center (distribuzioni RaspBCM e OpenELEC)
piccolo server
per insegnare l'informatica (per cui stata ideata)
usando le GPIO per piccole automazioni o in abbinamento ad Arduino e altre boards aumentando
le potenzialit in questo campo
ricorda che ci gir Linux Debian, Fedora, QtonPi, Arch.
sono distribuzioni in sviluppo per realizzare un media center.
Usciranno altre su Linux ed anche con ChromeOS
ricorda che comunque un 700MHz anche se con una GPU 3D.

....Dipende dalla tua fantasia, idee e creativit

La maggior parte si trova una raspi tra le mani sta giocando in vari modi e ogni giorni ci sono idee che
vanno avanti. Basta seguire il sito ufficiale ,il forum o twitter e Google+ per le novit di chi vuole renderle
pubbliche

HackLabUdine.it
Con cosa sviluppo sulla Raspberry Pi?
Con quello che sviluppi normalmente sotto Linux.

Python
C/C++
Rugby
PHP
Perl
Java
....
QtonPi un distribuzione di sviluppo con le libreria QT ottimizzata per
questa scheda.http://qt-project.org/wiki/Qt-RaspberryPi
WiringPi un progetto per portare Wiring, che il linguaggio usato per
Arduino, sulla RPi usando le GPIO. Il linguaggio famigliare da chi ha
esperienza con Arduino https://projects.drogon.net/raspberry-
pi/wiringpi/

HackLabUdine.it
Raspberry Pi e Arduino
Spesso sento confusione nel mettere la
Raspberry Pi e Arduino sullo stesso piano, come
se una sostituisce l'altra.

Forse questa confusione nata dal prezzo molti


simile

Sono due schede diverse

Sono invece complementari tra loro.


Vediamo perch
HackLabUdine.it
Raspberry Pi e Arduino
In comune hanno la filosofia opensource sia nel hardware
che nel software.

Entrambe sono utili nella didattica (entrambe nate da questa


idea di base) e nell'inspirare, creare e realizzare nuove idee a
costi contenuti

Arduino una scheda di prototipizzazione e per insegnare il


programmazione con un desing semplice.
Raspberry Pi un SBC per la didattica e programmazione dei
computer. Anche se dispone di alcune GPIO

HackLabUdine.it
Raspberry Pi e Arduino
comparazione

Arduino UNO Raspberry Pi

MCU MCU Atmel ATMega328P

SOC SOC Broadcom BCM2835 (CPU + GPU +


SDRAM)

CPU SOC Broadcom BCM2835 (CPU + GPU +


SDRAM)

GPU Broadcom VideoCore IV,OpenGL ES 2.0,


OpenVG 1080p30 H.264 high-profile
encode/decode

MCU/CPU BIT 8 bit 32 bit

Clock 16MHz 700MHz

Flash Memory 32 KB (ATmega328) of which 0.5 Dispone di slot SD per il sistema operativo,
KB used by bootloader programmi e dati

EEPROM 1 KB (ATmega328) NO. Puoi usare la SD o/e su devive di storage


USB per salvare i dati

SDRAM 2 KB (ATmega328) 256MB

HackLabUdine.it
Raspberry Pi e Arduino
comparazione

Arduino UNO Raspberry Pi mod. B

GPIO SI SI (connettore P1)

I/O Digital 14 8 + eventuali altre 9 se non usate da


UART/SPI/I2C (connettore P1)

PWM 6 1

ADC a 10 bit. | 6 canali (IN analogici) NO

DAC NO NO

SERIAL UART 1 TTL 1 (connettore P1)

I2C/TWI/SPI SI SI (connettore P1)

USB 1 modo SLAVE. Usata per la 2 HOST


programmazione e gerstione

ETHERNET tramite shiled Ethernet oppure 1 da 10/100Mbps


Arduino Ethernet

WIFI tramite shiled WIFI WIFI USB

HackLabUdine.it
Raspberry Pi e Arduino
comparazione

Arduino UNO Raspberry Pi mod. B

SLOT SD/MMC NO. Inseribile senza grossi SI


problemi.

REAL TIME NO. possibile usare un chip NO. possibile usare un chip RTC come
CLOCK (RTC) RTC. come DS1338C/DS3234 DS1338C/DS3234 (entrambi I2C)
(entrambi I2C) Se raspi collegata in Internet possibile usare
un server NTP

VIDEO OUT NO. Ci sono delle shiled che HDMI, Video Composite RCA
permetto di avere un OUT
composita o VGA

AUDIO OUT NO TRS connector|3.5 mm jack, HDMI

AUDIO IN NO NO. possibile usare una scheda audio USB

ICSP/JTAG ICSP JTAG per SOC connettore P1 e P2 /


LAN9512 conettoreP3 | vedere http://elinux.
org/RPi_Low-level_peripherals

SISTEMA NO SI (attualmente Linux)


OPERATIVO

HackLabUdine.it
Raspberry Pi e Arduino
comparazione

Arduino UNO Raspberry Pi mod. B

INPUT VOLTAGE da 7v a 14V. Regolatore integrato 5V via Micro USB oppure sul connettore
a 5V e 3V3 GPIO
5V via USB; 7.12V jack e VIN pin
of the board.

OPERATING 5V 5V / 3V3
VOLTAGE

GPIO VOLTAGE 5V 3V3


vedere http://elinux.org/RPi_Low-
level_peripherals

DC Corrent max 200mA 700mA (3,5W) senza device collegati (come


USB, HDMI...) + 400mA. Un fusibile tipo
polyfuses da 1.1A protegge la scheda

DC Corrent I/O 40mA vedere http://elinux.org/RPi_Low-


pin max level_peripherals

DIMENSIONI 75mm x 55mm 85.60mm x 53.98mm

COSTO circa 25,00 circa 33,00

HackLabUdine.it
Raspberry Pi e Arduino
comparazione

Dalle tabelle avrai notato che ci sono parecchie cose diverse, ma alcuni comune, quindi quali scegliere.

In parecchie cose Arduino ideale grazie alla sua flessibilit, permette una prototipizzazione usando le
varie boards Arduino e nello stesso tempo possibile usare solo ATMega328 con il bootload e realizzare il
restante circuito in base alle nostre necessita senza usare una board Arduino. Dispone di parecchie schede
opzionali con relative librerie. Non richiede un sistema operativo. Fa bene per quello che stato
programmato. Si sviluppa tramite il suo IDE in Wiring (sintassi simile al C) e/o tramite i vari tools per AVR.
anche ideale nella didattica per l'insegnamento della programmazione delle MCU

La Raspi pu essere usata come piccolo computer per fare diverse cose anche contemporaneamente.
Dispone di un sistema operativo Linux con i relativi tools e programmi. Si sviluppa in vari linguaggi (Python,
C/C++;...).
Dispone di alcune GPIO per fruttarle in determinate occasioni. Non nata per la prototipizzazione ma per
insegnare l'informatica dando un computer a basso costo. Lo stesso ideatore dice che la raspi ha solo il
10% delle funzioni di Arduino.

Entrambe possono lavorare in simbiosi, quando serve la flessibilit di Arduino a basso livello e la maggior
potenza di calcolo e di sistema operativo della Raspberry. Un esempio potrebbe esse il caso in cui uno o pi
Arduino si occupano della raccolta dei dati dai sensori e li inviano alla Raspi per l'archiviazione, gestione e
visualizzazione sul web.

Invece la board BeagleBone nata con lo scopo di dare un sistema operativo alla flessibilit di Arduino

HackLabUdine.it
Raspberry Pi e Arduino
Arduino pu essere
usata per gestire la
parte a basso livello
come sensori, I/O
(estendendo GPIO),
fornire un ADC in
modo semplice ed
economico.

HackLabUdine.it
Raspberry + boards
Per espandere le funzionalit della Raspberry verso la protopitizzazione e/o verso un discorso pi di
elettronica, oltre ad Arduino, stanno nascendo schede specifiche come:

Raspberry Pi Bridge
Questo progetto attualmente in sviluppo mira a creare una scheda ponte tra Arduino e la
Raspberry Pi. una shield per Arduino che mette in collegamento la Rasp
Praticamente permette di collegare le alcune GPIO della Raspberry Pi ad alcuni I/O di
Arduino per farli comunicare tra loro.
ma dovrebbe essere possibile usare anche le shield nate per Arduino sulla raspi.
Info su http://omer.me/2012/05/introducing-ponte/

Progetti HW SW dei schede relay che vanno bene sia per Arduino che per raspi.
http://www.progetti-hw-sw.it/raspberry.htm

Adafruit Prototyping Pi Plate Kit for


Raspberry Pi

Scheda di espansione per la Raspi


realizzata dalla Adafruid Industrial
http://www.adafruit.com/products/801

HackLabUdine.it
Raspberry Pi e ...

Ci sono l'altre board simile a Arduino che si


posso usare per questo scopo
interessanti come la MSP430 Lauchpad.

Ma le cose si faranno interessati con le


schede basate sulle MCU ARM Cortex-M0 a
con costi molto bassi appena e/o in uscite.

HackLabUdine.it
Raspberry Pi e MSP430
MSP430 LaunchPad una scheda prodotta dalla Texas
Instruments e si basa sui suoi microcontrolli della famiglia
MSP430 a 16 bit.
La scheda pu ospitare diversi tipi di micro MSP430 con
funzioni diverse e dimensioni in formato DIP
Disponibile ad un prezzo che parte da circa 4,60 iva
compresa
Si sviluppa in C++ . TI fornisce Code Composer Studio
basato su Eclipse e quindi multipiattafoma. progetto
commerciale anche se c' una buona comunit che ci gira
intorno .
una piattaforma interessante da usare anche per
estendere le funzionalita della Raspi a basso livello.
Tenete presente che la lauchpad pu montare diverse
MCU MSP430 che sono disponibili con diverse
caratteristiche
Come per Arduino, anche questa possiamo usarla per
espandere le funzionalit della Raspi

Se siete curiosi fateci un giorno anche sono per una panoramica su


www.ti.com/launchpadwiki e su http://e2e.ti.com/group/msp430launchpad/default.aspx

HackLabUdine.it
Raspberry Pi e KL25Z
Freescale Kinetis KL25Z Freedom Board

KL25Z128VLK4--ARM Cortex-M0+ MCU with:


- 128KB flash, 16KB SRAM
- Up to 48MHz operation
- USB full-speed controller
OpenSDA--sophisticated USB debug interface
Tri-color LED
Capacitive touch "slider"
Freescale MMA8451Q accelerometer
Flexible power supply options
- Power from either on-board USB connector
- Coin cell battery holder (optional population option)
- 5-9V Vin from IO header
- 5V provided to IO header
- 3.3V to or from IO header
Reset button
Expansion IO form factor accepts peripherals
designed for Arduino-compatible hardware

Dovrebbe essere disponibile tra qualche settimana al


prezzo di circa 16,00 ivati

HackLabUdine.it
Raspberry Pi e STM32F0
Scheda di valutazione della ST Microelettronics
Discovery kit for STM32 F0 series - with
STM32F051 MCU

ARM 32-bit Cortex-M0 CPU (48 MHz max)


16 to 64 Kbytes of Flash memory
8 Kbytes of SRAM with HW parity checking
1 x 12-bit, 1.0 us ADC (up to 16 channels)
Conversion range: 0 to 3.6V
Separate analog supply from 2.4 up to 3.6 V
Two fast low-power analog comparators with
programmable input and output
One 12-bit D/A converter
Up to 55 fast I/Os
All mappable on external interrupt vectors
Up to 36 I/Os with 5 V tolerant capability
Up to 18 capacitive sensing channels supporting
touchkey, linear and rotary touch sensors
Up to 11 timers
il costo di meno di 10,00 ivato Communication interfaces
2 I2C, 2 USARTs, SPI
HackLabUdine.it
Raspberry Pi e STM32F4
Scheda di valutazione della ST Microelettronics
STM32F4-Discovery basata su ARM 32-bit Cortex-M4
CPU

STM32F407VGT6 168MHz microcontroller featuring 32-bit


ARM Cortex-M4F core, 1 MB Flash, 192 KB RAM
LIS302DL, ST MEMS motion sensor, 3-axis digital
output accelerometer
MP45DT02, ST MEMS audio sensor, omni-directional
digital microphone
CS43L22, audio DAC with integrated class D speaker
driver
USB OTG FS with micro-AB connector
Extension header for all LQFP100 I/Os

http://www.st.com/internet/evalboard/product/252419.jsp
il costo di circa 20,00 ivati

HackLabUdine.it
Raspberry Pi e GertBoard

GertBoard una scheda di espansione delle GPIO per la raspi. Non ancora disponibile. Per dettagli
seguire la discussione sul forum e
http://www.raspberrypi.org/archives/411
http://elinux.org/RPi_Gertboard
www.raspberrypi.org/forum/educational-applications/gertboard

HackLabUdine.it
Raspberry Pi e MCP23017

Un modo economico (sui 2/3 euro) per espandere le I/O usare un Microchip MCP23017 a 16bit. Usa un
bus I2C per dialogare con la MCU e in questo caso con la RPi usando le GPIO0 e GPIO1. In ogni caso va
scritto il software che gestire questo chip.
MCP23017 viene usando anche in Arduino, il quale dispone di una liberia per gestirlo, per aumentare le
I/O.

info per Arduino http://tronixstuff.wordpress.com/2011/08/26/tutorial-maximising-your-arduinos-io-ports/

HackLabUdine.it
Raspberry Pi e Kit Velleman
Nel catalogo della Velleman trovate alcuno kit generici ma
che possono essere usati con la Raspi.
Uno di questi K8055 versione in kit o VM110 versione
assemblata. Questa scheda dispone:

5 ingressi digitali
2 ingressi analogici con possibilit dei applificatore e
attenuatore
8 uscita digitale open collector output (max.
50V/100mA)
0 to 5V, output resistance 1K5
PWM 0 to 100% open collector outputs max
100mA / 40V
La scheda dispone di porta USB. In rete trovate alcuni sviluppatori che hanno realizzato le libreria per
gestire questa scheda sotto Linux.
Nel catalogo trovate altre schede cda poter usare.

info http://www.velleman.eu/products/view/?country=fr&lang=en&id=351346

HackLabUdine.it
Raspberry Pi e...
in rete trovate varie soluzioni che a volte con un po di creativit si possono collegare con la raspi:

Olimex produce diverse schede con diversi MCU e/o CPU. Sia sistemi basati su MCU che sistemi
embedded a costi non elevati. Tenete presente per una eventuale fonte i cui trovare alcune
soluzioni.

https://www.olimex.com/

visto che su Arduino troviamo diverse shileds, possibile adattarle per farle funzionare con l raspi.

HackLabUdine.it
Raspberry Pi espansioni

L'elenco e le possibilit non si fermano qua ed in


continua mutazione.
Un elenco delle vari schede, suggerimenti, ecc
li trovi a questo indirizzo http://elinux.
org/RPi_Expansion_Boards
oltre a Google

HackLabUdine.it
Raspberry Pi e le altre
Le schede viste precedentemente, compreso Arduino ma anche la futura Arduino DUE, non vanno in
competizione con la Raspberry Pi.
Si pensato che la raspi fosse un "concorrente" di Arduino ma invece le due sono complementari, e con
una minima funzionalita in comune della raspi
Se avete voglia di cercare dei concorrenti, io direi che sicuramente tra le concorrenti in senso buono
queste ottime boards con costi un po pi alti. Queste si basano su CPU della Texas Instruments

La BeagleBoard http://beagleboard.org/ (opensorce)


basata su ARM Cortex A8 DM3730 a 1 GHz della Texas Instruments
sopporta Linux, Android, FreeBSD
La BeagleBone http://beagleboard.org/ (opensorce)
basata su ARM Cortex A8 AM3359 720GHz della Texas Instruments
sopporta Linux, Android, FreeBSD, QNX
nata con lo scopo di dare un sistema operativo alla flessibilit di Arduino. Potrebbe essere una
raspi+arduino
PandaBoard dual-core http://pandaboard.org/ (opensorce)
basata su ARM Cortex A9 OMAP4460 1,2 GHz della Texas Instruments
stessa CPU che monta il Galaxy Nexus
sopporta Linux e Android

HackLabUdine.it
Raspberry Pi e le altre
Freescale i.MX53QSB http://www.freescale.com/webapp/sps/site/prod_summary.jsp?
code=IMX53QSB
basata su ARM Cortex A8 i.MX53a 1 GHz della Freescale
no GPIO
sopporta Linux, Android e Windows Embedded Compact 7

ViaTech di recente ha presentato Android System PC (APC). Come intuite ci gir Android nella
verisione 2.3, una una CPU VIa da 800MHz, dispone di HDMI, 512MB di Ram, SD, Ethernet. NON
dispone di GPIO.
http://apc.io/

Questo una nuova board embedded progettata


costruita in Italia basata su ARM9. Ci gir Linux.
costa tra i 24,00 e 29,00.
Nata da chi ha progettata la FoxBoard
http://www.acmesystems.it/aria
pi da progettisti di sistemi embedded.

HackLabUdine.it
Iniziare con la Raspberry Pi
Cosa serve per iniziare:

la scheda Raspberry Pi. La disponibilit attuale scarsa. Va prenotata tramite un pre-ordine da uno
dei due distributori europei:
Premier Farnell/Element14 http://it.farnell.com/raspberry-pi?ref=lookahead
per il momento da Farnell non possibile fare il pre-ordine. Sembra che voglio eliminare
il pre-ordine per un ordine immediato.
RS components http://it.rs-online.com/web/generalDisplay.html?id=raspberrypi

Dopo aver compilato il modulo, dovete aspettare diverse settimane. Quando arriva il vostro turno vi
mandano un email contenente un codice per la conferma del ordine ed il pagamento. Confermato
questo ora non vi resta che aspettare.

Nel mio caso ho ordinato nelle prime ore del 29 febbraio 2012 sia ad RS che da Farnell (ordine
vero e proprio). Ricevute:
Farnell il 25 maggio 2012
RS ricevuta email con codice per la conferma e pagamento il 18 maggio. Ricevuta il 13
giugno.

HackLabUdine.it
Iniziare con la Raspberry Pi
Cosa serve per iniziare:

dopo che avete ordinata e/o ricevuta la Raspberry Pi dovete pensare alle periferiche. Alcune
possono essere ordinate assieme alla Raspberry Pi.
Se volete andare sul sicuro, date un occhiata qui per la compatibilit.

su http://elinux.org/RPi_VerifiedPeripherals trovate l'elenco delle periferiche testate.


Questo elenco in continuo aggiornamento e se usci un periferica non indicata contribuici
comunicando se funzionano oppure eventuali problemi
vi servira:
un buon alimentatore da 5V da almeno 1A con connettore microUSB.
L'alimentazione deve essere stabile per evitare problemi.
per il modello B della Raspi viene indicato un consumo di 700mA (senza periferiche
come per esempio USB e HDMI) + 300mA per eventuale device e alimentazione di
altre schede, per esempio via connettore P1. Un fusibile tipo polyfuses da 1.1A
protegge la scheda.

HackLabUdine.it
Iniziare con la Raspberry Pi
Cosa serve per iniziare:
una scheda di memoria Secure Digital (SD) per il sistema operativo, programmi e dati.
Dalla velocit della SD dipende molto dalla velocit generale della raspi soprattutto se
deve fare diversi accessi alla SD. La velocit viene espressa con un numero e sono
classificate cosi (da http://it.wikipedia.org/wiki/Secure_Digital ):
Classe 4 velocit in scrittura minima 4 MB/s
Classe 6 velocit in scrittura minima 6 MB/s
Classe 10 velocit in scrittura minima 10 MB/s
Come dimensione il minimo sono 2GB. Per esempio l'immagine della Debian occupa
circa 1,5GB
Le prestazioni sono indicative e variano da produttore a produttore e tra modello e
modello dello stesso produttore.
SD pu essere un fattore critico. Se ci sono delle incompatibilita tra Raspi e SD o
Linux e SD, la Raspi non lavora, per esempio bloccandosi durante il boot o dare
altri problemi. Potrebbe essere necessario aggiornare/compilare il kernel
su http://elinux.org/RPi_VerifiedPeripherals#SD_cards (stesso link della pagina
precedente) trovate la compatibilit
su http://elinux.org/RPi_Performance#SD_card le prestazioni di alcune SD

HackLabUdine.it
Iniziare con la Raspberry Pi
Cosa serve per iniziare:

Periferiche USB
Al di la di come userete la Raspberry Pi potete avere bisogno delle periferiche USB.
Tenete presente che la corrente massima sulla porta USB limitata nella Raspberry Pi a 140mA per porta.
Ogni porta protetta da un fusibile tipo polyfuses da 140mA, pertanto il consumo della periferica non devo
superare tale limite. Lo standard USB prevede massimo 500mA e si trova di solito dei PC.

Alcuni consigli
verificate la corrente delle periferiche USB prima di collegarla alla porta USB della raspi.
nel caso usate un HUB USB provvisto di alimentatore. Consigliato anche se la periferica consuma sotto i
140mA ma vicina.

Periferiche
tastiera e mouse USB non dovrebbero avere problemi se rimanere nei consumi indicati.
tastiera e mouse wireless compatibili con Linux.
tutte le altre periferiche USB (bluetooh, wifi, webcam usb ecc) compatibilit con linux

Monitor
L'uscita video una HDMI pertanto dovete usare un monitor con tale ingresso oppure con dei convertitori
(HDMI>DVI)

Usando la Raspeberry come server con accesso da remoto, le periferiche di cui sopra vi servono solo al primo
boot, poi potete configurare per esempio sshd per l'accesso remoto.

HackLabUdine.it
Raspberry Pi links
Link utili
Sito ufficiale http://www.raspberrypi.org/

Fonti d'aiuto:
Documentazione, schema e quant'altro http://elinux.org/R-Pi_Hub (alcuni documenti sono in
italiano)
Verifica delle perififeriche http://elinux.org/RPi_VerifiedPeripherals
Troubleshooting (problemi noti) http://elinux.org/R-Pi_Troubleshooting
Forum ufficiale: http://www.raspberrypi.org/phpBB3/index.php

Altre fonti:
Communit RaspberryPi su Element14 http://www.element14.com/community/groups/raspberry-pi?
ICID=hp_raspberry
Communit RaspberryPi su DesignSpark http://www.designspark.com/theme/raspberrypi
Gruppo Raspberry Italia su Google Groups https://groups.google.com/forum/?hl=it&fromgroups#!
forum/raspberrypi-italia
la prima rivista sulla raspi TheMagPi http://www.themagpi.com/
noi http://www.hacklabudine.it

HackLabUdine.it
Raspi, OS, boot...
Prepariamo SD 1/3
Tenete presente che:
gli esempi che user si basano su Debian
ovviamente l'immagine per la raspberry Debian

Download
scaricate la versione la versione Debian Wheezy Pubblic Beta da http://www.raspberrypi.
org/archives/1435
In alternativa da http://www.raspberrypi.org/downloads si pu scaricare la versione di Debian 6
(immagine del 19/04/2012) per Raspi oppure sono disponibili altre distribuzioni.

Preparare SD
Su http://elinux.org/RPi_Easy_SD_Card_Setup trovate le indicazioni su come preparare SD usando come
computer con Linux o Win o Mac. Nel nostro caso usciamo Linux dalla console
per sicurezza verifica l'integrit del file 2012-06-18-wheezy-beta.zip scaricato prima con
sha1sum

massimiliano@panda:/tmp/raspi$ sha1sum 2012-06-18-wheezy-beta.zip


cbe18f5a27ee2d3110d71b8316bfa465a9bc29f6 2012-06-18-wheezy-beta.zip
massimiliano@panda:/tmp/raspi$

confronta il valore in HEX con quello del sito precedente. I due valori devono essere
uguali.

HackLabUdine.it
Raspi, OS, boot...
Prepariamo SD 2/3
decomprimiamo il file ZIP
massimiliano@panda:/tmp/raspi$ unzip 2012-06-18-wheezy-beta.zip
Archive: 2012-06-18-wheezy-beta.zip
inflating: 2012-06-18-wheezy-beta.img
massimiliano@panda:/tmp/raspi$

Inserite un lettore per la SD/MMC con la card inserita. Aspettate alcuni secondi e vediamo a quale
device corrisponde SD usando df -h
massimiliano@panda:/tmp/raspi$ df -h
File system Dimens. Usati Disp. Uso% Montato su
.....
/dev/sdc1 3,8G 3,7G 49M 99% /media/C450-53C6
massimiliano@panda:/tmp/raspi$

Nel mio caso a /dev/sdc. Il valore 1 indica la partizione 1 sulla SD /dev/sdc. Nel vostro caso
potrebbe essere qualche altra cosa. Se non riuscite ad individuala togliete SD e date df -h inserite
SD e di nuovo df -h Controllate le differenze.
smontate la partizione con umount
massimiliano@panda:/tmp/raspi$ umount /media/C450-53C6

HackLabUdine.it
Raspi, OS, boot...
Prepariamo SD 3/3
ora copiamo l'immagine scaricata. Tutto il contenuto della SD viene cancellato!
sudo dd bs=1M if=2012-06-18-wheezy-beta.img of=/dev/sdc
[sudo] password for :
1850+0 record dentro
1850+0 record fuori
1939865600 byte (1,9 GB) copiati, 370,174 s, 5,2 MB/s
massimiliano@panda:/tmp/raspi$
dura alcuni minuti

ora SD pronta per la Raspberry Pi, salvo problemi.


nella SD vengono create due partizioni, una da circa 56MB e una da 1,8GB
se la vostra SD era da oltre i 2Gb lo spazio in eccesso non stato usato. Per utilizzare lo spazio
libero dove modificare le partizioni in due modi:
l'immagine della Debian usata prevede al primo boot un menu per effettuare alcune operazioni
di settaggio preliminare. Tra questi previsto il resize alla massima dimensione della SD. Viene
impostata per il boot successivo
oppure per la versione precedente di Debian o se volete modificarle a vostro piacimento, potete
usare utility grafica gparted. Trovare un tutorial su http://www.hacklabudine.
it/tutorial/raspberry-pi/partizione-sd

In alternativa potete seguire le indicazioni per preparare la SD in modo grafico usando ImageWrite
da http://elinux.org/RPi_Easy_SD_Card_Setup

HackLabUdine.it
Raspi, OS, boot...
Il primo boot

Inserite SD nella raspi


collegate il tutto, tastiera, mouse, video e cavo di rete
accendete la raspi
la raspi fa il boot, Sul video compariranno i vari messaggi classici di
Linux.
se tutto va bene arrivate alla schermata che segue... nella prossima
slide

HackLabUdine.it
Raspi, OS, boot...
Il primo boot
Con questa versione della Debian al primo boot viene eseguita in automatico l'utility di configurazione
rasp-config. Come vedete dallo screenshot qui sotto prevede alcune opzioni

HackLabUdine.it
Raspi, OS, boot...
L'utility di configurazione raspi-config presenta un bug sulla configurazione della tastiera
da me usata. Per il resto delle opzioni come resize della partizione, impostazioni della nazione,
abilitare ssh e time zone nessun problema.

L'immagine del sistema operativo Debian per la Raspberry Pi configurato con tutte le
impostazioni per l'inglese.

scegliete le varie voci per la configurazione in rasp-config di cui sopra.

possiamo in ogni caso usare i comandi per questo scopo della Debian.

raspi-config puo essere richiamata successivamente dalla console


pi@raspberrypi ~ $ sudo raspi-config

Di default il abbiamo
nome utente: pi
password: raspberry

HackLabUdine.it
Raspi, OS, boot...
Vediamo come configurare manualmente le vari opzioni

al prompt vi viene chiesto :


login: pi
password: raspberry

ora impostiamo l'ambiente per la nostra lingua, paese, caratteri...


pi@raspberry:~$ sudo dpkg-reconfigure locales
ora seguite le indicazioni a video, scegliete per esempio it_IT.UTF-8
scegliete quella di default se avete fatto pi scelte

ora il turno della tastiera


pi@raspberry:~$ sudo dpkg-reconfigure keyboard-configuration

per finire la timezone come Europa/Roma


pi@raspberry:~$ sudo dpkg-reconfigure tzdata

HackLabUdine.it
Raspi, OS e il boot...
ora dalla console fate un primo aggiornamento della Debian. Il firmware della raspi viene distribuito
anche tramite gli aggiornamenti

pi@raspberry:~$ sudo apt-get update


pi@raspberrypi:~$ sudo apt-get -u dist-upgrade

riaviamo il tutto con un


pi@raspberry:~$ sudo reboot

Dopo il reboot ci si presenta il login, entriamo come fatto precedentemente e vediamo se l'ambiente grafico
LXDE funziona
pi@raspberrypi ~ $ startx

Vediamo cosa troviamo in LXDE....

Di default la Raspberry Pi parte in modo console. possibile fare di entrare subito in modo grafico al boot.
pi@raspberry:~$ sudo nano /etc/inittab
cercate la riga id:2:initdefault e modifica in id:5:initdefault

al prossimo riavvio il sistema parte in modo grafico.

HackLabUdine.it
Raspberry Pi - Firmware
In caso di problemi, per sviluppo o anche per curisit pu essere necessario aggiornare il kernel e/o il
firmware della GPU senza aspettagli gli aggiornamenti rilasciati tramite i pacchetti

Intanto per verificare le versioni in uso

uname -a
pi@raspberrypi ~ $ uname -a
Linux raspberrypi 3.1.9+ #149 PREEMPT Thu Jul 5 01:33:01 BST 2012 armv6l
GNU/Linux
pi@raspberrypi ~ $

mentre quello della GPU


pi@raspberrypi ~ $ /opt/vc/bin/vcgencmd version
Jul 1 2012 12:48:16
Copyright (c) 2012 Broadcom
version 323014 (release)
pi@raspberrypi ~ $

HackLabUdine.it
Raspberry Pi - Firmware
Per rendere veloce e semplice la cosa stata rilasciata l'utility rpi-udate (sviluppata da Hexxeh)
scaricabile da https://github.com/Hexxeh/rpi-update/
dove trovi anche come installarla che un operazione semplice che prevede questi semplici passi

pi@raspberrypi ~ $ wget http://goo.gl/1BOfJ -O /usr/bin/rpi-update


pi@raspberrypi ~ $ chmod +x /usr/bin/rpi-update
pi@raspberrypi ~ $ sudo apt-get install ca-certificates

Ora per aggiornare il firmware basta usare

pi@raspberrypi ~ $ sudo rpi-update


Raspberry Pi firmware updater by Hexxeh, enhanced by AndrewS
Performing self-update
Autodetecting memory split
Using ARM/GPU memory split of 192MB/64MB
Updating firmware (this will take a few minutes)
Your firmware is already up to date
pi@raspberrypi ~ $

In caso era gi aggiornato.

HackLabUdine.it
Raspberry Pi - Firmware
nei messaggi precedenti era presenta anche

Using ARM/GPU memory split of 192MB/64MB

Questo indicata come sono divisi i 256MB della RAM. In questo caso di default abbiamo :

192MB per la CPU ARM


64MB per la GPU

Ma potremmo avere:

224M ARM, 32M GPU split : Maximum ARM memory. Good for ARM desktop use. No accelerated
video or 3D possible.
192M ARM, 64M GPU split : Reasonable ARM memory. Simple video (omxplayer) or 3D (quake) is
possible. This is the default.
128M ARM, 128M GPU split : Use this for heavy 3D work, or 3D plus video. Needed for XBMC.

L'utility rpi-update permette di modificare questi parametri (ARM/GPU memory split)

Maggiori informazioni sul firmware e memory split su http://elinux.org/R-


Pi_Troubleshooting#Choosing_the_right_ARM.2FGPU_memory_split

HackLabUdine.it
Raspberry Pi e Python
Di default (come in tutte le distribuzioni Linux) troviamo gi installato Python nella versione 2.7

pi@raspberrypi ~ $ python
Python 2.7.3rc2 (default, Apr 23 2012, 04:52:06)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>

Tra i pacchetti disponibili nella Debian che stiamo usando c' Python 3.2 il quale non installato di
default, cosi come neanche PIP per l'installazione dei pacchetti Python ospitati suo sito http://pypi.
python.org/pypi . PIP (Python Packet Index) ideale per l'installazione veloce e aggiornata dei vari
pacchetti Python presenti nel repository ufficiale. Visto che ci servir vediamo di installarlo sulla raspi.

HackLabUdine.it
Raspberry Pi e Python-PIP
Dalla console della raspy:
pi@raspberrypi:~$ sudo apt-get install python-pip

al termine vediamo se stato installato correttamente.

pi@raspberrypi ~ $ python
Python 2.7.3rc2 (default, Apr 23 2012, 04:52:06)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import pip
>>> dir(pip)
['FrozenRequirement', 'InstallationError', '__builtins__', '__doc__',
'__file__', '__name__', '__package__', '__path__', 'autocomplete',
'backwardcompat', 'basecommand', 'baseparser', 'bootstrap',
'call_subprocess', 'command_dict', 'command_names', 'commands',
'console_to_str', 'difflib', 'download', 'exceptions',
'get_installed_distributions', 'load_all_commands', 'load_command',
'locations', 'log', 'logger', 'main', 'optparse', 'os', 'parser',
're', 'status_codes', 'subprocess', 'sys', 'util', 'vcs',
'version_control', 'walk_packages']
>>>
HackLabUdine.it
Raspberry Pi e Python-PIP

PIP stato installato correttamente. I

Sar usato per installare:

Django
il modulo RPi.GPIO

HackLabUdine.it
Raspberry Pi e Django
Installare il WEB Framework Django

Django uno strumento per sviluppare in ambiente WEB sia per sviluppare
siti che per applicazioni web. scritto in Python
opensource.
Se non lo conosci e vuoi approndire parti da https://www.djangoproject.com/

HackLabUdine.it
Raspberry Pi e Django
Procediamo con l'installazione di Django

pi@raspberrypi ~ $ sudo pip install django


Downloading/unpacking django
Running setup.py egg_info for package django

Installing collected packages: django


Running setup.py install for django

changing mode of /usr/local/bin/django-admin.py to 755


Successfully installed django
Cleaning up...
pi@raspberrypi ~ $

Non ha dato errori, ma vediamo se installato direttamente da Python

pi@raspberrypi ~ $ python
>>> import django
>>> print django.get_version()
1.4
>>>
HackLabUdine.it
Raspberry Pi e Django
Facciamo un piccolo esempio

Creiamo una sottodirectory demo per mettere gli esempi che faremo e una ulteriore sottodirectory
django e posizioniamoci all'interno

pi@raspberrypi ~ $ mkdir -p demo/django


pi@raspberrypi ~ $ cd demo/django/
pi@raspberrypi ~/demo/django $

creiamo un nuovo progetto chiamato raspberrypi

pi@raspberrypi ~/demo/django $ django-admin.py startproject


raspberrypi
pi@raspberrypi ~/demo/django $ Nome del
progetto

django-admin crea in automatico tutto il necessario per eseguire questo progetto.

HackLabUdine.it
Raspberry Pi e Django
vediamo cosa stato fatto da django-admin.py :

pi@raspberrypi ~/demo/django $ ls -R
.:
raspberrypi

./raspberrypi:
manage.py raspberrypi

./raspberrypi/raspberrypi:
__init__.py settings.py urls.py wsgi.py
pi@raspberrypi ~/demo/django $

stata creata una sottocartella con il nome del progetto che contiene il file manager.py e un'ulteriore
sottocartella raspberrypi con dei file.

Questa la struttura base di un progetto Django. Questi file contengono le configurazioni iniziali. In base
alle necessita saranno modificati e creati atri file di configurazione, db ecc.

HackLabUdine.it
Raspberry Pi e Django
Con quanto fatto da django-admin.py possiamo gi vedere se funziona via WEB.

pi@raspberrypi ~/demo/django $ python raspberrypi/manage.py runserver IP_RASPI:8080


Validating models...

0 errors found
Django version 1.4, using settings 'raspberrypi.settings' Inserisci IP della tua
Development server is running at http://192.168.0.205:8080/ raspi. 8080 la porta
Quit the server with CONTROL-C. usata

Notate che abbiamo dato un numero IP che quella della raspi. In questo modo possiamo accedervi al server
Django via web da un altro terminale. 8080 la porta usata. Se non si specificato IP:PORT il server rimane in
ascolto su localhost:8080

HackLabUdine.it
Raspberry Pi e Django
Ora da un browser andiamo su IP_raspberry:8080 (in questo caso 192.168.0.205:8080)

Questa la pagina di benvenuto di default del progetto Django chiamato raspberry

HackLabUdine.it
Raspberry Pi e Django

Chi conosce Django avr notato che l'esempio fatto il primo tutorial della
documentazione Django reperibile da https://docs.djangoproject.com/en/1.
4/intro/tutorial01/

Infatti come avresti fatto in un computer tradizionale anche qui lo fai nello stesso
modo.
Niente di diverso.

possibile usare Django per fare dei progetti WEB sulla Raspberry Pi. Anche se
Django potente e flessibile, va tenuto contro delle caratteristiche hardware della
RPi.

HackLabUdine.it
Raspberry Pi + Elettronica

Ora il turno con l'elettronica e RPi


Passiamo ad alcuni esempio usando

le GPIO
da Python
da riga di comando

Arduino e Python

HackLabUdine.it
Raspberry Pi + GPIO
Useremo il modulo RPi.GPIO per Python per gestire le GPIO della Raspberry Pi.
Questo modulo ancora in sviluppo e mancano alcune parti, ma possibile
usarlo con le limitazioni del caso e/o per iniziare a giocarci..
Nelle prove che ho fatto non ho trovato particolari gravi bug.

Le informazioni sulle GPIO della Raspi sono su http://elinux.


org/RPi_Tutorial_Easy_GPIO_Hardware_%26_Software
La documentazione sul modulo RPi.GPIO disponibile http://code.google.
com/p/raspberry-gpio-python

RPi.GPIO gi presente in Python Packet Index. Pertanto per installarla usciamo


l'utility pip

HackLabUdine.it
Raspberry Pi + GPIO
installiamo il modulo RPi.GPIO

pi@raspberrypi ~/demo $ sudo pip install rpi.gpio


Downloading/unpacking rpi.gpio
Running setup.py egg_info for package rpi.gpio

Installing collected packages: rpi.gpio


Running setup.py install for rpi.gpio

Successfully installed rpi.gpio


Cleaning up...
pi@raspberrypi ~/demo $
Nota: nel caso mancasse va installato anche pip install distribute (presente con la Debian Beta in uso).

Verifichiamo se il modulo installato

pi@raspberrypi ~/demo $ python


Python 2.7.3rc2 (default, Apr 23 2012, 04:52:06)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import RPi.GPIO
>>>
HackLabUdine.it
Raspberry Pi + GPIO
Prima di iniziale distinguiamo i due modi con cui il modulo RPi.GPIO pu chiamare i pin della GPIO

usando la numerazione dei pin assegnata al connettore P1 della BOARD


viene definita con GPIO.setmode(GPIO.BOARD)
usando la nomenclatura del BCM (GPIOnn) http://elinux.org/RPi_BCM2835_GPIOs
viene definita con GPIO.setmode(GPIO.BCM)

per esempio l'uso del P1-12 pu essere chiamato


con pin numero 12 (con setmode BOARD ) oppure
GPIO18 (con setmode BCM )

si usa GPIO.setmode() per indicare il modo da usare. Se non specificato viene inteso che si sta
usando il modo BOARD
HackLabUdine.it
Raspberry Pi + GPIO
Ora realizziamo lo schema qui sotto per un helloworld nel modo delle MCU

HackLabUdine.it
Raspberry Pi + GPIO
Proviamo a fare lampeggiare ogni secondo un LED da Python in modo interattivo

pi@raspberrypi /tmp $ sudo python


Python 2.7.3rc2 (default, Apr 23 2012, 04:52:06)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import RPi.GPIO as GPIO, time
>>> GPIO.setup(12, GPIO.OUT)
>>> while 1:
... GPIO.output(12, True)
... time.sleep(1)
... GPIO.output(12, False)
... time.sleep(1)
...

HackLabUdine.it
Raspberry Pi + GPIO
Oltre a Python + RPi.GPIO possiamo manipolare le GPIO in altri linguaggi.

Su http://elinux.org/RPi_Low-level_peripherals#Code_examples trovate librerie ed


esempi per usare le GPIO in C, Java, Python ecc

Anche da riga di comando possiamo usare le GPIO usando WiringPi che


permette la manipolazione delle I/O da riga di comando in modo molto semplice.

Vi ricordate di WiringPi menzionato nelle slides precedenti? Oltre a usarlo per


scrivere codice, dispone di una comoda utility per le GPIO da usare da terminare
sviluppata come esempio di WiringPi.

HackLabUdine.it
Raspberry Pi + GPIO
da console

Ora procediamo alla compilazione e relativa installazione come riportato su https://projects.drogon.


net/raspberry-pi/wiringpi/download-and-install/

cd /tmp
wget http://project-downloads.drogon.net/files/wiringPi.tgz
tar xfz wiringPi.tgz
cd wiringPi/wiringPi
make
sudo make install
cd ../gpio
make
sudo make install
cd ../examples
make

stato installato tutto WiringPi compreso utlity gpio

HackLabUdine.it
Raspberry Pi + GPIO
da console

Nel file decompresso troviamo una directory contenete degli esempi per la consultazione. Visto che in
/tmp che viene ripulita al prossimo boot vi conviene salvarla se volete consultarla le prossime volte.

L'utility gpio dispone anche di un manuale in linea

pi@raspberrypi /tmp $ man gpio

GPIO(14 June 2012)

NAME
gpio - Command-line access to Raspberry Pi GPIO

SYNOPSIS
gpio [-g] <read/write/pwm/mode...>

DESCRIPTION
GPIO is a command line tool to allow the user easy access
to the GPIO pins on the Raspberry Pi.

HackLabUdine.it
Raspberry Pi + GPIO
da console

per indicare il modo in cui intendiamo usare il pin se come IN OUT PWM si usa

gpio -g mode BCM_GPIO tipo

Esempio usando lo stesso circuito precedente:

pi@raspberrypi /tmp $ gpio -g mode 18 out


in questo caso indichiamo di usare la GPIO18 come uscita

Per scrivere un valore, in questo caso per accendere il led


pi@raspberrypi /tmp $ gpio -g write 18 1
con 1 poniamo a livello logico HIGH la GPIO18 accendendo il led

Per scrivere un valore, in questo caso per accendere il led


pi@raspberrypi /tmp $ gpio -g write 18 0
con 0 poniamo a livello logico LOW la GPIO18 spegnendo il led

HackLabUdine.it
Raspberry Pi + GPIO

Da tenere presente che tutto l'ecosistema Raspberry appena nato e tante


cose stanno nascendo, cosi come le cose che abbiamo usato per le GPIO
sono ancora allo stato iniziare, da completare e con dei bug.

Non pensate che la Raspberry Pi sia un sistema finito, trovate tutto pronto.
per smanettoni soprattutto per lo usa al di fuori di un computer

HackLabUdine.it
Raspberry Pi
+
Arduino

HackLabUdine.it
Raspberry Pi + Arduino
Ora il turno di Arduino. Prima di tutto stabiliamo come devono collegarli tra loro.

semplicemente usando il cavo USB da collegare alla Raspi e Arduino come se quest'ultimo fosse
collegato ad un PC. In questo caso perdiamo una porta USB della Raspyberry Pi.
usare le UART

Arduino (5V) direzione Raspberry Pi (3.3V)

PIN Descrizione Descrizione PIN

0 RX TX 8 (GPIO14)

1 TX RX 10 (GPIO15)

ATTENZIONE
va usando un circuito come convertitore di livello di
tensione. Per esempio un SN74LS244 o CD4050

via Wireless (ZigBee, WIFI Bluetooth)


ethernet
I2C/SPI
....
HackLabUdine.it
Raspberry Pi + Arduino
Come procediamo

usciamo la porta UART della raspi per collegarci con Arduino lasciando libero un connettore USB.
questo comporta che dobbiamo inserire un circuito per mantenere compatibile le due tensioni di
lavoro in modo da non danneggiare la raspi.
Per questo scopo usciamo un economico CD4050B
datasheet http://octopart.com/partsearch#search/requestData&q=cd4050

Arduino tramite il suo pin VIN viene alimentato a 5V direttamente dalla raspi.
Scriveremo un piccolo programma per Arduino e uno in Python che gira sulla raspi.

Il CD4050 un integrato che fa da buffer/converter senza invertire il valore logico in ingresso. Lo


alimentiamo a 3,3V in modo che la tensione massima di uscita 3,3V con un valore logico 1 ed
ovviamente 0V quando 0. State attenti a non usare il CD4049 che invece fa da inverter, invertento il
valore in ingresso sul uscita.

CD4050 CD4049
non usare

HackLabUdine.it
Raspberry Pi + Arduino

HackLabUdine.it
Raspberry Pi + Arduino
Tabella dei collegamenti Raspi > CD4050 > Arduino e descrizione

Raspberry Pi CD4050 Arduino


PIN TYPE TENSIONE PIN NOTE PIN TENSIONE TYPE PIN
P1-8
TX 3V3 3 2 3V3 RX 0
(GPIO14)
P1-10
RX 3V3 4 5 5V TX 1
(GPIO15)

5V POWER
P1-2 5V 5V 5V POWER IN VIN
OUT Alimenta Arduino a
5V
P1-6 GND GND 8 GND 8 GND GND
3V3 POWER Alimenta il CD4050
P1-1 3V3 1 1
OUT a 3V3

HackLabUdine.it
Raspberry Pi + Arduino
Scriviamo questo piccolo codice per Arduino tramite il suo IDE

1. int led = 13;


2.
3. void setup() {
4. pinMode(led, OUTPUT);
5. Serial.begin(9600);
6. }
7.
8.
9. void loop() {
10.
11. if (Serial.available() > 0) {
12. char comando = toLowerCase(Serial.read());
13. // usciamo i caratteri a A ricevuti via seriale per accendere il led
14. if (comando == 'a') {
15. digitalWrite(13, HIGH);
16. }
17. // gli altri caratteri lo spengono
18. else {
19. digitalWrite(13, LOW);
20. }
21. }
22. }

HackLabUdine.it
Raspberry Pi + Arduino
Il codice banale e niente di particolare. Accende il LED se riceve un carattere a o A tramite la seriale e
lo spegne per ogni altro carattere ricevuto.

Scritto il codice trasferiamo al nostro Arduino.


Nota che puoi installare IDE Arduino sulla RPi, scrivere il codice e trasferirlo a Arduino via USB.

Passiamo al semplice codice scritto in Python sulla Raspberry Pi. Useremo direttamente la shell
interattiva di Python. Se non presente va installato il pacchetto python-serial che il modulo per
gestire la seriale da questo linguaggio. Per installarlo:

sudo apt-get -u install python-serial

La porta seriale 0 sulla RPi si trova su /dev/ttyAMA0 . La stessa occupata da getty che permette di
accedere alla raspi via seriale. Se volete disattivare definitivamente commentate la riga /etc/inittab

#Spawn a getty on Raspberry Pi serial line


#T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100

HackLabUdine.it
Raspberry Pi + Arduino
dalla un terminale della raspi....

pi@raspberrypi ~/demo $ python


Python 2.7.3rc2 (default, Apr 23 2012, 04:52:06)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import serial ind. della
>>> arduino=serial.Serial('/dev/ttyAMA0') seriale
>>> print arduino
Serial<id=0x687290, open=True>(port='/dev/ttyAMA0', baudrate=9600,
bytesize=8, parity='N', stopbits=1, timeout=None, xonxoff=False,
rtscts=False, dsrdtr=False) accendiamo il
>>> arduino.write('a') LED con a
1 spegniamo il
>>> arduino.write('s') LED
1
>>>

con arduino.write() inviamo il a Arduino il valore sia seriale, che se a o A il LED si accende
mentre con gli altri carattere si spegne.

HackLabUdine.it
Raspberry Pi + Arduino
Ora un altro piccolo esempio usando ADC di Arduino. Un potenziomentro ci permetter di variare la
tensione in ingresso del pin A0 del ADC di Arduino. La lettura sar inviata alla raspi via seriale

5V potenz. GND

pin A0 Arduino

Ora vediamo di scrivere il codice per:

Arduino
il quale legge il valore di A0
lo converte gi in valore di tensione
lo invia via seriale
sulla raspi scriviamo un programmino in Python per la lettura (basterebbe un semplice terminale
seriale)

HackLabUdine.it
Raspberry Pi + Arduino
Scriviamo questo piccolo codice per Arduino tramite il suo IDE

1. const int PinPot = A0; // il potenziometro collegato alla ingresso analogico A0


2. /*
3. definiamo la variabile di conversione della valore_ADC - tensione
4. - 1024 sono le combinazioni della risoluzione del ADC a 10bit e va da 0 a 1023.
5. Per determinare quando corrisponde un byte si usa Vref / 1024 dove Vref la
6. tensione di riferimento.
7. - 5.0 la tensione di riferimento che quella di Vcc.
8. - 5.0 / 1024 = corrispondenza in tensione del singolo byte di conversione.
9. Equivale a circa 0,0049V x byte. Esempio se ADC legge 512 significa che abbiamo in
10. ingresso analogico ci sono circa 2,5V (512*0,0049)
11. */
12. // float tipo numerica a virgola mobile.
13. float VByte = 5.0/1024; // Otteniamo a che tensione corrisponde un Byte
14. int ValPot = 0; // variabile del valore del potenziometro letto ADC
15.
16. void setup() {
17.
18. Serial.begin(9600);
19.
20. }

segue blocco loop()


HackLabUdine.it
Raspberry Pi + Arduino
continua

1. void loop() {
2.
3. ValPot = analogRead(PinPot); //leggiamo A0
4. // Ora inviamo la tensione letta al Raspi,
5. Serial.print("Tensione: ");
6. // prima convertiamo il valore digitale per il valore intensione del Byte
7. // e lo inviamo alla seriale
8. Serial.print(ValPot*VByte);
9. Serial.println("Volt");
10. delay(100);
11.
12. }

Scritto il codice trasferiamo al nostro Arduino.


Passiamo a scrivere il codice per la raspi

HackLabUdine.it
Raspberry Pi + Arduino
Ora il codice in Python sulla raspi scrivendolo in un file.
Dalla console della raspi

pi@raspberrypi ~/demo/python $ nano arduino_adc.py

import serial
arduino=serial.Serial('/dev/ttyAMA0') # se via USB ttyACM0 per Arduino
UNO
while 1:
print arduino.readline()

salviamo e diamo il comando

pi@raspberrypi ~/demo/python $ python arduino_adc.py

Vediamo scorrere il valore della tensione letto da Arduino e variando il potenziometro vediamo le
variazioni a video

HackLabUdine.it
Raspberry Pi + Arduino

Un alternativa usare il protocollo firmata. Questo un protocollo di comunicazione tra HOST e MCU
come nel nostro caso Arduino. Esistono sia le librerie per Arduino (IDE contiene degli esempi) che per
Python e C/C++

Nel piccolo e semplice esempio precedente era per farvi vedere come far comunicare la raspi e arduino
tramite seriale e come costruisci un semplice circuito di conversione delle tensioni.
Il codice funziona anche usando la porta USB.

Avete visto come fare un piccolo ed economico convertitore dei livello delle tensioni per le GPIO.

HackLabUdine.it
Raspberry Pi...
Questa panoramica sulla Raspberry Pi terminata.

Per chi interessato, in particolare in ambito elettronico, stiamo


vedendo di uno o pi incontri su

Laboratorio Arduino & Raspberry Pi. Esempi di integrazione

potete dare la preferenza o proporre altre idee e suggerimenti su


http://www.hacklabudine.it/corso
http://goo.gl/kZq62

#raspberrypi #opensource #arduino #hack #gpio #linux #arm

HackLabUdine.it
http://creativecommons.org/licenses/by-sa/3.0/

Introduzione alla Raspbery Pi by Massimiliano D'Ambrosio - hacklabudine is licensed under a Creative


Commons Attribuzione - Condividi allo stesso modo 3.0 Unported License.
Based on a work at www.hacklabudine.it.
Permissions beyond the scope of this license may be available at http://www.hacklabudine.
it/come-contattarci.

#raspberrypi #opensource #arduino #hack #gpio #linux #arm

HackLabUdine.it