Raspberry Pi:Библиотеки/WiringPi/Утилита gpio

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску

Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.


Черновик


Утилита gpio[1]

В комплекте с библиотекой WiringPi идет отдельная программа, помогающая управлять встроенным GPIO-интерфейсом, а также дополнительные модули для девайсов вроде PiFace, Gertboard и различных GPIO-расширителей.

Этой программой, которая называется gpio, также можно пользоваться в скриптах, чтобы манипулировать GPIO-контактами – записывать данные на выходные контакты и считывать данные с входных контактов.

Более того, при помощи gpio, встроенной в shell-скрипт, можно писать целые программы, но это не самый эффективный метод... Другой способ ее использования – вызывать в функции system() (в языках C/C++) или функции-эквиваленте из другого языка программирования.

Команда gpio разработана таким образом, что устанавливается с флагом права доступа setuid. Благодаря этому обычный пользователь может вызывать ее без команды sudo или залогинивания в аккаунт root-пользователя.

Помимо управления, считывания и записи на GPIO контакты, утилита gpio позволяет делать следующее:

  • Экспортировать/реэкспортировать контакты через интерфейс «/sys/class/gpio», где они становятся доступны для пользовательских программ (т.е. их не нужно будет запускать с правами root-пользователя или через sudo).
  • Экспортировать контакты через интерфейс «/sys/class/gpio» для включения прерываний, запускаемых на фронте импульса.
  • Загружать модули для шин I2C и SPI, а также задавать разрешения в «/dev/», чтобы позволить пользователю, который запустил gpio, запись/считывание данных.
  • Запускать программы i2cdetect с флагами, соответствующими версии вашей Raspberry Pi.
  • Задавать размер буфера SPI и скорости передачи данных I2C (при загрузке модулей).
  • Определять версию платы Raspberry Pi.

Обо всех функциях программы gpio читайте в мануале. Чтобы открыть его, впишите в окне терминала следующее:

man gpio

Использование

Из командной строки Linux:

  • gpio -v
    
    • Показывает версию.
  • gpio -g …
    
    • Опциональный флаг -g делает так, что контакты начинают интерпретироваться по схеме BCM_GPIO вместо схемы WiringPi.
  • gpio -1 …
    
    • Опциональный флаг -1 делает так, что контакты начинают интерпретироваться согласно их положению на плате (т.е. согласно «физической» распиновке). Это работает только с коннектором P1.
  • gpio -p …
    
    • Опциональный флаг –p заставляет программу gpio начать «думать», что к Raspberry Pi подключена плата PiFace. Таким образом, контакты начинают интерпретироваться как контакты на PiFace. Примечание: Контакты с 200 по 207 на PiFace предназначены для записи/считывания, а контакты с 208 по 215 – для считывания состояния выходного регистра-защелки (т.е. с их помощью можно считывать состояния выходных контактов).
  • gpio -x …
    
    • Опциональный флаг –x заставляет программу gpio инициализировать дополнительный расширительный модуль. Обращение к расширительным модулям выполняется по названию (например, «mcp23s17») и с набором параметров, разделенных двоеточиями. Первый параметр – это всегда номер базового контакта для этого расширительного модуля. О дополнительных параметрах и функциях для расширительных модулей читайте на страницах вроде этой.

Стандартные команды для ввода и вывода данных

  • gpio mode <pin> in/out/pwm/clock/up/down/tri
    
    • Задает режим контакта – ввод данных, вывод данных, ШИМ или генерация тактового сигнала. Дополнительно позволяет управлять подтягивающими/стягивающими резисторам: включать/выключать подтягивающий резистор, включать/выключать стягивающий резистор или не делать ничего.
  • gpio write <pin> 0/1
    
    • Выставляет выходной контакт в состояние HIGH («1») или LOW («0»).
  • gpio write <pin> 0/1
    
    • Выставляет значение для ШИМ (поддерживаются значения от «0» до «1023»).
  • gpio read <pin>
    
    • Считывает и печатает логическое значение, имеющееся на указанном контакте. Может напечатать «0» (LOW) или «1» (HIGH).
  • gpio awrite <pin> <value>
    
    • Считывает аналоговые данные с указанного контакта. Плата Pi не имеет встроенных компонентов для работы с аналоговыми данными, поэтому вам нужно будет указать расширительный модуль при помощи флага –x.
  • gpio readall
    
    • Считывает данные со всех доступных контактов и печатает удобную перекрестную таблицу их номеров (т.е. распиновку WiringPi, распиновку BCM_GPIO и распиновку согласно положению на плате), а также текущие значения контактов и режимы, в которые они выставлены. Эта команда также определяет версию/модель Pi, поэтому распиновка в таблице будет соответствовать той версии Pi, которую вы используете.
  • gpio allreadall
    
    • Считывает данные со всех контактов Raspberry Pi. Это, в сущности, тот же формат, что используется в вычислительном модуле.
  • gpio wfi <pin> rising/falling/both
    
    • Дает одному GPIO-контакту команду бездействия, пока его состояние не изменится на то, что указано в параметре.

Команды для загрузки модулей в ядро

Обратите внимание, что эта команда не будет работать, если у вас включено дерево устройств. Впрочем, если оно будет включено, система напишет предупреждение.

  • gpio load spi [размер буфера в Кб]
    
    • Загружает в ядро модули SPI. Опционально задает размер внутреннего буфера в Кб. По умолчанию размер буфера составляет 4 Кб – этого более, чем достаточно для большинства программ, которые одновременно обмениваются через шину SPI лишь 1-2 байтами.
    • Данные в «/dev/spi*» настроены таким образом, что ими владеет пользователь, использующий программу gpio. Таким образом, последующие программы необязательно запускать с правами root-пользователя (разве что они не используют другие функции WiringPi).
  • gpio load i2c [baud rate in Kb/sec]
    
    • Загружает в ядро модули I2C. Опционально задает скорость передачи данных (в бодах) в Кбит/сек. По умолчанию скорость задана на 100 Кбит/сек.
    • Данные в «/dev/I2c*» настроены таким образом, что ими владеет пользователь, использующий программу gpio. Таким образом, последующие программы необязательно запускать с правами root-пользователя (разве что они не используют другие функции WiringPi).

Тест шины I2C

Запускает программу i2cdetect, но параметры могут быть разными в зависимости от версии Raspberry Pi. К примеру на Pi версии 1 это будет

i2cdetect -y 0

, а на Pi версии 2 –

i2cdetect -y 1

Вы можете сократить i2cdetect до i2cd.

Команды для режима «/sys/class/gpio»

  • gpio export <pin> in/out
    
    • Экспортирует указанный контакт (по схеме BCM_GPIO) как входной или выходной, а также делает его доступным для пользовательской программы, запущенной тем же пользователем.
  • gpio unexport <pin>
    
    • Удаляет экспорт для указанного контакта.
  • gpio unexportall
    
    • Удаляет все экспортированные контакты из «/sys/class/gpio».
  • gpio exports
    
    • Печатает список всех GPIO-контактов, которые были экспортированы через интерфейс «/sys/class/gpio» и его режимы.
  • gpio edge <pin> rising/falling/both/none
    
    • Это включает на указанном контакте прерывание, которое можно запустить на убывающем фронте импульса (falling), на возрастающем фронте импульса (rising) или на обоих (both). Чтобы выключить прерывание, впишите none.

Примечание: Номера контактов в системном режиме – это всегда контакты по распиновке BCM_GPIO.

Примеры

  • gpio mode 0 out
    gpio write 0 1
    
    • Команды выше используют распиновку WiringPi, чтобы задать контакту 0 режим вывода данных, а затем выставляют ему логический уровень «1».
  • gpio -g mode 17 out
    gpio -g write 17 1
    
    • Эти команды используют распиновку BCM_GPIO и выполняют те же операции, что и команды выше.
  • gpio -1 mode 11 out
    gpio -1 write 11 1
    
    • Эти команды используют «физическую» распиновку и выполняют те же операции, что и команды выше.

Встроенные подтягивающие/стягивающие резисторы

GPIO-контакты оснащены подтягивающими/стягивающими резисторами, которыми можно управлять программно, если контакт выставлен в режим ввода данных. Прочитать статус этих резисторов нельзя.

gpio mode 0 up
gpio mode 0 down
gpio mode 0 tri

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

Придумать заголовок

См.также

Внешние ссылки