Надо придумать протокол обмена между управляющей программой (УП) и блоками. Напомню, связаны они по ethernet.
Я остановился на tcp. Соединение устанавливает УП в начале работы и держит его постоянно. Когда УП нужно включить реле или диммер, она отправляет соответствующую команду. Когда меняется значение входа, блок отправляет команду УП.
Пакеты с командами будут бинарными. Я вначале хотел использовать ascii формат, но парсить их не так удобно, а вручную к устройству проще обращаться по http через браузер.
Формат придумался такой - байт длины, байт команды, данные и crc16.
Пакеты с командами будут бинарными. Я вначале хотел использовать ascii формат, но парсить их не так удобно, а вручную к устройству проще обращаться по http через браузер.
Формат придумался такой - байт длины, байт команды, данные и crc16.
Данные представляют собой простые упакованные структуры (а на avr выравнивания как раз нет). На питоне для упаковки/распаковки можно использовать встроенный модуль struct. Для расширяемости достаточно договориться, что смысл и размер имеющихся полей не меняется, а новые поля добавляются в конец пакета и игнорируются старыми версиями устройств.
Crc в tcp есть свое собственное, но оно обрабатывается отдельной платой (w5100 в ethernet шилде), а процессор от нее получает только данные. Вот для защиты от помех на spi crc и пригодится.
Реализовал описанное для реле и входов.
Реализовал описанное для реле и входов.
