Yún – Gestire LED via web

luca 13/03/2015 6

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

6 Comments »

  1. marco 08/07/2017 at 15:37 - Reply

    Ciao, grazie mille del tutorial. Ho seguito tutto alla lettera ma quando digito myip/arduino/test appare questo messaggio: Could not connect to YunServer 146 Connection refused
    Potresti aiutarmi?

    • luca 10/07/2017 at 07:32 - Reply

      ciao Marco, sembra che lo Yun non accetti le connessioni… prova a fare un PING per verificare se almeno è correttamente in rete

  2. marco 10/07/2017 at 14:50 - Reply

    Ciao Luca,
    grazie mille per la risposta. Ho effettuato il ping di yun e lo vede correttamente. Non è che ho sbagliato qualcosa nella procedura? Io ho messo il file php nella cartella /arduino/www/
    Oltre a ciò ho solo reso statico l’indirizzo ip di yun perchè mi entrava sempre in confitto con la stampante..
    Qualche idea?

    • luca 11/07/2017 at 10:47 - Reply

      ciao, ma se provi da browser web (senza php) funziona?

  3. marco 20/07/2017 at 06:43 - Reply

    Ciao Luca, in realtà ho sempre provato da browser web.. Mi da quell’errore quando provo a connettermi da internet..

    • luca 20/07/2017 at 14:41 - Reply

      Marco per raggiungere lo Yun via internet devi configurare il tuo router per effettuare il NAT e dovrai puntare all’indirizzo IP pubblico, non al nome “yunserver” o simile…

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