Я не могу использовать буфер без печати в моем Nodemcu esp8266

#include <ESP8266WiFi.h>


#include <ESP8266HTTPClient.h>
#include <WiFiClientSecureBearSSL.h>

#define WIFI_SSID "ssid"
#define WIFI_PASSWORD "password"

void setup() {
  Serial.begin(9600);
  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
  Serial.print("Connecting to Wi-Fi");
  while (WiFi.status() != WL_CONNECTED)
  {
    Serial.print(".");
    delay(300);
  }
  Serial.println();
  Serial.print("Connected with IP: ");
  Serial.println(WiFi.localIP());
  Serial.println();
  /////////////////////////////////////////////

  std::unique_ptr<BearSSL::WiFiClientSecure>client(new BearSSL::WiFiClientSecure);
  client->setInsecure();
  HTTPClient http;

  http.begin(*client, "https://jsonplaceholder.typicode.com/photos");
  http.addHeader("Accept", "*/*");


  int httpCode = http.GET();
  Serial.print("HTTP CODE: "); Serial.println(httpCode);

  //чтение ответа с буфером
  static char buff[128] = { 0 };
  while (http.connected() ) {
    size_t size = client->available();
    if (size) {
      int c = client->readBytes(buff, ((size > sizeof(buff) ) ? sizeof(buff) : size));
      // если я раскомментирую эту следующую строку, все в порядке.
      //Serial.write(buff, c); Серийный.println();


      // но если я не использую программу serial.write, она никогда сюда не попадет
      if (char * pch = strstr (buff, "quis fuga")) {
        char str[20] = { 0 }; int g =   0 ;
        while (pch[g] != '\"') {
          str[g] = pch[ g];
          g++;
        }
        Serial.print("FOUND IT: "); Serial.println(str);
      }

    }
    else if (!size) {
      Serial.println( "reading done");
      break;
    }
    delay(1);
  }


}

void loop() {

  delay(222222);

}


Обновление здесь я создал компилируемый исполняемый код. в основном я пытаюсь найти слово в ответе http. ответ моего реального примера не является json, и он такой же длины, как ответ этого примера. еще одна проблема, я не могу прочитать все ответы. он неожиданно заканчивает чтение иногда через несколько строк, иногда через несколько сотен. в этом конкретном запросе мой nodemcu не может прочитать после объекта id 258. или id 8. в ответе json: https://jsonplaceholder.typicode.com/ фото

Если я не использую содержимое буфера печати serial.write, чтение завершается мгновенно, и именно здесь у меня возникает проблема.

, 👍0

Обсуждение

Комментарии не для расширенного обсуждения; этот разговор был [перемещен в чат](https://chat.stackexchange.com/rooms/103739/discussion-on-question-by-alphaceph-i-cant-use-buffer-without-printing-in-my- нет)., @VE7JRO


1 ответ


Лучший ответ:

0

Последовательная печать создает задержку. Эта задержка позволяет собрать больше символов в буфере. Если вы читаете ввод небольшими частями (от 3 до 10 байтов), то буфер не содержит искомой подстроки, потому что он разбивается на два последовательных буфера. Даже если вы смогли прочитать полные буферы, все равно может случиться так, что строка поиска будет разделена.

Для поиска строки в потоке данных вы можете использовать функцию find(string). Сетевой класс Client наследует эту функцию от класса Arduino Stream. find будет читать поток, пока не найдет искомую строку. Затем при следующем чтении из потока данные будут считаны сразу после искомой строки.

,