KEMBAR78
Python + Raspberry Pi GPIO | PDF
Python + GPIO = ❤
Борисов Кирилл
PyCon Belarus 2017
О докладчике
• Имя ему - Кирилл Борисов
• 10 лет программирует за деньги
• 5 лет души не чает в Python
• Работает в Яндексе и не знает забот
Disclaimer
• Докладчик - не настоящий сварщик электронщик
• Не будет ни слова об IoT (почти)
• Доклад никак не связан с моей работой
• Автор не несет ответственности за убитое время
Raspberry Pi
Продукт, запустивший тысячи проектов
Source: https://www.sparkfun.com/products/retired/11546
Базовые факты
• Размером с кредитную карту
• Производится Raspberry Pi Foundation
• Первый прототип создал Eben Upton
• Цель - заинтересовать детей
• Вдохновлялись BBC Micro
• Не является “open source”
Model B (2012)
Source: https://www.sparkfun.com/products/retired/11546
Model B (2012)
• 700 MHz, 1 ядро, 32-bit, ARM
• 512 MB RAM
• 2 USB-порта
• 100Mb Ethernet-порт
Pi 3 Model B (2016)
Source: https://www.raspberrypi.org/magpi/pi-3-interview/
Pi 3 Model B (2016)
• 1.2GHz 64-bit, 4 ядра, ARMv8 CPU
• 1 GB RAM
• 4 USB-порта
• Wi-Fi (b/g/n), Bluetooth 4.1 / BLE
• Ethernet-порт
Pi Zero (2015)
Source: https://www.raspberrypi.org/blog/raspberry-pi-zero/
Pi Zero (2015)
• 1GHz 32-bit, 1 ядро, ARMv11 CPU
• 512 MB RAM
• 1 Micro USB порт
• Wi-Fi (b/g/n), Bluetooth 4.1 / BLE
• Ethernet отсутствует, GPIO без коннектора
Доводы “за”
• Большая мощность
• Встроенный WiFi и Bluetooth, Ethernet
• Многофункциональность
• Доступность
• GPIO с поддержкой SPI, I2C, UART
Доводы “против”
• Нет своего ЦАП и АЦП
• Достаточно высокая цена
• Не подходит для real-time
• Большое энергопотребление
• Заточен под 3.3v
GPIO
Ввод-вывод на каждый день
Source: https://www.raspberrypi.org/documentation/usage/gpio-plus-and-raspi2/
Что это?
• Физический интерфейс для связи с миром вокруг
• Может работать на вход, так и на выход
• Цифровой интерфейс
• 26 пинов на Model A, 40 пинов на Model B
Нумерация по Broadcom
Source: https://raspberrypi.org
Физическая нумерация
Source: https://raspberrypi.org
Общая схема
• UART - универсальный асинхронный приёмопередатчик
• I2C - последовательная асимметричная шина
• SPI - последовательный периферийный интерфейс
Source: https://pinout.xyz
SPI
• Serial Peripheral Interface Bus
• Полнодуплексная шина обмена данными
• Архитектура “master-slave”
• Для общения с SD-карты, ЖК-дисплеи и т.д.
Source: https://en.wikipedia.org/wiki/Serial_Peripheral_Interface_Bus
I2C
• Inter-Integrated Circuit
• Способ низкоскоростного обмен данными
• Много мастеров, много подчиненных устройств
• EEPROM, OLED-дисплеи, датчики и т.д.
Source: https://en.wikipedia.org/wiki/I%C2%B2C
Hardware-On-Top (HAT)
• Спецификация расширений для Pi:
• Прямоугольная плата (65 x 56 мм)
• Коннектор на 40 пинов
• EEPROM для автоконфигурации
• Для моделей B+ и выше
Hardware-On-Top (HAT)
Source: https://grobotronics.com/raspberry-pi-sense-hat.html

https://thepihut.com/products/raspberry-pi-sense-hat-astro-pi
Схемотехника
За 60 секунд или более
Техника безопасности
• Работайте со схемой при отключенном питании
• Не путайте “плюс” с “минусом”
• Внимательно читайте документацию
• Статика - ваш враг

Простейшая схема
Простейшая схема
Вариант с Raspberry Pi
Вариант с Raspberry Pi
Работа из Python
RPi.Zero, GPIO Zero и все-все-все
Source: https://www.raspberrypi.org/documentation/usage/gpio-plus-and-raspi2/
RPi.GPIO
• “Официальная” библиотека
• Поставляется с Raspbian
• Поддерживает только программную ШИМ
• Очень много избыточного кода :(
https://sourceforge.net/p/raspberry-gpio-python
RPi.GPIO
import RPi.GPIO as GPIO



GPIO.setmode(GPIO.BOARD)

GPIO.setup(22, GPIO.OUT)



while True:

sleep(0.5)

GPIO.output(12, GPIO.HIGH)



sleep(0.5)

GPIO.output(12, GPIO.LOW)

gpiozero
• Основная цель - уменьшение избыточности
• Встроенные “батарейки” для многих вещей
• Удаленная разработка с помощью pigpiod
• Хорошая документация и много примеров
• Выбор редакции :)
https://github.com/RPi-Distro/python-gpiozero/
gpiozero
from gpiozero import LED
from time import sleep
led = LED(25)
while True:

led.on()
sleep(1)
led.off()
sleep(1)
Специализированные
библиотеки
• SMbus - работа с I2C
• pyserial - работа с SPI
• RPLCD - работа с ЖК-дисплеями (HD44780)
gpiozero на примерах
Мигаем лампочками, давим на кнопочки
Source: https://www.raspberrypi.org/documentation/usage/gpio-plus-and-raspi2/
Светодиод: вид сверху
Светодиод: схема
Светодиод: схема
from gpiozero import LED
from time import sleep
led = LED(25)
while True:

led.on()
sleep(1)
led.off()
sleep(1)
Светофор: вид сверху
Светофор: схема
Светофор: код
from gpiozero import LED

from itertools import cycle



lights = cycle([

LED(pin)

for pin in [12, 16, 20]

])



current = next(lights)



while True:

current.on()

sleep(1)

current.off()

current = next(lights)

Кнопка: вид сверху
Кнопка: схема
Кнопка: код
from gpiozero import LED, Button

from itertools import cycle



lights = cycle([

LED(pin)

for pin in [12, 16, 20]

])

button = Button(25)

current = next(lights)



while True:

current.on()

button.wait_for_press()


current.off()
current = next(lights)

Кнопка: ещё код
from gpiozero import LED, Button

from itertools import cycle
from signal import pause



lights = cycle([

LED(pin)

for pin in [12, 16, 20]

])

button = Button(25)
current_led = next(lights)
def switch():
current_led.off()
current_led = next(lights)
current_led.on()
button.when_pressed = switch
pause()



Идеи для реализации
• Табло статуса сборки для CI сервера
• Уничтожитель флэшек по нажатию на кнопку
• Автоматический отпугиватель кота
• Отображение температуры процессора Pi
• …
Альтернативы
Arduino, OrangePi и прочие
Source: https://www.raspberrypi.org/documentation/usage/gpio-plus-and-raspi2/

https://micropython.org/
OrangePi
• Совместимый с Raspberry Pi
• 1GB RAM
• 8GB прошитой на плате памяти
• ИК-приемник
• SATA
BananaPi
• Совместимый с Raspberry Pi
• 2GB RAM
• 8GB прошитой на плате памяти
• Может запускать Android 4.4 (sic!)
pyboard
• Полный open source
• На основе микроконтроллера STM32F405RG
• Сделан для MicroPython
• 168 MHz Cortex M4 CPU
• 3 АЦП, 2 ЦАП, 4 светодиода, акселерометр
• 1024KB ROM, 192 KB RAM
Домашнее чтение
Книги - это хорошо
Source: https://ourdelhistruggle.com/2008/12/02/delhis-sunday-book-market/
Make:
Action
Simon Monk
Simple
electronics
with
GPIO Zero
Phil King
Make:
Electronics
Second Edition
Charles Platt
Дополнительные ссылки
“Я покажу тебе, как глубоко уходит кроличья нора”
• https://www.raspberrypi.org/

Официальный сайт “Raspberry Pi Foundation”
• https://raspberrypi.ru

Русскоязычное сообщество пользователей
• https://www.raspberrypi.org/magpi/

Официальный журнал про Raspberry Pi
• https://circuits.io/

Дружелюбный симулятор электронных схем.
• https://clck.ru/AYVhd

Отличный доклад на PyCon Russia от создателя

gpiozero.
• https://adafruit.com

Магазин с большим количеством шилдов и
аксессуаров для Raspberry Pi.
Вопросы?
- Спасибо!
lensvol
borisov.kir@gmail.com

Python + Raspberry Pi GPIO