Raspberry Pi: первое знакомство. Урок 4. Работа с GPIO, мигание светодиодом, Python
Продолжаем серию уроков-инструкций по Raspberry Pi: для начинающих.
Сегодня четвертый урок, на котором мы поработаем с портами GPIO, в частности помигаем светодиодом в разных режимах.
Урок ориентирован на начинающих пользователей и представлен в текстовом и видео-форматах.
Видео четвертого урока:
Также рекомендуем ознакомиться с:
- вводными замечаниями по Rasberry Pi
- первым уроком по установке ОС Raspbian
- вторым уроком по настройке Wi-Fi, Pi Store и LibreOffice
- третьим уроком по работе с консолью, apt-get, скриншотами и удаленным управлением
Для урока нам понадобится:
- плата Raspberry Pi;
- кабель питания;
- USB-клавиатура;
- USB-мышь;
- монитор или телевизор с HDMI/RCA/DVI интерфейсом;
- кабель, один конец которого RCA или HDMI, а другой соответствует вашему монитору;
- SD-карта с уже установленной ОС Raspbian (как ее установить);
- светодиод;
- кнопка;
- резистор на 220 Ом
- 3 провода «мама-папа»
- 2 провода «папа-папа».
Программирование Raspberry Pi GPIO на языке Python
Для сегодняшнего урока мы выбрали язык программирования Python.
Python — современный объектно-ориентированный язык. Он наиболее часто используется для программирования GPIO на Raspberry Pi. Python входит в состав операционной системы Raspbian.
Сборка модели
Для работы нам потребуется собрать следующую схему:

Схема подключения светодиода и кнопки к Raspberry Pi
Обратите внимание, что порты GPIO на Raspberry Pi не подписаны, полезно иметь распечатанную распиновку.

Распиновка Raspberry Pi. Схема с ledgerlabs.us

Собранная модель со светодиодом и кнопкой
Управление светодиодом на Raspberry Pi из консоли
Заходим в LXTerminal и набираем:
sudo python
После этого вместо имени пользователя в начале строки должно отобразиться >>>.
Вводим следующие строки:
import RPi.GPIO as GPIO #импорт библиотеки
GPIO.setmode(GPIO.BOARD) #"включение" GPIO
GPIO.setup(7, GPIO.OUT) #объявление 7-го пина как выход
Затем для включения светодиода можно использовать команду
GPIO.output(7, 1)
А для выключения
GPIO(output(7, 0)
После работы с GPIO желательно выполнить команду
GPIO.cleanup()
Программа для мигания светодиодом на Raspberry Pi
Для автономной работы светодиода нам потребуется написать и запустить программу. Для этого откроем предустановленную программу IDLE 3 и в меню File нажмем New. В открывшемся окне мы можем писать программу.
Напишем:
import RPi.GPIO as GPIO #импорт библиотеки для работы с GPIO
import time #импорт библиотеки для ожидания
GPIO.setmode(GPIO.BOARD) #"запуск" GPIO
GPIO.setup(7, GPIO.OUT) #объявление порта 7 как выход
while True: #бесконечный цикл
____GPIO.output(7, 1) #включение светодиода
____time.sleep(1) #ожидание 1 секунды
____GPIO.output(7, 0) #выключение светодиода
____time.sleep(1) #ожидание 1 секунды
Сохраним программу в папке /home/pi.
Теперь мы можем запустить программу из LXTerminal с помощью команды
sudo python programname.py
Управление светодиодом с помощью кнопки
Поуправляем светодиодом с помощью внешней кнопки: когда кнопка зажата — светодиод горит, когда отжата — не горит.
Для этого подключим кнопку к порту 5.
Для управления нам потребуется следующая программа:
import RPi.GPIO as GPIO #импорт библиотеки GPIO
GPIO.setmode(GPIO.BOARD) #"включение GPIO"
GPIO.setup(7, GPIO.OUT) #объявление порта 7 как выход
GPIO.setup(3, GPIO.IN) #объявление порта 3 как вход
while True: #бесконечный цикл
____if GPIO.input(3) == False: #если кнопка зажата
________GPIO.output(7, 1) #включаем светодиод
____else: #иначе
________GPIO.output(7, 0) #выключаем
Управление светодиодом с клавиатуры
Сделаем еще одну программу. Она будет менять состояние светодиода при получении пустой строки и заканчиваться при получении другой строки.
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BOARD)
GPIO.setup(7, GPIO.OUT)
while True:
____str = input("Enter - включение, другое - выход ");
____if str != "":
________break
____else:
________GPIO.output(7, 1)
____str = input("Enter - выключение, другое - выход ");
____if str != "":
________break
____else:
________GPIO.output(7, 0)
GPIO.cleanup()
На этом четвертый урок по Raspberry Pi для начинающих закончен, продолжение следует!
Все уроки курса «Raspberry Pi: первое знакомство»
Урок 1: Устройство и установка ОС на Raspberry Pi.
Урок 2: Интернет, программы из Pi Store и LibreOffice.
Урок 3: Консоль, утилита apt-get, скриншоты, удаленное управление.
Урок 4: Работа с GPIO, мигание светодиодом, Python.
Где купить Raspberry Pi
Raspberry Pi и наборы с ней можно купить у официальных дилеров и их партнеров и в многочисленных интернет-магазинах. Наиболее привлекательные цены, постоянные спецпредложения и бесплатная доставка на сайтах китайских магазинов AliExpress и DealExtreme. Если нет времени ждать посылку из Китая — рекомендуем интернет-магазин Амперка.
Будьте аккуратны при выборе – в продаже имеются разные модели A, A+, B, B+, Raspberry Pi 2 и Raspberry Pi Zero.
Курс будет пополняться дополнительными уроками. Подпишитесь на нас ВКонтакте или Facebook, чтобы быть в курсе обновлений.
Автор: Александр А. Гагарин
сергей
10.07.2014
Какую работу выполняет резистор в этой схеме? Везде ставят его, но назначение его толкуют смутно.
Алексей
11.07.2014
все верно без резистора светодиоды не надо подключать I = U / R. 5 вольт / 220 ом = 0,022 ампер — нормальный ток для светодиода.
Dimon
23.08.2014
Сопротивление в цепи нужно снизить, иначе диоду долго не протянуть — нагреется и кирдык…
Александр
11.01.2015
вот мы программу запустили командой: sudo python programname.py, а как остановить ?
Занимательная робототехника
14.01.2015
Программа останавливается, когда вы закрываете LXTerminal. Также можно приостановить программу нажатием Ctrl+C.
EvGen
14.02.2015
Скажите, а будут еще уроки? И если будут, то когда?
Занимательная робототехника
16.02.2015
Добрый день, да, уроки «Raspberry Pi для начинающих» еще будут. Объем и сроки выхода пока точно не определены.
Михаил
08.03.2015
Скажите,а вот такая ситуация: Мне нужно при нажатии кнопки эмулировать кнопку клавиатуры Esc. Что мне нужно написать?
Занимательная робототехника
09.03.2015
Добрый день. Здесь есть описание как эмулировать нажатие клавиш на клавиатуре, снимая сигналы с GPIO
Михаил
09.03.2015
А для python и по понятнее есть?
Занимательная робототехника
09.03.2015
Попробуйте посмотреть здесь,здесь, здесь
что-то есть про эмуляцию клавиатуры на Python
Максим
17.05.2015
[quote]Управление светодиодом с помощью кнопки
Для этого подключим кнопку к порту 5.[/quote]
Для каких целей подключать кнопку к порту №5. Если в коде указано что выход осуществляется через 3-й порт?
Занимательная робототехника
17.05.2015
На 5-ом пине находится порт GPIO3 (это видно на схеме распиновки, рисунок выше)
styreyhber
29.01.2016
вы вводите людей в заблуждение, не путайте пины и порты
Для этого подключим кнопку к порту 5
GPIO.setup(7, GPIO.OUT) #объявление порта 7 как выход
GPIO.setup(3, GPIO.IN) #объявление порта 3 как вход
# for GPIO numbering, choose BCM
GPIO.setmode(GPIO.BCM)
# or, for pin numbering, choose BOARD
GPIO.setmode(GPIO.BOARD)
у вас объявлено BOARD значит называйте пинами, выводами, но не портами
AlexG
25.05.2015
Здравствуйте!
подскажите как реализовать Web-кнопку управления контактом GPIO (например gpio7), чтобы пока нажата мышкой кнопка светодиод включался, а при отпускании web-кнопки светодиод отключался ?
Занимательная робототехника
26.05.2015
Добрый день.
Можно почитать и ознакомится здесь
http://habrahabr.ru/post/162651/
http://www.instructables.com/id/Raspberry-Pi-Web-Server/
Egor_Bugor
15.12.2015
Здравствуйте !
Подскажите полное название проводов мама-папа в данном случае .
Занимательная робототехника
15.12.2015
Провода со штырьками с одной стороны и мама-контактами с другой….
пучок проводов 20 штук в Амперке
Можно купить с доставкой из Китая по почте:
пучок проводов 40 штук
Сергей
12.10.2016
Здравствуйте.
Подскажите пожалуйста, после выполнения программы, например с миганием, завершаю ее ctrl+c либо закрываю терминал. При этом выполнение программы не останавливается, светодиод продолжает мигать. Как решить эту проблему?
Имя (обязательно)
15.08.2017
GPIO.cleanup()
Денис
18.09.2017
Кнопку на прямую подключать нельзя. Нужен или резистор ставить или использовать внутренний подтягивающий резистор командой:
пример: GPIO.setup(18,GPIO.IN,pull_up_down=GPIO.PUD_UP).
Алексей
28.09.2017
Здравствуйте собираюсь использовать платку для управлением иллюминацией , допустим написал программу запустил. Как сделать чтобы программа автоматически запускалась при подаче питания?
Алексей
28.09.2017
хочу использовать raspberry-pi для создания новогодней иллюминации . Можно ли написать программку управления выходами , чтобы она затем сама запускалась при включении питания без каких либо манипуляций ?
Занимательная робототехника
29.09.2017
Для вашей цели лучше использовать Arduino. И плата дешевле, и при выключении/включении питания нужный вам эффект. Raspberry Pi — компьютер, а не микроконтроллер и требуется загрузка операционной системы. Читайте также статью-сравнение Arduino и Raspberry Pi.
Алексей
02.10.2017
Статью прочитал. Спасибо. И тем не менее малина пи у меня уже есть в руках. Можно ли написав программу мигания светодиодов настроить автозапуск чтобы плата грузила ОС и работала автономно.без клавиатуры и настройки.
Занимательная робототехника
03.10.2017
В отличие от Arduino, Raspberry Pi необходимо настроить для автоматического запуска программы. Необходимо включить программу в автозагрузку операционной системы.
Это можно сделать, например, так:
Сохраним программу в виде файла svetofor-rpi.py3 в корневом каталоге пользователя /home/pi.
Запустим терминал и после приглашения Pi@raspberrypi:~ $ наберем строку: gksudo leafpad /etc/xdg/autostart/Svetofor.desktop.
Это вызов текстового редактора leafpad и создание файла Svetofor.desktop в папке автозапуска.
В текстовом редакторе набираем:
[Desktop Entry]
Version=1.0
Encoding=UTF-8
Name=Svetofor
Comment=
Exec=sudo python /home/pi/svetofor-rpi.py3
Terminal=false
Type=Application
Сохраняем файл.
Основное здесь – строка, начинающаяся с Exec, которая запускает интерпретатор Python на выполнение программы svetofor-rpi.py3.
Аноним
19.11.2017
Здравствуйте,не могу никак запустить шаговые двигатели с помощью Raspberri pi 2 b model,выходит ошибка в команде принт. Что можно сделать?