dontsovcmc / waterius

Передача показаний воды по Wi-Fi. Watermeter Wi-Fi transmitter.
https://waterius.ru
GNU Lesser General Public License v3.0
560 stars 108 forks source link

USIWire VS Wire #75

Closed OloloevReal closed 5 years ago

OloloevReal commented 5 years ago

Добрый день!

Иногда в работе waterius наблюдал такую картину, что attiny переставала отвечать на I2C команды от ESP. Почему это происходило и что является причиной честно сказать - не знаю, без логического анализатора на шине наверное это и не выяснить. Пробовал и понижать скорость и увеличивать задержки, изменять StretchLimit, стучать в бубен шамана все эти действия помогали, но не решали проблему, рано или поздно в логах все равно появлялись ошибки что та или иная команда отправлена в Attiny с ошибкой.

Код у меня сильно изменен, добавлены дополнительные команды для обмена Attiny <-> ESP, обмен более активный в обе стороны нежели master версия. Думаю что проблема поэтому и вылезла.

Так вот, обратил внимание что в Attiny используется для реализации I2C USIWire библиотека, ее я и заменил на стандартную Wire В моем случае (надеюсь) это решило проблему, тестовое устройство вторые сутки отсылает данные с интервалом каждые 5 минут

Ничего не могу сказать плохого про USIWire, но если вдруг будут проблемы с I2C имеет смысл попробовать Wire.

Ишью можно сразу закрыть, просто в меморис.

dontsovcmc commented 5 years ago

Usiwire перешел из проекта метеостанции с буфером. Им нужна была, потому что аттини сначала должен быть мастером, а потом слейвом. Wire мастер тогда отсутствовал.

dontsovcmc commented 5 years ago

@OloloevReal Т.е. можно безболезненно на Wire перейти?

  1. Проблемы с ошибками можно нивелировать добавлением crc в посылки =/.
  2. Если не секрет, то что вы еще добавили в опрос.
OloloevReal commented 5 years ago

Ни одной ошибки по I2C с момента перехода на Wire!

Если не секрет, то что вы еще добавили в опрос.

Добавил следующее:

dontsovcmc commented 5 years ago
  1. Ни одной ошибки по I2C с момента перехода на Wire!
    • Код надо менять под Wire?

Очистка конфигурации - если при подачи питания зажата кнопка отправки данных, произойдет сброс конфигурации Attiny и ESP на значения по умолчанию

  1. Изменение таймера отправки показаний из интерфейса ESP - после сохранения конфигурации ESP передает значение таймера Attiny

    • да, это сейчас единственный способ синхронизировать отправку. А нужно ли это будет, если перейти на чип с внешним кварцев - там точность <1%?
  2. Обновление firmware ESP - если ESP видит что доступно обновление посылает команду Attiny на увеличение времени ожидания ESP. После обновления ESP запрашивает у Attiny причину пробуждения и та отвечает Update что является триггером для отправки на сервер подтверждения окончания обновления.

    • Круто! А вы перепаяли SDRAM? А ОТА хорошо работает? У меня за 20 сек обновлялась. Но у меня мало понимания подводных камней, чтобы в master публиковать.
OloloevReal commented 5 years ago

Код надо менять под Wire?

Только инклуды поменять, убрать из platformio.ini зависимость

Круто! А вы перепаяли SDRAM? А ОТА хорошо работает? У меня за 20 сек обновлялась. Но у меня мало понимания подводных камней, чтобы в master публиковать.

Да, поменял сразу как решил делать OTA, проще и быстрее поменять память чем оптимизировать код.

dontsovcmc commented 5 years ago
  1. Отлично. Конечно надо заменить на Wire.

  2. Это 100%. С TLS так вообще не выоптимизируешь.

  3. А зачем надо синхронизировать время просыпания? Это как-то нужно в коммерческом учете? Можно же взять и усреднить 25ч в 24ч... Обычно же месячный расход интересен, а погрешность мелкой получится - ~1ч на 30 дней.

OloloevReal commented 5 years ago

А зачем надо синхронизировать время просыпания? Это как-то нужно в коммерческом учете? Можно же взять и усреднить 25ч в 24ч... Обычно же месячный расход интересен, а погрешность мелкой получится - ~1ч на 30 дней.

А? Это про что?

dontsovcmc commented 5 years ago

Я про это:

Или речь идет о том, что не 24ч, а 48ч, 1ч и т.п. ? Период отправки показаний

OloloevReal commented 5 years ago

Да, именно о периоде отправки показаний, по умолчанию в коде 24 часа, что для отладки и экспериментов слишком долго,а каждый раз шить контроллер морока еще та.