Уважаемые посетители сайта esp8266.ru!
Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram
Я ведь не делал ПРАВИЛЬНЫЙ вариант, я написал временный способ узнать CHIP_ID (не проверяя последствия).
Если у вас заработало - хорошо. Сохраните свой рабочий код, чтобы можно было перепроверить, если вдруг после новых изменений снова что-то не будет работать. (Таким образом, по-шагово внося изменения, можно определить после каких действий все ломается и выяснить причину "почему")
По пробовал построить сервер на rtos, результат тот же, сервер перестает отвечать.
В тесте сервер принимает запрос на соединение от клиента и строит новый таск,
в таске для сокета клиента выполняет чтение http запроса и всегда отправляется ответ с 404-м кодом, если от клиента получаю разрывает соединения, закрываю сокет клиента и прекращаю таск клиента.
Для проверки использовал простенький скрипт, в котором в цикле выполнял тестовый запрос
#!/bin/bash
test_no=1
while [ $test_no -le 100000 ]
do
curl http://192.168.4.1/test && echo ' '$test_no
((test_no++))
done
Очень интересный результат получил, иногда после 80-90 запросов сервер перестает отвечать, иногда и после 15-ти не отвечает, запросы выполняются без каких либо задержек, после получения ответа на один запрос сразу выполняется следующий запрос.
С стороны сервера вижу что разрыв соединения со стороны клиента не всегда приходит, несмотря на то что FIN от клиента при разрыве соединения уходит, сервер его не обрабатывает, а поскольку сокеты клиентов на сервере я закрываю только в случае получения разрыва соединения от клиента, не получив разрыв соединения от клиента сокет остается открытым. В результате таблица файловых дескрипторов переполняется, сервер при попытке выполнить accept для очередного соединения получает ENFILE (File table overflow).
PS:
На ESP32 сначала поймал такое, после решил проверить на ESP8266, а там тоже самое.
Наткнулся на эту тему с похожей проблемой. Но так и не понял причину.
Датчик BMP280 отдает температуру -134 градуса. А сам вебсервер доступен. Зависает где-то через минут 40-60. Перезапуск восстанавливает датчик и все снова работает в штатном режиме. Есть ощущение что значение какой-то конкретной переменной выходит за рамки доступной памяти.