Горячая замена датчика

Есть ли способ обеспечить горячую замену датчика, чтобы его можно было отключать и повторно подключать без блокировки Arduino? У меня есть датчик I2C, который я хочу иметь возможность отключать и снова подключать без перезапуска платы.

, 👍0

Обсуждение

Шина i2c не предназначена для отключения и подключения датчиков, но я думаю, что это можно сделать. Опрашивайте датчик несколько раз в секунду и, если он снова подключится, инициализируйте датчик. Почему вы хотите это сделать? Есть ли другой способ?, @Jot

Я делаю датчик, который подключается к загрузчику фильтра, и просто хотел убедиться, что если датчик отсоединится, его можно будет снова подключить без проблем или без необходимости его сброса. Это для удаленного устройства из моего офиса, и я не всегда буду с ним иметь дело., @Michael H.

См. https://arduinoprosto.ru/q/31924/how-to-setup-an-i2c-bus-that-stays-valid-if-a-slave-is-powered-down-or-fails/. 31940#31940, @Mikael Patel


1 ответ


Лучший ответ:

1

Шина I2C не блокирует работу, если датчика нет. Также в этом случае не будет блокироваться библиотека Wire. Он просто вернет код ошибки, который вам следует обработать в своем коде.

Но это не означает, что каждая библиотека, выполняющая рабочую нагрузку I2C для конкретного датчика, делает то же самое. В зависимости от датчика и используемой библиотеки вам придется самостоятельно проверить, не блокируется ли он каким-либо образом. (Эта часть не будет лучше отвечать без информации о том, какой датчик и какая библиотека будет использоваться)

Итак: Да, это вполне возможно, но вам придется иметь дело с ошибками от отключения датчика и обрабатывать их в своем коде. Опросив датчик обычным способом (как упоминал Джот в комментариях), вы получите информацию, есть ли на шине датчик с этим адресом. Метод Wire.endTransmission() вернет 2 (полученный NACK при передаче адреса), если ни одно устройство с указанным адресом недоступно на шине.

В зависимости от используемого датчика вам может потребоваться правильно инициализировать датчик после каждого повторного подключения. Особенно, если дисконнект произошел во время передачи. Обратитесь к паспорту датчика, чтобы узнать, что в этом случае происходит с датчиком.

Если вы планируете использовать разные датчики, вам необходимо проверить их конкретные адреса (поскольку разные типы датчиков часто имеют разные проводные адреса/диапазоны адресов) и – если датчики управляются по-разному – определить, какой датчик на самом деле подключен . Наименьшее можно сделать, прочитав их регистры состояния, которые могут работать со многими типами датчиков.

,