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

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

Cu6apum

Member
Завязан C++ и RTOS. А что там к ним подцепили - неизвестно.
Это надо перелопачивать всё, включая все либы в ESP/IDF.
Lwip имеет свой конфиг, где можно указать статика/динамика но как оно слеплено в ESP/IDF - неизвестно.
Ну до тех пор, пока это открытый кусок, непреодолимостей не видно. В любом сдк используемая в проекте часть плотно шерстится и часто переделывается наново, не впервой. Для avr8, считай, всё с нуля свое.

Прокурю, освоюсь, доложу. Софтовые баги обычно вылезают быстро. Вот железных опасаюсь параноидально.
 

pvvx

Активный участник сообщества
Заказаны сомики с 2 метрами psram. Могу ли я сразу релоцировать туда код, чтоб не жевать флешку, и разместить там же статически наиболее медленные буферы?
А фигу - в ESP/IDF всё на malloc(). Сделал поиск "malloc" - и даже драйверы:
[Espressif\esp-idf\components\driver\]
i2c.c
i2s.c
ledc.c
pcnt.c
rmt.c
rtc_module.c
sdio_slave.c
sdspi_host.c
sigmadelta.c
spi_master.c
spi_slave.c
timer.c
uart.c

Зы. На allwinner v3s тоже макетки заказал, хотя очень сильно сомневаюсь насчет времени загрузки линупса за секунду или меньше.
Это смотря какой "линупс" и какая плата - с какой памятью. Есть варианты, которые грузится и за менее 1 сек.
Учитывать загрузку стоит если устройство жрет не по карману. А если оно после старта в пару секунд пьет 80 мА, а затем 1 мА, то такое уже годится для стабильной и долгой работы от АКБ.
 

pvvx

Активный участник сообщества
Софтовые баги обычно вылезают быстро. Вот железных опасаюсь параноидально.
Ну там спустя годы не вставили даже delay() в инициализацию дров. От этого нехилый пик тока за 500 мА и в USB вырубает защитный тепловой(!) предохранитель. ESP/IDF пишется Ардуинщиком и имеет расчет на выполнение одной малой задачи. По этому сразу не падает, т.к. одна задача углубляясь в исполнение поэтапно занимает память в malloc(), а напечатав "Hello World!", обратно освобождает всё занятое в malloc().
Но если задачи идут динамически и открываются/закрываются всякие дрова, то оно потом падает или страдает утечками памяти. В гит куча запросов по этим нерешенным проблемам... Помогите им исправить :)
 

Cu6apum

Member
Разок-то в жизни можно, главное, не хлопать туда-сюда, вороша кучу. Посмотрим.
Не мой кейз. Пущай лопает. Мне нужно только держать ULP ядро включенным от часовой батарейки на время падения питания и корректно возвращаться взад. Поэтому заказал сразу кремний V3, где вроде бы побеждена бага с BOR.
Однако не фатально расстроюсь и без ULP, микруха экономичного счетчика импульсов - пятачок пучок, в конце концов.
 

pvvx

Активный участник сообщества
Для меня ESP закрыт по многим направлениям применения, т.к. не имеет PMU и/или драйвера PMU в RTOS.

Обычно в таком драйвере задаются callback по входу и выходу в/из sleep для каждого устройства и общее ядро драйвера имеет биты включения/выключения устройств в release/wakelock т.д.

Даже древний монстр с 2 МБ динамической памяти в виде RTL8195 и то потребляет 1 мА при постоянном соединении с AP, только за счет нормального PMU и драйвера к нему.

Ну и для ESP8266 они спрятали часть управления sleep режимами, а в ESP32 пока ничего по поводу аппаратных возможностей sleep не встречал.

Тест ESP32-C3 показывает, что время страта-загрузки до первого исполняемого кода пользователя (хоть в boot) после deep-sleep или reset ужасен и не может быть сокращен на менее чем у ESP8266. А о других sleep – тишина, т.к. имеющиеся характеристики не годятся для рекламы. Имеются только одни вопросы пользователей о кучи багов в имеющихся реализациях некой процедуры sleep...
 

pvvx

Активный участник сообщества
Не мой кейз. Пущай лопает.
У вас есть смартфон? Если вы включите в нем WiFi - сколько он жрет? Обычно там аналогичный или даже превосходящий по возможностям чип.
Если как ESP - то сколько оно проживет?
 

Cu6apum

Member
Ну нет все же необходимости сравнивать устарелый китайский бутерброд и чипсет A15 от Яббл. Задачи разные.
Мне-то он нужен в роли ардуинки с ethernetом: опросить АЦП, плюнуть результат в modbus/mqtt, потом релейкой щелкнуть и снова спать. При этом съест он милливатт или ватт, особой разницы нету. Главное - убойная надежность, спокойные поставки, скромная цена (евроамериканцы СИЛЬНО нескромны стали), отсутствие значительных расходов на обвязку. Ну, понятно, расходов на разработку тоже. При этом вайфайка - приятный бесплатный бонус для iot.

Лидер по отсутствию расходов на разработку это, конечно, allwinner. Десяток строк на сях под openwrt или baremetal на yocto - и можно продавать. Только оттюнить время загрузки до готовности. Даже phy на борту!
Хотя - старая инженерная школа, конечно, стучит в грудь пеплом Клааса: не офигел ли я строить авианосец чтоб возить кота через речку… :)
 

pvvx

Активный участник сообщества
Мне-то он нужен в роли ардуинки с ethernetом: опросить АЦП, плюнуть результат в modbus/mqtt, потом релейкой щелкнуть и снова спать.
Когда сделаете Modbus RTU - не забудьте выслать для проверки на соответствие спецификации Modbus по символьным задержкам в 1.5 и 3.5 символа :)
И не забудьте, что при передаче от мастера всем устройствам (на номер 0) пачки фреймов должны уложиться с паузами в 1.75 ms между сообщениями уже за 38400 и обработаться всеми устройствами...
При этом ваш сервер mqtt должОн кушать более тысячи публикаций в сек от тупенького приемника modbus rtu, работающего на скорости 115200 :)
 

Cu6apum

Member
Спасибо, тестирование будет жесткое. Причем за сервер (брокер) я беспокоюсь чуть меньше, там 4-котловый soc с полгигом оперативы, а как вот именно тощий клиент себя поведет в условиях флада mqtt (включая оверсайз телеграммы), надо смотреть.
 

pvvx

Активный участник сообщества
Причем за сервер (брокер) я беспокоюсь чуть меньше, там 4-котловый soc с полгигом оперативы, а как вот именно тощий клиент себя поведет в условиях флада mqtt (включая оверсайз телеграммы), надо смотреть.
Это зря - MQTT слишком тормозной и без спец. ухищрений не тянет и десятка публикаций в сек. Т.е. медленнее чем Modbus RTU на 9600. Дожили...
А Modbus TCP на одном ядре в 200MHz - 10 тысяч транзакций в сек.
 

pvvx

Активный участник сообщества
@Cu6apum Если связываетесь с Linux, то вам придется ознакомится, что такое переключение контекста в современных OS. И как это влияет на время выполнения большинства задач. С времен первых i-386 это время не изменилось, а они не могли принимать UART более 19200, пока в UART не ввели FIFO. Тупо не успевают переключаться на уровень ядра драйвера из пользовательской задачи.
Причина этому - так ныне пишут soft.
MQTT
250 ms на транзакцию. Или 4 публикации в сек :)

Наиболее приближенный самый простой тест скорости системы - сколько процедур fork() и vfork() она может выполнить в сек.
 

pvvx

Активный участник сообщества
А если хотите удариться в философию, то в нашем мире существуют физические ограничения – никакое неспециализированное ИИ или ещё кто не может быть быстрее мозга человека в 1.5 раза.

Только узкоспециализированные комплексы, заточенные на одну задачу. И ПО писанное на системе для решения общих задач всегда будет тупить и никогда не сравнится с узкоспециализированным комплексом.

И чтобы достичь паритета скорости MQTT на паре ядер с Modbus TCP на тупом MCU вам придется переписать всё, включая уровни ядра :)
 

Cu6apum

Member
MQTT слишком тормозной
На текущем брокере (одноядерный ARMv7 на 900МГц с гигом памяти) сейчас идет где-то 250-500 телеграмм в секунду. Это в штатном, расслабленном режиме, без стресс-тестов. А планируется для головного контроллера четырехствольный проц на 1.2ГГц, уже сидит коллега на трассировке платы.
Сколько удастся пропихнуть через сетевой МК - узнаем на днях, макетка уже упала в страну. Начну с дефолтного кода из сдк.

Причина этому - так ныне пишут soft.
Ну. Вы еще вспомните, как нынче кино снимают. :)
Под линь я сейчас пишу больше, чем под МК и, по опыту, не вижу препятствий обслужить на головном ПЛК 4-8 портов rs485 по 32 устройства на 115200bps, с фиксированным временем опроса, и еще не менее чем столько же устройств по modbus/tcp, но уже с буферизацией. Трафик весьма и весьма далек от кошмарного: сравните хоть с видеозахватом.

Если esp не сможет одновременно отдавать значения по modbus/tcp и в mqtt-топик хотя бы раз в 20мс, то сразу выпадет из кандидатур на сетевую периферию, штош, буду делать на ней только тупые устройства для rtu. Allwinnerская макетка тоже уже в пути.
 

pvvx

Активный участник сообщества
Под линь я сейчас пишу больше, чем под МК и, по опыту, не вижу препятствий обслужить на головном ПЛК 4-8 портов rs485 по 32 устройства на 115200bps, с фиксированным временем опроса, и еще не менее чем столько же устройств по modbus/tcp, но уже с буферизацией. Трафик весьма и весьма далек от кошмарного: сравните хоть с видеозахватом.
Вам дали подсказку - FIFO. Без неё никаких 115200. А это значит, что вы не вписались в стандарт Modbus RTU и не отслеживаете межсимвольную паузу в 1.5 символа. Т.е. у вас бракованная система и не годится для пром. применения.
Тот-же г"ОВЕН" в тупой переходник USB-ModbusRTU-485 вешает микруху MCU отслеживающую паузы и ещё что-то... Только толку мало - всё равно оно не вписывается в стандарт уже RS-485 по уровням и токам :)
 

Cu6apum

Member
Чо-т Вы не то прочли, сэээр.
На любом соме есть по железному фифо на уарт. Даже если не заводить поверх них еще софтовые, для специательных случаев.

Да и про мкутт инфа …гм, левовата. Загуглил неспешно бенчмарки популярных брокеров - mosquitto например (без учета ограничений железа) тянет ~240000 телеграмм в секунду. Т.е. мои текущие 500 это чих комариный.
 

pvvx

Активный участник сообщества
Чо-т Вы не то прочли, сэээр.
На любом соме есть по железному фифо на уарт. Даже если не заводить поверх них еще софтовые, для специательных случаев.
Т.е. вы никогда не связывались с modbus rtu и от этого непонимание, что FIFO не имеет указателя на байт, на котором произошел таймаут. Т.е. FIFO UART должно иметь IRQ c выставляемой паузой в символьных битах тишины вызывающее прерывание и вы должны успеть считать всю FIFO до появления в ней нового символа, что не обеспечивает никакой Linux (он не real-time) :p
И где вы возьмете такую модель API UART, в которой возможно указать кол-во бит символов межсимвольной тишины или время в мкс межсимвольной тишины? :unsure:
Да и про мкутт инфа …гм, левовата. Загуглил неспешно бенчмарки популярных брокеров - mosquitto например (без учета ограничений железа) тянет ~240000 телеграмм в секунду. Т.е. мои текущие 500 это чих комариный.
Вы у себя проверьте, а потом уже гуглите :)
 

Cu6apum

Member
Т.е. вы никогда не связывались с modbus rtu
Делал затычку на атмеге128, проблем не наблюл, потому и не пойму, о чем Вы. Протокол простой как дверь.

Вы у себя проверьте
Сделал 20000 телеграмм в секунду. Попискивает, но задержку не увеличил. Норм.
 

pvvx

Активный участник сообщества
Делал затычку на атмеге128, проблем не наблюл, потому и не пойму, о чем Вы. Протокол простой как дверь.
Дык "затычку" или протокол? :)
90% встретившихся местных устройств не могут работать по протоколу (по спецификации). Приходится вставлять дополнительные опции в меню для задержек и издержек их реализаций.
У вас видимо такое и вышло - "затычка" требующая специальных задержек и не распознающая разрывы в 1.5 символа и не понимающая что это помеха между сообщениями, т.к. не имеет даже 2-х таймеров для нескольких переключений шины и поддержки протокола?
Ей что шум на линии, что сообщения?
Сделал 20000 телеграмм в секунду. Попискивает, но задержку не увеличил. Норм.
Mosquitto is single threaded:
При 20000 средний ответ на запрос превышает длительность среднего фрейма Modsbus на 19200 (без учета задержки сети) :p
А если это очередная "затычка" на Arduino с ESP - то открытие и закрытие соединения на каждую публикацию превышает всё и сразу.
 

pvvx

Активный участник сообщества
Потом и выходят такие IoT лампочки через сервер - нажал кнопку и жди, т.к. сообщение MQTT застряло в очереди и движется где-то между рукавами серваков доя ближайшего однопоточного Mosquitto загрузившего на 3.125% Atlon c 16 ядрами (больше не может - поток один). :)
 

Cu6apum

Member
Всё, я, кажется, врубился в Ваши опасения.
Расскажу, как только сделаю.
Добиваться синхронности от mqtt - идея изначально гиблая, такой задачи я и не ставил, но обеспечить приемлемую реакцию и документировать конкретные ее значения - будет сделано.
 
Сверху Снизу