Raspberry Pi. Урок 4. Настройка GPIO

Одно из преимуществ Raspberry Pi — разъем GPIO, с помощью которого можно подключать внешние устройства.

learn_raspberry_pi_gpio.jpg

GPIO-разъем обычно состоит из разъемов нескольких типов:

  • Обычные GPIO-выводы (Интерфейс ввода/вывода общего назначения), которые можно использовать для включения и выключения светодиодов и т. п.
  • Интерфейсные выводы I2C, которые позволяют подсоединить модули устройств с помощью всего двух выводов
  • SPI-интерфейс для SPI-устройств. Аналогично к I2C, но другой стандарт
  • Последовательные Rx и Tx выводы для взаимодействия с последовательными периферийными устройствами.

Кроме того, некоторые разъемы могут быть использованы для ШИМ (широтно-импульсная модуляция), для регулировки мощности и для других видов генерирования импульсов для контролирования сервоприводов ФИМ (фазово-импульсная модуляция).

In addition, some of the pins can be used for PWM (pulse Width Modulation) for power control and another type of pulse generation for controlling servo motors called PPM (Pulse Position Modulation).

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

Этот урок написан исключительно под Raspbian и его производные, например Occidentalis.

GPIO-разъем

На диаграмме ниже показан GPIO-разъем для Raspberry Pi Версия 1 (которая была последней версией на момент написания урока). У второй версии вместо вывода 21 вывод 27, но в целом суть та же.

learn_raspberry_pi_gpio-srm.png

Все GPIO-выводы могут использоваться для подачи питания (земля, 3,3В и 5В), а также как цифровые вводы или выводы. Выводы SCL и SDA могут быть использованы для I2C. Выводы MOSI, MISO и SCKL могут быть использованы для подключения высокоскоростных SPI-устройств.

Все выводы имеют логические уровни 3,3В и не подходят для 5В, поэтому уровень на выходе 0-3,3В а уровень на входе не должен превышать 3,3В. Если Вы хотите подсоединить 5В-вывод, используйте схему сдвига уровня.

Распространенный способ подключения Raspberry Pi — с помощью Pi Cobbler.

learn_raspberry_pi_cobbler.jpg
Тщательно проверьте, чтобы индикатор PIN 1 находился в углу Pi. Если Ваш кабель серый, то это скорее всего красная полоска, а если черный — белая. Этот контакт не должен находиться рядом с контактом TV. Поверните кабель так, чтобы было правильно.
На фото подключение с помощью ленточного кабеля через GPIO-разъем к плате для беспаечного макетирования, куда Вы можете добавлять свои компоненты.

Код для Pi

Чтобы упростить жизнь тем, кто хочет экспериментировать с подключением электроники к Pi, Adafruit предоставили огромную коллекцию очень полезного кода, в том числе простые библиотеки Python для огромного количества модулей, включая дисплеи, сенсоры, ШИМ-контроллеры и т п.

Чтобы получить этот код, Вам понадобится программа’git’. В Occidentalis она установлена заранее, но на Raspbian ее нужно установить с помощью следующих команд LX Terminal.

Ярлык LX Terminal на Рабочем столе.

learn_raspberry_pi_LXTerminal.png

Прежде всего введите следующую команду в LXTerminal. Таким образом Ваш пакет точно будет найден и обновлен до последней версии. Не важно в каком каталоге Вы находитесь.

sudo apt-get update

learn_raspberry_pi_apt-get-updating.png
Обновление может занять некоторое время, особенно, если Вы запускаете его впервые. В конце концов появится приглашение на ввод команды ($), что значит, что можно ввести следующую команду:

sudo apt-get install git

Как только git установится (если он еще не установлен), Вы сможете зайти в каталог Adafruit Pi Python со своего Pi с помощью следующих команд:

git clone http://github.com/adafruit/Adafruit-Raspberry-Pi-Python-Code.git

cd Adafruit-Raspberry-Pi-Python-Code

ls

Если возникнут какие-либо проблемы во время выполнения предыдущих шагов, появится сообщения об ошибке. Наиболее распространенные причины ошибок при установки:

  • проблемы с Интернет-подключением
  • неправильно введенная команда. Помните, что Линукс чувствителен к регистру. Поэтому проще всего просто открыть эту страницу на Raspberry Pi, скопировать и вставить команды.

Настройка GPIO

GPIO могут быть использованы как цифровые вводы, так и цифровые выводы. В случае цифровых выводов, можно писать программы, которые смогут задавать значения конкретного контакта HIGH или LOW. HIGH задает значение 3,3В, а LOW — 0В. Чтобы управлять светодиодом через один из GPIO, Вам понадобится резистор на 1кОм последовательно подсоединенный к светодиоду, поскольку контакты GPIO могут выдерживать только небольшие количества тока.

Если Вы используете контакт как цифровой ввод, подсоедините переключатели и простые сенсоры к контакту и тогда Вы сможете проверить открыт он или закрыт (то есть активирован или нет).

learn_raspberry_pi_LEDBackpack_Setup_1000w.jpg

Чтобы запрограммировать разъемы GPIO на Python, требуется установить библиотеку для Python 2, которая называется Rpi.GPIO. Эта библиотека проста в использовании и позволяет управлять GPIO.

Процесс установки для Raspbian и Occidentalis один и тот же. На самом деле, некоторые версии Raspbian содержат эту библиотеку, но Вы можете обновить ее до более новой версии, что стоит делать:

sudo apt-get update

Чтобы установить RPi.GPIO, сначала установите набор программ Python Development, который требует RPi.GPIO

Введите следующую команду в LXTerminal:

sudo apt-get install python-dev

Чтобы установить сам Rpi.GPIO введите:

sudo apt-get install python-rpi.gpio

Скорее всего появится запрос на подтверждение. Нажмите ‘Y’.

Настройка I2C

I2C — очень распространенный стандарт, который разработан для коммуникации между чипами. Поскольку Raspberry Pi может взаимодействовать с I2C, мы можем подключать множество чипов и модулей с поддержкой I2C.

Шина I2C позволяет множеству устройств подключаться к Raspberry Pi с помощью уникальных адресов, которые можно задавать изменив настройки джамперов на модуле. Очень удобно иметь возможность увидеть какие устройства подключены к Pi. Так можно убедиться, что все работает.

Чтобы это сделать, нужно установить программу i2c-tools с помощью кода:

sudo apt-get install python-smbus

sudo apt-get install i2c-tools

Установка Kernel Support (с помощью Raspi-Config)

Запустите sudo raspi-config и следуйте подсказкам, чтобы установить поддержку i2c для ARM core и linux kernel

learn_raspberry_pi_advancedopt.png
learn_raspberry_pi_i2c.png
learn_raspberry_pi_wouldyoukindly.png
learn_raspberry_pi_i2ckernel.png

Теперь перезагрузитесь!

Мы также рекомендуем просмотреть шаги ручной настройки, чтобы удостовериться, что все было сделано raspi-config!

Установка Kernel Support (вручную)

Если Вы используете Occidentalis, то Ваш Pi поддерживает I2C насколько это позволяет аппаратное обеспечение. Однако если у Вас Raspbian, Вам нужно будет открыть LXTerminal, консоль или ssh и ввести следующую команду:

sudo nano /etc/modules

и добавить эти две строки в конце файла:

i2c-bcm2708 

i2c-dev

Вот так:

learn_raspberry_pi_editing_modules_file.png

Теперь сохраните Control-X Y <ввод>

В зависимости от Вашего дистрибутива, Ваш файл может называться /etc/modprobe.d/raspi-blacklist.conf

Если файл отсутствует, то ничего делать не нужно. Но если он у Вас есть, нужно внести изменения и закомментировать строки:

blacklist spi-bcm2708

blacklist i2c-bcm2708

.. поставив # перед ними.Откройте редактор файла вписав следующее:

sudo nano /etc/modprobe.d/raspi-blacklist.conf

.. отредактируйте файл так, чтоб он выглядел следующим образом, сохраните и выйдите из файла (CTRL-x и Y).
learn_raspberry_pi_blacklist.png

Если у Вас новая версия Raspberry Pi (ядро 3.18 или выше), Вам также нужно будет обновить файл /boot/config.txt file. Edit it with sudo nano /boot/config.txt и добавить следующий текст внизу:

dtparam=i2c1=on
dtparam=i2c_arm=on

Обратите внимание, что «1» в»i2c1″ — единица, а не L!

learn_raspberry_pi_dtparami2c.png

Когда закончите, перезагрузитесь!

sudo reboot

Тестирование I2C

После входа введите следующую команду, чтобы увидеть все подключенные устройства (если у Вас 512MB Raspberry Pi Model B)

sudo i2cdetect -y 1

learn_raspberry_pi_i2c-detect.png

Это значит, что используются 2 адреса – 0x40 and 0x70.

Если у Вас одна из самых первых версий Raspberry Pi (256MB Raspberry Pi Model B), Вам нужно будет ввести такую команду:

sudo i2cdetect -y 0

 Разработчики Raspberry Pi поменяли местами разъемы I2C. Просто запомните: 512M использует для i2c разъем 1, а 256M разъем 0!

Настройка SPI

Для начала уберите черный список spi-модуля:

sudo nano /etc/modprobe.d/raspi-blacklist.conf

найдите строку:

blacklist spi-bcm2708

и поставьте # в начале. Вот так:

learn_raspberry_pi_blacklistspi.png

Теперь введите control-X Y, нажмите клавишу ввода и сохраните файл.

Перезагрузитесь sudo reboot

При следующем входе проверьте, что Вы можете видеть устройства с помощью:

ls -l /dev/spidev*

Вы должны видеть 2 устройства: по одному на каждую SPI шину

learn_raspberry_pi_lsdevspi.png
Лучший способ протестировать то, что Вы сделали — это сделать какой-нибудь проект (желательно начать с чего-то попроще).