Arduino/bash e porta seriale

Da PNLUG.
Versione del 1 gen 2014 alle 17:45 di Cloc3 (Discussione | contributi) (continuazione)


Usiamo Processing?

No grazie, stiamo imparando.

Arduino è un dispositivo semplice, cerchiamo di usarlo con strumenti di base.
Dunque la bash. Bash è il linguaggio di terminale nativo su Linux. Prescelto da Torvalds fin dalla primissima versione del '91.

D'accordo. Ora chiediamoci: cosa ci dobbiamo fare, con il terminale?
Semplice. Ci dobbiamo fare input/output.
Allora, se voglio scrivere qualcosa e comunicarlo ad arduino, è un ouput.
L'output, in bash è gestito dal comando echo. Per esempio:

 * echo "Ciao" # scrive Ciao sul terminale.
   echo "Ciao" >/dev/arduino # scrive Ciao e redige l'output verso arduino.

L'input, in bash, è gestito dal comando cat, oppure dal comando head.

 * cat </dev/arduino # legge dalla porta seriale di arduino.
 * head -n3 </dev/arduino # legge le prime 3 righe provenienti dalla porta seriale di arduino.

Adesso dobbiamo istruire arduino a gestire la porta seriale.
Questa è una cosa minimale. O meglio, possiamo usare questo, su cui stiamo lavorando.

Scriviamo dunque:

 * echo 30 >/dev/arduino
 * cat /dev/arduino

Sorpresa. Non esce nulla. Anzi il terminale si blocca e siamo costretti a uscirne con la combinazione di tasti Ctrl-c.

Per forza!!! Stiamo lavorando con un dispositivo fisico indipendente, mica con i soliti dispositivi virtuali a cui siamo abituati. Se avessimo provato a scrivere:

 * echo 30 >/tmp/prova.txt
 * cat </tmp/prova.txt

Il risultato sarebbe molto più soddisfacente. E non si incastra nulla.

Qual è la differenza? Il contatto con la realtà. Se spediamo un echo verso arduino, la nostra stringa viene correttamente acquisita e processata, generando una risposta, che viene generata immediatamente.
Qualche istante dopo, eseguiamo il cat... Acciderba, troppo tardi! La risposta si è già perduta.

Davvero, comunicare con Arduino è infinitamente educativo. Soprattutto per noi insegnanti.</br> Prima ancora di fare una domanda, infatti, dovremmo fare attenzione di disporci in ascolto.

Comunicare con arduino costringe a rovesciare l'ordine delle operazioni. Proviamo così:

 * head -n1 </dev/arduino &
 * echo >/dev/arduino

Davvero. È tutta un'altra cosa.