Несколько лет тому назад Интернет лихорадила тяга к Raspberry Pi, одноплатному компьютеру от одноименного фонда. Многие покупали себе "малинку" или её многочисленные клоны, вертели в руках и в лучшем случае делали из неё домашний сервер. Но мало кто догадывался, что загадочный разъем на этой плате хранит в себе потенциал для чего-то большего: от моргания светодиодами до управления сервомоторами, подключения внешних дисплеев и многого другого.
Имя ему - GPIO.
2. О докладчике
• Имя ему - Кирилл Борисов
• 10 лет программирует за деньги
• 5 лет души не чает в Python
• Работает в Яндексе и не знает забот
3. Disclaimer
• Докладчик - не настоящий сварщик электронщик
• Не будет ни слова об IoT (почти)
• Доклад никак не связан с моей работой
• Автор не несет ответственности за убитое время
5. Базовые факты
• Размером с кредитную карту
• Производится Raspberry Pi Foundation
• Первый прототип создал Eben Upton
• Цель - заинтересовать детей
• Вдохновлялись BBC Micro
• Не является “open source”
11. 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 без коннектора
12. Доводы “за”
• Большая мощность
• Встроенный WiFi и Bluetooth, Ethernet
• Многофункциональность
• Доступность
• GPIO с поддержкой SPI, I2C, UART
13. Доводы “против”
• Нет своего ЦАП и АЦП
• Достаточно высокая цена
• Не подходит для real-time
• Большое энергопотребление
• Заточен под 3.3v
14. GPIO
Ввод-вывод на каждый день
Source: https://www.raspberrypi.org/documentation/usage/gpio-plus-and-raspi2/
15. Что это?
• Физический интерфейс для связи с миром вокруг
• Может работать на вход, так и на выход
• Цифровой интерфейс
• 26 пинов на Model A, 40 пинов на Model B
19. SPI
• Serial Peripheral Interface Bus
• Полнодуплексная шина обмена данными
• Архитектура “master-slave”
• Для общения с SD-карты, ЖК-дисплеи и т.д.
Source: https://en.wikipedia.org/wiki/Serial_Peripheral_Interface_Bus
20. I2C
• Inter-Integrated Circuit
• Способ низкоскоростного обмен данными
• Много мастеров, много подчиненных устройств
• EEPROM, OLED-дисплеи, датчики и т.д.
Source: https://en.wikipedia.org/wiki/I%C2%B2C
21. Hardware-On-Top (HAT)
• Спецификация расширений для Pi:
• Прямоугольная плата (65 x 56 мм)
• Коннектор на 40 пинов
• EEPROM для автоконфигурации
• Для моделей B+ и выше
24. Техника безопасности
• Работайте со схемой при отключенном питании
• Не путайте “плюс” с “минусом”
• Внимательно читайте документацию
• Статика - ваш враг
29. Работа из Python
RPi.Zero, GPIO Zero и все-все-все
Source: https://www.raspberrypi.org/documentation/usage/gpio-plus-and-raspi2/
30. RPi.GPIO
• “Официальная” библиотека
• Поставляется с Raspbian
• Поддерживает только программную ШИМ
• Очень много избыточного кода :(
https://sourceforge.net/p/raspberry-gpio-python
31. 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)
32. gpiozero
• Основная цель - уменьшение избыточности
• Встроенные “батарейки” для многих вещей
• Удаленная разработка с помощью pigpiod
• Хорошая документация и много примеров
• Выбор редакции :)
https://github.com/RPi-Distro/python-gpiozero/
33. gpiozero
from gpiozero import LED
from time import sleep
led = LED(25)
while True:
led.on()
sleep(1)
led.off()
sleep(1)
41. Светофор: код
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)
44. Кнопка: код
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)
45. Кнопка: ещё код
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()
46. Идеи для реализации
• Табло статуса сборки для CI сервера
• Уничтожитель флэшек по нажатию на кнопку
• Автоматический отпугиватель кота
• Отображение температуры процессора Pi
• …
47. Альтернативы
Arduino, OrangePi и прочие
Source: https://www.raspberrypi.org/documentation/usage/gpio-plus-and-raspi2/
https://micropython.org/
48. OrangePi
• Совместимый с Raspberry Pi
• 1GB RAM
• 8GB прошитой на плате памяти
• ИК-приемник
• SATA
49. BananaPi
• Совместимый с Raspberry Pi
• 2GB RAM
• 8GB прошитой на плате памяти
• Может запускать Android 4.4 (sic!)
50. pyboard
• Полный open source
• На основе микроконтроллера STM32F405RG
• Сделан для MicroPython
• 168 MHz Cortex M4 CPU
• 3 АЦП, 2 ЦАП, 4 светодиода, акселерометр
• 1024KB ROM, 192 KB RAM
51. Домашнее чтение
Книги - это хорошо
Source: https://ourdelhistruggle.com/2008/12/02/delhis-sunday-book-market/
56. • https://www.raspberrypi.org/
Официальный сайт “Raspberry Pi Foundation”
• https://raspberrypi.ru
Русскоязычное сообщество пользователей
• https://www.raspberrypi.org/magpi/
Официальный журнал про Raspberry Pi
• https://circuits.io/
Дружелюбный симулятор электронных схем.
57. • https://clck.ru/AYVhd
Отличный доклад на PyCon Russia от создателя
gpiozero.
• https://adafruit.com
Магазин с большим количеством шилдов и
аксессуаров для Raspberry Pi.