[RISOLTO]PROBLEMA LETTURA PAGINA WEB ARDUINO ESP8266 ESP-01

Ciao a tutti, ho un piccolo problema a livello di software.
Ho creato un programma che mi permette di aprire una pagina web per il controllo di arduino mediante il modulo wifi esp8266 esp-01.
Sul link della pagina mi viene stampato questo "http://192.168.43.144/?GIGIO=1", io in base al numero che trovo dopo GIGIO= vorrei far fare delle azioni ad arduino, dato che a ogni pulsante che premo si cambia il numero.
Come posso fare?
Ho provato mediante questo tipo di if

if (ascoltatore.indexOf("/?GIGIO=0")  > 0) {

ascoltatore è una stringa che utilizza (dovrebbe utilizzare) per leggere l'URL.
Purtroppo non funziona, come potrei fare per risolvere?
Grazie lollo

Ti chiedo se è possibile di postare l'intero codice, anche perché se "cambi numero" volontariamente immagino che tu vada già a settare delle variabili. Vedendo l'intero codice riusciremo a darti una mano in più.

Ciao, grazie per la risposta, domattina posterò il codice.
Grazie ciao Lollo

Ecco il codice :slight_smile:

#include "WiFiEsp.h"
#include <String.h> //gestione stringhe
#include <Wire.h> //includo la libreria Wire.h per lo schermo lcd
#include <LiquidCrystal_I2C.h> //includo la libreria LiquidCrystal_I2C.h per lo schermo lcd
WiFiEspServer server(80);
//dati ESP8266-01
char ssid[] = "LolloWifi";            // your network SSID (name)
char pass[] = "caccapupu";        // your network password
int status = WL_IDLE_STATUS;     // the Wifi radio's status
int reqCount = 0;                // number of requests received
String ascoltatore; //dichiarazione stringa
int h = 500;
int t = 22;
//dati led movimento
int rosso = 22; //collego il led rosso al pin digitale 22
int verde = 23; //collego il led verde al pin digitale 23
//dati lcd
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
int volta = 0; //variabile per il cambio dati su schermo
//variabili di tempo
unsigned long time, time1, time2, Motori_time;
void setup() {
  Serial.begin(115200); //velocità di comunicazione tra arduino e i componenti
  //ESP8266-01
  Serial1.begin(115200);
  // initialize serial for ESP module

  // initialize ESP module
  WiFi.init(&Serial1);
  // check for the presence of the shield
  if (WiFi.status() == WL_NO_SHIELD) {
    Serial.println("WiFi shield not present");
    // don't continue
    while (true);
  }
  // attempt to connect to WiFi network
  while ( status != WL_CONNECTED) {
    Serial.print("Attempting to connect to WPA SSID: ");
    Serial.println(ssid);
    // Connect to WPA/WPA2 network
    status = WiFi.begin(ssid, pass);
  }

  Serial.println("You're connected to the network");
  printWifiStatus();

  // start the web server on port 80
  server.begin();

  //stringa per WIFI
  ascoltatore = ""; //inizializzazione stringa
  /////////////////////***************************//////////////////////////
  //variabili di tempo
  Motori_time = millis();
  //pin led
  pinMode(rosso, OUTPUT); //dichiaro il pin del led rosso come OUTPUT
  pinMode(verde, OUTPUT); //dichiaro il pin del òed verde come OUTPUT
  //schermo lcd
  lcd.backlight(); //inizializo la luminosità di sottofondo
  lcd.begin(20, 4); //specifico le righe e le colonne
  // Impostazione canale A
  pinMode(12, OUTPUT); //dichiaro il pin 12 della direzione dei motori collegati al canale A come OUTPUT
  pinMode(9, OUTPUT);  //dichiaro il pin 9 del brake dei motori collegati al canale A COME OUTPUT
  // Impostazione canale B
  pinMode(13, OUTPUT); //dichiaro il pin 13 della direzione dei motori collegati al canale B come OUTPUT
  pinMode(8, OUTPUT);  //dichiaro il pin 8 del brake dei motori collegati al canale B COME OUTPUT

}


void loop() {
  
  time = millis();
  Display(); //avvio il void per lo schermo lcd
  /////////////////////***************************//////////////////////////
  // ascolta l'arrivo di clients
    WiFiEspClient client = server.available();
  if (client) {
    Serial.println("New client");
    // una richiesta http finisce con una blank line
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        Serial.write(c);
        ascoltatore.concat(c); //concatena i caratteri del client

        if (c == '\n' && currentLineIsBlank) { //se arrivo a fine riga
          if (ascoltatore.indexOf("/?GIGIO")  > 0) { //controllo che nell'url ci sia GIGIO=0
            Serial.println("FERMA");
            ferma();
          }
          else if (ascoltatore.indexOf("/?GIGIO=0") > 0) { //controllo che nell'url ci sia GIGIO=0
            Serial.println("AVANTI");
            avanti();
          }
          else if (ascoltatore.indexOf("/?GIGIO=1")  > 0) { //controllo che nell'url ci sia GIGIO=1
            Serial.println("INDIETRO");
            indietro();
          }
          else if (ascoltatore.indexOf("/?GIGIO=2")  > 0) { //controllo che nell'url ci sia GIGIO=2
            Serial.println("STOP");
            ferma();
          }
          else if (ascoltatore.indexOf("/?GIGIO=3")  > 0) { //controllo che nell'url ci sia GIGIO=3
            Serial.println("DESTRA");
            destra();
          }
          else if (ascoltatore.indexOf("/?GIGIO=4")  > 0) { //controllo che nell'url ci sia GIGIO=4
            Serial.println("SINISTRA");
            sinistra();
          }
          else if (ascoltatore.indexOf("/?GIGIO=5")  > 0) { //controllo che nell'url ci sia GIGIO=5
            Serial.println("AUTOMATICA");
            //inizio void per la modalità automatica
          }

          Serial.println("Sending response");
          // invia una risposta standard htt
          client.print(
            "HTTP/1.1 200 OK\r\n"
            "Content-Type: text/html\r\n"
            "Connection: close\r\n"  // la connessione viene chiusa dopo la risposta
            "Refresh: 20\r\n"        // ricarica ogni 20 secondi
            "\r\n");
          client.print("<!DOCTYPE HTML>\r\n");
          client.println(); //necessario per non buggare
          client.print("<html>\r\n");
          client.println("<head>\r\n");
          client.println("<title>\r\n");
          client.println("DAMBOBOTS");
          client.println("</title>\r\n");
          client.println("<link rel='shortcut icon' type='image/x-icon' href='http://i44.servimg.com/u/f44/16/84/89/65/23570310.png' />");
          client.println("</head>\r\n");
          client.println("<body>\r\n");
          client.println("<center>\r\n");
          client.println("<h1>\r\n");
          client.println("DAMBOBOTS ");
          client.println("</h1>\r\n");
          client.println("<a href='/?GIGIO=0'><img src = \"http://gigiowifi.altervista.org/wp-content/uploads/2017/10/avanti.gif\" width='200' height='150' ></a>");
          client.println("<a href='/?GIGIO=1'><img src = \"http://gigiowifi.altervista.org/wp-content/uploads/2017/10/indietro.gif\" width='200' height='150' ></a>");
          client.println("<a href='/?GIGIO=2'><img src = \"http://gigiowifi.altervista.org/wp-content/uploads/2017/10/ferma.jpg\" width='200' height='150' ></a>");
          client.println("<a href='/?GIGIO=3'><img src = \"http://gigiowifi.altervista.org/wp-content/uploads/2017/10/destra.gif\" width='200' height='150' ></a>");
          client.println("<a href='/?GIGIO=4'><img src = \"http://gigiowifi.altervista.org/wp-content/uploads/2017/10/sinistra.gif\" width='200' height='150' ></a>");
          client.println("<a href='/?GIGIO=5'><img src = \"http://gigiowifi.altervista.org/wp-content/uploads/2017/10/automatica.gif\" width='200' height='150' ></a>");
          client.println("<table border='1' align='center'>\r\n");
          client.println("<tr>\r\n");
          client.println("<td>\r\n");
          client.println("Temperatura");
          client.println("</td>\r\n");
          client.println("<td>\r\n");
          client.println("Umidita'");
          client.println("</td>\r\n");
          client.println("<td>\r\n");
          client.println("Intensia' luminosa");
          client.println("</td>\r\n");
          client.println("<td>\r\n");
          client.println("Pressione");
          client.println("</td>\r\n");
          client.println("<td>\r\n");
          client.println("Altitudine");
          client.println("</td>\r\n");
          client.println("</tr>\r\n");
          client.println("<tr>\r\n");
          client.println("<td>\r\n");
          client.println(t);
          client.println("</td>\r\n");
          client.println("<td>\r\n");
          client.println(h);
          client.println("</td>\r\n");
          client.println("</tr>\r\n");
          client.println("</table>\r\n");
          client.println("</body>\r\n");
          client.println("</html>\r\n");
          //fine codice html
          break;
          ascoltatore = "";
        }
        if (c == '\n') {
          // you're starting a new line
          currentLineIsBlank = true;
        }
        else if (c != '\r') {
          // you've gotten a character on the current line
          currentLineIsBlank = false;
        }
      }
    }
    // give the web browser time to receive the data
    delay(10);

    // close the connection:
    client.stop();
    Serial.println("Client disconnected");
  }
  /////////////////////***************************//////////////////////////
}

ciao lollo

if (ascoltatore.indexOf("/?GIGIO") > 0)

Questa condizione è sempre verificata anche in tutti gli altri casi, per cui verrà sempre eseguita la parte del FERMA.

Esatto e' propio quello che succede :cry:
Come posso risolver? :cry:
lollo

Fallo diventare:

if (ascoltatore.indexOf("/?GIGIO=6") > 0)

O qualcosa del genere, l'importante è che controlli la presenza di testo che c'è solo in quel caso, mentre quello che c'è ora appare sempre.

Ma solo quello?
lollo

Certo... Ragiona un po' su come funziona il codice che hai scritto e capirai.

Ho appena provato però adesso va solo avanti :confused:
lollo

Quindi come devo fare? :cry:
Sta cosa mi sta troppo confondendo, non riesco a capire scusaremi :cry:
Lollo

Ignora completamente il post di MikyMouse e metti il tuo codice aggiornato.

Il mio codice aggiornato è come quello di prima solo che ho cambiato
if (ascoltatore.indexOf("/?GIGIO") > 0)
In
if (ascoltatore.indexOf("/?GIGIO=6") > 0)
Almeno è quello che avevo capito di fare
Lollo

OK, allora dovrebbe funzionare. Fai attenzione alla cache del browser quando gli mandi i comandi, eventualmente prova a chiuderlo e riaprirlo tra un comando e l'altro.

Ok appena posso provo.
Pero non si ouo fare in modo da non dover chiudere il brower ogni volta? :slightly_frowning_face:
Lollo

Non so, inizia a fare la prova.

Commento eliminato, mi scuso per lo sfondone.

Ho provato però sorge un nuovo errore.
Se io alla prima apertura della pagina che crea l'esp do (per esempio) il comando "destra" lui mi esegue quel comando e tutti quelli precendenti ad esso negli if a cascata,

if (ascoltatore.indexOf("/?GIGIO=6")  > 0) { //controllo che nell'url ci sia GIGIO=0
            Serial.println("FERMA");
            ferma();
          }
          else if (ascoltatore.indexOf("/?GIGIO=0") > 0) { //controllo che nell'url ci sia GIGIO=0
            Serial.println("AVANTI");
            avanti();
          }
          else if (ascoltatore.indexOf("/?GIGIO=1")  > 0) { //controllo che nell'url ci sia GIGIO=1
            Serial.println("INDIETRO");
            indietro();
          }
          else if (ascoltatore.indexOf("/?GIGIO=2")  > 0) { //controllo che nell'url ci sia GIGIO=2
            Serial.println("STOP");
            ferma();
          }
          else if (ascoltatore.indexOf("/?GIGIO=3")  > 0) { //controllo che nell'url ci sia GIGIO=3
            Serial.println("DESTRA");
            destra();
          }
          else if (ascoltatore.indexOf("/?GIGIO=4")  > 0) { //controllo che nell'url ci sia GIGIO=4
            Serial.println("SINISTRA");
            sinistra();
          }
          else if (ascoltatore.indexOf("/?GIGIO=5")  > 0) { //controllo che nell'url ci sia GIGIO=5
            Serial.println("AUTOMATICA");
            //inizio void per la modalità automatica
          }

mentre quelli dopo non li esegue.
Un altro esempio è se premo "indietro" lui mi esegue quello e se dopo voglio cambiare mi esegue solo "avanti".
Questo è il nuovo problema.... non so se mi sono spiegato bene :sweat_smile:
lollo

Boh, io non vedo niente che giustifichi questo comportamento.

Puo essere un problema magari con la funzione indexOf da alternare con lastindexOf?
Non so piu dove sbattere la tesga :frowning:
Lollo