Raspberry Pi:Библиотеки/WiringPi/Утилита gpio
Содержание | Введение | Продукты | Операционная система | Настройка | Основы Linux | Аппаратные средства | Неисправности | Типовые проблемы | Часто возникающие вопросы | Библиотеки | Примеры |
Черновик |
Утилита 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.
Придумать заголовок
- Тест контактов
- Расширительные модули для MCP23008 и MCP23017 (I2C)
- Расширительные модули для MCP23S08 и MCP23S17 (SPI)
- Расширительный модуль для SR595
- Команды для Gertboard
- Команды для PiFace