Arduino yun si collega al wifi come AP ma non scambia dati con la pagina html

Salve, io ho un Arduino yun, settato come AP. Lo collego al pc con il WiFi e faccio partire uno sketch che riceve comandi da una pagina html nel mio PC in locale. Le funzioni sono:
1)ledon = accende il led;
2)ledoff = spegne il led;
3)aggiorna = aggiorna la soglia di luminosità.
Prima, i primi due comandi funzionavano. Adesso l Arduino si collega al pc con il WiFi, dall'ide posso selezionare la porta, compilo e carico nella scheda.
Aprendo la console, risulta connesso, ma se clicco i pulsanti non succede nulla.

@francofranchi

:warning:
Ti segnalo che, nella sezione in lingua Inglese, si può scrivere SOLO in Inglese ... quindi, per favore, la prossima volta presta più attenzione in quale sezione metti i tuoi post; questa volta esso è stato spostato, da un moderatore della sezione di lingua Inglese, nella sezione di lingua Italiana ... la prossima volta potrebbe venire direttamente eliminato. Grazie.

Magari, se metti il codice che stai usando su Arduino Yun (mi raccomando racchiuso negli appositi tag), qualcuno potrà darci un occhiata e magari cercare di capire dove è ilproblema ...

Guglielmo

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

YunServer server;
int soglia_luce = 30;
int valore;

void setup() {  

  //INIZIALIZZAZIONE PIN LED
  pinMode(7, OUTPUT);
  
  digitalWrite(7, LOW);
  Bridge.begin();
  digitalWrite(7, HIGH);
  //quando è pronto si accende il LED13
  
  Console.println("pronti!");  
  server.listenOnLocalhost();
  server.begin();
  
  delay(2000);
  digitalWrite(7, LOW);
}

void loop() {   

  //CREAZIONE CLIENT
  YunClient client = server.accept();

  //DICHIARAZIONE VARIABILE RELATIVA ALLA INTENSITA' LUMINOSA
  int luce = analogRead(A0);
  
  delay(1000);

  //CONDIZIONI E SOGLIE
    
    if(luce < soglia_luce)
      digitalWrite(7, HIGH);
     else
      digitalWrite(7, LOW);



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

    Console.println("Salve");

  //ACQUISIZIONE VALORI DA PAGINA WEB
  
     Console.println(command);
    //COMANDI

    if (command == "ledon") {
      digitalWrite(7, HIGH);
    }
    if (command == "ledoff") {
      digitalWrite(7, LOW);
    }

    if(command == "aggiorna"){

     
      String valoreStr = client.readString();
      valoreStr.trim();
      soglia_luce = valoreStr.toInt();

      //if (Console.available()  > 0) {

       
        //valore = Console.parseInt();
        Console.print("Valore ricevuto: ");
       Console.println("il valore è" + soglia_luce);
        //soglia_luce = valore;
      //}

      
    }

questo è il codice di arduino

Comunque questo problema l'ho risolto, dovevo mettere la spunta su OPEN in api access. IL mio vero problema è che ho la funzione aggiorna che dovrebbe ricevere un intero dalla stessa pagina html. Al suo interno, infatti, vi è un text field, dove inserisco il numero e il button invia per inviarlo.
Arduino riceve il comando aggiorna, ma non riceve il numero.

Qesto è il codice html:

<!DOCTYPE html>
<html>
	<head>
	
		<title>Pannello di controllo</title>
		<style>
        h2{
            text-align: center;
        }
		</style>
		<script type="text/javascript" src="zepto.js"></script>
		<script type="text/javascript">
			function ledon() {
			
				$.get('http://192.168.240.1/arduino/ledon', function(response){})
			}
			
			function ledoff() {
			
				$.get('http://192.168.240.1/arduino/ledoff', function(response){})
			}
			
			function aggiorna() {
			
            var valore = document.getElementById('valoreInput').value; // Ottieni il valore dal campo di input
			console.log(valore);

            
                $.post('http://192.168.240.1/arduino/aggiorna', { valore: valore },  function (response) {
                    alert('Valore inviato con successo ad Arduino');
                });
            return false;
        }
		
		</script>
	</head>
		
	<body>
		<div><h2>Pannello di controllo</h2></div><br>
		<div><strong>Accensione/Spegnimento led</strong></div><br>
		<button id="bt1" onClick="ledon()">ON</button>
		<button id="bt2" onClick="ledoff()">OFF</button><br><br><br>
		<div><strong>Regolazione soglia luminosità</strong></div><br>
		
		
		<!--<form action="http://arduino.local/arduino/aggiorna" method="GET">
        Valore: <input type="number" id="valoreInput" name="valore">
        <input type="submit" value="Invia">
		</form>
		<input type="number" id="soglia" > 
		<button id="bt3" onClick="aggiorna()">Aggiorna</button>-->
		
		
		  Valore: <input type="number" id="valoreInput" name="valore">
		  <button type='submit' OnClick="aggiorna()">Invia</button>
		

		
	</body>
</html>

... e si che mi ero raccomandato di usare i tag CODE ... ho dovuto correggere io i tuoi post per marcare il codice come tale !

Guglielmo

Mi dispiace. Comunque, nella console della pagina web mi spunta un errore relativo al cors. Potrebbe essere il vero problema?

Non so, magari se passa di qui @cotestatnt , che è più esperto nell'argomento, può darti qualche dritta ... :wink:

Guglielmo

1 Like

L'errore CORS ( cross-origin HTTP request) è dovuto al fatto che tu carichi dal tuo PC la pagina HTML, ma poi vai a richiedere "risorse" che risiedono altrove (il tuo Arduino Yun).
Questo meccanismo, se non viene esplicitamente abilitato usando gli appositi headers, viene "visto" come un qualcosa di illegale e quindi la richiesta non viene eseguita.
Dovresti pertanto abilitare il CORS a livello di server locale (immagino sia qualcosa tipo XAMPP o simili).

Dico dovresti perché secondo me è concettualmente sbagliato mettere su un server sul tuo PC che poi va a richiedere risorse ad un atro dispositivo, mi sembra un passaggio del tutto inutile che complica solo le cose senza per questo dare vantaggi.

Sposta la tua pagina web direttamente sull'Arduino Yun ed ottieni due piccioni con una fava: niente più errori CORS ed un firmware più lineare, chiaro nel funzionamento e manutenibile.

1 Like

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.