Arduino rappresenta una piattaforma hardware per Windows, Linux e MAC, un paradigma software, una vasta community di utenti e sviluppatori appassionati.
Talvolta può però capitare che un framework multipiattaforma possa favorire un sistema piuttosto che un altro: la mia esperienza con Linux mi porta sempre a dubitare del corretto funzionamento di sistemi, originariamente progettati per Windws o MAC, sulle macchine del Pinguino.
Per questa ragione ho deciso di controllare l’effettivo corretto funzionamento dell’IDE di Arduino sulla mia macchina con Ubunti 18.04 LTS.
Il LED giallo lampeggia!
Ebbene si, quando ho inserito il connetore USB per dare energia ad Arduino, la prima cosa che ho notato è stato l’insistente lampeggìo del LED di colore giallo. Nella mia esperienza, una sorgente luminosa di colore differente dal verde, e per di più lampeggiante, ha sempre significato “problemi in vista”. Per tale motivo ho iniziato con il chiedermi se avessi sbagliato qualcosa, se ci fosse un contatto tra i pin, se per avventura avessi acquistato una board difettosa… Poi, con molta fatica (perché noi smanettoni tutto possiamo sopportare, meno che leggere il manuale) ho diretto il browser verso un link di aiuto sul sito di Arduino. E, incredibile dictu, ho trovato le risposte ai miei patemi d’animo. Ogni Arduino che esce dalla fabbrica conserva, gelosamente salvato nella memoria non volatile, una copia del programma Blink. Si, proprio quello che collega il pin 13 al LED a bordo della scheda per farlo lampeggiare! In altri termini, avere un LED giallo che lampeggia alla prima accensione di Arduino è indice di perfetta salute della nostra scheda di controllo. L’avessi saputo prima… Ma ora voi tutti ne siete a consocenza, e nopn ripeterete il mio errore.
Il compilatore C fa i capricci!
Sono un programmatore della vecchia scuola, cresciuto a pane e Pascal. Sono quindi abituato a gestire i problemi che intervengono utilizzando tipi di dato diversi. La mia esperienza in C mi ha inoltre aiutato nel cavarmi d’impaccio da situazioni farraginose in cui cast e ridefinizione dei dati erano all’ordine del giorno.
Ma mai avevo visto un programma C funzionare con una dichiarazione come quella riportata di seguito:
Avete letto bene: il programmatore frettoloso aveva definito una costante intera dandole un valore in virgola mobile (1.5), e il programma era stato compilato ed eseguito correttamente.
Ovviamente, utilizzando in seguito i valori interi di 1 e 2, l’analista accorto aveva notato che tra i valori di 1 ed 1.5 assegnati alla variabile intera “velocitasuono” nulla cambiava, mentre il valore 2 introduceva effettivamente un rallentamento nella riproduzione. Ergo, il sistema ha corretto automaticamente il valore float in int, troncandolo senza pietà, ma senza avvertire nessuno del potenziale errore.
Linux non trova la seriale per comunicare con Arduino!
Questa issue è risultata più ostica da reprimere.
Il manuale per il troubleshooting di Arduino, cui il messaggio di errore del compilatore rimandava (come da figura), era come sempre prontissimo ad indicare le soluzioni al problema.
Su Linux, le schede Arduino Uno e Mega 2560 appaiono come device nella forma /dev/ttyACM0. Che non sono tuttavia supportate nella versione standard della libreria RXTX utilizzata dal software di Arduino per le comunicazioni seriali. Il software di Arduino per Linux include una versione della libreria RXTX modificata per riconoscere anche devices della forma /dev/ttyACM*. Ad ogni modo, qualora si utilizzi il package standard RXTX della propria distribuzione, è sufficiente creare un symlink da /dev/ttyACM0 a /dev/ttyUSB0 (ad esempio) in modo che la porta seriale appaia automagicamente nel software di Arduino.
Basterà lanciare:
1 2 |
sudo usermod -a -G tty yourUserName sudo usermod -a -G dialout yourUserName |
quindi eseguire log off e nuovamente log on per attivare le modifiche.
Tutto a posto, quindi? Ma nemmeno per sogno!
Per riuscire a comunicare con Arduino, dopo aver inutilmente battuto la testa al muro diverse volte il povero utente Linux è dovuto scendere a compromessi con la propria etica conservatrice, e tentare un’azione innominabile: scaricare l’ultima versione di Arduino IDE, la 1.8.10.
Con il nuovo IDE ed i symlink al loro posto, l’infrastruttura ha miracolosamente iniziato a funzionare senza il minimo singulto.
Conclusioni
Linux è vietato per i maker con Arduino? Sicuramente no, e questo articolo lo dimostra. Con un pizzico di pazienza e di perizia è possibile risolvere tutti quegli ostacoli che, specie se presentati all’inizio della propria esperienza di sviluppo, tenderebbero altrimenti ad abbattere le speranze e i desideri dei meno volenterosi.
Ma elettronica e informatica si basano proprio sulla passione, sulla curiosità scientifica: chi ne è privo rischia di restare tagliato fuori dall’agone.
Link utili: