# Работа с GPIO GPIO (General-Purpose Input/Output) – это тип пинов на Raspberry Pi, напряжение на которых можно программно подавать и измерять. Также на некоторых пинах реализован аппаратный ШИМ (PWM). Интерфейс GPIO может быть использован для управления различной периферией: светодиодами, электромагнитами, электромоторами, сервоприводами и т. д. > **Info** Используйте [распиновку](https://pinout.xyz), чтобы понять, какие из пинов на Raspberry Pi поддерживают GPIO и ШИМ. > **Info** Для того, чтобы не создавалось конфликтов при использовании портов *GPIO* в образе закрыт доступ для портов 0, 1, 2, 3, 14, 15, на которые выведены интерфейсы подключения I2C и UART. Для работы с GPIO на [образе для RPi](image.md) предустановлена библиотека [`pigpio`](http://abyz.me.uk/rpi/pigpio/). Чтобы взаимодействовать с этой библиотекой, запустите соответствующий демон: ```bash sudo systemctl start pigpiod.service ``` Для включение автозапуска демона `pigpiod` используйте команду: ```bash sudo systemctl enable pigpiod.service ``` > **Warning** При одновременном использовании `pigpiod` и [LED-ленты](leds.md) возможны конфликты. Для подключения ленты используйте пин GPIO21. На версиях [образа](image.md) ниже 0.17 измените в файле `/lib/systemd/system/pigpiod.service` строку запуска сервиса на `ExecStart=/usr/bin/pigpiod -l -t 0 -x 0x0FFF3FF0`. Пример работы с библиотекой: ```python import time import pigpio # инициализируем подключение к pigpiod pi = pigpio.pi() # устанавливаем режим 11 пина на вывод pi.set_mode(11, pigpio.OUTPUT) # включаем сигнал на 11 пине pi.write(11, 1) time.sleep(2) # отключаем сигнал на 11 пине pi.write(11, 0) # ... # устанавливаем режим 12 пина на ввод pi.set_mode(12, pigpio.INPUT) # считываем состояние 12 пина level = pi.read(12) ``` Для определения номера пина используйте [распиновку Raspberry Pi](https://pinout.xyz). ## Подключение сервоприводов Большинство сервоприводов управляются с помощью ШИМ-сигнала, причем крайним положениям привода соответствуют сигналы шириной приблизительно 1000 и 2000 мкс. Значения для конкретного сервопривода могут быть определены экспериментально. Подключите сигнальный провод сервопривода к одному из GPIO-пинов Raspberry. Для управления сервоприводом, подключенного к 13 пину, используйте такой код: ```python import time import pigpio pi = pigpio.pi() # устанавливаем режим 13 пина на вывод pi.set_mode(13, pigpio.OUTPUT) # устанавливаем на 13 пине ШИМ сигнал в 1000 мкс pi.set_servo_pulsewidth(13, 1000) time.sleep(2) # устанавливаем на 13 пине ШИМ сигнал в 2000 мкс pi.set_servo_pulsewidth(13, 2000) ``` ## Подключение электромагнита ![GPIO Mosfet Magnet Connection](../assets/gpio_mosfet_magnet.png) Для подключения электромагнита используйте полевой транзистор (MOSFET). Подключите транзистор к одному из GPIO-пинов Raspberry Pi. Для управления магнитом, подключенным к 18 пину, используйте такой код: ```python import time import pigpio pi = pigpio.pi() # устанавливаем режим 18 пина на вывод pi.set_mode(18, pigpio.OUTPUT) # включаем электромагнит pi.write(18, 1) time.sleep(2) # отключаем электромагнит pi.write(18, 0) ```