ESP, IoT Esp8266 Не обновляет страницу сайта

Navatusein

✩✩✩✩✩✩✩
2 Янв 2020
6
0
Хочу сделать parsing веб страницы которую генерирует AIDA64 инструментом RemoteSensor LCD. Это инструмент использует HTML5 SSE для обновления значений. И Esp8266 не хочет обновлять значения.
C++:
//=====================[Настройки]=====================

#define Wifi_SSID "******"
#define Wifi_Password "******"
#define Http_page "http://aida64parsing.com"

//=====================[Библиотеки]====================

#include <Arduino.h>
#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>
#include <ESP8266HTTPClient.h>
#include <WiFiClient.h>
#include <string>

//=====================[Переменные]====================

String payload;
short int test, test1;

//=====================================================

ESP8266WiFiMulti WiFiMulti;

void setup() {
  Serial.begin(115200);
  Serial.println();
  Serial.println();
  Serial.println();
  for (uint8_t t = 4; t > 0; t--) {
    Serial.printf("[SETUP] WAIT %d...\n", t);
    Serial.flush();
    delay(1000);
  }
  WiFi.mode(WIFI_STA);
  WiFiMulti.addAP(Wifi_SSID, Wifi_Password);
}

void loop() {
page_read();
parsing();
}

void parsing (){
  Serial.print("test = ");
  test = payload.indexOf("[CPU1]") + 6;
  test1 = payload.indexOf("[1CPU]") - 1;
  for (short int i = test; i <= test1; i++){
    Serial.print(payload[i]);
  }
  payload = "";
  Serial.println(" ");
}

void page_read(){
HTTPClient http;
http.begin(Http_page);
http.GET();
payload = (http.getString());
http.end();
}
 

alexlaw

✩✩✩✩✩✩✩
3 Янв 2020
47
2
Воронеж
@Navatusein,
Зачем
...
#include <ESP8266WiFi.h>
...
const char* ssid = "";
const char* password = "";
const char* host = "192.168.4.1";
byte tries = 16;
...
void setup()
...
WiFi.mode(WIFI_STA);
// We start by connecting to a WiFi network
Serial.print("Connecting to ");
Serial.println(ssid);
delay(1000);
WiFi.begin(ssid, password);
String s=".";
while (--tries && WiFi.status() != WL_CONNECTED)
{
Serial.print(s);
delay(1000);
}
if (WiFi.status() != WL_CONNECTED)
{
listNetworks();
delay(1000);
Serial.println(" ESP restart");
ESP.restart();
}
else {
Serial.println(" WiFi connected");
delay(1000);
}
...
void loop()
...
Serial.print("connect to ");
Serial.println(host);
WiFiClient client;
const int httpPort = 80;
if (!client.connect(host , httpPort)) {
Serial.println("connect failed");
return;
}
...
// We now create a URI for the request
String url = "/";
url += "";
// This will send the request to the server
client.print(String("GET ") + url + " HTTP/1.1\r\n" +
"Host: " + host + "\r\n" +
"Connection: close\r\n\r\n");
unsigned long timeout = millis();
while (client.available() == 0) {
if (millis() - timeout > 5000) {
Serial.println("Client Timeout !");
client.stop();
return;
}
}

// Read all the lines of the reply from server and print them to Serial
while(client.available()){
line = client.readStringUntil('\r');
Serial.println(line);
}
Serial.println("close connect");
...
void listNetworks() {
// scan for nearby networks:
Serial.println("Scan Networks");
int numSsid = WiFi.scanNetworks();
if (numSsid == -1) {
Serial.println("Couldn't wifi");
while (true);
}
// print the list of networks seen: numSsid

delay(2000);
// print the network number and name for each network found:
for (int thisNet = 0; thisNet < numSsid; thisNet++) {
if (WiFi.SSID(thisNet)==ssid) {
Serial.println(WiFi.SSID(thisNet) + "-OK");
Serial.print("Signal: ");
Serial.println(WiFi.RSSI(thisNet) + " dBm");
Serial.print("dont connect ");
Serial.println(WiFi.SSID(thisNet));
delay(1000);
Serial.println(" ESP restart");
ESP.restart();
}
if (thisNet==numSsid-1)
{
Serial.print("lost ");
Serial.println(ssid);
}
}
}
 

Navatusein

✩✩✩✩✩✩✩
2 Янв 2020
6
0
@Navatusein,
Зачем

...
#include <ESP8266WiFi.h>
...
const char* ssid = "";
const char* password = "";
const char* host = "192.168.4.1";
byte tries = 16;
...
void setup()
...
WiFi.mode(WIFI_STA);
// We start by connecting to a WiFi network
Serial.print("Connecting to ");
Serial.println(ssid);
delay(1000);
WiFi.begin(ssid, password);
String s=".";
while (--tries && WiFi.status() != WL_CONNECTED)
{
Serial.print(s);
delay(1000);
}
if (WiFi.status() != WL_CONNECTED)
{
listNetworks();
delay(1000);
Serial.println(" ESP restart");
ESP.restart();
}
else {
Serial.println(" WiFi connected");
delay(1000);
}
...
void loop()
...
Serial.print("connect to ");
Serial.println(host);
WiFiClient client;
const int httpPort = 80;
if (!client.connect(host , httpPort)) {
Serial.println("connect failed");
return;
}
...
// We now create a URI for the request
String url = "/";
url += "";
// This will send the request to the server
client.print(String("GET ") + url + " HTTP/1.1\r\n" +
"Host: " + host + "\r\n" +
"Connection: close\r\n\r\n");
unsigned long timeout = millis();
while (client.available() == 0) {
if (millis() - timeout > 5000) {
Serial.println("Client Timeout !");
client.stop();
return;
}
}

// Read all the lines of the reply from server and print them to Serial
while(client.available()){
line = client.readStringUntil('\r');
Serial.println(line);
}
Serial.println("close connect");
...
void listNetworks() {
// scan for nearby networks:
Serial.println("Scan Networks");
int numSsid = WiFi.scanNetworks();
if (numSsid == -1) {
Serial.println("Couldn't wifi");
while (true);
}
// print the list of networks seen: numSsid

delay(2000);
// print the network number and name for each network found:
for (int thisNet = 0; thisNet < numSsid; thisNet++) {
if (WiFi.SSID(thisNet)==ssid) {
Serial.println(WiFi.SSID(thisNet) + "-OK");
Serial.print("Signal: ");
Serial.println(WiFi.RSSI(thisNet) + " dBm");
Serial.print("dont connect ");
Serial.println(WiFi.SSID(thisNet));
delay(1000);
Serial.println(" ESP restart");
ESP.restart();
}
if (thisNet==numSsid-1)
{
Serial.print("lost ");
Serial.println(ssid);
}
}
}
Я хочу сделать устройство типа контролер компьютерного стола и компьютера.
Мне пришла идея ещё и монитор железа пк встроить. Проект Гайвера мне не подошёл так как те мониторы железа не корректно отображали температуру CPU и GPU. У меня проц Ryzen 5 2600 и видюха RX 590. Поэтому решил парсить значения с AIDA64. Попробовал скомпилить твой код но что то много мата)
 

alexlaw

✩✩✩✩✩✩✩
3 Янв 2020
47
2
Воронеж
@Navatusein,
Я имел ввиду зачем WiFiMulti
Попробовал скомпилить твой код но что то много мата)
Под спойлером немного кода для клиента, который делает запрос на сервер и ждет с него данные.
Это нарезки кода, его так нельзя скомпилировать, нужно вставить нужные куски в свой код.
А как у вас реализован сервер?
 
Изменено:

Navatusein

✩✩✩✩✩✩✩
2 Янв 2020
6
0
@alexlaw,
Я юзаю AIDA64 которая генерирует страницу с помощью Remote Sensor. Эту функцию можно включить в настройках, там есть вкладка LCD, и там можно включить эту функцию.
 

alexlaw

✩✩✩✩✩✩✩
3 Янв 2020
47
2
Воронеж
Вот не нарезка, а рабочий код клиента
C++:
#include <ESP8266WiFi.h>
String line;
const char* ssid     = "LAW_ESP8266";
const char* password = "";
const char* host = "192.168.4.1";
byte tries = 16;
  WiFiClient client;
  const int httpPort = 80;
void setup() {
  Serial.begin(115200);
  line="";
  WiFi.mode(WIFI_STA);
  // We start by connecting to a WiFi network
   Serial.print("Connecting to ");
   Serial.println(ssid);
   delay(1000);
     WiFi.begin(ssid, password);
    while (--tries && WiFi.status() != WL_CONNECTED)
  { 
    Serial.print(".");
    delay(1000);
  }
    if (WiFi.status() != WL_CONNECTED)
  {
    listNetworks();
    delay(10000);
    ESP.restart();
  }
  else {
  Serial.print(" WiFi connected");
  Serial.println();
  Serial.print("localIP ");
  Serial.println(WiFi.localIP());
   delay(1000);
  }

}


void loop() {
   Serial.print("connect to ");
   Serial.println(host);
   delay(1000);
  //In next line we will connect to the host and check the connection result. Note 80, that is the standard port number used for web access.
  if (!client.connect(host , httpPort)) {
   Serial.println("connect failed");
   delay(1000); 
    return;
  }
  // We now create a URI for the request
  String url = "/";
  url += "";
  // This will send the request to the server
  client.print(String("GET ") + url + " HTTP/1.1\r\n" +
               "Host: " + host + "\r\n" +
               "Connection: close\r\n\r\n");
  unsigned long timeout = millis();
  while (client.available() == 0) {
    if (millis() - timeout > 5000) {
    Serial.println("Client Timeout !");
    client.stop();
    return;
    }
  }
    // Read all the lines of the reply from server and print them to Serial
  while(client.available()){
    line = client.readStringUntil('\r');
    Serial.println(line);
  }
   Serial.println("close connect");
   delay(5000);
}
void listNetworks() {
  // scan for nearby networks:
  Serial.println("Scan Networks");
  int numSsid = WiFi.scanNetworks();
  if (numSsid == -1) {
    Serial.println("Couldn't wifi");
    while (true);
  }

  // print the list of networks seen:
delay(2000);
  // print the network number and name for each network found:
  for (int thisNet = 0; thisNet < numSsid; thisNet++) {
    Serial.print(WiFi.SSID(thisNet));
    Serial.print("  Signal: ");
    Serial.print(WiFi.RSSI(thisNet));
    Serial.print(" dBm");
    Serial.println();
    if (WiFi.SSID(thisNet)==ssid) {
   Serial.println(WiFi.SSID(thisNet) + "-OK");
   Serial.print("Signal: ");
   Serial.print(WiFi.RSSI(thisNet));
   Serial.print(" dBm");
   Serial.print("dont connect ");
   Serial.println(WiFi.SSID(thisNet));
   delay(1000);
   Serial.println(" ESP restart");
   delay(1000); 
   ESP.restart();   
    }
    if (thisNet==numSsid-1)
    {
Serial.print("lost ");
Serial.println(ssid);
    }
  }
}
Результат
ets Jan 8 2013,rst cause:2, boot mode:(3,7)

load 0x4010f000, len 1392, room 16
tail 0
chksum 0xd0
csum 0xd0
v3d128e5c
~ld
Connecting to LAW_ESP8266
...............Scan Networks
Keenetic-4130 Signal: -72 dBm
Freedom60 Signal: -39 dBm
Keenetic-8691 Signal: -84 dBm
ananas Signal: -88 dBm
Smart_box-E226C0 Signal: -90 dBm
RT-WiFi69 Signal: -90 dBm
Tenda_206 Signal: -93 dBm
Mirald Signal: -88 dBm
DIR-300NRU Signal: -80 dBm
lost LAW_ESP8266

ets Jan 8 2013,rst cause:2, boot mode:(3,7)

load 0x4010f000, len 1392, room 16
tail 0
chksum 0xd0
csum 0xd0
v3d128e5c
~ld
Connecting to LAW_ESP8266
.... WiFi connected
localIP 192.168.4.100
connect to 192.168.4.1
HTTP/1.1 200 OK
Content-Type: text/plain
Content-Length: 30
Connection: close
Access-Control-Allow-Origin: *

Temp = 15.13 *C
Power = 3.00 B
close connect

connect to 192.168.4.1
HTTP/1.1 200 OK
Content-Type: text/plain
Content-Length: 30
Connection: close
Access-Control-Allow-Origin: *

Temp = 15.13 *C
Power = 3.00 B
close connect

Попробуйте посмотрите, что присылает сервер по протоколу http
 
Изменено:

Navatusein

✩✩✩✩✩✩✩
2 Янв 2020
6
0
Нет потому что в ответе не обновляются данные. Для примера на странице я слал время а в ответе оно не обновлялось.
 

alexlaw

✩✩✩✩✩✩✩
3 Янв 2020
47
2
Воронеж
Нет потому что в ответе не обновляются данные
Тогда это вопрос к серверу AIDA64 , почему он не обновляет данные или нужно сформировать правильный запрос к серверу, чтобы получить правильный ответ.
В любом случае esp тут не причем.
Попробуйте с телефона запросить сервер.
Что он ответит.
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,272
1,303
Москва
Когда то давно была похожая проблем, заключалось в том, что на страницу указывалось время жизни какое то приличное, и сервер до истечения этого времени не обновлял данные, а и брал из кэша. Как только поставили время жизни 0, так все заработало. Не факт, что тут тоже самое, но вдруг