E' possibile connettere direttamente Arduino, via USB, agli apparati che possono far girare il sistema operativo GNU/Linux OpenWRT (es. Alice Gate 2 Plus Wifi e molti altri). Tra le cose più interessanti ho scoperto che è possibile scaricare su Arduino gli sketch .hex direttamente dall'apparato OpenWRT, senza dover per forza utilizzare il PC. Tale applicazione è utile (come nel mio caso della centrale di irrigazione), per gestire il funzionamento di Arduino su dispositivi telecontrollati (via Internet o Wifi).

Schema di connessione:

(wifi-LAN) <-> Apparato OpenWRT <-> (USB) <-> Arduino <-> Elettrovalvole e sensori di pressione

I pacchetti necessari per la connessione di Arduino ad OpenWRT sono:

kmod-usb-core
kmod-usb-ohci
kmod-usb-serial
kmod-usb-serial-ftdi
kmod-usb2

Per procedere all'upgrade dello sketch è necessario installare il pacchetto avrdude (disponibile precompilato nel repository OpenWRT):

opkg update
opkg install avrdude

A questo punto, una volta caricato sul dispositvo OpenWRT il codice macchina .hex (generato dall'IDE Arduino o compilato a mano con avr-gcc), bisogna lanciare il comando:

avrdude -p m328p -P /dev/ttyUSB0 -c stk500v1 -b 57600 -C /etc/avrdude.conf -U flash:w:/root/Blink.cpp.hex

Ovviamente al posto di "/dev/ttyUSB0" va inserito il device corretto, così come "m328p" riguarda l'ATmega328P. "/root/Blick.cpp.hex" è il percorso del file .hex da caricare. Il reset di Ardino avviene (almeno nel mio caso) automaticamente; se così non fosse basta inviare un impulso via seriale sul DTR prima di lanciare avrdude.

root@irrigator:/etc# avrdude -p m328p -P /dev/ttyUSB0 -c stk500v1 -b 57600 -C /etc/avrdude.conf -U flash:w:/root/Blink.cpp.hex

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.02s

avrdude: Device signature = 0x1e950f
avrdude: NOTE: FLASH memory has been specified, an erase cycle will be performed
         To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: reading input file "/root/Blink.cpp.hex"
avrdude: input file /root/Blink.cpp.hex auto detected as Intel Hex
avrdude: writing flash (896 bytes):

Writing | ################################################## | 100% 0.28s

avrdude: 896 bytes of flash written
avrdude: verifying flash memory against /root/Blink.cpp.hex:
avrdude: load data flash data from input file /root/Blink.cpp.hex:
avrdude: input file /root/Blink.cpp.hex auto detected as Intel Hex
avrdude: input file /root/Blink.cpp.hex contains 896 bytes
avrdude: reading on-chip flash data:

Reading | ################################################## | 100% 0.22s

avrdude: verifying ...
avrdude: 896 bytes of flash verified

avrdude: safemode: Fuses OK

avrdude done.  Thank you.

root@irrigator:/etc#

Note:

Il test è stato eseguito con esito positivo su un Alice Gate 2 Plus Wifi, OpenWRT Backfire 10.03.1rc-1, Arduino Duemilanove.

http://en.wikipedia.org/wiki/OpenWrt

Per info sull'argomento: Marco D'Ambrosio info@marcodambrosio.it

Share