Raspberry Pi:Библиотеки/WiringPi/Утилита gpio: различия между версиями

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


<syntaxhighlight lang="bash" enclose="div">
<syntaxhighlight lang="bash">
man gpio
man gpio
</syntaxhighlight>
</syntaxhighlight>
Строка 33: Строка 33:
Из командной строки '''Linux''':
Из командной строки '''Linux''':


* <syntaxhighlight lang="bash" enclose="div">
* <syntaxhighlight lang="bash">
gpio -v
gpio -v
</syntaxhighlight>
</syntaxhighlight>
** Показывает версию.
** Показывает версию.
* <syntaxhighlight lang="bash" enclose="div">
* <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" enclose="div">
* <syntaxhighlight lang="bash">
gpio -1 …
gpio -1 …
</syntaxhighlight>
</syntaxhighlight>
** Опциональный флаг '''-1''' делает так, что контакты начинают интерпретироваться согласно их положению на плате (т.е. согласно '''«физической»''' распиновке). Это работает только с коннектором '''P1'''.
** Опциональный флаг '''-1''' делает так, что контакты начинают интерпретироваться согласно их положению на плате (т.е. согласно '''«физической»''' распиновке). Это работает только с коннектором '''P1'''.
* <syntaxhighlight lang="bash" enclose="div">
* <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" enclose="div">
* <syntaxhighlight lang="bash">
gpio -x …
gpio -x …
</syntaxhighlight>
</syntaxhighlight>
Строка 56: Строка 56:
==Стандартные команды для ввода и вывода данных==
==Стандартные команды для ввода и вывода данных==


* <syntaxhighlight lang="bash" enclose="div">
* <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" enclose="div">
* <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" enclose="div">
* <syntaxhighlight lang="bash">
gpio write <pin> 0/1
gpio write <pin> 0/1
</syntaxhighlight>
</syntaxhighlight>
** Выставляет значение для '''ШИМ''' (поддерживаются значения '''от «0» до «1023»''').
** Выставляет значение для '''ШИМ''' (поддерживаются значения '''от «0» до «1023»''').
* <syntaxhighlight lang="bash" enclose="div">
* <syntaxhighlight lang="bash">
gpio read <pin>
gpio read <pin>
</syntaxhighlight>
</syntaxhighlight>
** Считывает и печатает логическое значение, имеющееся на указанном контакте. Может напечатать '''«0» (LOW)''' или '''«1» (HIGH)'''.
** Считывает и печатает логическое значение, имеющееся на указанном контакте. Может напечатать '''«0» (LOW)''' или '''«1» (HIGH)'''.
* <syntaxhighlight lang="bash" enclose="div">
* <syntaxhighlight lang="bash">
gpio awrite <pin> <value>
gpio awrite <pin> <value>
</syntaxhighlight>
</syntaxhighlight>
** Считывает аналоговые данные с указанного контакта. Плата '''Pi''' не имеет встроенных компонентов для работы с аналоговыми данными, поэтому вам нужно будет указать расширительный модуль при помощи флага '''–x'''.
** Считывает аналоговые данные с указанного контакта. Плата '''Pi''' не имеет встроенных компонентов для работы с аналоговыми данными, поэтому вам нужно будет указать расширительный модуль при помощи флага '''–x'''.
* <syntaxhighlight lang="bash" enclose="div">
* <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" enclose="div">
* <syntaxhighlight lang="bash">
gpio allreadall
gpio allreadall
</syntaxhighlight>
</syntaxhighlight>
** Считывает данные со всех контактов '''Raspberry Pi'''. Это, в сущности, тот же формат, что используется в вычислительном модуле.
** Считывает данные со всех контактов '''Raspberry Pi'''. Это, в сущности, тот же формат, что используется в вычислительном модуле.
* <syntaxhighlight lang="bash" enclose="div">
* <syntaxhighlight lang="bash">
gpio wfi <pin> rising/falling/both
gpio wfi <pin> rising/falling/both
</syntaxhighlight>
</syntaxhighlight>
Строка 93: Строка 93:
Обратите внимание, что эта команда не будет работать, если у вас включено дерево устройств. Впрочем, если оно будет включено, система напишет предупреждение.
Обратите внимание, что эта команда не будет работать, если у вас включено дерево устройств. Впрочем, если оно будет включено, система напишет предупреждение.


* <syntaxhighlight lang="bash" enclose="div">
* <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" enclose="div">
* <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" enclose="div">
<syntaxhighlight lang="bash">
i2cdetect -y 0
i2cdetect -y 0
</syntaxhighlight>
</syntaxhighlight>
Строка 114: Строка 114:
, а на '''Pi''' версии 2 –  
, а на '''Pi''' версии 2 –  


<syntaxhighlight lang="bash" enclose="div">
<syntaxhighlight lang="bash">
i2cdetect -y 1
i2cdetect -y 1
</syntaxhighlight>
</syntaxhighlight>
Строка 122: Строка 122:
==Команды для режима «/sys/class/gpio»==
==Команды для режима «/sys/class/gpio»==


* <syntaxhighlight lang="bash" enclose="div">
* <syntaxhighlight lang="bash">
gpio export <pin> in/out
gpio export <pin> in/out
</syntaxhighlight>
</syntaxhighlight>
** Экспортирует указанный контакт (по схеме '''BCM_GPIO''') как входной или выходной, а также делает его доступным для пользовательской программы, запущенной тем же пользователем.
** Экспортирует указанный контакт (по схеме '''BCM_GPIO''') как входной или выходной, а также делает его доступным для пользовательской программы, запущенной тем же пользователем.
* <syntaxhighlight lang="bash" enclose="div">
* <syntaxhighlight lang="bash">
gpio unexport <pin>
gpio unexport <pin>
</syntaxhighlight>
</syntaxhighlight>
** Удаляет экспорт для указанного контакта.
** Удаляет экспорт для указанного контакта.
* <syntaxhighlight lang="bash" enclose="div">
* <syntaxhighlight lang="bash">
gpio unexportall
gpio unexportall
</syntaxhighlight>
</syntaxhighlight>
** Удаляет все экспортированные контакты из '''«/sys/class/gpio»'''.
** Удаляет все экспортированные контакты из '''«/sys/class/gpio»'''.
* <syntaxhighlight lang="bash" enclose="div">
* <syntaxhighlight lang="bash">
gpio exports
gpio exports
</syntaxhighlight>
</syntaxhighlight>
** Печатает список всех GPIO-контактов, которые были экспортированы через интерфейс '''«/sys/class/gpio»''' и его режимы.
** Печатает список всех GPIO-контактов, которые были экспортированы через интерфейс '''«/sys/class/gpio»''' и его режимы.
* <syntaxhighlight lang="bash" enclose="div">
* <syntaxhighlight lang="bash">
gpio edge <pin> rising/falling/both/none
gpio edge <pin> rising/falling/both/none
</syntaxhighlight>
</syntaxhighlight>
Строка 147: Строка 147:
==Примеры==
==Примеры==


* <syntaxhighlight lang="bash" enclose="div">
* <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" enclose="div">
* <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" enclose="div">
* <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" enclose="div">
<syntaxhighlight lang="bash">
gpio mode 0 up
gpio mode 0 up
gpio mode 0 down
gpio mode 0 down

Текущая версия от 20:04, 23 мая 2023

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


Черновик


Утилита 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.

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

См.также

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