Как я могу использовать I2C для общения с датчиками?

29

Как я могу общаться с цифровыми датчиками через интерфейс I²C?

Аппаратное обеспечение:
Какие контакты на GPIO Raspberry Pi можно использовать?

Программное обеспечение:
Какие библиотеки I²C доступны?

Алекс Л
источник

Ответы:

23

Здесь много информации о GPIO RPi: http://elinux.org/Rpi_Low-level_peripherals

В соответствии с этим вы можете запрограммировать любые выводы GPIO для I²C, но:

Вывод 3 (SDA0) и вывод 5 (SCL0) предварительно настроены для использования в качестве интерфейса I²C. Таким образом, на плате для этих выводов есть нагрузочные резисторы 1,8 кОм.

На этой вики-странице также есть несколько примеров низкоуровневого кода GPIO для разных языков, с которых стоит начать. Если вам нужно освежить в памяти то, что I²C на самом деле, вот тот, который также принимает во внимание RPi.

Для конкретного контроля I²C эта библиотека python может быть полезна, это обсуждается в этой записи блога , которая включает пример кода.

Тапио
источник
Есть какие-нибудь комментарии по поводу возможности адаптации выводов Edison Sparkfun GPIO для I2C?
геотеория
7

Много дискуссий происходит об этом. Вот что показывает мое чтение и возня:

  1. Поддержка I2C не встроена в ядро ​​по умолчанию с Debian "squeeze"
  2. Пользовательское ядро ​​должно быть скомпилировано с модулем i2cspi ( Вот выдержка из дерева GIT )
  3. Драйверы, которые были написаны до сих пор, предназначены только для ядра 3.2 и более поздних, и автор не намерен поддерживать 3.1.9+ из-за зияющих дыр в безопасности ( Крис Бут рассматривает драйвер )
  4. Если повезет, дистрибутив Debian «wheezy», который в настоящее время находится в бета-версии для RasPi, будет иметь этот драйвер. Поставляется с ядром 3.2.
zerolagtime
источник
2
Да, как вы уже сказали, оно встроено в стандартное ядро ​​- как официальные дистрибутивы Raspbian, так и Debian. Я последовал некоторому совету, которому легко следовать, и у меня есть устройства I2C, отображаемые в / dev ... raspberrypi.org/phpBB3/viewtopic.php?f=37&t=15511 При необходимости здесь есть немного больше деталей: robot- electronics.co.uk/files/rpi_i2c_setup.doc
dodgy_coder
Чтобы получить более подробную информацию, сохраняйте данные здесь, а не на веб-ссылках, и надеемся, что это не устареет: начиная с изображения Wheezy 2012-09-18, вы редактируете /etc/modprobe.d/raspi-blacklist.confи комментируете запись для i2c-bcm2708; затем отредактируйте /etc/modulesи добавьте i2c-dev; затем перезагрузите компьютер. Теперь у вас должен быть /dev/i2c-0специальный файл, который очень прост в использовании.
Дамиан
2

Оборудование:

Как упомянул Тапио, оборудование хорошо документировано на http://elinux.org/Rpi_Low-level_peripherals

Програмное обеспечение:

В пользовательском пространстве Linux есть заголовок i2c-dev ( #include <linux/i2c-dev.h>). Кроме того, вам нужен персонаж, с которого можно читать. Это можно сделать, загрузив правильные модули. i2c_bcm2708для драйвера низкого уровня и i2c-devдля генерации символов для шин. Подать заявление ...

sudo modprobe -r i2c_bcm2708
sudo modprobe i2c_bcm2708 baudrate=<your preferred baudrate>

для загрузки их на лету. Подать заявление ...

sudo sh -c 'echo "i2c-dev" >> /etc/modules'
sudo sh -c 'echo "options i2c_bcm2708 baudrate=<your preferred baudrate>\n" > /etc/modprobe.d/custom.conf

и unblacklist i2c_bcm2708в , /etc/modprobe.d/raspi-blacklist.confчтобы сделать /dev/i2c-0и /dev/i2c-1показать на постоянной основе .

Отныне вы можете следовать подсказкам о том, как использовать I²C del maestro сам.

Я предпочитаю этот метод другим, потому что он платформенный. Вы можете использовать и linux/i2c-dev.hс другими устройствами, если существует драйвер I²C низкого уровня.

С уважением

ManuelSchneid3r
источник