Проблема в ESP8266 системных часов и тяжелой веб морды

Падение wifi при с увеличением содержимого веб страницы при наличии блока чтения системных часов RTCGT

Вопросы от новичков
Bullhorse
Рядовой
Сообщения: 16
Зарегистрирован: 14.01.2023{, 19:07}
Репутация: 1
Имя: Александр

Проблема в ESP8266 системных часов и тяжелой веб морды

#1

Сообщение Bullhorse » 02.02.2023{, 15:06}

Всем привет! Имеем ESP8266 nodemcu. В процессе постепенного обрастания проекта после определенного момента внезапно стал нестабильно работать девайс. Точнее совсем никак. Если убрать блоки вебморды, то снова работает...НО! Обнаружена связь между весом вебстранички и наличием блока чтения системных часов RTCGT. Если ручками заключить в коде ардуино строки чтения системных часов в событие if (millis() - timerReadRTC >= 10) { Чтение системных часов} (всего лишь на 10мс!!), то девайс снова начинает работать, плюс еще вебморда становится гораздо отзывчивее. Все остальные тяжелые блоки в коде ограничены выполнением раз в секунду изначально.
Диагностика: статус wifi соединения периодически изменяется
Для справки: С 54 разнообразными параметрами в веб морде работает, при добавлении еще 12 чекбоксов - нет, если не ограничить RTCGET.

Вопрос: Можно ли отредактировать RTCGET, чтобы приделать к нему EN? Или просто ограничить частоту его выполнения?

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Проблема в ESP8266 системных часов и тяжелой веб морды

#2

Сообщение Dryundel » 02.02.2023{, 15:38}

Bullhorse писал(а):
02.02.2023{, 15:06}
Вопрос: Можно ли отредактировать RTCGET, чтобы приделать к нему EN? Или просто ограничить частоту его выполнения?
Попробуй разместить блок на отдельной плате и ограничивай ее.

Редактировать штатные блоки нельзя.

Bullhorse
Рядовой
Сообщения: 16
Зарегистрирован: 14.01.2023{, 19:07}
Репутация: 1
Имя: Александр

Проблема в ESP8266 системных часов и тяжелой веб морды

#3

Сообщение Bullhorse » 02.02.2023{, 16:06}

Сейчас так и сделал, но не ограничился этим, ибо не заработало. Сделал отдельную плату, которая формирует флаг по 500мс и сбрасываю его на плате с часами. НЕ работает! serial на плате с часами сигналит правильно 2 раза в сек, но wifi теперь вообще не поднимается. Ковыряюсь..

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Проблема в ESP8266 системных часов и тяжелой веб морды

#4

Сообщение Dryundel » 02.02.2023{, 16:21}

Bullhorse писал(а):
02.02.2023{, 16:06}
Сделал отдельную плату, которая формирует флаг по 500мс и сбрасываю его на плате с часами.
Это что за плата такая заморочная?
А просто генератор с R-триггером на выходе не устроил?

Bullhorse
Рядовой
Сообщения: 16
Зарегистрирован: 14.01.2023{, 19:07}
Репутация: 1
Имя: Александр

Проблема в ESP8266 системных часов и тяжелой веб морды

#5

Сообщение Bullhorse » 02.02.2023{, 16:27}

На входе Rtrig - симметричный генератор, на выходе - разрешение записи bool переменной. Плата с часами выполняется если bool = true

Отправлено спустя 12 минут 23 секунды:
Значит так. Происходит какая хрень. Если убрать то, что добавил с момента рабочего состояния - все равно не работает. Даже если поставить галочку "не компилировать плату". А вот если загрузить ранее сохраненный в рабочем состоянии проект - все отлично. К сожалению между этими двумя проектами есть небольшие отличия. Буду продолжать рабочий проект до момента возникновения ошибки.

Отправлено спустя 6 минут 53 секунды:
Есть подозрение, что каждое изменение проекта надо сохранять отдельным файлом, чтобы избежать такого и вычислить момент возникновения проблемы

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Проблема в ESP8266 системных часов и тяжелой веб морды

#6

Сообщение Dryundel » 02.02.2023{, 17:38}

Bullhorse писал(а):
02.02.2023{, 16:46}
На входе Rtrig - симметричный генератор, на выходе - разрешение записи bool переменной.
разрешение записи bool переменной - это лишнее. У Вас же R-триггер, а это единичный импульс на один цикл.
Просто переменную оставь и на плате по условию ничего не надо.

aidar_i
Полковник
Сообщения: 3120
Зарегистрирован: 24.12.2016{, 16:55}
Репутация: 674
Откуда: Уфа
Имя: Айдар
Контактная информация:

Проблема в ESP8266 системных часов и тяжелой веб морды

#7

Сообщение aidar_i » 02.02.2023{, 17:59}

Bullhorse писал(а):
02.02.2023{, 15:06}
Если ручками заключить в коде ардуино строки чтения системных часов в событие if (millis() - timerReadRTC >= 10) { Чтение системных часов} (всего лишь на 10мс!!), то девайс снова начинает работать, плюс еще вебморда становится гораздо отзывчивее. Все остальные тяжелые блоки в коде ограничены выполнением раз в секунду изначально.
Если у Вас так работает, не мучайтесь, поставьте вот эти блоки, между ними поставьте часы , как в примере.
Таймер.flp
(163.66 КБ) 49 скачиваний
Их можно использовать и для других блоков. Период настраивается в параметре.
Штатные сервисы времени работают?
Я пользуюсь этими https://www.ntp-servers.net/servers.html

Bullhorse
Рядовой
Сообщения: 16
Зарегистрирован: 14.01.2023{, 19:07}
Репутация: 1
Имя: Александр

Проблема в ESP8266 системных часов и тяжелой веб морды

#8

Сообщение Bullhorse » 02.02.2023{, 20:00}

aidar_i писал(а):
02.02.2023{, 17:59}
поставьте вот эти блоки
Спасибо! Это отличное решение. Еще пригодится. Если расположить эти блоки, учитывая порядок компиляции, то не обязательно на разных платах их держать.
Вот только в проекте из первого поста это перестало работать. Какая-то последовательность действий из удаления/добавления блоков приводит сам проект в нерабочее состояние. Второй раз такое случилось. Вот в соседней теме с другими глюками бился. Имея нехорошую привычку создавать кучу копий на разных этапах создания проекта для случаев различной реализации, есть подозрения, что после паузы над проектом я подгрузил не последний вариант для продолжения. Вот и сейчас сижу, потихоньку накидываю заново то же самое, компилю после каждого изменения...
Штатные сервисы времени не работают. Пользуюсь такими же.

aidar_i
Полковник
Сообщения: 3120
Зарегистрирован: 24.12.2016{, 16:55}
Репутация: 674
Откуда: Уфа
Имя: Айдар
Контактная информация:

Проблема в ESP8266 системных часов и тяжелой веб морды

#9

Сообщение aidar_i » 02.02.2023{, 20:11}

Bullhorse писал(а):
02.02.2023{, 20:00}
Вот только в проекте из первого поста это перестало работать.
Внутри этих блоков лучше не располагайте другие блоки кроме часов. Лучше их в других платах, а выходы и входы соединяйте с помощью клеммы или переменных.

Bullhorse
Рядовой
Сообщения: 16
Зарегистрирован: 14.01.2023{, 19:07}
Репутация: 1
Имя: Александр

Проблема в ESP8266 системных часов и тяжелой веб морды

#10

Сообщение Bullhorse » 03.02.2023{, 00:13}

И так, господа, готов выкатить баг. Путем постепенного добавления в морду пользовательских параметров и 40 компиляций, наконец-то уперся в нерабочие параметры.
В пользовательских параметрах сохраняю кучу переменных типа bool, byte, int. И при обращении к седьмому или восьмому параметру по списку сверху вниз типа bool, не считая остальные параметры, вебморда падает. Причем если какой-то bool сверху превратить в byte, то список сдвигается на один параметр. Обнаружено, что при использовании "плохого" параметра, FLPROG тупо не вставляет эту переменную в код.
это не работаетПоказать
}
ESP8266_freeParam_248193119 = readBooleanFromEEPROM(1, 0, 0x0);
ESP8266_freeParam_140262932 = readBooleanFromEEPROM(1, 1, 0x0);
ESP8266_freeParam_122176158 = readBooleanFromEEPROM(1, 2, 0x0);
ESP8266_freeParam_249955702 = readBooleanFromEEPROM(1, 3, 0x0);
ESP8266_freeParam_185280663 = readBooleanFromEEPROM(1, 4, 0x0);
ESP8266_freeParam_134621365 = readBooleanFromEEPROM(1, 5, 0x0);
ESP8266_freeParam_190589504 = readBooleanFromEEPROM(1, 6, 0x0);
ESP8266_freeParam_13153615 = readBooleanFromEEPROM(1, 7, 0x0);
ESP8266_freeParam_44513526 = readStingFromEEPROM(2,80,0x0);
ESP8266_freeParam_153693250 = readByteFromEEPROM(82,0,0x0);
А это работаетПоказать
ESP8266_freeParam_248193119 = readBooleanFromEEPROM(1, 0, 0x0);
ESP8266_freeParam_140262932 = readBooleanFromEEPROM(1, 1, 0x0);
ESP8266_freeParam_122176158 = readBooleanFromEEPROM(1, 2, 0x0);
ESP8266_freeParam_249955702 = readBooleanFromEEPROM(1, 3, 0x0);
ESP8266_freeParam_185280663 = readBooleanFromEEPROM(1, 4, 0x0);
ESP8266_freeParam_134621365 = readBooleanFromEEPROM(1, 5, 0x0);
ESP8266_freeParam_190589504 = readBooleanFromEEPROM(1, 6, 0x0);
ESP8266_freeParam_13153615 = readBooleanFromEEPROM(1, 7, 0x0);
ESP8266_freeParam_82982671 = readBooleanFromEEPROM(2, 0, 0x0);
ESP8266_freeParam_44513526 = readStingFromEEPROM(3,80,0x0);
ESP8266_freeParam_153693250 = readByteFromEEPROM(83,0,0x0);
Отличия в одной строчке.
А всего лишь в конструкторе интерфейса заменяю используемую bool переменную стоящую на седьмом или восьмом месте на девятую и так далее

artemka19
Лейтенант
Сообщения: 540
Зарегистрирован: 03.09.2020{, 15:41}
Репутация: 216
Откуда: Питер
Имя: Артем

Проблема в ESP8266 системных часов и тяжелой веб морды

#11

Сообщение artemka19 » 03.02.2023{, 01:19}

а стринги есть в параметрах?
там прост не менее 26 символов длину для них нужно указывать

Bullhorse
Рядовой
Сообщения: 16
Зарегистрирован: 14.01.2023{, 19:07}
Репутация: 1
Имя: Александр

Проблема в ESP8266 системных часов и тяжелой веб морды

#12

Сообщение Bullhorse » 03.02.2023{, 01:47}

artemka19 писал(а):
03.02.2023{, 01:19}
не менее 26 символов
вот блин. Точно же. Один параметр меньше оказался. Заработало ) Спасибо!

Отправлено спустя 23 минуты 56 секунд:
Ненадолго.. уперся в следующий параметр. Не работает.
Может есть какие-то правила выравнивания? Как у owen с регистрами, например..

Ingwar
Полковник
Сообщения: 1929
Зарегистрирован: 28.10.2015{, 22:47}
Репутация: 223
Откуда: Ленобласть
Имя: Игорь

Проблема в ESP8266 системных часов и тяжелой веб морды

#13

Сообщение Ingwar » 03.02.2023{, 03:11}

Возможно не в тему, но если проект большой, то что там с оперативкой? Не знаю как на ESP, но на AVR-ках при заполнении оперативки более 59% возможны "нежданчики" (из личного опыта).
Люди в своем большинстве живо интересуются всем на свете, за исключением того, что действительно стоит знать.

Bullhorse
Рядовой
Сообщения: 16
Зарегистрирован: 14.01.2023{, 19:07}
Репутация: 1
Имя: Александр

Проблема в ESP8266 системных часов и тяжелой веб морды

#14

Сообщение Bullhorse » 03.02.2023{, 12:59}

FLProg весьма беспощадно относится к оперативке, в родных блоках там где byte было бы достаточно торчит int. Жирный пользователський блок? - Держи структуру. В полученный код не вникал пока работает, но проблема будущей фрагментации напрягает..
СпойлерПоказать
. Variables and constants in RAM (global, static), used 42496 / 80192 bytes (52%)
║ SEGMENT BYTES DESCRIPTION
╠══ DATA 1628 initialized variables
╠══ RODATA 13508 constants
╚══ BSS 27360 zeroed variables
. Instruction RAM (IRAM_ATTR, ICACHE_RAM_ATTR), used 59847 / 65536 bytes (91%)
║ SEGMENT BYTES DESCRIPTION
╠══ ICACHE 32768 reserved space for flash instruction cache
╚══ IRAM 27079 code in IRAM
. Code in flash (default, ICACHE_FLASH_ATTR), used 299932 / 1048576 bytes (28%)
║ SEGMENT BYTES DESCRIPTION
╚══ IROM 299932 code in flash
На esp32 собирать не хочу. Был негативный опыт с модулем wt32-eth01. Проблема сброса при подаче питания осталась для меня нерешенной. Прицепишь к ногам несколько пустых дюпонов по 10 см - оно не стартует. Нагреешь стабилизатор LM1117 на плате - стартует. Замена не помогает. Даешь внешние 3,3v: если через выключатель - не стартует. В конце концов остановился на подаче питания 220в на цепочку блоков питания 220В>5В>3.3В :shok:

artemka19
Лейтенант
Сообщения: 540
Зарегистрирован: 03.09.2020{, 15:41}
Репутация: 216
Откуда: Питер
Имя: Артем

Проблема в ESP8266 системных часов и тяжелой веб морды

#15

Сообщение artemka19 » 03.02.2023{, 16:42}

Bullhorse писал(а):
03.02.2023{, 12:59}
там где byte было бы достаточно торчит int
например?

aidar_i
Полковник
Сообщения: 3120
Зарегистрирован: 24.12.2016{, 16:55}
Репутация: 674
Откуда: Уфа
Имя: Айдар
Контактная информация:

Проблема в ESP8266 системных часов и тяжелой веб морды

#16

Сообщение aidar_i » 03.02.2023{, 18:53}

artemka19 писал(а):
03.02.2023{, 16:42}
Bullhorse писал(а):
03.02.2023{, 12:59}
там где byte было бы достаточно торчит int
например?
Если это int в параметрах, то проблем нет! Если это в коде вместо byte стоит int, то да.

artemka19
Лейтенант
Сообщения: 540
Зарегистрирован: 03.09.2020{, 15:41}
Репутация: 216
Откуда: Питер
Имя: Артем

Проблема в ESP8266 системных часов и тяжелой веб морды

#17

Сообщение artemka19 » 03.02.2023{, 19:05}

aidar_i, а где такое? в каком блоке?

aidar_i
Полковник
Сообщения: 3120
Зарегистрирован: 24.12.2016{, 16:55}
Репутация: 674
Откуда: Уфа
Имя: Айдар
Контактная информация:

Проблема в ESP8266 системных часов и тяжелой веб морды

#18

Сообщение aidar_i » 03.02.2023{, 19:40}

artemka19 писал(а):
03.02.2023{, 19:05}
aidar_i, а где такое? в каком блоке?
В любом штатном или ПБ.

Bullhorse
Рядовой
Сообщения: 16
Зарегистрирован: 14.01.2023{, 19:07}
Репутация: 1
Имя: Александр

Проблема в ESP8266 системных часов и тяжелой веб морды

#19

Сообщение Bullhorse » 03.02.2023{, 21:39}

artemka19 писал(а):
03.02.2023{, 16:42}
например?
например DMUX. Или DMS? (демультиплексор) Но в масштабах моей проблемы это очень маленькая фигня.
Поэкспериментировал с прогой. Грешил, что мой пользовательский блок с внутренним размером с пару экранов и старательно размноженный еще на три экрана (а надо еще на три), жрёт много памяти.. оказалось, к чести автора FLPROG, что удаление одного блока уменьшает размер памяти примерно на количество входных и выходных переменных, и получаемый код блока даже содержит указатели.
А вот удаление одной страницы из вебморды приводит к освобождению примерно чуть более килобайта оперативы, а удаление вебинтерфейса освобождает аж 10кб.
В общем надеялся пропетлять.. пытался не использовать "запретные" переменные, создавая дополнительные. Это даже работает до какой-то степени)). Но потом оказалось, что "запретной" стала переменная не хранящаяся в EEPROM...... Вот собсно и всё. Создать новую и воткнуть её в то же самое место результат не приносит. Удаление своих кривых стилей страницы, удаление доп страниц - вот результат. И это пока будет цель. Мне нужно вывести полсотни параметров в морду. Уже принципиально. На 8266. На ESP32 уже посмотрел (там 12% оперативы мой проект занимает). Но пока 8266.

artemka19
Лейтенант
Сообщения: 540
Зарегистрирован: 03.09.2020{, 15:41}
Репутация: 216
Откуда: Питер
Имя: Артем

Проблема в ESP8266 системных часов и тяжелой веб морды

#20

Сообщение artemka19 » 04.02.2023{, 01:46}

aidar_i писал(а):
02.02.2023{, 15:06}
любом
в смысле в любом?
там же есть выбор типа переменной

Отправлено спустя 2 минуты 38 секунд:
Bullhorse писал(а):
03.02.2023{, 21:39}
нужно вывести полсотни параметров в морду
да хоть 500)))

в чем проблема то непонятно

Ответить

Вернуться в «Начинающим»