Arduino/bash e porta seriale: differenze tra le versioni

Da PNLUG.
(creazione della pagina)
 
(continuazione)
Riga 1: Riga 1:
 +
{{TOC|align=right}}
 +
<div style=tex-align:justify>
 
Usiamo [http://www.processing.org| Processing]?
 
Usiamo [http://www.processing.org| Processing]?
  
 
No grazie, '''stiamo imparando'''.
 
No grazie, '''stiamo imparando'''.
 
  
 
Arduino è un dispositivo semplice, cerchiamo di usarlo con strumenti di base.<br/>
 
Arduino è un dispositivo semplice, cerchiamo di usarlo con strumenti di base.<br/>
Dunque la bash.
+
Dunque la bash. [http://it.wikipedia.org/wiki/Bash| Bash] è il '''linguaggio di terminale nativo su Linux'''. Prescelto da Torvalds fin dalla primissima versione del '91.
  
D'altronde, ci dobbiamo fare input output.<br/>
+
D'accordo. Ora chiediamoci: cosa ci dobbiamo fare, con il terminale?<br/>
Se voglio scrivere qualcosa e comunicarlo ad arduino, è un ouput.<br/>
+
Semplice. Ci dobbiamo fare ''input/output''.<br/>
 +
Allora, se voglio scrivere qualcosa e comunicarlo ad arduino, è un ouput.<br/>
 
L'output, in bash è gestito dal comando ''echo''.
 
L'output, in bash è gestito dal comando ''echo''.
 
Per esempio:
 
Per esempio:
Riga 16: Riga 18:
  
 
L'input, in bash, è gestito dal comando ''cat'', oppure dal comando ''head''.
 
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.<br>
 +
[http://arduino.cc/en/Serial/Read| Questa] è una cosa minimale. O meglio, possiamo usare [[Arduino/leggere_una_stringa_numerica| 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.<br/>
 +
''Qualche istante dopo'', eseguiamo il cat... Acciderba, '''troppo tardi!''' La risposta si è già perduta.<br/>
 +
 +
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.
 +
</div>

Versione delle 17:45, 1 gen 2014


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.