1. Hands on Embedded Linux with BeagleBone Black
Daniele Costarella - Mario Pucciarelli
PRIMI PASSI CON LA SCHEDA BEAGLEBONE BLACK
La scheda BeagleBone Black presente due file di pin che permettono di andare a
collegarsi alle periferiche del microcontrollore. E' possibile quindi lavorare con led,
pulsanti, tasti, ecc.
Nel dettaglio i collegamenti disponibili sono i seguenti:
ACCESSO SSH
Per interfacciarsi con la scheda si può utilizzare una connessione SSH, che viene avviata
da terminale con il comando seguente:
ssh root@beaglebone.local
NB: le credenziali di accesso alla board sono user = root – password = root
9 Novembre 2013 – Giffoni Valle Piana (SA)
2. Hands on Embedded Linux with BeagleBone Black
Daniele Costarella - Mario Pucciarelli
Nel caso in cui si utilizzi Windows anziché Linux è necessario seguire i passi indicati nel
seguito.
Innanzitutto è necessario installare gli opportuni driver che possono essere reperiti ai
seguenti link:
•
Windows 64 bit:
http://beagleboard.org/static/Drivers/Windows/BONE_D64.exe
https://github.com/jadonk/beaglebone-getting-started/tree/sysco-ch-signed-driv
ers/Drivers/Windows (Driver certificati)
•
Windows 32 bit:
http://beagleboard.org/static/Drivers/Windows/BONE_DRV.exe
Poi è necessario scaricare il programma terminale Putty al seguente indirizzo:
http://www.putty.org/
Avviato Putty, lo si configura creando una connessione SSH verso l'indirizzo 192.168.7.2
sulla porta 22 dopodiché si avvia la connessione semplicemente cliccando su Connect. Si
vedrà un messaggio di avviso da ignorare poi si avrà accesso alla board e sarà possibile
fare il login.
INSTALLAZIONE LIBRERIA PYTHON
Per poter usare le periferiche programmando la scheda in Python è necessario installarvi
delle librerie specifiche che possono essere trovate ad esempio sul sito Adafruit.
1. La prima cosa da fare è ottenere ovviamente un accesso SSH alla board (vedi
sopra)
2. Si imposta la data e l'ora per essere sicuri che sia corretta (per fare questa
operazione è necessario ovviamente avere la board collegata ad internet
altrimenti non potrà essere raggiunto il server dell'ora) :
/usr/bin/ntpdate b s u pool.ntp.org
3. Si installa la libreria mediante il comando:
opkg update && opkg install pythonpip pythonsetuptools pythonsmbus
pip install Adafruit_BBIO
4. Subito dopo aver installato la libreria si può verificare l'effettivo funzionamento
dando il comando:
9 Novembre 2013 – Giffoni Valle Piana (SA)
3. Hands on Embedded Linux with BeagleBone Black
Daniele Costarella - Mario Pucciarelli
python c "import Adafruit_BBIO.GPIO as GPIO; print GPIO"
Ciò dovrebbe fare in modo che a video venga visualizzato il seguente messaggio:
<module 'Adafruit_BBIO.GPIO' from
'/usr/local/lib/python2.7/distpackages/Adafruit_BBIO/GPIO.so'>
E' possibile anche verificare l'installazione eseguendo il comando "python" per
abilitare l'interprete e dando il comando di importazione della libreria:
import Adafruit_BBIO.GPIO as GPIO
print GPIO
5. Il che dovrebbe far comparire ancora una volta il messaggio di sopra
LED BLINKING
Ovviamente per prima cosa si devono andare a realizzare gli opportuni collegamenti
come si può vedere nella seguente immagine:
9 Novembre 2013 – Giffoni Valle Piana (SA)
4. Hands on Embedded Linux with BeagleBone Black
Daniele Costarella - Mario Pucciarelli
A questo punto è possibile lavorare direttamente dalla console:
1. Lanciare la console
# python
Python 2.7.3 (default, Apr 3 2013, 21:37:23)
[GCC 4.7.3 20130205 (prerelease)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>
2. Importare la libreria
>>> import Adafruit_BBIO.GPIO as GPIO
3. Impostare il pin di uscita desiderato come output (di default sono tutti input)
>>> GPIO.setup("P9_41", GPIO.OUT)
4. Accendere il led
>>> GPIO.output("P9_41", GPIO.HIGH)
5. Spegnere il led
>>> GPIO.output("P9_41", GPIO.LOW)
A parte il comando diretto è possibile scrivere un semplice programma per l'interprete
Python, seguendo la procedura descritta:
1. Creare un nuovo file
2. # nano blink.py
3. Scrivere nel file il seguente codice
import Adafruit_BBIO.GPIO as GPIO
import time
GPIO.setup("P9_41 ", GPIO.OUT)
while True:
GPIO.output("P9_41 ", GPIO.HIGH)
time.sleep(0.5)
GPIO.output("P9_41 ", GPIO.LOW)
time.sleep(0.5)
4. Salvare ed uscire CTRL-x e poi Y per dare conferma.
9 Novembre 2013 – Giffoni Valle Piana (SA)
5. Hands on Embedded Linux with BeagleBone Black
Daniele Costarella - Mario Pucciarelli
5. Avviare il programma
# python blink.py
6. Per fermare l'esecuzione è sufficiente premere CRTL-c
Fatto questo può essere interessante continuare a lavorare sul programma magari
modificando la durata degli stati on e off, oppure inserendo altri led e creando degli
effetti luminosi.
MISURA DELLA TEMPERATURA
Realizzare i collegamenti secondo lo schema seguente:
Anche in questo caso è possibile lavorare sia direttamente da linea di comando sia
mediante uno script che raccolga tutte le istruzioni da eseguire
1. Avviare la console
9 Novembre 2013 – Giffoni Valle Piana (SA)
6. Hands on Embedded Linux with BeagleBone Black
Daniele Costarella - Mario Pucciarelli
# python
Python 2.7.3 (default, Apr 3 2013, 21:37:23)
[GCC 4.7.3 20130205 (prerelease)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>
2. Importare la libreria per l'ADC
>>> import Adafruit_BBIO.ADC as ADC
3. Inizializare il modulo
>>> ADC.setup()
4. Dare il comando di lettura del pin
>>> ADC.read("P9_40")
0.38999998569488525
Nel caso si voglia invece realizzare uno script:
1. Creare il file
nano temperature.py
2. Inserire nello script le seguenti linee di codice
import Adafruit_BBIO.ADC as ADC
import time
sensor_pin = 'P9_40'
ADC.setup()
while True:
reading = ADC.read(sensor_pin)
millivolts = reading * 1800 # 1.8V reference = 1800 mV
temp_c = (millivolts 500) / 10
temp_f = (temp_c * 9/5) + 32
print('mv=%d C=%d F=%d' % (millivolts, temp_c, temp_f))
time.sleep(1)
3. Salvare ed uscire con CTRL-x e dare Y per conferma.
4. Avviare il programma
python temperature.py
9 Novembre 2013 – Giffoni Valle Piana (SA)
7. Hands on Embedded Linux with BeagleBone Black
Daniele Costarella - Mario Pucciarelli
5. Interrompere l'esecuzione con CTRL-c
Una volta realizzato ciò una cosa interessante da fare sarebbe modificare il programma
integrandolo con quello che fa accendere il led, realizzando uno script capace di
accendere un led nel momento in cui la temperatura misurata salga sopra una certa
soglia.
COLLEGAMENTO DI UN PULSANTE
Resettare la board in modo che tutti i pin siano reimpostati come pin di ingresso
(altrimenti usare un pin precedentemente impostato come output in direzione input
potrebbe danneggiarlo), poi effettuare i seguenti collegamenti:
A questo punto procederemo direttamente a realizzare lo script, fermo restando che sia
possibile ancora dare uno alla volta i comandi mediante la console.
1. Creare il file
nano switch.py
9 Novembre 2013 – Giffoni Valle Piana (SA)
8. Hands on Embedded Linux with BeagleBone Black
Daniele Costarella - Mario Pucciarelli
2. Inserire nello script le seguenti linee di codice
import Adafruit_BBIO.GPIO as GPIO
import time
GPIO.setup("P8_12", GPIO.IN)
old_switch_state = 0
while True:
new_switch_state = GPIO.input("P8_12")
if new_switch_state == 1 and old_switch_state == 0 :
print('Do not press this button again!')
time.sleep(0.1)
old_switch_state = new_switch_state
3. Salvare ed uscire con CTRL-x e dare Y per conferma.
4. Avviare il programma
python switch.py
5. A questo punto ogni volta che si preme il pulsante, si vedrà una scritta a video
6. Interrompere l'esecuzione con CTRL-c
Ancora una volta ci si può inventare nuovi script capaci magari di accendere un led nel
momento in cui si va a premere il tasto.
EFFETTO FADE MEDIANTE PWM
E' possibile realizzare un simpatico effetto di fading di un led adoperando un PWM, ossia
dando al led un segnale che sia formato da intervalli in cui il livello è alto ed intervalli in
cui è basso; andando a variare la durata degli intervalli si può rendere il led più o meno
brillante (in realtà l'effetto si ottiene facendolo lampeggiare ON/OFF ma l'occhio umano
non riesce ad osservare fenomeni così rapidi quindi vedrà la luminosità diminuire).
Effettuare i seguenti collegamenti:
9 Novembre 2013 – Giffoni Valle Piana (SA)
9. Hands on Embedded Linux with BeagleBone Black
Daniele Costarella - Mario Pucciarelli
La procedura dettagliata è in questo caso:
1. Creare il file
nano led_fade.py
2. Inserire nello script le seguenti linee di codice
import Adafruit_BBIO.PWM as PWM
import time
led_pin = “P9_14”
PWM.start(led_pin, 0)
while True:
for i in range(0, 100)
PWM.set_duty_cycle(led_pin, i)
time.sleep(0.05)
for i in range(0, 100)
PWM.set_duty_cycle(led_pin, i)
time.sleep(0.05)
3. Salvare ed uscire con CTRL-x e dare Y per conferma
9 Novembre 2013 – Giffoni Valle Piana (SA)
10. Hands on Embedded Linux with BeagleBone Black
Daniele Costarella - Mario Pucciarelli
4. Avviare il programma
python led_fade.py
9 Novembre 2013 – Giffoni Valle Piana (SA)