парсинг ответа от сервера,нужна помощь

Gagarin74
Offline
Зарегистрирован: 24.08.2013

Добрый день. Если не трудно помогите в маленькой(наверное) проблеме.

Имеем esp8266. Подключенную к местной локальной сети по WIFI

В локальной сети имеется web сервер.

На определенной странице на сервере отображается (температура,курс бакса,итд итп) не важно.

Не могу сообразить (пересмотрел все примеры для ардуино) как эти данные запихнуть в ардуину,что бы потом их вывести на дисплей подключенный к ардуно.

С парсингом не дружил(от слово совсем).

код страницы где отображаются данные(zzzz вел специально что бы искать было проще)

 <div id="htmlTab">
  zzzz120.48951294149936
  </div>

сама страница по адресу http://192.168.88.16/page/26.html

Буду очень блогадарен!!!!

 

 

rkit
Offline
Зарегистрирован: 23.11.2016

Сделай себе json api или еще что, чтобы не страдать.

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018
Gagarin74
Offline
Зарегистрирован: 24.08.2013

rkit пишет:

Сделай себе json api или еще что, чтобы не страдать.

Вас не смущает что это раздел для новичков?

Gagarin74
Offline
Зарегистрирован: 24.08.2013

Спасибо -значит иду в правильном направление.

Но вопрос как получить (загрузить в ардуину) эту переменную.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Gagarin74 пишет:

Вас не смущает что это раздел для новичков?

Вот лично меня смущает, что новички ставят перед собой задачи, в которых, как они сами понимают, требуется парсить текст, тогда как:

Gagarin74 пишет:

С парсингом не дружил(от слово совсем).

Может, лучше начать с задач попроще? А уже потом, когда с парсингом Вы будете на "ты", вернуться к объявленной выше задаче?

 

 

PS: кстати, вот это: http://arduino.ru/Reference/StringSubstring - довольно сомнительное решение. Для esp, у которой 50к свободной памяти, возможно, в большинстве случаев это и будет работать, но правильное решение, не имеющее ограничений по объему памяти - это парсить на лету, а не сохранять предварительно в ОЗУ.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Gagarin74 пишет:

На определенной странице на сервере отображается (температура,курс бакса,итд итп) не важно ... эти данные запихнуть в ардуину,что бы потом их вывести на дисплей подключенный к ардуно.

Отвечу Вашими же словами

Gagarin74 пишет:

Вас не смущает что это раздел для новичков?

rkit
Offline
Зарегистрирован: 23.11.2016

Gagarin74 пишет:

rkit пишет:

Сделай себе json api или еще что, чтобы не страдать.

Вас не смущает что это раздел для новичков?

Что меня должно смущать? Новичкам не положено упрощать себе жизнь? Новичкам не положено учиться? Поясните.

sadman41
Offline
Зарегистрирован: 19.10.2016

А я согласен - ArduinoJSON документирован отлично, а на своём веб-сервере Json сгенерировать - одно echo.

Gagarin74
Offline
Зарегистрирован: 24.08.2013

sadman41 пишет:
А я согласен - ArduinoJSON документирован отлично, а на своём веб-сервере Json сгенерировать - одно echo.

Вы не обижайтесь на меня. Просто тема АРДУИНА очень большая и обьемная. Надо иметь представления очень о многих оспектах. Кто то в питании разбирается хорошо (для вольтметра на ардуине наверное самое главное),кто то в парсинге в JSON.  Но я не думаю чо люди сперва купили ардуино и сели изучать JSON. Наверное у большинства на оборот. 

И многие наверное правильно написали (давали советы).Но просто если не знать где звон ......

ЭХ

Ну хорошо зайдем с другой стороны.

Сервер отправляет на ардуино http://192.168.88.22/set?b=23.548445

дальше для меня тупик.

Gagarin74
Offline
Зарегистрирован: 24.08.2013

Вот,вроде нашел что надо

https://radioprog.ru/post/1119

Более менее простенький пример.

Может есть еще проще ?

Rumata
Rumata аватар
Offline
Зарегистрирован: 29.03.2019

Если требуется еще проще, то проще забить на енто дело

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Gagarin74 пишет:

rkit пишет:

Сделай себе json api или еще что, чтобы не страдать.

Вас не смущает что это раздел для новичков?

Ты сразу скажи, что не вывозишь. Тогда гоу в раздел за бапки- Ищу исполнителя.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Gagarin74 пишет:

Вот,вроде нашел что надо

https://radioprog.ru/post/1119

Более менее простенький пример.

Может есть еще проще ?

этот гвоздь не в ту стену, тебе жеж нужна передача клиенту

b707
Offline
Зарегистрирован: 26.05.2017

Gagarin74 пишет:

Ну хорошо зайдем с другой стороны.

Сервер отправляет на ардуино http://192.168.88.22/set?b=23.548445

дальше для меня тупик.

как уже несколько раз упоминали, сервер сам ничего не отправляет, чтобы получить с него информацию - ему нужно послать запрос.

И совершенно непонятно, зачем вы все время выкладываете эту ссылку:

http://192.168.88.22/set?b=23.548445

Вы в курсе, что одреса, начинающиеся с 192.168 - локальные, а значит эту ссылку никто кроме вас открыть не может, зачем она нам?

sadman41
Offline
Зарегистрирован: 19.10.2016

Gagarin74 пишет:

sadman41 пишет:
А я согласен - ArduinoJSON документирован отлично, а на своём веб-сервере Json сгенерировать - одно echo.

Вы не обижайтесь на меня. Просто тема АРДУИНА очень большая и обьемная. Надо иметь представления очень о многих оспектах. .

Да на что тут обижаться. Но и Вы поймите - тут не сидят люди, которые каждый день занимаются ардуиной и пр. Хобби - это раз от раза браться за дело. Я вот с этим ArduinoJson последний раз дело имел полгода назад. Но до этого тоже был момент, когда я о этой библиотеке ничего не знал и сидел, разбирался. Т.е. могу сказать, что она очень облегчит решение задачи, но вот пример вывалить не могу. Потому что его нужно выдрать из своей программы, привести к понятному виду и пр. А это, считай, вечер потерять. 

Так что совет дан, а как с ним поступить - решайте сами.

Gagarin74
Offline
Зарегистрирован: 24.08.2013

b707 пишет:

Gagarin74 пишет:

Ну хорошо зайдем с другой стороны.

Сервер отправляет на ардуино http://192.168.88.22/set?b=23.548445

дальше для меня тупик.

как уже несколько раз упоминали, сервер сам ничего не отправляет, чтобы получить с него информацию - ему нужно послать запрос.

И совершенно непонятно, зачем вы все время выкладываете эту ссылку:

http://192.168.88.22/set?b=23.548445

Вы в курсе, что одреса, начинающиеся с 192.168 - локальные, а значит эту ссылку никто кроме вас открыть не может, зачем она нам?

 я пример дал что посылает сервер.

А вот готовое решение. может кому пригодится .

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

/* Установите здесь свои SSID и пароль */
const char* ssid = "MikroTik";  // SSID
const char* password = "wwwwwwww"; // пароль

// Объект веб-сервера. Будет прослушивать порт 80 (по умолчанию для HTTP)
ESP8266WebServer server(80);   

void setup() 
{
  Serial.begin(115200);
  delay(100);

  Serial.println("Connecting to ");
  Serial.println(ssid);

  // подключиться к вашей локальной wi-fi сети
  WiFi.begin(ssid, password);

  // проверить, подключился ли wi-fi модуль к wi-fi сети
  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("/genericArgs", handleGenericArgs);  // привязать функцию обработчика к URL-пути
 // server.on("/specificArgs", handleSpecificArg); // привязать функцию обработчика к URL-пути

  server.begin();                                // запуск сервера
  Serial.println("HTTP server started");  

}

void loop() 
{
  server.handleClient();    // обработка входящих запросов

}
void handleGenericArgs() //обработчик
{
  String message = "Number of args received:";
  message += server.args();      // получить количество параметров
  message += "\n";               // переход на новую строку

  for (int i = 0; i < server.args(); i++) 
  {
    message += "Arg nº" + (String)i + " –> "; // добавить текущее значение счетчика
    message += server.argName(i) + ": ";      // получить имя параметра
    Serial.println(server.argName(i));
    message += server.arg(i) + "\n";          // получить значение параметра
    Serial.println(server.arg(i));
  } 
Serial.println(server.argName(1));
  server.send(200, "text/plain", message);    // ответить на HTTP запрос
}

http://192.168.88.22   - ip адрес ардуны

в конечном итоге меня интересовало как получить именно

Serial.println(server.arg(i));

 

тоесть если отбросить все не точности и мораль то в сухом остатке получаем следующий алгоритм:

имеем домашний сервер ,на котором настроен сбор разной информации из паутины.

при изменение значений переменных (на два на 22 логика заложена на сервере), сервер отправляет http://192.168.88.22/set?b=23.548445       на ардуину. Та соответсвенно в свою очередь эту информацию отображает на своём дисплеи. 

Зачем этот велосипед ? ардуину можно поставить в любое место (у кровати на тумбочку). Вот и всё.

В любом случаи извините что "украл" Ваше время.