• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

ESP8266 скачивает файл не полностью

Topcat

New member
Прошу помочь с решением проблемы, которая, как сказали бы западные esp-шники "is driving me nuts".
Пишу скрипт, в процессе которого происходит следующее:
1. После включения происходит обращение к удаленному серверу (WiFiClient) и скачивание двух json-файлов (маленького (2кб) и большого (около 16кб)).
2. Через секунд пять эта операция повторяется заново.
3. В дальнейшем скачивания происходят каждые пять минут.

Проблема заключается в том, что на этапе два большой файл у меня скачивается не полностью, каким-то обрезанным (вывожу его через serial monitor). И в дальнейшем (этап три) полностью он уже больше не скачивается - где-то после трех четвертей идет обрыв.

Код не привожу, так как он довольно большой, но если надо могу привести фрагмент со скачиванием. Не понимаю, в чем дело и куда копать - проблема с памятью? Проблема с коннектом? Какие-то глюки? Подскажите даже не решение, а хотя бы на что следует обратить внимание
 

Topcat

New member
А есть какая-то хитрость, чтобы обойти это? В первый-то раз скачивается полностью...
 

Topcat

New member
Решил проблему. Дело действительно оказалось в нехватке памяти. Сделал так: переменную с json объявляю не глобальной, а локальной. При открытии записываю файл во флеш, а затем, когда необходимо, считываю его в другую локальную переменную.
 

Алексей.

Active member
При открытии записываю файл во флеш, а затем, когда необходимо, считываю его в другую локальную переменную.
Не жалко вам флеша то? Ресурс его по количеству записей ограничен, постоянной записью вы можете его убить.
 

Topcat

New member
Вот тут pellepl/spiffs утверждается, что повторяемый каждую секунду цикл чтения/записи выведет память из строя через год. Уменьшение частоты обращения к файлу до раза в минуту увеличит срок жизни памяти до 58 лет.

А по поводу записи в RAM — я такой подход еще не использовал. Не подскажите, какая библиотека позволяет реализовать это?
 

CodeNameHawk

Moderator
Команда форума
Не подскажите, какая библиотека позволяет реализовать это?
Все ваши переменные и так в RAM находятся .
JSON для обработки данных требует много памяти.
Посылайте только те данные, которые изменились или посылайте их в чистом виде.
How to reduce memory usage?
 

nikolz

Well-known member

Алексей.

Active member
выкиньте JSON.
Делайте проще и все уместится.
О как! за одно и выкинуть удаленный сервер, зачем он такой нужен, а после этого уже можно и есп выкинуть.

Решал почти такую же задачу, получаю данные погоды с сервера, форекасты в джейсоне до 15К.
Данные структурированные один элементов содержит массив джейсонов каждый из которых по отдельности не превышает 500 байт и без проблем разбирается.
После выполнения http клиентом метода get, получаю большую строку контента, нахожу начало и конец массива, далее выделяю каждый элемент (каждый джейсон объект) и выполняю его разбор обычным StaticJsonBuffer.parseObject
Посмотрите update_forecast(const String& query)
 

nikolz

Well-known member
О как! за одно и выкинуть удаленный сервер, зачем он такой нужен, а после этого уже можно и есп выкинуть.

Решал почти такую же задачу, получаю данные погоды с сервера, форекасты в джейсоне до 15К.
Данные структурированные один элементов содержит массив джейсонов каждый из которых по отдельности не превышает 500 байт и без проблем разбирается.
После выполнения http клиентом метода get, получаю большую строку контента, нахожу начало и конец массива, далее выделяю каждый элемент (каждый джейсон объект) и выполняю его разбор обычным StaticJsonBuffer.parseObject
Посмотрите update_forecast(const String& query)
Так как формат принимаемых данных у вас фиксированный то можно все растащить без JSON и возможно даже на лету.
Для этого вполне хватит места а софт будет не больше 10 кбайт да и тот будет во флеш. А весь разбор делать надо на СИ.
Решал подобную задачу без JSON , когда делал торгового робота для биржи.
 
Сверху Снизу