Yún – Gestire LED via web

luca 13/03/2015 0

Nel precedente tutorial abbiamo visto come uno sketch in esecuzione sull’ATMega di Arduino Yun possa, utilizzando la libreria Bridge, eseguire dei processi (comandi, script…) su Linino.

In questo tutorial vedremo come poter fare il contrario: inviare comandi da Linino verso lo sketch in esecuzione sul microcontrollore.

YunServer & YunClient

All’interno dello sketch utilizzeremo due oggetti della libreria Bridge:

  • YunServer, per mettere l’ATMega in attesa di nuove connessioni;
  • YunClient, per inviare/ricevere dati dal client che si è connesso.

Yun offre una comoda interfaccia REST per raggiungere direttamente l’oggetto YunServer in ascolto. Ogni connessione web a indirizzi tipo:

http://<yun_ip>/arduino/something

viene passata allo sketch e, utilizzando il metodo readString() di YunClient è possibile ottenere la porzione di URL successiva ad /arduino/ (nell’esempio in grassetto).

yun-rest

E’ possibile proteggere l’interfaccia REST con una password (di default è arduino) attraverso l’interfaccia web di Yun:

rest-api-pwd

YunLedToggle

Lo sketch sviluppato per questo esempio si trova nel mio repository su Github. Il suo compito è quello di cambiare di stato ad un LED (per semplicità quello onboard, connesso al PIN 13) alla ricezione del comando toggle.

All’interno del setup() è necessario inizializzare la libreria Bridge e mettere l’oggetto YunServer in ascolto (per sicurezza ho utilizzato il metodo per accettare connessioni solo da localhost):

Bridge.begin();
[...]
server.listenOnLocalhost();
server.begin();

Nel loop() il metodo server.accept() tiene lo sketch in attesa di una connessione. Quando un client si collega, viene creato un oggetto YunClient che gestirà il trasferimento dati:

YunClient client = server.accept();

Il comando inviato dal client viene letto e pulito (trim) da eventuali spazi:

String command = client.readString();
command.trim();

Se il comando è “toggle”, viene cambiato lo stato del LED:

if(command == "toggle") {
  digitalWrite(LED_PIN, !digitalRead(LED_PIN));

Infine viene chiusa la connessione con il client:

client.stop();

E’ possibile provare il funzionamento dello sketch con un browser web:

yun-led1 yun-led2

callArduino

Il metodo sopra descritto può essere utilizzato anche da pagine PHP ospitate su Linino per inviare dati ad uno sketch.

Ho preparato un semplice esempio (sempre nel repository su Github) che mostra come usare cURL, anche se l’interfaccia REST è protetta da password:

yun-led3

Leave A Response »

Questo sito usa i cookie per poterti offrire una migliore esperienza di navigazione maggiori informazioni

Questo sito utilizza i cookie per fonire la migliore esperienza di navigazione possibile. Continuando a utilizzare questo sito senza modificare le impostazioni dei cookie o clicchi su "Accetta" permetti al loro utilizzo.

Chiudi