Files
clover/docs/ru/gpio.md
2020-09-10 14:46:58 +03:00

103 lines
4.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Работа с GPIO
GPIO (General-Purpose Input/Output) это тип пинов на Raspberry Pi, напряжение на которых можно программно подавать и измерять. Также на некоторых пинах реализован аппаратный <abbr title="Широтно-импульсная модуляция">ШИМ</abbr> (<abbr title="Pulse-width modulation">PWM</abbr>). Интерфейс 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)
```