python + raspberry pi gpio
TRANSCRIPT
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
Общая схема
• 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
Работа из PythonRPi.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.GPIOimport RPi.GPIO as GPIOGPIO.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/
gpiozerofrom 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 LEDfrom itertools import cyclelights = 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, Buttonfrom itertools import cyclelights = 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, Buttonfrom itertools import cycle from signal import pauselights = 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.
Вопросы?