html 的数据类型应该是什么?

问题描述 投票:0回答:1

在我这里的朋友 @tuyau2poil 的帮助下,我可以从 stm32 获得我的 adc 值。我的新问题 由于数据类型的原因,我无法在我的 html 页面上打印这些值。我看到串口的值。

但是由于数据类型的原因,我无法在 html 页面中看到这些值。我不知道我应该怎么做才能将这些值反映在串行端口到 html 页面中。

下面是我的代码;

#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>

    int incomingByte = 0;
    //char deneme[] = "";
     char *delp;
     char *delp2;
    unsigned long tw;
    /*Put your SSID & Password*/
    const char* ssid = "ssid";  // Enter SSID here
    const char* password = "pass";  //Enter Password here
    ESP8266WebServer server(80);
    float Temperature;
    float Humidity;
     
    void setup() {
      Serial.begin(9600);
      delay(100);
      Serial.println("Connecting to ");
      Serial.println(ssid);
    
      //connect to your local wi-fi network
      WiFi.begin(ssid, password);
    
      //check wi-fi is connected to wi-fi network
      while (WiFi.status() != WL_CONNECTED) {
      delay(1000);
      Serial.print(".");
      }
      Serial.println("");
      Serial.println("WiFi connected..!");
      Serial.print("Got IP: ");  Serial.println(WiFi.localIP());
    
      server.on("/", handle_OnConnect);
      server.onNotFound(handle_NotFound);
    
      server.begin();
      Serial.println("HTTP server started");
    
    }
    void loop() {
      if (millis() - tw > 500) {  //read serial each 0.5 sec
        if (Serial.available()) // now we have at least one character in the Serial input buffer
        {
          String incomingStr = Serial.readStringUntil('\n');
          //I test this with
          //String incomingStr = "0xFF S ? ADC1=1189 ADC2=1508 S ? 0xFF S ?";
    
          if (incomingStr.indexOf("ADC1") > -1 && incomingStr.indexOf("ADC2") > -1) {  //if serial data contains ADC1 or ADC2
            char deneme[incomingStr.length() + 1];
            incomingStr.toCharArray(deneme, incomingStr.length() + 1);
           // Serial.println(deneme);           //return "0xFF S ? ADC1=1189 ADC2=1508 S ? 0xFF S ?"
            //use strtok_r function as we use two instance nested
            //create contexts for strtok_r function 
            char* t1 = deneme; //must assign any value, char* t1; alone fail to compile
            char* t2 = deneme; //idem
    
            char* token = strtok_r (deneme, " ", &t1);   //return "0xFF", "S", "ADC1=1189", etc...
            while ( token != NULL ) {
              char* token2 = strtok_r(token, "=", &t2);    //return null,null,null,ADC1,ADC2 etc...
              if (token2 != NULL ) {
                if (String(token2) == "ADC1") delp = strtok_r (NULL, "=", &t2); //return 1189
                if (String(token2) == "ADC2") delp2 = strtok_r (NULL, "=", &t2); //return 1508
                //if (String(token2) == "ADC3") delp3 = strtok_r (NULL, "=", &t2); //return 1508
                //if (String(token2) == "ADC4") delp4 = strtok_r (NULL, "=", &t2); //return 1508
              }
              token = strtok_r ( NULL, " ", &t1);
            }
            Serial.print("delp = ");Serial.println(delp);
            Serial.print("delp2 = ");Serial.println(delp2);
            tw = millis();
          }
        }
        //scan http requests each loop
        server.handleClient();
      }
    }
    
    void handle_OnConnect() {
      server.send(200, "text/html", SendHTML(Temperature,Humidity)); 
    }
    
    void handle_NotFound(){
      server.send(404, "text/plain", "Not found");
    }
    
    String SendHTML(float Temperaturestat,float Humiditystat){
      String ptr = "<!DOCTYPE html> <html>\n";
      ptr +="<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, user-scalable=no\">\n";
      ptr +="<title>Quasi Resonant Induction Heater ADC's</title>\n";
      ptr +="<style>html { font-family: Helvetica; display: inline-block; margin: 0px auto; text-align: center;}\n";
      ptr +="body{margin-top: 50px;} h1 {color: #444444;margin: 50px auto 30px;}\n";
      ptr +="p {font-size: 24px;color: #444444;margin-bottom: 10px;}\n";
      ptr +="</style>\n";
      ptr +="<script>\n"; 
      ptr +="setInterval(loadDoc,200);\n";
      ptr +="function loadDoc() {\n";
      ptr +="var xhttp = new XMLHttpRequest();\n";
      ptr +="xhttp.onreadystatechange = function() {\n";
      ptr +="if (this.readyState == 4 && this.status == 200) {\n";
      ptr +="document.getElementById(\"webpage\").innerHTML =this.responseText}\n";
      ptr +="};\n";
      ptr +="xhttp.open(\"GET\", \"/\", true);\n";
      ptr +="xhttp.send();\n";
      ptr +="}\n";
      ptr +="</script>\n";
      ptr +="</head>\n";
      ptr +="<body>\n";
      ptr +="<div id=\"webpage\">\n";
      ptr +="<h1>Quasi Resonant Induction Heater ADC's</h1>\n";
      
      ptr +="<p>Temperature: ";
      ptr +=String(delp);
      ptr +=" NTC</p>";
      ptr +="<p>Humidity: ";
      ptr +=String(delp2);
      ptr +=" Heatsink</p>";
      
      ptr +="</div>\n";
      ptr +="</body>\n";
      ptr +="</html>\n";
      return ptr;
    }

我应该怎么做才能像在串口中一样在 html 页面上打印我的数据。

html types arduino nodemcu
1个回答
0
投票

这是一个非常奇怪的行为:char array delp and/or delp2 are altered (don't know where or why) beetween var setting in loop and page creation!

为了避免这种改变,我在其中创建了两个全局字符串和 stock delp 数组。效果很好,网页呈现良好,具有良好的价值。

所以:

声明全局字符串

 String strDelp, strDelp2;

在循环结束时,字符串中的 char 数组

          Serial.print("delp = "); Serial.println(delp);
          Serial.print("delp2 = "); Serial.println(delp2);
    
          strDelp = String(delp);
          strDelp2 = String(delp2);

创建页面时使用这个字符串

          ptr += "<p>Temperature: ";
          ptr += strDelp;
          ptr += " NTC</p>";
          ptr += "<p>Humidity: ";
          ptr += strDelp2;
          ptr += " Heatsink</p>";
© www.soinside.com 2019 - 2024. All rights reserved.