Home Tecnica Hardware Sviluppare codice per Arduino dalla command line

In evidenza

SMAU a Bologna con Research to Business

SMAU a Bologna con Research to Business

Il 6 e 7 giugno il Roadshow Smau Business torna a far tappa al Padiglione 33 della Fiera di Bologna e...
Gli articolisti del Portale

Gli articolisti del Portale

Abbiamo deciso di dare più visibilità a tutti coloro che hanno pubblicato articoli per noi, questo perché...
SMAU festeggia il suo quinto anno nel NordEst a Padova

SMAU festeggia il suo quinto anno nel NordEst a Padova

Il 18 e 19 aprile al padiglione 5 di Padova Fiere si terrà la prossima tappa di SMAU Business Roadshow. All'evento...
SMAU risale l’Italia e arriva a Roma

SMAU risale l’Italia e arriva a Roma

Il 21 e 22 marzo nella Nuova Fiera di Roma si terrà la prossima tappa di SMAU Business Roadshow. L'evento...

Bandi di Concorso

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

Avviso per incarico ad ingegnere informatico alla Provincia di Bergamo

Nell'ambito del progetto denominato "SOS badanti: la rete provinciale di sportelli per assistenti e collaboratori familiari” nell'ambito del programma "SAP - Servizi alla Persona" è stato pubblicato la Provincia di Bergamo ha pubblicato l'avviso per il reclutamento di una unità per incarico di...

21 Mag 2012 - Letture:1

Esperto di servizi e tecnologie cloud al Digit PA

Procedura comparativa per il conferimento di un incarico di collaborazione coordinata e continuativa per un profilo senior di “Esperto di servizi e tecnologie cloud”, nell’ambito del progetto europeo “Open Dai” presso l' Ente nazionale per la digitalizzazione della Pubblica Amministrazione...

18 Apr 2012 - Letture:34

Selezione per addetto servizi informatici all'Autorità Portuale di Brindisi

Avviso di selezione pubblica per titoli e prova orale per l’assunzione di n. 1 “addetto ai servizi informatici”, a tempo pieno ed determinato triennale, previo periodo di prova, da inquadrare nell’Area Amministrativa. (Inquadramento al III Livello del C.C.N.L. dei Lavoratori...

12 Feb 2012 - Letture:435

Concorso pubblico per informatico alla Corte dei Conti

E' indetto un concorso pubblico, per   esami,   per   il reclutamento di tre unità di informatici da inquadrare nella III area, fascia retributiva F1, da destinare agli Uffici della Corte dei Conti con sede in Roma. Requisiti: laurea triennale in scienze e...

05 Feb 2012 - Letture:306

Istruttore informatico L.68/1999 al Comune di Potenza

Concorso pubblico, per esami, per la copertura di n. 2 posti di Istruttore Informatico, categoria C, posizione economica C1, a tempo pieno e indeterminato, con riserva assoluta alle categorie dilavoratori di cui all'art. 1 della legge n. 68/1999 (norme per...

21 Gen 2012 - Letture:244

Senior Business Consultant presso Lombardia Informatica

Selezione per figura Senior Business Consultant presso Lombardia Informatica. Il collaboratore dovrà fornire consulenza strategica e di business sulle tematiche verticali della Socio-Sanità. Requisiti di ammissione: Laurea in Ingegneria, Economia e Commercio o Scienze dell’Informazione; Percorsi di formazione professionale in ambito sanitario e socio-sanitario, su...

11 Gen 2012 - Letture:284

Bando progetto TAG (Toscana Area Giovani) per giovani talenti digitali

UPI Toscana ha indetto un avviso pubblico per la selezione di 20 giovani (2 per ciascuna delle 10 province della Toscana), da impiegare come formatori all'interno del Progetto TAG (Toscana Area Giovani). Il bando è finalizzato a valorizzare al meglio i...

03 Gen 2012 - Letture:271

I più attivi

Dati e punteggi dell'ultimo anno

Giovanna Casamassima Giovanna Casamassima
47 articoli
16,500 punti totali
Rodolfo Giometti Rodolfo Giometti
49 articoli
5,152 punti totali
Vittorio D'Aversa Vittorio D'Aversa
33 articoli
3,444 punti totali
Fulvio Lucchetti Fulvio Lucchetti
9 articoli
0,279 punti totali
Luigi Carbone Luigi Carbone
10 articoli
0,262 punti totali

Ci hanno visitato

Oggi:1256
Ieri:2110
Totali (14/04/09):1170431

I nostri numeri

Articoli pubblicati: 552
Iscritti al portale: 768
Iscritti all'Elenco: 184
Iscritti ML Discussioni: 351
Iscritti ML Articoli: 30
Iscritti ML Lavoro: 166
 

(in)sicurezza informatica

L'incremento nell'uso del computer ha portato con se una diversa concezione di s...

Installazioni di Linux su sistemi non convenzionali

Un'ottica convenzionale vede l'informatica come un insieme di applicazioni e sis...

Boot from SAN

Intendiamoci, non è l’ultima briciola tecnologica caduta da un banchetto alla NA...

Linutop4 PC

Il produttore francese Linutop, con sede a Parigi, ha annunciato il nuovo modell...

Come saltare il proxy «blocca-tutto» aziendale

Mi capita spesso, ma non sempre, di andare da dei miei clienti e non potermi con...

ASUS U36SD il notebook in soli 19mm

La concorrenza al più blasonato della “mela” si fa agguerrita specie nell'ultimo...

Google +1: il «nemico» del «mi piace» di Facebook

Il tanto atteso nemico del "mi piace" targato Facebook è arrivato, il colosso de...

AccessPoint: la scelta ottimale del canale di trasmissione

Realizzare una rete Wireless outdoor (ma anche indoor) pone il problema della sc...

Android-x86: quando il drone sbarca sui PC

Chi pensa che Andoird abbia vita bere farà bene a ricredersi perché, oltre alle ...

Clonare una macchina vera in 30 minuti con VirtualBox

Essendo uno sviluppatore mi son reso conto che la virtualizzazione di una macchi...

Implementare una LIM con Linux

Come promesso rieccomi qui per illustrare come realizzare una LIM (che ricordo s...

Anomalie di partizionamento hard disk: un esperienza personale

Nonostante le decine di installazioni delle varie distribuzioni Linux eseguite s...

NBTempo: una GUI per le timeline

Svolgendo alcuni casi in cui serviva creare delle timeline per verificare l'att...

Architettura di una trading room

La trading room o sala mercati è il luogo dove vengono effettuate le operazioni ...

F-Droid, e il FOSS su Android è servito!

Come Software Libre Evangelist mi son spesso trovato ad incoraggiare l'uso del s...

Forno a microonde: analisi emissioni EME

Nell'immaginario collettivo c'è una forte paura per i danni che posso generare s...

Demolinux: l'automazione industriale con Linux

Qualche tempo fa il mio ex istituto superiore mi aveva chiesto di fare una picco...

Intervista esclusiva a Mageia Linux

La Presidente dell'Associazione MAGEIA.ORG, Anne Nicolas, in questa intervi...

Integrazione Webmaster Tool. Google Analytics, le ultime novità

Google non finisce mai di stupirci, ma soprattutto è inarrestabile sull'implemen...

Kameleon: oltre i limiti della virtualizzazione

Negli ultimi anni la potenza dei computer e la loro capacità è aumentata in modo...

Backup mail server: quando il mail server non è raggiungibile

Se avete il mail server in proprio potrebbe succedere che questo non sia raggiun...

Git in Eclipse

Chi mi conosce sa la mia avversione (del tutto personale, ci tengo a sottolinear...

Mageia 1 alpha1 è tra noi

Finalmente è stata rilasciata la tanto attesa versione alpha1 principalmente riv...

Cloud Money

Discorrendo con un collega di cloud computing, si è finito, come al solito, a pa...

Maemo extras: ancora più applicazioni per l'N900

Finalmente, grazie a Nokia, abbiamo a disposizione un esemplare dell'N900 su c...

Virtualizzazione di Windows XP o altri SO su Ubuntu con Qemu

I pc odierni sono sempre più potenti e molto spesso sotto sfruttati, la virtua...

SL4A e il drone parla più lingue

Chi come me non ama Java si sentirà a disagio volendo programmare una qualsiasi ...

Nvidia 295.33, ecco i nuovi driver per linux versione 3.3

L'annuncio è di qualche giorno fa, Nvidia rilascia i nuovi driver 295.33 con sup...

Universal USB Installer 1.8.04 e Ubuntu Linux 10.10

Rilasciata il 10.10(.2010) la nuova versione di Ubuntu Linux (la data corrispond...

SUN Wiki Publisher: scrivere facilmente su Wikipedia

Personalmente uso parecchio Mediawiki (il motore di Wikipedia); lo ritengo un ot...

Gimp, OpenOffice & C. su N900? Semplice con Debian!

Che Maemo fosse versatile me ne sono accorto subito, ma l'idea di poter installa...

Come ti controllo i tassi di interesse con Linux

In questi giorni sto cercando di fare una surruga per il mutuo di casa mia. Tra ...

Boxee Box: la TV facile di D-Link

Grazie alla D-Link possiamo presentare un nuovo gioiello della tecnologia: il me...

IPhone recupero file: un gioco di squadra!

Un giorno l'amico Armando Buzzanca mi chiama perchè deve recuperare una no...

Lion desktop: finalmente una distribuzione mirata alle aziende!

Chi è abituato a lavorare con Linux, ed in particolare ha provato a lavorare con...

Il telefono… la tua voce!

Era lo slogan pubblicitario della Telecom di un po’ di anni fa. Certo, al concet...

Cloud Computing: cos'è veramente?

Da qualche tempo si sente sempre più parlare di Cloud Computing. Sembra che ques...

Code Smells

Sempre più spesso il codice ha un cattivo odore. Sei sicuro di non scrivere cod...

OpenWRT: la distribuzione piccola e versatile

In queste ultime settimane ho avuto modo di vedere da vicino OpenWRT, una distri...

Snom 870: il telefono con Linux

Definirlo solo telefono è sicuramente riduttivo, infatti lo Snom 870 è sicuramen...

Compilare un programma C per Android

Essendo un programmatore C (uso anche altri linguaggi, ma il C e quello che uso ...

Gobby: l'editor collaborativo

Quante volte vi sarà capitato di dover dire come modificare un file di testo ad ...

Aggiungere programmi all'N900 con Maemo SDK

Abbiamo già visto come sia facile installare nuove applicazioni sul Nokia N900, ...

GNU readline: un tool indispensabile per la linea di comando

Chiunque di voi abbia avuto a che fare con la linea di comando avrà senz'altro a...

Sicurezza informatica: safety, dependability, security

La sempre maggiore diffusione delle tecnologie ha profondamente rivoluzionato la...

Odroid: la piattaforma di gioco libera

Si chiama Odroid ed e basata su Android, è la prima piattaforma di gioco interam...

Come gestire una presentazione con il Wiimote

Capitandomi spesso si tenere conferenze e workshop mi trovo sempre il problema d...

Multistrap: come ti creo un rootfs Debian dal nulla

Una volta c'era debootstrap, un tool fantastico che permetteva di creare un root...

Grep e Strings due giganti di Linux

Il tempo libero serve anche a sperimentare e quando si ha la passione per la com...

Linaro, la no-profit che produce distribuzioni Linux/ARM

Il progetto Linaro presentato nel 2010 da colossi del calibro di Freescale Semic...

Sviluppare codice per Arduino dalla command line

Arduino Uno è un micro controllore basato su CPU ATmega328; si alimenta via alim...

Autenticarsi con la pen drive

La pen drive è ormai diventata come il cellulare, impossibile non averla, ma sie...

LIM: la lavagna multimediale con il wiimote

LIM sta per Lavagna Interattiva Multimediale, ed è un progetto che, tramite l'...

Sabayon Linux 5.4 (32 e 64 bit)

E' stata rilasciata online la nuova versione 5.4 di Sabayon Linux, una tra ...

I dati e le loro anomalie nascoste

La motivazione per questo articolo nasce dalla crescente problematica di gestion...

Multi puntatore su Ubuntu 10.4: ecco come

Tempo fa ebbi modo di dare un'occhiata al progetto MPX per un cliente. La cosa n...

AVG Live CD Rescue: l'antivirus live!

Qualche giorno fa mi sono reso conto che in azienda sta per scadere la licenza d...

Linutop OS 4.0: Internet, Chiosco Multimediale e non solo!

Presentata negli ultimi giorni nella capitale francese la nuova distribuzione LI...

Installare strace su Android

Quando si programma è importante avere buoni tool di debug e uno dei più importa...

Disattivare il controllo account utente in Windows 7 e Vista

Il controllo account utente è quel particolare servizio progettato per aumentare...

Sviluppare codice per Arduino dalla command line Stampa E-mail
(2 voti, media 5.00 di 5)
Area Tecnica - Hardware
Scritto da Rodolfo Giometti   
Venerdì 25 Marzo 2011 10:17
Articolo letto 1622 volte

arduino_unoArduino Uno è un micro controllore basato su CPU ATmega328; si alimenta via alimentatore esterno o via USB ed ha a bordo 2KB di SRAM, 32KB di flash, una EEPROM da 1KB, 14 GPIO (di cui 6 possono funzionare come PWM) e 6 ingressi analogici. Insomma, tutto quello che ci serve se vogliamo giocare un po'!

In questo articolo, oltre a presentarvi il prodotto, vi farò vedere come si possa agilmente sviluppare software per Arduino direttamente dalla command line di un sistema GNU/Linux (Ubuntu nello specifico), cioè senza per forza utilizzare l'ambiente grafico (basato su JAVA) che viene fornito dal produttore.

Sian ben chiaro, la GUI del produttore va benissimo, ma è innegabile che la command line sia molto più versatile, una voilta che la si sa usare, di qualsiasi ambiente grafico.

Prima di tutto vediamo però di installare il sistema e i tool di sviluppo che ci vengono forniti dal produttore; questo per essere sicuri che il nostro Arduino funzioni correttamente.

Installare la GUI grafica

Prima di tutto occorre scaricarsi il software. Dal sito di Arduino ho scaricato il file arduino-0022.tgz (naturalmente questa a la versione della GUI per Linux 32bit, se usate un altro sistema dovete scaricare il software corrispondente), quindi l'ho esploso:

$ tar xvfz arduino-0022.tgz
$ cd arduino-0022
$ ls
arduino*   hardware/  libraries/  revisions.txt
examples/  lib/       reference/  tools/

A questo punto ho installato nel mio sistema i pacchetti necessari per far funzionare il tutto:

# aptitude install sun-java6-jdk gcc-avr avr-libc

quindi con il comando ./arduino ottengo:

arduino-uno-ss01

Da qui in poi è semplice, per provare Arduino basta andare nel menu Tools->Board e selezionare la voce Arduino Uno. Per quanto riguarda invece la porta di comunicazione da utilizzare per parlare con il dispositivo ho impostato in Tools->Serial Port la voce /dev/ttyACM0 poiché alla voce /dev/ttyUSB0 ho già un'altro dispositivo seriale.

Tutto qui! Per provare il nostro nuovo Arduino basta scegliere un programma di esempio ed inviarlo alla scheda. Io ho scelto di provare il programma Blink (che accende e spegne un led della scheda ad intervalli regolari) poiché è quello più semplice da utilizzare quando non si hanno periferiche aggiuntive e/o strumenti di misura speciali (come ad esempio un oscilloscopio) con cui testare il programma.

Per provare Blink ho selezionato in File->Examples->Basics la voce Blink ottenendo una nuova finestra come riportato in figura:

arduino-uno-ss02

Giusto per modificare un po' l'esempio ho cambiato i valori della funzione delay() a 500 e 3000 in modo da tenere acceso il led per mezzo secondo e quindi spento per 3 secondi. Quindi ho cliccato sul pulsante Upload... et voilà, Arduino fa lampeggiare il led proprio come gli ho chiesto io!

Ok, ora abbiamo verificato che la scheda funziona, vediamo ora come la si può programmare in modo analogo dalla command line.

Programmazione dalla command line

Per proseguire dobbiamo installarci il programma scons (un tool simile a make per la compilazione - e non solo) e poi scaricare questo file.

$ wget http://arscons.googlecode.com/svn/trunk/SConstruct

Il file SConstruct fa un po' le veci del Makefile con make: contiene le istruzioni che scons deve seguire per compilare il programma.

Una volta scaricato il file occorre adattarlo al sistema su cu ideve girare per far sì che funzioni correttamente; quindi, nel mio caso, l'ho modificato come segue:

$ diff -u SConstruct.orig  SConstruct
--- SConstruct.orig  2010-10-19 07:29:29.000000000 +0200
+++ SConstruct.      2011-03-13 19:41:18.000000000 +0100
@@ -64,14 +64,14 @@
 ARDUINO_PORT_DEFAULT = None
 else:
 # For Ubuntu Linux (9.10 or higher)
-    ARDUINO_HOME_DEFAULT = '/usr/share/arduino/' #'/home/YOU/apps/arduino-0018/'
-    ARDUINO_PORT_DEFAULT = getUsbTty('/dev/ttyUSB*')
+    ARDUINO_HOME_DEFAULT = '/home/develop/embedded/arm/boards/arduino/arduino-0022'
+    ARDUINO_PORT_DEFAULT = getUsbTty('/dev/ttyACM*')
 AVR_BIN_PREFIX = 'avr-'

 ARDUINO_HOME   = ARGUMENTS.get('ARDUINO_HOME', ARDUINO_HOME_DEFAULT)
 ARDUINO_PORT   = ARGUMENTS.get('ARDUINO_PORT', ARDUINO_PORT_DEFAULT)
-ARDUINO_BOARD  = ARGUMENTS.get('ARDUINO_BOARD', 'atmega328')
-ARDUINO_VER    = ARGUMENTS.get('ARDUINO_VER', 20) # Arduino 0020
+ARDUINO_BOARD  = ARGUMENTS.get('ARDUINO_BOARD', 'uno')
+ARDUINO_VER    = ARGUMENTS.get('ARDUINO_VER', 22) # Arduino 0022
 RST_TRIGGER    = ARGUMENTS.get('RST_TRIGGER', None) # use built-in pulseDTR() by default
 EXTRA_LIB      = ARGUMENTS.get('EXTRA_LIB', None) # handy for adding another arduino-lib dir

Ovviamente voi dovrete modificarlo in modo acconcio al vostro sistema.

Una volta fatte anche queste modifiche ho installato scons semplicemente con:

# aptitude install scons

Abbiamo poi anche bisogno dell'utility avrdude, un tool che trasferisce il programma che abbiamo scritto per Arduino all'interno della memoria della macchina. Anche questo lo installiamo allo stesso modo di scons.

Ora basta prendere i sorgenti di Blink (per semplicità li copio in una directory ad hoc) dalla directory arduino-0022 creata prima:

$ cp -a ../arduino-0022/examples/1.Basics/Blink .

copiarci il file SConstruct modificato prima:

$ cp SConstruct Blink/

e quindi entrare nella directory Blink:

$ cd Blink

ed eseguire il comando:

$ scons upload

Se alla fine ottenete il messaggio:

avrdude: safemode: Fuses OK

avrdude done.  Thank you.

scons: done building targets.

allora il vostro Arduino è stato riprogrammato con il nuovo software!

Se per caso però, ottenete questo messaggio di errore:

pulseDTR(["upload"], ["Blink.hex"])
avrdude -V -F -c stk500 -b 115200 -p atmega328p -P /dev/ttyACM0 -U flash:w:Blink.hex
avrdude: stk500_2_ReceiveMessage(): timeout

interrompete l'operazione e provate a modificare il file arduino-0022/hardware/arduino/boards.txt (del pacchetto software scaricato prima) come segue:

diff -ur arduino-0022.orig/hardware/arduino/boards.txt arduino-0022/hardware/arduino/boards.txt
--- arduino-0022.orig/hardware/arduino/boards.txt    2010-12-24 23:12:25.000000000 +0100
+++ arduino-0022/hardware/arduino/boards.txt         2011-03-13 19:42:12.000000000 +0100
@@ -1,7 +1,7 @@
 ##############################################################

 uno.name=Arduino Uno
-uno.upload.protocol=stk500
+uno.upload.protocol=stk500v1
 uno.upload.maximum_size=32256
 uno.upload.speed=115200
 uno.bootloader.low_fuses=0xff

e quindi ridate il comando; ora dovrebbe andare tutto liscio.

E' interessante notare come, utilizzando questa tecnica, si scoprano alcuni «segreti» del processo di compilazione che prima, utilizzando la GUI, ci erano nascosti. Si vedono infatti i comandi di compilazione (ne riporto solo uno per brevità):

avr-gcc -mmcu=atmega328p -Os -Wl,--gc-sections -o Blink.elf build/Blink.o build/core/wiring_digital.o build/core/wiring_pulse.o build/core/wiring_analog.o build/core/wiring_shift.o build/core/WInterrupts.o build/core/wiring.o build/core/pins_arduino.o build/core/Tone.o build/core/Print.o build/core/WString.o build/core/WMath.o build/core/HardwareSerial.o -lm

il comando che crea il file in formato HEX da passare ad avrdude:

avr-objcopy -O ihex -R .eeprom Blink.elf Blink.hex

ed il comando avrdude per trasferire il programma appena compilato:

avrdude -V -F -c stk500v1 -b 115200 -p atmega328p -P /dev/ttyACM0 -U flash:w:Blink.hex

Altra cosa che apprendiamo è che, per compilare un programma pde (estensione dei programmi di esempio di Arduino) in realtà vengono usati altri file di codice sorgente che costituiscono l'equivalente di quello che, per i normali programmi per PC, è la libc. Possiamo avere un'idea di cosa sono e cosa fanno questi programmi guardando il contenuto della directory build che scons ci aggiunge nella directory di lavoro prima della compilazione vera e propria:

$ tree build/
build/
|-- Blink.cpp
|-- Blink.o
|-- Blink.pde
`-- core
|-- HardwareSerial.cpp
|-- HardwareSerial.h
|-- HardwareSerial.o
|-- Print.cpp
|-- Print.h
|-- Print.o
|-- Stream.h
|-- Tone.cpp
|-- Tone.o
|-- WCharacter.h
|-- WConstants.h
|-- WInterrupts.c
|-- WInterrupts.o
|-- WMath.cpp
|-- WMath.o
|-- WProgram.h
|-- WString.cpp
|-- WString.h
|-- WString.o
|-- binary.h
|-- pins_arduino.c
|-- pins_arduino.h
|-- pins_arduino.o
|-- wiring.c
|-- wiring.h
|-- wiring.o
|-- wiring_analog.c
|-- wiring_analog.o
|-- wiring_digital.c
|-- wiring_digital.o
|-- wiring_private.h
|-- wiring_pulse.c
|-- wiring_pulse.o
|-- wiring_shift.c
`-- wiring_shift.o

1 directory, 38 files

 
 

In primo piano

Simons Voss: un mondo senza chiavi

Simons Voss: un mondo senza chiavi

Il sistema di gestione e di controllo degli accessi 3060 si presenta come un’alternativa con enormi vantaggi...
Pubblicità mirata dei prodotti

Pubblicità mirata dei prodotti

Hai un prodotto o un servizio da pubblicizzare? Fallo su consulenti-ict.it! Pubblicizzare un prodotto...
Recensioni sul Portale

Recensioni sul Portale

Hai un prodotto hardware/software o un libro riguardante uno dei temi dell'ICT? Vuoi farlo conoscere...

Offerte di lavoro

Visualizza Topic »

Eventi

Non ci sono eventi in programma
Maggio 2012
D L M M G V S
29 30 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 1 2
Giugno 2012
D L M M G V S
27 28 29 30 31 1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

Sondaggi

busyCaricamento Sondaggio...