Сергій
почитайте по запросу "uart network"
Сергій
ещё можно задействовать SPI шину, ESP - мастер, остальные - slave, но нужно много выводов на CS
Сергій
или даже I2C, но она медленне
Евгений
Евгений
Да вообще без разницы, для надежности хоть 1200 можно. Но я думаю 9600
Сергій
по идее если не делать двунаправленную шину, TX мастера будет работать в режиме push pull и с фронтакми будет проще
Evgeniy
будет рабоать и так, без шаманств
Сергій
там есть штатные решения для адресации устройств
Евгений
может всё же I2C, если такая скорость?
Просто опция с WiFi планируется дополнительной (не для всех) и на плату изначально не распаивается чип ЕСп, а распаивается гнездо под ЕСП-01/07 и тому подобных (благо у них распиновка одинаковая). Удобно - надо WiFi, воткнул платку в гнездо и готово. А у них только uart.
Сергій
на ESP-01 можно сделать I2C на io0/io2
Сергій
и uart0 остаётся свободным для отладки и прошивки
Сергій
io0 по идее можно сделать SDA
Evgeniy
и uart0 остаётся свободным для отладки и прошивки
Есть еще один свободный UART, решение с I2C гораздо сложнее. Адрессация есть и на UART.
Evgeniy
Правильно - оставить UART и режим master-slave, если сильно нужно - диоды поставить на TX
Сергій
> I2C гораздо сложнее спорное утверждение, учитывая что есть стандартные библиотеки под все МК, у которых есть TWI/I2C
Evgeniy
> I2C гораздо сложнее спорное утверждение, учитывая что есть стандартные библиотеки под все МК, у которых есть TWI/I2C
Да, но вот сценарии, при которых I2C зависает - отнюдь не многие рассматривают. Чтобы с этим не возиться - проще взять UART
Евгений
io0 по идее можно сделать SDA
Лень😎 Прошивка для ЕСП уже давным-давно отработана и оттестирована на десятках контроллерах, на СТМ, атмегах и на ГД кстати тоже. Но только в режиме т есп - 1 контроллер. И прошивки на контроллерах тоже уже готовы под уарт. А тут все переделывать на и2с
Сергій
и I2C изначально под много устройств, а UART чаще под PPP
Evgeniy
и I2C изначально под много устройств, а UART чаще под PPP
достаточно в своем протоколе заложить байт под адрес и сново получается сильно проще, чем I2C
Andrey
Еще можно применить модбас, где есть адресация и контрольные суммы
Сергій
Еще можно применить модбас, где есть адресация и контрольные суммы
и проще и надёжнее, чем городить самописный протокол
Andrey
И отлаживать его в разы проще, можно шпиона повесить на шину
Сергій
если RS-485 - да, если UART и в обе стороны - чуть сложнее, если не использовать лог.анализатор)
Evgeniy
и проще и надёжнее, чем городить самописный протокол
Не надежнее, т.к. протокол modbus - ерунда та еще. Там таймауты нужно учитывать, которые отсутствуют в любых нормальных протоколах. Не самое удачное изобретение.
Сергій
Да, но вот сценарии, при которых I2C зависает - отнюдь не многие рассматривают. Чтобы с этим не возиться - проще взять UART
не знаю про зависания, I2C много лет пихается во всякую бытовую технику и всё ок.
Evgeniy
не знаю про зависания, I2C много лет пихается во всякую бытовую технику и всё ок.
"не знаю про зависания I2C" - это типичная ошибка, которая повсюду встречается, люди просто не достаточно проверяют свой код, 2 проекта таких было, где один сбой на I2C вешал всё устройство
Сергій
Не надежнее, т.к. протокол modbus - ерунда та еще. Там таймауты нужно учитывать, которые отсутствуют в любых нормальных протоколах. Не самое удачное изобретение.
modbus работает в промышленной автоматизации таймауты там не просто так, а часть протокола и их обязательно нужно реализовывать или брать не кривую библиотеку
Evgeniy
modbus работает в промышленной автоматизации таймауты там не просто так, а часть протокола и их обязательно нужно реализовывать или брать не кривую библиотеку
Нет, таймауты там именно просто так - нет никаких причин разделять пакеты кодом и не тратить время на возню с таймерами. Когда-то кто-то так решил и теперь все подстраиваются. Даже не все modbus -ethernet gates это соблюдают.
Evgeniy
Еще таймауты - ограничивают пропусную способность
Сергій
я пробывал выкидывать таймауты и тестить
Evgeniy
Да как же годами датчики на i2c работают то ?
Если программная реализация I2C -то нет вопросов. Обычно там нет вечных циклов. Если аппаратная - сплошь везде - вечные циклы, аппаратные стейт машины, где не предусмотрен сброс в случае ошибок на линии.
Evgeniy
я пробывал выкидывать таймауты и тестить
Так и правильно, так и должно быть. Ничего удивительного нет. Для разделения кодом -байт стаффинг, там уже и асинхронный обмен можно сделать, если нужно - из коробки.
Евгений
modbus работает в промышленной автоматизации таймауты там не просто так, а часть протокола и их обязательно нужно реализовывать или брать не кривую библиотеку
А когда надо диван купить, вы его размер с микрометром меряете или все таки с рулеткой? На всякое дело нужный инструмент требуется. Нафига мне модбас, когда мне надо 4 байта передать - байт ID, 2 байта команды и байт на контрольную сумму. ID не совпал - игнорируем команду. Контролька не совпала - игнорируем. Дешево и сердито. В модбас я умею, но нафига мне его сюда городить, когда порой и так памяти не хватает?
Evgeniy
случайно I2C не программный с самописной реализацией?)
Находил такие ошибки в драйвере на I2C датчик от производителя и в аппаратных реализациях под STM32. Одна ошибка на линии - и сразу по вотчдогу только ребутимся)
Сергій
просто смысл в том, что стандартные протоколы, используются в промышленных решениях и нормально там живут
Сергій
то что ошибки в отдельных библиотеках - это проблемы этих библиотек
Evgeniy
просто смысл в том, что стандартные протоколы, используются в промышленных решениях и нормально там живут
Так у афтора кастомное решение, где за пределы прибора цифровой интерфейс не выбирается, там всё сгодится
Evgeniy
обычно аппаратный модуль I2C нужно ребутить))
Dima
модбас топорное простое решение - пользуюсь уже 4 года и проблем нет
Евгений
Ну вы поняли аллегорию)
Dima
да старое и далеко не лучшее
Сергій
да, косяк но modbus позволяет восстановить работу без перезагрузки всей системы
Евгений
да, косяк но modbus позволяет восстановить работу без перезагрузки всей системы
Эмм.. а зачем перезагружать всю систему в случае ошибки связи?
Сергій
Эмм.. а зачем перезагружать всю систему в случае ошибки связи?
когда происходить рассинхронизация и простой протокол id, данные фикс длины, crc то почти всё либо ведомое устройство выпадает совсем из процесса, либо ведущее, либо вся сеть)
Сергій
ведомому приходит, например данные, crc, id (от следующего пакета)
Сергій
он это пытается анализировать, фигня,
Evgeniy
Не бывает таких косяков, если внешних помех нет
Сергій
дальше так же
Evgeniy
А их нет!)
Сергій
а они есть
Сергій
холодильник, кондей, ещё что-то мощное
Evgeniy
а они есть
Сейчас ТС пояснит))
Евгений
он это пытается анализировать, фигня,
Вы говорите с точки зрения модбаса опять. Либо рукописных протоколов типа модбаса. Повторю - если посылка искажена, то ведомый ее просто игнорирует. И ничего страшного не будет. Ведущий повторит ее через какое то время (скажем через секунду или 10 секунд. У нас тут не ракета, даже и минутная задержка не критична.
Evgeniy
хм, а где-то была же тема про самодельную самонаводящуюся ракету? не помните где? в рунете было
Сергій
ведомый повтор словит снова с ошибкой, т.к. для него произошло выпадение байта по пути следования
Евгений
ведущий должен как-то понять, что нужно повторить
Он просто ее повторяет с заданным циклом. Это как раз для того, что бы свеже-подключенные устройства сразу подхватывали команду.
Евгений
ведомый повтор словит снова с ошибкой, т.к. для него произошло выпадение байта по пути следования
Да как он повтор то с ошибкой словит, чего ради то? Только если постоянные искажения на линии будут
Evgeniy
сначала найдите помехи там, которых нет 😁
Сергій
Он просто ее повторяет с заданным циклом. Это как раз для того, что бы свеже-подключенные устройства сразу подхватывали команду.
свеже подключённое устройство : вот тут беда оно может подключиться в момент, когда передаётся не первый байт посылки
Сергій
а дальше идёт рассинхронизация
Сергій
сейчас нарисую)
Евгений
Да я понимаю о чем вы. Просто вы не понимаете как это обходится
Сергій
как?)
Сергій
и так до бесконечности