RyujiAndy Inviato 8 Febbraio 2014 Condividi Inviato 8 Febbraio 2014 (modificato) Primo Esperimento con Arduino YUN [imgx]https://dl.dropboxusercontent.com/u/27772338/Arduino_yun/ArduinoYunBack_2_450px.jpg[/imgx][imgx]https://dl.dropboxusercontent.com/u/27772338/Arduino_yun/ArduinoYunFront_2_450px.jpg[/imgx] Introduzione: È una nuova serie di Board che combina le funzionalità e la semplicità di programmazione dei multicontrollori della serie AtMega con un vero e proprio Processore Soc Atheros AR9331. Infatti Arduino YUN in realtà è un Arduino Leonardo accoppiato ad un vero e proprio mini pc che lavora con una versione modificata di OpenWRT chiamata Linino che dà finalmente la possibilità di gestire la board tramite internet. Questo significa che abbiamo la possibilità di collegarlo ed interagire con lui tramite rete. Lo YUN può essere collegato sia via ethernet che tramite modulo wifi. Avendo ora a disposizione un vero e proprio processore nasce la necessità di dover gestire il sistema oltre ad una diversa mole di dati. Per questo è stato messo a disposizione sullo YUN uno slot per microSD e una porta USB Host. [imgx]https://dl.dropboxusercontent.com/u/27772338/Arduino_yun/BridgeInShort.png[/imgx] I due sistemi (Soc ARM e microcontroller Atmega) comunicano tra loro tramite un Bridge usb, quindi si ha la possibilità di accedere alle periferiche e risorse da entrambe le parti. Con questa soluzione si aggira il problema che affliggeva gli Shield Ethernet dei vecchi Arduino, infatti abbiamo a disposizione un vero e proprio miniserver che interagisce con l' "Arduino Leonardo" integrato. Tralascio particolari e possibilità a livello di progettazione: voglio farvi vedere il mio primo esperimento fatto: la lettura della temperatura e dell'umidità in casa tramite arduino, ed il tutto portato su un grafico consultabile via internet da qualsiasi device. Chi mi segue su G+ ha già visto la prima immagine del risultato. La prima cosa da fare è configurare la rete Wireless (se si intende utilizzarla al posto del collegamento ethernet). Per fare ciò sarà inizialmente necessario configurare Ardunino Yun (dovremo collegarlo alla rete tramite il cavo ethernet) e interagire tramite browser con l'interfaccia luci, che gestisce linino. [imgx]https://dl.dropboxusercontent.com/u/27772338/Arduino_yun/net1.png[/imgx] Una volta collegato l'Arduino YUN alla rete, digitate sul PC l'indirizzo "http://arduino.local" o l'indirizzo ip. Bisognerà inserire la password per avere la schermata di gestione dei moduli rete, ora basta cliccare su configure per settare i parametri base. Nel mio esperimento ho utilizzato le REST API, una serie di funzioni per comunicare tra i due sistemi, quindi è consigliato disattivare la protezione di autentificazione. Se invece intendete gestirlo anche via internet per evitare eventuali comandi di reset è meglio attivarla. Ora dobbiamo aggiungere alcuni pacchetti linux, anche se esiste una FUNZIONE sull'interfaccia Luci. Per comodità visto che utilizzo Linux ho usato un client ssh. Su Windows potete usare Putty. Intendo utilizzare il server web uhttpd con l'interprete php, quindi basta digitare: opkg update opkg install php5 php5-cgi ora dobbiamo modificare il file di configurazione del server uhttpd per rendere attivo l'interprete uci set uhttpd.main.interpreter=".php=/usr/bin/php-cgi" uci set uhttpd.main.index_page="index.html index.htm default.html default.htm index.php" uci commit uhttpd sed -i 's,doc_root.*,doc_root = "",g' /etc/php.ini sed -i 's,;short_open_tag = Off,short_open_tag = On,g' /etc/php.ini ed ora basta riavviare il server web digitando: /etc/init.d/uhttpd restart Per problemi di memora ho aggiunto una microsd ed ho creato un collegamento con la cartella pubblica "/www/php" ln -s /mnt/sda1 /www/php Ora per avere accesso alla scheda sd dal pc in rete ho installato un server sftpd digitando: opkg install openssh-sftp-server Per programmare l'arduino si deve scaricare il nuovo IDE 1.5.5 che trovate nell'area DOWNLOAD di Moddingstudio Ricordatevi di settare la giusta board e nel caso di windows e mac di installare i driver, fatto questo siamo pronti per il primo progetto. Come già detto, l'esperimento consiste nella rilevazione della temperatura e dell'umidità, visualizzandola poi via web. Arduino YUN non ha un sensore di umidità e temperatura integrato, quindi utilizzeremo il componente DHT11 (l'avevo già usato anche per l'automazione del mio terrario). Ecco lo schema per il montaggio: Materiale utilizzato: Breadboard Sensore DHT11 Resistenza 5K Realizzato il circuito si passa alla programmazione dell'AtMega. Prima di tutto aggiungiamo le librerie necessarie allo sketch: #include "DHT.h" Richiama le funzioni per la comunicazione con il sensore DHT11 #include Richiama le funzioni per comunicare con linino #include #include Richiama le funzioni per la creazione di un server per la visualizzazione dei dati raccolti. #define DHTPIN 2 #define DHTTYPE DHT11 Definisce il pin di arduino con cui comunica il sensore e il tipo di sensore, poi inizializzo le variabili globali che servono per il server e il sensore: YunServer server; DHT dht(DHTPIN, DHTTYPE); int h, t; La variabile "h" servirà per memorizzare la lettura dell'umidità e "t" per la temperatura, ora passiamo all'inizializzazione dell'hardware che ci serve: void setup() { Bridge.begin(); server.listenOnLocalhost(); server.begin(); dht.begin(); } Per semplificarmi la lettura ed eventuale correttura del codice mi creo delle funzioni. void process(YunClient client) { String command = client.readStringUntil('\r'); if (command == "termo") { temp(client); } if (command == "idro") { idro(client); } } Avendo attivato le API ed inizializzato il server possiamo inviare delle richieste specifiche con il browser (http://ip_arduino_yun/arduino/command) che andremo a scrivere nella variabile "command", e tramite dei semplici controlli posso richiamare delle funzioni che mi scrivono sul browser il valore delle rilevazioni. void temp(YunClient client) { if (isnan(t)) { client.print(F("Error")); } else { client.print(t); } } void idro(YunClient client) { if (isnan(t)) { client.print(F("Error")); } else { client.print(h); } } Ora non resta che scrivere il ciclo principale "loop": void loop() { h = dht.readHumidity(); t = dht.readTemperature(); YunClient client = server.accept(); if (client) { process(client); client.stop(); } delay(50); } In pratica effettua la rilevazione della temperatura e dell'umidità ogni 50 ms e sta in attesa di una richiesta da parte di un browser per richiamare la funzione che processa il comando. Scritto il nostro sketch possiamo compilarlo ed inviarlo su Arduino YUN. Viste le potenzialità di Linino e prendendo le API Google per la creazione di grafici possiamo creare un programma che legge i valori di temperatura e umidità per poi scriverli su di un file nella microsd. Utilizzando linino potremo scriverle una funzione del genere in vari linguaggi... ma per renderlo alla portata di tutti ho deciso di scriverlo in php: Vi posto il risultato che ho ottenuto: 01.Feb.2014 10:00|25|22 01.Feb.2014 11:00|25|22 01.Feb.2014 12:00|26|23 01.Feb.2014 13:00|26|23 01.Feb.2014 14:00|26|24 01.Feb.2014 15:00|24|23 01.Feb.2014 16:00|24|22 01.Feb.2014 17:00|24|22 01.Feb.2014 18:00|25|23 01.Feb.2014 19:00|25|23 01.Feb.2014 20:00|25|23 01.Feb.2014 21:00|25|23 01.Feb.2014 22:00|25|23 01.Feb.2014 23:00|24|23 Ora dobbiamo far eseguire il programma ogni ora, per fare questo sotto linux basta settare un crontab, quindi digitiamo da shell ssh il seguente comando: crontab -e ed inseriamo la seguente riga: 0 * * * * /usr/bin/php-cgi /mnt/sda1/php/save.php Vi ricordo che si tratta di un editor "vi", quindi per scrivere bisogna prima cliccare sul tasto "insert" e per uscire e salvare bisogna prima premere "esc" e poi digitare ":quit!", ora ogni qualvolta i minuti sono a zero verrà eseguito il nostro programma "save.php". Per visualizzare il risultato ho creato un file "data.php" che legge il file che viene creato dal nostro crontab e assegna i valori a delle variabili in questo modo: Per visualizzare i grafici ho utilizzato le API Google. Il file "index.php" lo trovate in un download in fondo a questo articolo. Ora andando a richiamare da browser digitando "http://ip_arduino_yun/php/index.php" avremo il seguente risultato P.S. Lo script php non è perfetto perchè quando i dati diventano troppi il grafico generato diventa quasi illeggibile quindi andrebbe migliorato, cosa che forse farò in futuro... oppure se volete potete farlo voi facendo liberamente esperimenti sul codice. File allegati Avete delle migliorie da proporre? Fatevi avanti! Modificato 14 Febbraio 2014 da RyujiAndy Link al commento Condividi su altri siti Altre opzioni di condivisione...
RyujiAndy Inviato 14 Febbraio 2014 Autore Condividi Inviato 14 Febbraio 2014 Effattuata revisione sui problemi riscontrati quando i dati memorizzati diventano tanti, ho risolto il problema suddividendo in pagine la visualizzazione. Eccovi uno screen: ed eccovi il nuovo sorgente Link al commento Condividi su altri siti Altre opzioni di condivisione...
GioTheModder Inviato 14 Febbraio 2014 Condividi Inviato 14 Febbraio 2014 Prima o poi imparerò a usare l'Arduino! asd Link al commento Condividi su altri siti Altre opzioni di condivisione...
Savio1 Inviato 14 Febbraio 2014 Condividi Inviato 14 Febbraio 2014 @RyujiAndy volendo si possono fare le stesse cose con un Arduino UNO/Leonardo + Ethernet Shield? Perché stavo proprio pensando di comprarlo, ma dato che sono agli inizi volevo optare per uno dei due sopra. Link al commento Condividi su altri siti Altre opzioni di condivisione...
RyujiAndy Inviato 14 Febbraio 2014 Autore Condividi Inviato 14 Febbraio 2014 Purtroppo no perché nella shield ci manca la macchina Linux. Gesendet von meinem GT-I9300 mit Tapatalk Link al commento Condividi su altri siti Altre opzioni di condivisione...
Savio1 Inviato 14 Febbraio 2014 Condividi Inviato 14 Febbraio 2014 Purtroppo no perché nella shield ci manca la macchina Linux. Gesendet von meinem GT-I9300 mit Tapatalk Il problema è che non si può generare la pagina html coi grafici, giusto? E se volessi hostare delle semplici pagine (magari con l'SD shield) da cui impartire comandi ad Arduino? Ad esempio una pagina html molto semplice, in cui cliccando su un pulsante viene impartito un comando alla board. E' fattibile? Link al commento Condividi su altri siti Altre opzioni di condivisione...
RyujiAndy Inviato 15 Febbraio 2014 Autore Condividi Inviato 15 Febbraio 2014 Finché si lavora con die semplici link e si recuperano le informazioni con dei "GET" non CI sono problemi, ma non appena si cerca di inviare documenta HTML piú complessi il multicontattore si inceppa e non funziona il proggetto Gesendet von meinem GT-N8013 mit Tapatalk Link al commento Condividi su altri siti Altre opzioni di condivisione...
Savio1 Inviato 15 Febbraio 2014 Condividi Inviato 15 Febbraio 2014 Finché si lavora con die semplici link e si recuperano le informazioni con dei "GET" non CI sono problemi, ma non appena si cerca di inviare documenta HTML piú complessi il multicontattore si inceppa e non funziona il proggetto Gesendet von meinem GT-N8013 mit Ah, bene, bene... Grazie. Link al commento Condividi su altri siti Altre opzioni di condivisione...
spyker10 Inviato 27 Marzo 2014 Condividi Inviato 27 Marzo 2014 ma i file php dove vanno messi? non ho capito mi sfugge questa cosa Link al commento Condividi su altri siti Altre opzioni di condivisione...
RyujiAndy Inviato 27 Marzo 2014 Autore Condividi Inviato 27 Marzo 2014 Sulla micro sd Gesendet von meinem GT-I9300 mit Tapatalk Link al commento Condividi su altri siti Altre opzioni di condivisione...
spyker10 Inviato 27 Marzo 2014 Condividi Inviato 27 Marzo 2014 Sulla micro sd Gesendet von meinem GT-I9300 mit Ma in che percorso precisamente?/:| Link al commento Condividi su altri siti Altre opzioni di condivisione...
RyujiAndy Inviato 27 Marzo 2014 Autore Condividi Inviato 27 Marzo 2014 Sulla root della sd Gesendet von meinem GT-I9300 mit Tapatalk Link al commento Condividi su altri siti Altre opzioni di condivisione...
Messaggi raccomandati
Crea un account o accedi per lasciare un commento
Devi essere un membro per lasciare un commento
Crea un account
Iscriviti per un nuovo account nella nostra community. È facile!
Registra un nuovo accountAccedi
Sei già registrato? Accedi qui.
Accedi Ora