python + raspberry pi gpio

Post on 18-Feb-2017

120 Views

Category:

Software

5 Downloads

Preview:

Click to see full reader

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

Нумерация по 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

Работа из 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.

Вопросы?

- Спасибо!

lensvol

borisov.kir@gmail.com

top related