Опубликовано: 27.08.2018
В этой статье мы поговорим о том, как подключать к Raspberry Pi датчики и другие внешние устройства через GPIO порты платы. Для работы будем использовать Python и библиотеки. Если вы новичок в работе с распбери, рекомендуем прочитать статью об установке Python и библиотек для Raspberry Pi .
Среди любителей радиотехники и электроники каждый слышал о существовании таких устройств как Arduino и Raspberry Pi. Обе платы используются для решения схожих задач, оба прекрасно подходят для начинающих. Но по сравнению с Ардуино Raspberry – это многофункциональный компьютер, на котором может запускаться операционная система.
Из основных отличий можно выделить тактовую частоту – Raspberry работает в 40 раз быстрее Ардуино, и объем оперативной памяти – у Raspberry памяти больше примерно в 128000 раз. За счет простоты управления и использования разрабатывать аппаратные проекты на Ардуино предпочтительнее. Ардуино может работать с любыми датчиками или чипами, а Raspberry Pi не такая гибкая, для работы с датчиками требуются дополнительные аппаратные устройства. Raspberry Pi очень требовательна к питанию, напряжение должно быть строго 5 В на входе, в то время как для ардуино рекомендуемое питание 7-12 В, которое стабилизируется до 5 В.
Важное отличие заключается в среде, в которой пишется программа. С Arduino IDE работать намного проще, чем с Linux. Установка библиотек для написания программы требуется для обеих систем, но код на Ардуино будет написан проще и короче.
Raspberry Pi возможно использовать в режиме многозадачности, как обычный компьютер. Одновременно может работать несколько программ в фоновом режиме.
Для расширения возможностей можно совместно использовать обе платы. Для управления датчиками и сенсорами использовать Ардуино, а сложные вычислительные задачи оставить для Raspberry Pi.
Количество портов в более старых и новых моделях Raspberry Pi отличается –model A и model B оснащены 26 выводами общего назначения GPIO, в следующих версиях количество выводов увеличено до 40.
Существует несколько видов обозначений выводов:
BCM – нумеруются выходы микропроцессора Broadcom. Используются при работе со специальными пакетами Rpi.GPIO. В большом количестве проектов используется именно эта нумерация. WiringPi – нумеруются контакты для пакета Wiring Pi. Это библиотека, похожая на библиотеки для Ардуино, для работы с GPIO контактами. Обычная цифровая нумерация выходов на самой плате.Расположение контактов изображено на рисунке. На картинке для удобства последние 14 контактов отделены – это и есть новые выходы, которые были добавлены в новых версиях платы.
Номер вывода | BCM | WiringPi | Описание контакта |
1 | 3v3 | Питающий контакт на 3,3В | |
2 | 5v | Питающий контакт на 5 В | |
3 | BCM2 | 8 | SDA |
4 | 5v | Питающий контакт на 5 В | |
5 | BCM3 | 9 | SCL |
6 | GND | Земля | |
7 | BCM4 | 7 | GPCLK0 |
8 | BCM14 | 15 | TXD – отвечает за передачу данных |
9 | GND | Земля | |
10 | BCM15 | 16 | RXD – отвечает за прием данных |
11 | BCM17 | 0 | Вывод общего назначения |
12 | BCM18 | 1 | PCM_C – используется в сочетании с ШИМ-методом. |
13 | BCM27 | 2 | Контакт общего назначения |
14 | GND | Земля | |
15 | BCM22 | 3 | Контакт общего назначения |
16 | BCM23 | 4 | Контакт общего назначения |
17 | 3V3 | Питающее напряжение 3,3В | |
18 | BCM24 | 5 | Контакт общего назначения |
19 | BCM10 | 12 | MOSI |
20 | GND | Земля | |
21 | BCM9 | 13 | MISO |
22 | BCM25 | 6 | Контакт общего назначения |
23 | BCM11 | 14 | SCLK |
24 | BCM8 | 10 | CS0 |
25 | GND | Земля | |
26 | BCM7 | 11 | CS1 |
27 | BCM0 | 30 | ID_SD |
28 | BCM1 | 31 | ID_SD |
29 | BCM5 | 21 | Контакт общего назначения |
30 | GND | Земля | |
31 | BCM6 | 22 | Контакт общего назначения |
32 | BCM12 | 26 | Контакт общего назначения |
33 | BCM13 | 23 | Контакт общего назначения |
34 | GND | Земля | |
35 | BCM19 | 24 | MISO |
36 | BCM16 | 27 | Контакт общего назначения |
37 | BCM26 | 25 | Контакт общего назначения |
38 | BCM20 | 28 | MOSI |
39 | GND | Земля | |
40 | BCM21 | 29 | SCLK |
Выводы земля, напряжение питания и другие аналогичные можно использовать любые, которые будут удобнее в конкретном проекте. Важно следить за тем, чтобы напряжение на GPIO было 3,3В, иначе контакт может быть вывеен из строя.
Среди выводов общего назначения имеются UART-контакты (на восьмом и десятом контактах). Они позволяют обеспечить взаимодействие Ардуино и Raspberry Pi. Также 4 вывода поддерживают I2C, главной задачей которых является коммуникация с периферией. Для верификации в коде нужно добавить строки
sudo apt-get install i2c-tools
sudo i2cdetect -y 1
Для осуществления доступа к I2C нужно подключить библиотеку smbus.
SPIподдерживают 11 выводов общего назначения. С помощью этого интерфейса можно настроить подключение нескольких устройств с помощью одной группы контактов.
Для работы понадобятся плата Raspberry Pi, светодиод, резистор на 200 Ом и соединительные провода. Анод светодиода (длинная ножка) нужно подключить через резистор к одному из цифровых выводов, например GPIO24, катод (короткая ножка) – к земле. Макет подключения представлен на рисунке. Резистор в данной схеме нужен для того, чтобы уберечь светодиод от перегорания. Выбрать правильный номинал можно пользуясь законом Ома R=U/I. Плата работает от напряжения 3,3В. Номинал, который будет получен по формуле – минимальный, можно выбирать сопротивление больше, но в этом случае яркость светодиода будет несколько ниже.
Теперь нужно написать программу. Код будет написан в установленной версии Python 2. Для этого нужно открыть среду Python 2 (IDLE) и нажать «новый файл».
В окно редактора нужно написать скетч, который заставит светодиод загореться на 10 секунд и отключит его. В первую очередь нужно выбрать нумерацию выходов. Как говорилось выше, существует несколько типов нумерации. В данном случае будет использоваться нумерация BCM.
Сам код выглядит следующим образом:
from RPi import GPIO from time import sleep //первые 2 строки включают библиотеки для совместной работы с GPIO и sleep GPIO.setmode(GPIO.BCM) //этой строкой выбирается нумерация контактов GPIO.setup(24, GPIO.OUT) //чтобы управлять светодиодом или другим устройством, нужно задать OUT. Для того чтобы считывать сигнал сенсора, нужно ввести IN. GPIO.output(24, True) //подача истины на контакты sleep(10) //светодиод загорается на 10 секунд, ожидание GPIO.output(24, False) GPIO.cleanup() //сброс всех настроек портов, чтобы они не мешали следующей программе.Нужно нажать запуск программы с помощью F5 или меню Run/Run Module.
Код можно немного изменить, чтобы светодиод включался и выключался с определенной частотой. Для этого нужно добавить оператор while вместо строк GPIO.output и Sleep.В цикле нужно задать частоту, с которой будет мигать светодиод. В данном случае он будет мигать раз в 1 секунду.
while True: GPIO.output(24, True) sleep(1) GPIO.output(24, False) sleep(1)Большим недостатком такой программы будет то, что она будет повторяться бесконечно и остановить штатным методом ее будет невозможно. Для этого нужно ввести дополнительно конструкцию, прерывающую работу при наборе на клавиатуре комбинации Ctrl+C.
try: while True: GPIO.output(24, True) sleep(0.5) GPIO.output(24, False) sleep(0.5) except KeyboardInterrupt: print 'program stop'Программу нужно сохранить, нажав ctrl+S. Затем нужно нажать F5, светодиод начнет мигать с периодичностью раз в секунду. Чтобы остановить выполнение программы, нужно нажать ctrl+C.
В этой статье мы приступили к новой большой теме и сделали первые шаги в программировании на Python под Raspberry с использование GPIO. Возможности микроконтроллера существенно превышают привычный Arduino, поэтому для создания по-настоящему умных устройств придется осваиваться с новыми инструментами для работы с периферией. В дальнейших статьях мы продолжим наши эксперименты.
Разделы
» Ваз
» Обзор
» Новости
Календарь
Архив
О сайте
ПОПУЛЯРНОЕ
РЕКЛАМА
www.school4mama.ru © 2016. Запчасти для автомобилей Шкода