• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Вопрос Что стабильнее: ESP8266 или 32?

Алексей.

Active member
Пока применил такой вариант: посылаю HTTP ответ "Connection: close" и закрываю socket - он посылает FIN/ACK
После того как вы закрыли сокет и получили fin/ack это значит что ваш fin был принят и другая сторона уже знает что соединение закрыто, будет ли она закрывать свой сокет (отправляя свой fin) или нет на её совести, вы выполнили корректное закрытие соединения имхо.
У меня был значительно хреновый случай, когда на встраиваемой системе использовался ethernet модуль у которого с одной стороны физический 10BASE-T а с другой драйвер для стека, и эта зараза при поступления fin-а не сигналила стеку что соединение закрылось. Для загрузки файлов по ftp, когда сигналом окончания файла было получение закрытие соединения, приходилось забивать костыли, предварительно запрашивая размер файла.
 

pvvx

Активный участник сообщества
После того как вы закрыли сокет и получили fin/ack это значит что ваш fin был принят и другая сторона уже знает что соединение закрыто, будет ли она закрывать свой сокет (отправляя свой fin) или нет на её совести, вы выполнили корректное закрытие соединения имхо.
Это действительно только если осталась TIME_WAIT и нет SO_REUSEADDR. Иначе следующие данные от Chrome попадут в другое, новое соединение :)
Данная беда есть и у крутых linux серваков :) :) Это специальная такая дырочка для безопасности :)

По пересылке "Coonnect: close" надо ещё подождать (разумно на время макс.пинга *x) от клиента FIN/ACK, а не закрывать сокет... Это избавит от TIME_WAIT.

PS: Пишу тут свой http на embedded linux c малыми ресурсами на сотню одновременных соединений… Очень большая печалька с либами OpenSSL - сплошной кошмар в алгоритмах работы и не годятся для малых ресурсов... А поглядев исходники разнообразных имеющихся ?httpd - волосы дыбом встают - детсад в linux напирает...
 
Последнее редактирование:

pvvx

Активный участник сообщества
Поясните пожалуйста что такое синхронизация блоков, лучше ссылкой на rfc.
Но в Modbus TCP это дело значится :) Там заголовок Modbus TCP должен быть в начале блока данных самого TCP пакета (и укладываться в него) и никакого "потока"... 8)

И им повезло, что размер фрейма Modbus TCP никогда не превышает минимального MTU…

А вот товарищу maddogmaycry не повезло с его алго на UDP, учитывая фрагментацию… и колоссальное кол-во отбрасываемых пакетов UDP роутерами и свичами при переходе на более низкую полосу (что и есть WiFi у ESP).
 
Последнее редактирование:

Cu6apum

Member
ненужные никому ныне пути обхода глюков ESP8266 и методы работы с архитектурой его CPU и закрытого SDK
Здравствуйте. Принимайте новичка.

В поисках дешевейшего mcu для маленькой разрабатываемой линейки модулей для промки наткнулся на esp и заказал пару разбивочных плат даже уже.
По документированным фичам (ЦЕНАааа, память, почти готовый ethernet mac, rtos из коробки, да еще и вайфайка на отдаленное будущее) выглядит прямо шоколадно... поэтому засады не может не быть. :) ибо tanstaafl.

Есть ли некий faq по основному набору косяков этой soc, который необходимо выучить до того, как начинать всерьез колупать ее? Еррату читал; пока терпимо, если правда. SDK еще не мучил, но rtos она и в африках вроде не бином Ньютона.

Задача - обычные периферийные модули (сухие/мокрые входы/выходы, счетчики, АЦП итд.) на интерфейсах modbus/rtu/tcp и mqtt. Ну, может, минималистичный httpd для конфигуряния. Коли есть вайфайка, тоже можно заюзать.

Альтернатива - проевший всем плешь stm32 - сразу на порядок дороже.

Спасибо!
 
Добрый день. Далеко не уходите, сейчас придёт pvvx, и расскажет вам какое всё это глючное, тормознутое, а главное НЕэнергоэкономное Г...
;)
 

Cu6apum

Member
Зачем ждать. На форуме есть поиск по автору.
Конкретику надо. На гугле уже был. ))
Китайский сдк - понятно, неудивительно; старые ядра - даташыты смотрел, еррату тоже, с виду тянуть должно.
Интересуют неочевидные засады, от тех, кто закапывался по полной. Было бы очень неприятно быть вынужденным через полгода прототипов взять и похоронить платформу…
 

pvvx

Активный участник сообщества
Конкретику надо.
Конкретика с ESP32 простая:
1. Урезанный TCP стек, нет соответствия с RFC. Для пром. изделий не годится
2. Большое потребление. Не работает от USB компов/ноутбуков/смартфонов/... - мало току. Только от зарядника с токами за 1A. Иначе правильно не стартует процедура инициализации дров в SDK/IDF.
3. Большой нагрев из-за большого потребления, что сильно сужает область применения. Не подходит для установки в малые закрытые пластиковые корпуса.
4. Закрытые библиотеки.
5. Низкая производительность из-за обработки программы с SPI-Flash и малого кэш. Имеющиеся библиотеки распухли и не лезут в кэш. Предсказания у кэш нет. При линейной программе скорость обработки кода падает ниже STM32 с 10..20 МГц, а нагрев и потребление двух ядер остается + работают все шины и SPI-Flash.
Как замена STM32 не годится уже по параметрам ADC, не говоря уже о других. Имеет неточные (конкретно кривые) и шумные ADC.
Было бы очень неприятно быть вынужденным через полгода прототипов взять и похоронить платформу…
Это смотря какую "платформу". Если для кружка пионеров - проживет десятилетие.
 

pvvx

Активный участник сообщества
Альтернатива - проевший всем плешь stm32 - сразу на порядок дороже.
Цена на STM32 дорогая из-за перекупщиков и Ковидла. Их нет в наличии в оф. магазинах и у дистребов. Только по завышенной цене в 7 раз или заказ от 56 недель :)
Прямая альтернатива - Микрочип, точнее купленный ими AVR. Они пока есть на складах, но ценник тоже европейский :)
Другая замена - китайские чуда. К примеру WinnerMicro W80x серия... цена там до 100 рупь поштучно.
Или https://www.gigadevice.com/. У них есть дистребы и поставки и у нас...
 

Cu6apum

Member
Ну gd32 битый у нас ковыряли. Чип флешки, косо приклеенный на проц, как-то сразу заставил послать это чудо. ))

Перегрев - хороший такой факап, согласен. Надежность мне во главе угла.

Применение - удаленные модули контроллера (промка): релейки/входы/ацп по modbus/tcp/rtu, ничего особенно сложного, лишь бы юзер включил и забыл до пенсии. Вот так, в одном флаконе (ажно с ULP ядрецом, чтоб счетчик тикал от таблетки 2032), да еще чтоб задешево, - с разбегу больше и не видно ничего…

Посоветуете?
 

Cu6apum

Member
Если не лень, давайте представим, что я его защищаю. :) Я уже потратил 1800р на две платы с али, в конце концов.

Конкретика с ESP32 простая:
1. Урезанный TCP стек, нет соответствия с RFC. Для пром. изделий не годится
Неурезанный например жжет напалмом. https://www.forescout.com/blog/new-critical-vulnerabilities-found-on-nucleus-tcp-ip-stack/
Для чего конкретно мало lwip (признаюсь, не ковырял еще)? При условии, что устройство не вылезет за пределы локалки, будет иметь максимум 8 открытых сокетов и переругиваться с головой не чаще раза в 10..20мс?

2. Большое потребление. Не работает от USB компов/ноутбуков/смартфонов/... - мало току. Только от зарядника с токами за 1A. Иначе правильно не стартует процедура инициализации дров в SDK/IDF.
Мне фиолетово.

3. Большой нагрев из-за большого потребления, что сильно сужает область применения. Не подходит для установки в малые закрытые пластиковые корпуса.
Есть ли цифры? Сколько выделяет при какой нагрузке? Дохнет ли от перегрева? (отпайка от платы - считается...)

4. Закрытые библиотеки.
Вот это реально паршиво. Затыки известны?

5. Низкая производительность из-за обработки программы с SPI-Flash и малого кэш. Имеющиеся библиотеки распухли и не лезут в кэш. Предсказания у кэш нет. При линейной программе скорость обработки кода падает ниже STM32 с 10..20 МГц, а нагрев и потребление двух ядер остается + работают все шины и SPI-Flash.
Хреново. Это в случае образа, не залезшего во встройку? А если программа мелочь пузатая? Считать ацп да плюнуть в modbus/tcp, ну раз в полжизни выдать табличку по http и скушать POST?

Имеет неточные (конкретно кривые) и шумные ADC.
Пофиг, никто не юзает набортные АЦП, разве себе температуру померить и свиснуть о пожаре.
 

Cu6apum

Member
Кстати, GD32F450 ни на дижикее, ни на маузере нет - только на алике, дорого и немножко. Есп - хоть попой кушай везде. Однако, гм.
 

pvvx

Активный участник сообщества
Для чего конкретно мало lwip (признаюсь, не ковырял еще)? При условии, что устройство не вылезет за пределы локалки, будет иметь максимум 8 открытых сокетов и переругиваться с головой не чаще раза в 10..20мс?
Открытие и закрытие соединения, если писано дитями, вызывает откладывание яиц в виде структур соединений с флагом TIME_WAIT на 120 сек на любой стороне. Тупо не хватает памяти для их удержания при обычном Ajax. По этому ESP их просто не плодит и заканчивает соединение не по RFC.
Минимальная норма объема буферов для Lwip от 200 килобайт - это с учетом поддержки стандарта TCP и при имеющимся ограничении скорости сети до 1Мбайт в сек.
Для modbsu tcp обычно соединения открываются на всю сессию и там это не особо важно, если вам какать на стандарты. К пром. оборудованию это не относится.
Хреново. Это в случае образа, не залезшего во встройку? А если программа мелочь пузатая? Считать ацп да плюнуть в modbus/tcp, ну раз в полжизни выдать табличку по http и скушать POST?
При старте оно всё так - код подгружается только малыми блоками из SPI-Flash, а на каждый блок идет расход на заголовок с адресом. А скорость у QSPI и так не сверх...
 

pvvx

Активный участник сообщества
Считать ацп да плюнуть в modbus/tcp, ну раз в полжизни выдать табличку по http и скушать POST?
А эксплореру плевать - он без вопросов может открыть сразу 5 соединений на одну страницу. А у вас из-за RAM ограничения в кол-ве одновременно открытых соединений. Второму пользователю уже не хватит - будет кидать ошибки соединения.
Вообще всё такое, что типа modbus tcp / http / thhps проверяется тестами на кол-во открытых/закрытых соединений в секунду и кол-во одновременных.
К примеру в apache-jmeter. И если устройство у вас валится от запросов, то значит его в помойку...
 

Cu6apum

Member
А у вас из-за RAM ограничения в кол-ве одновременно открытых соединений.
Вообще-то это одна из самых «выдающихся» в плане памяти микрух, что я рассматривал: на классике с М4 (sam e70 например) нет и намека на набортный допSRAM, кушайте 384к.

А ежли эту в помойку, то кот? Посоветуете? MAC на борту обязателен, вопрос встанет даже на кол-во паек, один корпус лучше двух, а уж трех…
 

pvvx

Активный участник сообщества
Примеры тестов apache-jmeter 2017 г с ESP-32S (DevKit плата)
Более новые на ESP32+PSRAM:
Вообще-то это одна из самых «выдающихся» в плане памяти микрух, что я рассматривал: на классике с М4 (sam e70 например) нет и намека на набортный допSRAM, кушайте 384к.
Они не созданы для TCP. Пользуйте UDP и протоколы на нем, т.к. UDP не требует буферов у драйвера (там же нет протокольного стека!).

А ежли эту в помойку, то кот? Посоветуете? MAC на борту обязателен, вопрос встанет даже на кол-во паек, один корпус лучше двух, а уж трех…
Давно куча SoC с памятью в мегабайты. Даже г"ОВЕН" в свои блоки ставит SoC RTL87xx с 2MiB встроенной DRAM для тупого обслуживания TCP.
 

pvvx

Активный участник сообщества
@Cu6apum - думаете что производители безделушек дураки, что как попер BLE сразу перекинулись на него? BLE не требует объемов RAM - там и пары килобайта в SoC на всё достаточно для передачи modbus или данных с пары датчиков.

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

Cu6apum

Member
TCP надо… BT нет.
Раз уж китайцев набрал, покропаю-помучаю, как Полпот Кампучию.
На реалтечину смотрел, в т.ч. изнутри овновых поделок: маловато будет. К слову, они с виду большие умельцы сделать пшик из пристойных компонентов… помацал тут 200-ю серию, поудивлялся.

А еще что довелось поколупать? Спасибо.
 

pvvx

Активный участник сообщества
Есть ещё один метод использования TCP на контроллерах типа STM32 cо свободной под TCP стек RAM менее пол-мегабайта – подключить перед ним роутер и в нем заблокировать трафик до килобайта в сек и резать все соединения. Но нормальным людям проще вписать эту задачу в тот-же роутер, т.к. большинство из них имеют USB и в него всегда можно вставить STM32 в виде контроллера ввода-вывода :)
 
Сверху Снизу