Много различных датчиков и RPI
-
А как все 10\20 датчиков подключить непосредственно к самой плате? Я же не могу все 20 датчиков повесить на 4 ножки платы RPI, или все же возможно?
Каким тогда образом обрабатывать все сигналы идущие с датчиков?
-
Если за основу брать статью http://raspberrypi.ru/readblog/150/
то получается что возможно подключение N - устройств и с помощью i2cdetect определить все подключенные устройства.Я так понимаю что каждое устройство присылает какой-то пакет с собственным идентификатором?
-
Совершенно верно. I2C- это последовательная шина. Каждое устройство на ней имеет свой уникальный адрес. Когда вы хотите обратиться к какому-то устройству, вы передаёте адрес этого устройства, по которому это устройство и определяет, что именно с ним вы и хотите поговорить.
-
ОК! На данном этапе я понял что, для того что бы определить все подключенные устройства к RPI по протоколу I2C необходимо воспользоваться командой i2cdetect. С ее помощью мы получим «адрес» конкретного устройства и с помощью команды i2cget задавая конкретный «адрес» нашего устройства возможно считывания данных на конкретном устройстве.
Поскольку I2C являться последовательной шиной, то для того что бы считать данные с N – устройств необходимо обратится к N1 – устройству, затем к N2 – устройству и так далее с шагом +1.Я вот только не понимаю как все эти N+1 – устройство правильно подключить к самой плате RPI?
-
Где:
Master- это RPi
Slave- куча ваших датчиков
SDA- это P1-03 на RPi
SCL- это Р1-05 на RPi -
То есть, другими словами это может быть некая «палата» в которую «впаиваются» 4ри провода от каждого отдельного датчика и сама плата подключена к RPI посредству SDA и SCL?
-
Нет.
Это длинный кабель с 3-4 жилами, к которому подключаются все устройства, в том числе и RPi. -
Но в принципе можно и типа хаба сделать, тогда это будет платка, как вы и написали.
-
Мне кажется что платка является оптимальным решением, так появляется возможность «централизованного» управление всеми датчиками. На плату подается отдельное питания для датчиков, а SDA и SCL подключены последовательно, и на выходе уже подключены SDA и SCL уже непосредственно к RPI.
С точки зрение проводо-затрат это выйдет дороже, но зато если один из датчиков выходит из строя остальные остаются работать.
А есть ли какие-то ограничение на кол-во устройств подключенным к шине I2C ?
-
А есть ли какие-то ограничение на кол-во устройств подключенным к шине I2C ?
127
-
Я вот посидел, почитал еще... и возник вопрос, допустим если использовать протокол I2C, повесить на него порядка 5 датчиков температуры, считывать данные будет без проблемно.
А как быть с потокомерами (счетчиками воды)? Допустим взять INS-FM19 которые при подаче воды начинает выдавать RPM сигнал, как его считывать в реальном времени, ведь соединение последовательное? -
Можно данные датчика считывать микроконтроллером, установленным непосредственно у датчика, а сам микроконтроллер уже подключить по I2C к RPi. А можно сам датчик непосредственно продключить к RPi через GPIO.
-
"С точки зрение проводо-затрат это выйдет дороже, но зато если один из датчиков выходит из строя остальные остаются работать."
Они в любом случае остаются работать. Хоть десять выйдут из строя, они полностью независимы друг от друга. И даже вполне возможно "горячее" подключение-отключение.
Поймите, наличие или отсутствие, исправность или неисправность вообще не колышат соседние i2c устройства, кроме мастера. Вам же привели картинку.
Почитайте здесь. -
127
А если 10-битную адресацию использовать?Тут уже при желаниях товарища больше надо думать о емкости его конструкции. Чтоб не перевалить за 400пФ. Только у кабеля, например, UTP5e емкость в среднем 40 нФ/км, а еще сверху емкости датчиков.
-
Кстати, а вас случаем датчики не одинаковые будут? А то вполне можете попасть на одинаковые адреса.
-
датчики температуры я бы взял с шиной 1-wire типа ds18b20, датчиков на шину можно посадить дофига даже с паразитным питанием, подключить к rpi тоже довольно просто (мне больше нравится вариант конвертера 1w->i2c)
rpm можно обрабатывать через прерывания gpio см. http://dev.mrkva.eu/rpi/