Raspberry Pi:Библиотеки/WiringPi/Утилита gpio: различия между версиями
Myagkij (обсуждение | вклад) |
Нет описания правки |
||
Строка 25: | Строка 25: | ||
Обо всех функциях программы '''gpio''' читайте в мануале. Чтобы открыть его, впишите в окне терминала следующее: | Обо всех функциях программы '''gpio''' читайте в мануале. Чтобы открыть его, впишите в окне терминала следующее: | ||
<syntaxhighlight lang="bash | <syntaxhighlight lang="bash"> | ||
man gpio | man gpio | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Строка 33: | Строка 33: | ||
Из командной строки '''Linux''': | Из командной строки '''Linux''': | ||
* <syntaxhighlight lang="bash | * <syntaxhighlight lang="bash"> | ||
gpio -v | gpio -v | ||
</syntaxhighlight> | </syntaxhighlight> | ||
** Показывает версию. | ** Показывает версию. | ||
* <syntaxhighlight lang="bash | * <syntaxhighlight lang="bash"> | ||
gpio -g … | gpio -g … | ||
</syntaxhighlight> | </syntaxhighlight> | ||
** Опциональный флаг '''-g''' делает так, что контакты начинают интерпретироваться по схеме '''BCM_GPIO''' вместо схемы [[Raspberry Pi:Библиотеки/WiringPi|WiringPi]]. | ** Опциональный флаг '''-g''' делает так, что контакты начинают интерпретироваться по схеме '''BCM_GPIO''' вместо схемы [[Raspberry Pi:Библиотеки/WiringPi|WiringPi]]. | ||
* <syntaxhighlight lang="bash | * <syntaxhighlight lang="bash"> | ||
gpio -1 … | gpio -1 … | ||
</syntaxhighlight> | </syntaxhighlight> | ||
** Опциональный флаг '''-1''' делает так, что контакты начинают интерпретироваться согласно их положению на плате (т.е. согласно '''«физической»''' распиновке). Это работает только с коннектором '''P1'''. | ** Опциональный флаг '''-1''' делает так, что контакты начинают интерпретироваться согласно их положению на плате (т.е. согласно '''«физической»''' распиновке). Это работает только с коннектором '''P1'''. | ||
* <syntaxhighlight lang="bash | * <syntaxhighlight lang="bash"> | ||
gpio -p … | gpio -p … | ||
</syntaxhighlight> | </syntaxhighlight> | ||
** Опциональный флаг '''–p''' заставляет программу '''gpio''' начать '''«думать»''', что к '''Raspberry Pi''' подключена плата '''PiFace'''. Таким образом, контакты начинают интерпретироваться как контакты на '''PiFace'''. Примечание: Контакты '''с 200 по 207''' на '''PiFace''' предназначены для записи/считывания, а контакты '''с 208 по 215''' – для считывания состояния выходного регистра-защелки (т.е. с их помощью можно считывать состояния выходных контактов). | ** Опциональный флаг '''–p''' заставляет программу '''gpio''' начать '''«думать»''', что к '''Raspberry Pi''' подключена плата '''PiFace'''. Таким образом, контакты начинают интерпретироваться как контакты на '''PiFace'''. Примечание: Контакты '''с 200 по 207''' на '''PiFace''' предназначены для записи/считывания, а контакты '''с 208 по 215''' – для считывания состояния выходного регистра-защелки (т.е. с их помощью можно считывать состояния выходных контактов). | ||
* <syntaxhighlight lang="bash | * <syntaxhighlight lang="bash"> | ||
gpio -x … | gpio -x … | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Строка 56: | Строка 56: | ||
==Стандартные команды для ввода и вывода данных== | ==Стандартные команды для ввода и вывода данных== | ||
* <syntaxhighlight lang="bash | * <syntaxhighlight lang="bash"> | ||
gpio mode <pin> in/out/pwm/clock/up/down/tri | gpio mode <pin> in/out/pwm/clock/up/down/tri | ||
</syntaxhighlight> | </syntaxhighlight> | ||
** Задает режим контакта – ввод данных, вывод данных, '''ШИМ''' или генерация тактового сигнала. Дополнительно позволяет управлять подтягивающими/стягивающими резисторам: включать/выключать подтягивающий резистор, включать/выключать стягивающий резистор или не делать ничего. | ** Задает режим контакта – ввод данных, вывод данных, '''ШИМ''' или генерация тактового сигнала. Дополнительно позволяет управлять подтягивающими/стягивающими резисторам: включать/выключать подтягивающий резистор, включать/выключать стягивающий резистор или не делать ничего. | ||
* <syntaxhighlight lang="bash | * <syntaxhighlight lang="bash"> | ||
gpio write <pin> 0/1 | gpio write <pin> 0/1 | ||
</syntaxhighlight> | </syntaxhighlight> | ||
** Выставляет выходной контакт в состояние '''HIGH («1»)''' или '''LOW («0»)'''. | ** Выставляет выходной контакт в состояние '''HIGH («1»)''' или '''LOW («0»)'''. | ||
* <syntaxhighlight lang="bash | * <syntaxhighlight lang="bash"> | ||
gpio write <pin> 0/1 | gpio write <pin> 0/1 | ||
</syntaxhighlight> | </syntaxhighlight> | ||
** Выставляет значение для '''ШИМ''' (поддерживаются значения '''от «0» до «1023»'''). | ** Выставляет значение для '''ШИМ''' (поддерживаются значения '''от «0» до «1023»'''). | ||
* <syntaxhighlight lang="bash | * <syntaxhighlight lang="bash"> | ||
gpio read <pin> | gpio read <pin> | ||
</syntaxhighlight> | </syntaxhighlight> | ||
** Считывает и печатает логическое значение, имеющееся на указанном контакте. Может напечатать '''«0» (LOW)''' или '''«1» (HIGH)'''. | ** Считывает и печатает логическое значение, имеющееся на указанном контакте. Может напечатать '''«0» (LOW)''' или '''«1» (HIGH)'''. | ||
* <syntaxhighlight lang="bash | * <syntaxhighlight lang="bash"> | ||
gpio awrite <pin> <value> | gpio awrite <pin> <value> | ||
</syntaxhighlight> | </syntaxhighlight> | ||
** Считывает аналоговые данные с указанного контакта. Плата '''Pi''' не имеет встроенных компонентов для работы с аналоговыми данными, поэтому вам нужно будет указать расширительный модуль при помощи флага '''–x'''. | ** Считывает аналоговые данные с указанного контакта. Плата '''Pi''' не имеет встроенных компонентов для работы с аналоговыми данными, поэтому вам нужно будет указать расширительный модуль при помощи флага '''–x'''. | ||
* <syntaxhighlight lang="bash | * <syntaxhighlight lang="bash"> | ||
gpio readall | gpio readall | ||
</syntaxhighlight> | </syntaxhighlight> | ||
** Считывает данные со всех доступных контактов и печатает удобную перекрестную таблицу их номеров (т.е. распиновку [[Raspberry Pi:Библиотеки/WiringPi|WiringPi]], распиновку '''BCM_GPIO''' и распиновку согласно положению на плате), а также текущие значения контактов и режимы, в которые они выставлены. Эта команда также определяет версию/модель '''Pi''', поэтому распиновка в таблице будет соответствовать той версии '''Pi''', которую вы используете. | ** Считывает данные со всех доступных контактов и печатает удобную перекрестную таблицу их номеров (т.е. распиновку [[Raspberry Pi:Библиотеки/WiringPi|WiringPi]], распиновку '''BCM_GPIO''' и распиновку согласно положению на плате), а также текущие значения контактов и режимы, в которые они выставлены. Эта команда также определяет версию/модель '''Pi''', поэтому распиновка в таблице будет соответствовать той версии '''Pi''', которую вы используете. | ||
* <syntaxhighlight lang="bash | * <syntaxhighlight lang="bash"> | ||
gpio allreadall | gpio allreadall | ||
</syntaxhighlight> | </syntaxhighlight> | ||
** Считывает данные со всех контактов '''Raspberry Pi'''. Это, в сущности, тот же формат, что используется в вычислительном модуле. | ** Считывает данные со всех контактов '''Raspberry Pi'''. Это, в сущности, тот же формат, что используется в вычислительном модуле. | ||
* <syntaxhighlight lang="bash | * <syntaxhighlight lang="bash"> | ||
gpio wfi <pin> rising/falling/both | gpio wfi <pin> rising/falling/both | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Строка 93: | Строка 93: | ||
Обратите внимание, что эта команда не будет работать, если у вас включено дерево устройств. Впрочем, если оно будет включено, система напишет предупреждение. | Обратите внимание, что эта команда не будет работать, если у вас включено дерево устройств. Впрочем, если оно будет включено, система напишет предупреждение. | ||
* <syntaxhighlight lang="bash | * <syntaxhighlight lang="bash"> | ||
gpio load spi [размер буфера в Кб] | gpio load spi [размер буфера в Кб] | ||
</syntaxhighlight> | </syntaxhighlight> | ||
** Загружает в ядро модули '''SPI'''. Опционально задает размер внутреннего буфера в '''Кб'''. По умолчанию размер буфера составляет '''4 Кб''' – этого более, чем достаточно для большинства программ, которые одновременно обмениваются через шину '''SPI''' лишь '''1-2 байтами'''. | ** Загружает в ядро модули '''SPI'''. Опционально задает размер внутреннего буфера в '''Кб'''. По умолчанию размер буфера составляет '''4 Кб''' – этого более, чем достаточно для большинства программ, которые одновременно обмениваются через шину '''SPI''' лишь '''1-2 байтами'''. | ||
** Данные в '''«/dev/spi*»''' настроены таким образом, что ими владеет пользователь, использующий программу '''gpio'''. Таким образом, последующие программы необязательно запускать с правами '''root'''-пользователя (разве что они не используют другие функции [[Raspberry Pi:Библиотеки/WiringPi|WiringPi]]). | ** Данные в '''«/dev/spi*»''' настроены таким образом, что ими владеет пользователь, использующий программу '''gpio'''. Таким образом, последующие программы необязательно запускать с правами '''root'''-пользователя (разве что они не используют другие функции [[Raspberry Pi:Библиотеки/WiringPi|WiringPi]]). | ||
* <syntaxhighlight lang="bash | * <syntaxhighlight lang="bash"> | ||
gpio load i2c [baud rate in Kb/sec] | gpio load i2c [baud rate in Kb/sec] | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Строка 108: | Строка 108: | ||
Запускает программу '''i2cdetect''', но параметры могут быть разными в зависимости от версии '''Raspberry Pi'''. К примеру на '''Pi''' версии '''1''' это будет | Запускает программу '''i2cdetect''', но параметры могут быть разными в зависимости от версии '''Raspberry Pi'''. К примеру на '''Pi''' версии '''1''' это будет | ||
<syntaxhighlight lang="bash | <syntaxhighlight lang="bash"> | ||
i2cdetect -y 0 | i2cdetect -y 0 | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Строка 114: | Строка 114: | ||
, а на '''Pi''' версии 2 – | , а на '''Pi''' версии 2 – | ||
<syntaxhighlight lang="bash | <syntaxhighlight lang="bash"> | ||
i2cdetect -y 1 | i2cdetect -y 1 | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Строка 122: | Строка 122: | ||
==Команды для режима «/sys/class/gpio»== | ==Команды для режима «/sys/class/gpio»== | ||
* <syntaxhighlight lang="bash | * <syntaxhighlight lang="bash"> | ||
gpio export <pin> in/out | gpio export <pin> in/out | ||
</syntaxhighlight> | </syntaxhighlight> | ||
** Экспортирует указанный контакт (по схеме '''BCM_GPIO''') как входной или выходной, а также делает его доступным для пользовательской программы, запущенной тем же пользователем. | ** Экспортирует указанный контакт (по схеме '''BCM_GPIO''') как входной или выходной, а также делает его доступным для пользовательской программы, запущенной тем же пользователем. | ||
* <syntaxhighlight lang="bash | * <syntaxhighlight lang="bash"> | ||
gpio unexport <pin> | gpio unexport <pin> | ||
</syntaxhighlight> | </syntaxhighlight> | ||
** Удаляет экспорт для указанного контакта. | ** Удаляет экспорт для указанного контакта. | ||
* <syntaxhighlight lang="bash | * <syntaxhighlight lang="bash"> | ||
gpio unexportall | gpio unexportall | ||
</syntaxhighlight> | </syntaxhighlight> | ||
** Удаляет все экспортированные контакты из '''«/sys/class/gpio»'''. | ** Удаляет все экспортированные контакты из '''«/sys/class/gpio»'''. | ||
* <syntaxhighlight lang="bash | * <syntaxhighlight lang="bash"> | ||
gpio exports | gpio exports | ||
</syntaxhighlight> | </syntaxhighlight> | ||
** Печатает список всех GPIO-контактов, которые были экспортированы через интерфейс '''«/sys/class/gpio»''' и его режимы. | ** Печатает список всех GPIO-контактов, которые были экспортированы через интерфейс '''«/sys/class/gpio»''' и его режимы. | ||
* <syntaxhighlight lang="bash | * <syntaxhighlight lang="bash"> | ||
gpio edge <pin> rising/falling/both/none | gpio edge <pin> rising/falling/both/none | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Строка 147: | Строка 147: | ||
==Примеры== | ==Примеры== | ||
* <syntaxhighlight lang="bash | * <syntaxhighlight lang="bash"> | ||
gpio mode 0 out | gpio mode 0 out | ||
gpio write 0 1 | gpio write 0 1 | ||
</syntaxhighlight> | </syntaxhighlight> | ||
** Команды выше используют распиновку [[Raspberry Pi:Библиотеки/WiringPi |WiringPi]], чтобы задать контакту 0 режим вывода данных, а затем выставляют ему логический уровень '''«1»'''. | ** Команды выше используют распиновку [[Raspberry Pi:Библиотеки/WiringPi |WiringPi]], чтобы задать контакту 0 режим вывода данных, а затем выставляют ему логический уровень '''«1»'''. | ||
* <syntaxhighlight lang="bash | * <syntaxhighlight lang="bash"> | ||
gpio -g mode 17 out | gpio -g mode 17 out | ||
gpio -g write 17 1 | gpio -g write 17 1 | ||
</syntaxhighlight> | </syntaxhighlight> | ||
** Эти команды используют распиновку '''BCM_GPIO''' и выполняют те же операции, что и команды выше. | ** Эти команды используют распиновку '''BCM_GPIO''' и выполняют те же операции, что и команды выше. | ||
* <syntaxhighlight lang="bash | * <syntaxhighlight lang="bash"> | ||
gpio -1 mode 11 out | gpio -1 mode 11 out | ||
gpio -1 write 11 1 | gpio -1 write 11 1 | ||
Строка 167: | Строка 167: | ||
GPIO-контакты оснащены подтягивающими/стягивающими резисторами, которыми можно управлять программно, если контакт выставлен в режим ввода данных. Прочитать статус этих резисторов нельзя. | GPIO-контакты оснащены подтягивающими/стягивающими резисторами, которыми можно управлять программно, если контакт выставлен в режим ввода данных. Прочитать статус этих резисторов нельзя. | ||
<syntaxhighlight lang="bash | <syntaxhighlight lang="bash"> | ||
gpio mode 0 up | gpio mode 0 up | ||
gpio mode 0 down | gpio mode 0 down |
Текущая версия от 20:04, 23 мая 2023
Содержание | Введение | Продукты | Операционная система | Настройка | Основы 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