Advertisement
noam76

spiffs_page_display.h

Feb 23rd, 2018
496
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 7.92 KB | None | 0 0
  1. /* Read HTML file from the spiffs and display them on the web page
  2.  * Send all soil sensors result from each plant and display them by XML on the web page
  3.  * Send data from a WebForm after click submit button, keep them on variables and save them on a JSON file in the SPIFFS
  4. */
  5. void envoyerVariables(WiFiClient &cl)
  6. {
  7.  // On envoie un en tête de réponse HTTP de type XML et le XML
  8.  
  9.  // l'en-tête doit être comme cela
  10.  
  11.  // ----------------------------------
  12.  //  HTTP/1.1 200 OK
  13.  //  Content-Type: text/xml
  14.  //  Connection: keep-alive
  15.  //                    <-- une ligne vide ici
  16.  // ----------------------------------
  17.  
  18.  //  et le XML doit ressembler à cela avec bien sûr les bonnes valeurs insérées dans les balises
  19.  
  20.  // ----------------------------------
  21.  //  <?xml version = "1.0" ?>
  22.  //  <variables>
  23.  //    <bouton>xxx</bouton>
  24.  //    <digital1>yyy</digital1>
  25.  //    <analog1>zzz</analog1>
  26.  //  </variables>
  27.  // ----------------------------------
  28.  
  29.  cl.print(F("HTTP/1.1 200 OK\r\n"
  30.             "Content-Type: text/xml\r\n"
  31.             "Connection: keep-alive\r\n\r\n"
  32.             "<?xml version = \"1.0\" ?>"
  33.             "<variables><sens1>"));
  34.  cl.print(read_s1_value);
  35.  cl.print(F("</sens1><sens2>"));
  36.  cl.print(read_s2_value);
  37.  cl.print(F("</sens2><sens3>"));
  38.  cl.print(read_s3_value);
  39.  cl.print(F("</sens3><sens4>"));
  40.  cl.print(read_s4_value);
  41.  cl.print(F("</sens4><sens5>"));
  42.  cl.print(read_s5_value);
  43.  cl.print(F("</sens5><sens6>"));
  44.  cl.print(read_s6_value);
  45.  cl.print(F("</sens6><sens7>"));
  46.  cl.print(read_s7_value);
  47.  cl.print(F("</sens7></variables>"));
  48. }
  49.  
  50. boolean testRequeteWeb()
  51. {
  52.  boolean requeteHTTPRecue = false;
  53.  byte indexMessage = 0;
  54.  char * ptrGET, *ptrEspace;
  55.  
  56.  WiFiClient client = serveurWeb.available();
  57.  if (!client) return requeteHTTPRecue; // pas de client connecté
  58.  boolean currentLineIsBlank = true;
  59.  while (client.connected())
  60.  {
  61.   if (client.available())
  62.   {
  63.    // on lit toute la trame HTTP, ici sans se soucier de la requête
  64.    char c = client.read();
  65.    // Serial.print(c);
  66.    if (c == '\n' && currentLineIsBlank) // une requête HTTP se termine par une ligne vide
  67.    {
  68.     // ON GENERE LA PAGE WEB
  69.     if (strcmp(urlRequest, "/favicon.ico")) // si ce n'est pas pour le favicon
  70.     {
  71.      requeteHTTPRecue = true;
  72.      // Control si le submit a ete presse
  73.      if(strstr(urlRequest, "/config.html"))
  74.      {
  75.       char *s1 = strtok(urlRequest,"?");
  76.       s1 = strtok(NULL,"&");
  77.       char *s2 = strtok(NULL,"&");
  78.       char *s3 = strtok(NULL,"&");
  79.       char *s4 = strtok(NULL,"&");
  80.       char *s5 = strtok(NULL,"&");
  81.       char *s6 = strtok(NULL,"&");
  82.       char *s7 = strtok(NULL,"&");
  83.       /*
  84.         Serial.println(s1);
  85.       Serial.println(s2);
  86.       Serial.println(s3);
  87.       Serial.println(s4);
  88.       Serial.println(s5);
  89.       Serial.println(s6);
  90.       Serial.println(s7);
  91.       */
  92.       s1 = strtok(s1,"=");
  93.       s1 = strtok(NULL,"=");
  94.       PlantS1 = atoi(s1);
  95.       PlantS1 = SoilSensorWebUser(PlantS1);
  96.  
  97.       s2 = strtok(s2,"=");
  98.       s2 = strtok(NULL,"=");
  99.       PlantS2 = atoi(s2);
  100.       PlantS2 = SoilSensorWebUser(PlantS2);
  101.  
  102.       s3 = strtok(s3,"=");
  103.       s3 = strtok(NULL,"=");
  104.       PlantS3 = atoi(s3);
  105.       PlantS3 = SoilSensorWebUser(PlantS3);
  106.  
  107.       s4 = strtok(s4,"=");
  108.       s4 = strtok(NULL,"=");
  109.       PlantS4 = atoi(s4);
  110.       PlantS4 = SoilSensorWebUser(PlantS4);
  111.      
  112.       s5 = strtok(s5,"=");
  113.       s5 = strtok(NULL,"=");
  114.       PlantS5 = atoi(s5);
  115.       PlantS5 = SoilSensorWebUser(PlantS5);
  116.      
  117.       s6 = strtok(s6,"=");
  118.       s6 = strtok(NULL,"=");
  119.       PlantS6 = atoi(s6);
  120.       PlantS6 = SoilSensorWebUser(PlantS6);
  121.      
  122.       s7 = strtok(s7,"=");
  123.       s8 = strtok(NULL,"=");
  124.       PlantS7 = atoi(s7);
  125.       PlantS7 = SoilSensorWebUser(PlantS7);
  126.      
  127.       Serial.println("Before Saving");
  128.       Serial.println(PlantS1);
  129.       Serial.println(PlantS2);
  130.       Serial.println(PlantS3);
  131.       Serial.println(PlantS4);
  132.       Serial.println(PlantS5);
  133.       Serial.println(PlantS6);
  134.       Serial.println(PlantS7);
  135.       saveConfig();
  136.  
  137.       /*if (!saveConfig())
  138.        {Serial.println("Failed to save config");}
  139.       else
  140.        {Serial.println("Config saved");}*/
  141.      
  142.         // on envoie la page web par défaut
  143.  if (SPIFFS.exists(CONFIG_HTML))
  144.       {
  145.        // On envoie un en tête de réponse HTTP standard
  146.        client.println(F("HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n"));
  147.        File pageWeb = SPIFFS.open(CONFIG_HTML, "r");
  148.        client.write(pageWeb,sizeof(pageWeb));
  149.        pageWeb.close();
  150.       }
  151.       else
  152.       {
  153.        Serial.println(F("Erreur de fichier"));
  154.       }
  155.      }
  156.      // -------------------------------- Pour la Page CONFIG_HTML ------------------------------- //
  157.      // on regarde si on a une requete qui contient /config
  158.      if (strstr(urlRequest, "/config"))
  159.      {
  160.       // on envoie la page web par défaut
  161.       if (SPIFFS.exists(CONFIG_HTML))
  162.       {
  163.        // On envoie un en tête de réponse HTTP standard
  164.        client.println(F("HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n"));
  165.        File pageWeb = SPIFFS.open(CONFIG_HTML, "r");
  166.        client.write(pageWeb,sizeof(pageWeb));
  167.        pageWeb.close();
  168.       }
  169.       else
  170.       {
  171.        Serial.println(F("Erreur de fichier"));
  172.       }
  173.      }
  174.     // -------------------------------- Fin Page CONFIG_HTML ------------------------------------ //
  175.    
  176.     // -------------------------------- Pour la Page DISPLAY_DATA_HTML -------------------------- //
  177.     // on regarde si on a une requete qui contient /display_data
  178.     if (strstr(urlRequest, "/reqEtatVariables"))  // http://www.cplusplus.com/reference/cstring/strstr/?kw=strstr
  179.     {
  180.      // on va lire l'état du bouton et on renvoie l'information correctement
  181.      envoyerVariables(client);
  182.     }
  183.     else
  184.     {      
  185.      if(strstr(urlRequest, "/display_data"))
  186.      {
  187.       // on envoie la page web par défaut
  188.       if (SPIFFS.exists(DISPLAY_DATA_HTML))
  189.       {
  190.        // On envoie un en tête de réponse HTTP standard
  191.        client.println(F("HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n"));
  192.        File pageWeb = SPIFFS.open(DISPLAY_DATA_HTML, "r");
  193.        client.write(pageWeb,sizeof(pageWeb));
  194.        pageWeb.close();
  195.       }
  196.       else
  197.       {
  198.        Serial.println(F("Erreur de fichier"));
  199.       }
  200.      }
  201.     }
  202.     // -------------------------------- Fin Page DISPLAY_DATA_HTML ------------------------------- //
  203.  
  204.     // -------------------------------- Pour la Page UPDATE_HTML -------------------------- //
  205.     if (strstr(urlRequest, "/update"))
  206.     {
  207.      // on envoie la page web par défaut
  208.      if (SPIFFS.exists(UPDATE_HTML))
  209.      {
  210.       // On envoie un en tête de réponse HTTP standard
  211.       client.println(F("HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n"));
  212.       File pageWeb = SPIFFS.open(UPDATE_HTML, "r");
  213.       client.write(pageWeb,sizeof(pageWeb));
  214.       pageWeb.close();
  215.      }
  216.      else
  217.      {
  218.       Serial.println(F("Erreur de fichier"));
  219.      }
  220.     }
  221.    // -------------------------------- Fin Page UPDATE_HTML -------------------------- //
  222.    }
  223.    // on sort du while et termine la requête
  224.    break;
  225.   }
  226.   if (c == '\n')
  227.   {
  228.    currentLineIsBlank = true;
  229.    httpLine[indexMessage] = '\0'; // on termine la ligne correctement (c-string)
  230.    indexMessage = 0; // on se reprépre pour la prochaine ligne
  231.    if (ptrGET = strstr(httpLine, "GET"))
  232.    {
  233.     // c'est la requête GET, la ligne continent "GET /URL HTTP/1.1", on extrait l'URL
  234.     ptrEspace = strstr(ptrGET + 4, " ");
  235.     *ptrEspace = '\0';
  236.     strncpy(urlRequest, ptrGET + 4, maxURL);
  237.     urlRequest[maxURL] = '\0'; // par précaution si URL trop longue
  238.    }
  239.   }
  240.   else if (c != '\r')
  241.    {
  242.     currentLineIsBlank = false;
  243.     if (indexMessage <= maxHTTPLine - 1)
  244.     {
  245.      httpLine[indexMessage++] =  c; // sinon on ignore le reste de la ligne
  246.     }
  247.    }
  248.   } // end if available
  249.  } // end while
  250.  delay(1);
  251.  client.stop(); // termine la connexion
  252.  return requeteHTTPRecue;
  253. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement