Pagina Web Arduino Yun

Ciao A tutti, ho provato a caricare il semplice esempio WEBTEMPERATUREPANEL presente nella sezione esempi, il quale mi gira benissimo e mi aggiorna i dati.

client.print(“Current time on the Yún: “);
client.println(timeString);
client.print(”
Current temperature: “);
client.print(temperature);
client.print(” degrees C”);
client.print("
This sketch has been running since “);
client.print(startString);
client.print(”
Hits so far: ");
client.print(hits);
Ma se volessi leggere da una pagina web da me creata il valore della temperatura dello sktach sotto quale comando html devo usare??

#include <Bridge.h>
#include <YunServer.h>
#include <YunClient.h>

YunServer server;
String startString;
long hits = 0;

void setup() {
Serial.begin(9600);

server.listenOnLocalhost();
server.begin();
}

void loop() {

YunClient client = server.accept();

int sensorValue = analogRead(A1);
// convert the reading to millivolts:
float voltage = sensorValue * (5000 / 1024);
// convert the millivolts to temperature celsius:
float temperature = (voltage - 500) / 10;
// print the temperature:
client.print(temperature);

delay(50); // Poll every 50ms
}

Grazie
Buona serata

Ciao, se non vuoi usare le pagine web passando per la parte linux di yun ma crearle direttamente dallo sketch, devi puntare ad "http://INDIRIZZO_YUN/arduino/"

Qualsiasi cosa che viene passata dopo arduino/ viene data in pasto direttamente allo sketch che rilevi con:

  // Get clients coming from server
  YunClient client = server.accept();

  // There is a new client?
  if (client) {
    client.setTimeout(5);
    // Process request
    String rec = client.readString();
    rec.trim(); 
}

dove "rec" è il contenuto della request.

Ciao! :wink:

Ciao e grazie per la risposta, quello che vorrei fare è l’esatto contrrio, cioè creare una pagina web al di fuori dello Skatch, ma purtroppo non riesco a capire quali comandi html devo usare per leggere il valore da arduino.

#include <Bridge.h>
#include <YunServer.h>
#include <YunClient.h>

YunServer server;
String startString;
long hits = 0;

void setup() {
Serial.begin(9600);

server.listenOnLocalhost();
server.begin();
}

void loop() {

YunClient client = server.accept();

int sensorValue = analogRead(A1);
// convert the reading to millivolts:
float voltage = sensorValue * (5000 / 1024);
// convert the millivolts to temperature celsius:
float temperature = (voltage - 500) / 10;
// print the temperature:
client.print(temperature);

delay(50); // Poll every 50ms
}

Per leggere il valore Temperatura dalla pagina web come devo fare?? Ho provato a cercare in rete ma c’è veramente poco.

Grazie Ciao

Quindi a te cosa serve fare esattamente?

  1. Create una pagina html per leggere un valore passato DA arduino e mostrarlo sulla pagina web
  2. Creare una pagina html a cui passando un valore dal browser questo viene mandato A arduino?

Cosi vediamo di capirci :smiley:

Io vorrei creare una pagina web che sia in grado di leggere i valori da arduino yun

Ok, se guardi nella cartella dello sketch del pannello temperatura, trovi esattamente il codice che ti serve:

<!DOCTYPE html>
<html>
	<head>
	<script type="text/javascript" src="zepto.min.js"></script>
	  <script type="text/javascript">
	   	function refresh() {
		  	$('#content').load('/arduino/temperature');
	  	}
</script>

	</head>
	<body onload="setInterval(refresh, 2000);">
		<span id="content">0</span>
	</body>
</html>

Come vedi, come ti ho detto sopra non fa altro che interrogare lo sketch passando la stringa “temperature” allo sketch.

@darvigo, per favore il codice racchiudilo nei tag code, vedi sezione 7 del regolamento, spiega bene come fare. Altrimenti rischi che parte del codice venga non visualizzato perchè interpretato come attributo del testo.

Scusami ma a me non funziona… Ho caricato lo skatch seguente

#include <Bridge.h>
#include <YunServer.h>
#include <YunClient.h>

YunServer server;
String startString;
long hits = 0;

void setup() {
  Serial.begin(9600);

  server.listenOnLocalhost();
  server.begin();
}

void loop() {
  
   YunClient client = server.accept();
          
      int sensorValue = analogRead(A1);
      // convert the reading to millivolts:
      float voltage = sensorValue *  (5000 / 1024);
      // convert the millivolts to temperature celsius:
      float temperature = (voltage - 500) / 10;
      // print the temperature:
      client.print(temperature);

  delay(50); // Poll every 50ms
}

Tale skatch si chiama prova e si trova all’interno della cartella prova. All’interno della stessa ho creato la cartella www dove vi ho messo il file zepto.min.js e la pagina web con nome index.html con il codice che mi hai scritto tu.

Scaricando il tutto su arduino e tendando di collegarmi all’indirizzo local.arduino/sd/prova mi da sempre 0.
Mi sai dire dove sbaglio per cortesia

Proviamo ad andare per gradi:

  • Fai stampare il valore di "temperature" sulla seriale, e guarda che sia stampato correttamente
  • Interroga direttamente local.arduino/arduino/temperature e guarda se ti scrive il valore uguale al seriale

ps: Non hai comunque verificato che la richiesta effettuata all'arduino sia effettivamente il parametro "temperature"

Grande sono riuscito.... Ti ringrazio tantissimo... Ancora un'ultima cosa per favore, adesso io leggo un valore, e se nevolessi leggere due o più ??

Bene! :wink:

Se vuoi leggere piu valori ti basta fare piu chiamate all’arduino passando parametri diversi nelle richieste http:

<!DOCTYPE html>
<html>
	<head>
	<script type="text/javascript" src="zepto.min.js"></script>
	  <script type="text/javascript">
	   	function refresh() {
		  	$('#content').load('/arduino/temperature');
		  	$('#content2').load('/arduino/temperature2');
	  	}
</script>

	</head>
	<body onload="setInterval(refresh, 2000);">
		<span id="content">0</span>
		

		<span id="content2">0</span>
	</body>
</html>

e da arduino leggere l’uno o l’altro in base alla richiesta fatta :slight_smile:

Ok, ma adesso io scrivo come URL local.arduino/arduino/temperature/val
Dopo la modifica che mi hai detto tu dovrei leggerlo sotto local.arduino/arduino/temperature ???
Perche non accedo anche da 192.168.240.1/sd/temperature ??

davrigo:
Ok, ma adesso io scrivo come URL local.arduino/arduino/temperature/val
Dopo la modifica che mi hai detto tu dovrei leggerlo sotto local.arduino/arduino/temperature ???
Perche non accedo anche da 192.168.240.1/sd/temperature ??

Hai fatto un po di confusione mi sa :grin:

"192.168.240.1/sd/temperature" ti risponde la pagina html che hai caricato sulla sd.
"192.168.240.1/arduino/temperature" ti risponde direttamente lo sketch.

mentre nel primo caso "temperature" deve essere il nome dello sketch, nel secondo caso "temperature" è il parametro che si aspetta l'arduino per passarti il valore:

// There is a new client?
  if (client) {
    // read the command
    String command = client.readString();
    command.trim();        //kill whitespace
    Serial.println(command);
    // is "temperature" command?
    if (command == "temperature") {
    }

quindi per avere 2 valori diversi ti basta aggiungere un'else:

// There is a new client?
  if (client) {
    // read the command
    String command = client.readString();
    command.trim();        //kill whitespace
    Serial.println(command);
    // is "temperature" command?
    if (command == "temperature") {
    // Ritorni il valore1
    }
    else if (command == "temperature2") {
    // Ritorni il valore2
    }

Se vuoi fare meno confusione magari chiamali "temp1" e "temp2" :wink:

Si forse hai ragione…
Questo è lo skatch che ho caricato

#include <Bridge.h>
#include <YunServer.h>
#include <YunClient.h>

YunServer server;


void setup() {

  server.listenOnLocalhost();
  server.begin();
}

void loop() {
  
   YunClient client = server.accept();
          
      int Val1 = analogRead(A1);
      float Val2 = Val1 * 5;
      client.print(Val1);
      client.print(Val2);
    

  delay(50);
}

Io vorrei leggere i valori VAl1 e Val2 dalla pagina HTML caricata su sd quindi digitando 192.168.240.1/sd/prova.
Il codice che gentilmente mi hai dato tu è correto per fare questo??
Lo sketch è completo o manca quancosa?

<!DOCTYPE html>
<head>
	<script type ="text/javascript"src="zepto.min.js></script>
	<script type ="text/javascript">
		function refresh() {
			$('#content').load('/arduino/val1');
		

		}
	</script>
</head>
<body onload="setInterval (refresh, 1000);">
	<span id="content">0</span>
	
</body>

</html>

Grazie ancora

MM siamo ancora lontani :smiley:

Perchè non usi come base l'esempio del pannello di temperatura?

Facendo come hai fatto ora, ad ogni chiamata che fai ad /arduino/ (indipendentemente dal val1 che hai scritto dopo nell'html) ritornerai sempre le due temperature una attaccata all'altra (in quanto hai usato la funzione print invece di println).

Prova segui quanto ti ho scritto sopra, usa l'html che ti ho postato (con content e content2) e fai rispondere allo sketch solo la temperatura che viene richiesta come ti ho scritto nel mio ultimo post. :wink: