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

Нужна помощь Что делать при недостаточном количестве GPIO?

chief

New member
Для реализации проекта нужен модуль, в котором будет 14-15 портов ввода-вывода (одна половина - входы для датчиков, кнопок, в т.ч. zero-crossing detector для диммирования лампы накаливания, вторая - выходы для ламп и т.д.).
Также необходим обмен данными по mqtt протоколу, программирование параметров через веб-интерфейс.
ESP8266 не имеет достаточного количества GPIO.
1. Что лучше использовать: ARDUINO+ESP8266 или ESP8266+сдвиговый регистр 74hc595 для портов вывода, или есть другие варианты?
2. Как ведет себя ESP при большом количестве прерываний?
 

Юрий Ботов

Moderator
Команда форума
как вариант pca8574. Расширитель портов. Подключается к esp по i2c, а с другой стороны имеет 8 двунаправленных выводов. Разумеется на i2c можно посадить несколько таких расширителей. Есть у китайцев в виде модуля к arduino. Например: I2C 8 bit I/O модуль расширения, PCA8574AD купить в магазине RobotDyn на AliExpress
 

chief

New member
Спасибо, @Юрий Ботов!
Как я понял, от варианта ARDUINO+ESP8266 следует отказаться.
Есть PCF8574AT(DW). Подойдет?
Будет ли ESP стабильно обрабатывать сигнал с детектора нуля?
 

igrushkin

Member
Мне бы было спокойнее с arduino. И связь с ESP по ком-порту.
ESP хорошая вещь для коммуникации, в остальном вечно косяки вылазят.
ps руки тут ни при чем
 

Юрий Ботов

Moderator
Команда форума
Как я понял, от варианта ARDUINO+ESP8266 следует отказаться.
Ну если у вас в шкафу пылится ящик ардуин то почему-же :)
Есть PCF8574AT(DW). Подойдет?
Вполне
Будет ли ESP стабильно обрабатывать сигнал с детектора нуля?
Тут пробовать надо. Я не пробовал. Проблема в том, что фактически ваш код заливается поверх некоей простейшей многозадачной os (нечто подобное FreeRTOS) которая переключается между вашей задачей и обработчиком wifi. И при обработке прерываний от ноги, в принципе могут быть задержки в доли кванта времени (квант времени на задачу 1 ms). Учитывая что период 50Гц это 20 ms то вроде как скорости достаточно, но возможны какие то "всполохи" при передаче больших объемов через wifi.
 

Юрий Ботов

Moderator
Команда форума
ESP хорошая вещь для коммуникации, в остальном вечно косяки вылазят.
ps руки тут ни при чем
Причем. Притяните к земле все неиспользуемые ноги (в т.ч. конденсаторами по ВЧ) и приведите в порядок фильтрацию питания и вы не узнаете эту игрушку.
А что касается задачи ловли перехода через нуль, я бы тоже сделал это на ардуине - ибо там никаких os нету и все более предсказуемо.
 

igrushkin

Member
Причем. Притяните к земле все неиспользуемые ноги (в т.ч. конденсаторами по ВЧ) и приведите в порядок фильтрацию питания и вы не узнаете эту игрушку.
А что касается задачи ловли перехода через нуль, я бы тоже сделал это на ардуине - ибо там никаких os нету и все более предсказуемо.
Я использую wemos, там все притянуто. Все проекты работают без проблем, но если бы у меня стояла критичная задача управления железками, как у ТС, я бы на ESP полагаться не стал. Лично я.
 

nikolz

Well-known member
Для реализации проекта нужен модуль, в котором будет 14-15 портов ввода-вывода (одна половина - входы для датчиков, кнопок, в т.ч. zero-crossing detector для диммирования лампы накаливания, вторая - выходы для ламп и т.д.).
Также необходим обмен данными по mqtt протоколу, программирование параметров через веб-интерфейс.
ESP8266 не имеет достаточного количества GPIO.
1. Что лучше использовать: ARDUINO+ESP8266 или ESP8266+сдвиговый регистр 74hc595 для портов вывода, или есть другие варианты?
2. Как ведет себя ESP при большом количестве прерываний?
Есть еще решение:
Разделить Ваше устройство на независимые модули и сделать их на ESP.
Этот вариант требует меньше пайки железа и возможно будет более компактный.
 

nikolz

Well-known member
Тоесть использовать несколько ESP?
Да, Если принимаемая Вами информация с датчиков взаимно независимая, то такое решение позволяет изменять структуру добавлением или удалением отдельных модулей ESP. Получится типа лего-конструктор.
 

Сергей_Ф

Moderator
Команда форума
@nikolz а как это поможет отлавлить переход через ноль? Или на этом модуле, нужно будет wifi отключить? Тогда в чем преимущества перед Ардуино Нано или Мини?
 

nikolz

Well-known member
@nikolz а как это поможет отлавлить переход через ноль? Или на этом модуле, нужно будет wifi отключить? Тогда в чем преимущества перед Ардуино Нано или Мини?
Про переход через ноль опишите задачу подробнее. полагаю это не связано с числом пинов?
 

nikolz

Well-known member
для перехода через ноль для диммирования надо один пин.
В чем проблема?
Преимущество я написал - однотипность конструктивных решений
проще отладка и написание кода, быстродействие
Но возможно вам хватит и одного ESP , тогда как сказно выше с расширителем портов. Вы же задачу не описали, поэтому предложения самые общные.
 

nikolz

Well-known member
@nikolz проблема только в прерывания на esp для работы wifi. Они внесут непреодолимый джиттер.
Вы это теоретически предполагаете?
Я делал практически, ничто ничего не вносит.
На форуме сообщал достигаемые параметры.
Управлять можно и лампочками и двигателями.
 

Сергей_Ф

Moderator
Команда форума
@nikolz а разве Вы переход через ноль ловили? Я практически вижу проблемы при звукогенерации на esp при включенном wifi. Задача, на мой взгляд, схожа и проблемма джиттера непреодолима, во всяком случае на Arduino IDE. Стоит выключить wifi - тайминги отрабатывают предсказуемо, а вот с ним нет.
Вполне возможно, что на SDK/UDK проблему можно решить. Про NodeMCU не знаю, ничего говорить не буду.
 

nikolz

Well-known member
@nikolz а разве Вы переход через ноль ловили? Я практически вижу проблемы при звукогенерации на esp при включенном wifi. Задача, на мой взгляд, схожа и проблемма джиттера непреодолима, во всяком случае на Arduino IDE. Стоит выключить wifi - тайминги отрабатывают предсказуемо, а вот с ним нет.
Вполне возможно, что на SDK/UDK проблему можно решить. Про NodeMCU не знаю, ничего говорить не буду.
Я не понимаю, что такое "ловить ноль"
Поясню, что делал я. Сразу скажу, что я делал это на СИ полюс макросы на ассемблере.
Одна из задач, которую я исследовал, это формирование ШИМ синхронного с напряжением сети для целей управления током в нагрузке произвольного характера. В простейшем случае это активная нагрузка (лампочка или тЭн).
Вы об этом говорите?
 

Сергей_Ф

Moderator
Команда форума
@nikolz да это то. Думаю ассемблер тут сыграл не малую роль. Вы WiFi не отключали?
Ловить ноль - это коммутировать нагрузку только в момент перехода периода сети через 0, т.е. при отсутствии тока. Естественно, это справедливо только для активной нагрузки. Для реактивной - там всё сложнее.
 

nikolz

Well-known member
@nikolz да это то. Думаю ассемблер тут сыграл не малую роль. Вы WiFi не отключали?
Ловить ноль - это коммутировать нагрузку только в момент перехода периода сети через 0, т.е. при отсутствии тока. Естественно, это справедливо только для активной нагрузки. Для реактивной - там всё сложнее.
Задача не так сложна как кажется, но ее решение не очевидно.
Нет, макросы позволяют решать ее с погрешностью микросекунды.
Я их применяю, когда хочу получить предельные характеристики (например встроенный АЦП может вводить сигнал с частотой дискретизации 800 кГц, можно управлять ПЗС с частотой до двух мегагерц, можно формировать PWM с частотой 20 000 гц ну и т д)
Реально же в задачах управления лампочкой этого не требуется.
Поэтому можно нормально решить задачу на СИ и даже на луа.
Но конечно это нельзя сделать в диспутах на форуме.
 
Сверху Снизу