Академический Документы
Профессиональный Документы
Культура Документы
ʞʟʝʠʡʪʤ
ʞʟʝʔʙ ʡʝʑ
ː˃
ʗʒʟʢʧʙʗǡ
ʗʜʠʡʟʢʛʔʜʡʪǡ
ʒʏʓʕʔʡʪ
ˋˏːˑˆˑˈ
ˇ˓˖ˆˑˈ
20
20 EASY
PROJECTS
S A N F RA N C I S C O
Руи Сантос и Сара Сантос
20 простых проектов
на RASPBERRY PI
ИГРУШКИ, ИНСТРУМЕНТЫ, ГАДЖЕТЫ
и многое другое
Электронное издание
Перевод с английского
М. А. Федотенко
Москва
Лаборатория знаний
2020
УДК 087.5:004
ББК 32.816
С18
Сантос Р.
С18 20 простых проектов на Raspberry Pi○ . Игрушки,
R
Знакомство со светодиодами. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
Подбор подходящего резистора . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
Сборка схемы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
Программирование . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
• Написание скрипта . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
• Запуск скрипта . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
Идеи для продолжения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
Проект 2. Кнопочный светодиодный фонарик . . . . . . . . . . . . . . . . . . . . . 69
Знакомство с переключателями и кнопками . . . . . . . . . . . . . . . . . . . . . . . 69
Сборка схемы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
Программирование . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
Идеи для продолжения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
Проект 3. Регулятор яркости светодиода . . . . . . . . . . . . . . . . . . . . . . . . . . 75
Знакомство с потенциометрами . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
Чтение аналоговых сигналов с помощью Raspberry Pi. . . . . . . . . . . . . . . 76
• Аналого-цифровые преобразователи. . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
• Широтно-импульсная модуляция . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
Сборка схемы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
Программирование . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
• Написание скрипта . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
• Запуск скрипта . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
Идеи для продолжения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
Проект 4. Графический пользовательский интерфейс для
управления многоцветным светодиодом . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
Знакомство с RGB-светодиодами . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
Сборка схемы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
Программирование . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
• Управление интенсивностью цвета и закрытие окна . . . . . . . . . . . . 90
• Проектирование пользовательского интерфейса с помощью
Tkinter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
• Запуск скрипта . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
Идеи для продолжения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
Проект 5. Радужная светодиодная лента . . . . . . . . . . . . . . . . . . . . . . . . . . 95
Знакомство с адресуемой лентой RGB-светодиодов WS2812B . . . . . . 95
Знакомство с преобразователем логического уровня . . . . . . . . . . . . . . . . 97
Сборка схемы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
Программирование . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
• Установка библиотеки WS281X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
• Подключение интерфейса SPI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
• Написание скрипта . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
• Запуск скрипта . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
Идеи для продолжения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
Оглавление
7
ДИСПЛЕИ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
Проект 6. Отображение напоминаний на ЖК-дисплее . . . . . . . . . . . . . 111
Знакомство с ЖК-дисплеями . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
• Пайка штыревого разъема . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
• Назначение выводов ЖК-модуля . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
Сборка схемы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
Программирование . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
• Подключение библиотеки Python для символьных ЖК-
дисплеев . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
• Вывод символьного сообщения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
• Добавление дополнительных функций. . . . . . . . . . . . . . . . . . . . . . . . . . 118
• Прокрутка сообщения напоминания . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
• Запуск скрипта . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
Идеи для продолжения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
Проект 7. Мини-устройство прогноза погоды. . . . . . . . . . . . . . . . . . . . . . 125
Знакомство с OLED-дисплеями . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
Использование API-сервиса OpenWeatherMap . . . . . . . . . . . . . . . . . . . . . 126
• Структура синтаксиса JSON. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
• Создание API-запроса. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
Сборка схемы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
Программирование . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
• Установка библиотеки для OLED-дисплея . . . . . . . . . . . . . . . . . . . . . . 133
• Активация протокола I2C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
• Написание скрипта . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
• Запуск скрипта . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
Идеи для продолжения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
Проект 8. Игра в Pong с Sense HAT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
Знакомство с Pong . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
Знакомство с платой расширения Sense HAT для Raspberry Pi . . . . . . 142
• Монтаж платы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
• Применение эмулятора платы Sense HAT . . . . . . . . . . . . . . . . . . . . . . . 143
Работа с функциями и управлением Sense HAT. . . . . . . . . . . . . . . . . . . . . 144
• Управление светодиодной матрицей . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
• Чтение данных с джойстика . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
Программирование . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
• Написание скрипта . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
• Запуск скрипта . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
Идеи для продолжения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
ДАТЧИКИ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
Проект 9. Сенсорная погодная станция «все-в-одном» . . . . . . . . . . . . 159
Sense HAT как метеостанция. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
• Датчик температуры . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
• Датчик влажности . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160
• Датчик атмосферного давления. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160
Оглавление
8
Благодарности
Мы хотим поблагодарить команду No Starch Press, которая проделала
такую огромную работу по созданию этой книги. Особая благодар-
ность Лиз Чэдвик за приглашение написать эту книгу и за ее беско-
нечное терпение, проявленное при редактировании книги, написанной
на неродном нам английском языке. Мы также хотим поблагодарить
Лорел Чун за ее внимание к деталям и за красивый макет этой кни-
ги. Спасибо Лесу Паундеру за его технический вклад и предложения.
Огромная благодарность Фонду Raspberry Pi за разработку этого
крошечного, но мощного компьютера, сделавшего электронику и про-
граммирование гораздо доступнее для широкой публики.
Мы также должны поблагодарить наших друзей и семью за их под-
держку на протяжении всего этого приключения. И наконец, мы хо-
тели бы поблагодарить сообщество Random Nerd Tutorials, которое,
хотя и косвенно, но тоже способствовало выходу этой книги.
О книге
«20 простых проектов на Raspberry Pi» — это коллекция из 20 про-
ектов, создаваемых с использованием Raspberry Pi. Мы считаем, что
лучший способ открывать для себя новые направления — это прак-
тика, а книга с проектами — отличный способ начать работу.
Книга начинается с быстрого введения в Raspberry Pi и язык
программирования Python, а затем переходит к проектам. Она при-
держивается концепции обучения на практике, а это значит, что вам
не придется тратить долгие часы на изучение теории, прежде чем
создать что-то свое и действительно классное.
Вы будете учиться, создавая забавные интерактивные проекты,
такие как домашняя система наблюдения и управляемый по Wi-Fi
робот. Вы также разработаете удобные пользовательские интерфейсы
для управления электроникой, создадите проекты для Интернета ве-
щей, разработаете веб-сайт, придумаете и реализуете свои собствен-
ные игры и многое другое.
Не переживайте, если у вас нет опыта программирования или сбор-
ки схем. В каждом проекте даются пошаговые инструкции по сборке
схем и код для программирования Raspberry Pi. Вы можете перепе-
чатывать код из книги или перейти на сайт http://pilotlz.ru/books/
files/10857/ и скачать его оттуда.
Ваше обучение Raspberry Pi не должно ограничиваться предложен-
ными в книге проектами. С этой целью в каждом из них есть раздел
«Идеи для продолжения», где мы предлагаем решения по дальней-
шему развитию ваших проектов и обобщению понятий, изученных
Введение
14
Структура книги
Книга разделена на семь частей. Первая часть «Руководство для на-
чинающих» знакомит читателя с Raspberry Pi; ее нужно обязательно
прочитать, чтобы правильно настроить свою Pi. В последующих ча-
стях содержатся сами проекты. Расскажем кратко о каждой части.
Руководство для начинающих. В этой части мы расскажем о том,
что вам нужно, чтобы начать работу с Raspberry Pi и настроить ее
при первом подключении. Мы также познакомим вас с основами
языка программирования Python, используемого в этой книге.
Структура книги
15
Возможности использования
Raspberry Pi
Так в чем же преимущество Raspberry Pi, если она похожа на обыч-
ный компьютер, но имеет ограничения? В том, что Pi дает вам свобо-
ду экспериментировать так, как вы не смогли бы или побоялись экс-
периментировать со своим компьютером. Компьютеры стоят дорого,
и их гораздо сложнее чинить, поэтому вы вряд ли захотите лишний
раз разбирать их, не будучи уверенными на 100% в том, что именно
вы делаете. Но, как сказал в интервью BBC News Линус Торвальдс
(основатель ОС Linux), c Raspberry Pi вы можете «позволить себе
ошибаться». Вы можете играть с ее компонентами и программным
обеспечением и не переживать, что сломаете дорогую вещь или по-
теряете все свои важные файлы!
С Pi вы можете экспериментировать в двух направлениях.
Написание своих собственных программ. Pi поставляется с на-
бором бесплатных инструментов для написания программного обе-
спечения. Если вы допустили ошибку, то можете просто все стереть
и начать заново.
Создание собственных электронных проектов. На плате Raspberry
Pi есть порты ввода-вывода GPIO, к которым можно подключать
датчики и другие электронные устройства для взаимодействия с ре-
альным миром. Вы можете создавать полезные вещи, и они будут
работать круглосуточно, не тратя много электроэнергии.
Можно бесконечно перечислять возможности Raspberry Pi. Вот
только некоторые примеры проектов, созданных людьми в разных
уголках мира:
• игровая ретро-консоль для старых аркадных игр;
• суперкомпьютер, собранный путем соединения нескольких
Raspberry Pi;
• облачный сервер для хранения ваших данных и доступа к ним;
• медиацентр для воспроизведения музыки и видео на телевизоре;
• система «Умный дом» для управления разными домашними
устройствами;
• множество интересных и полезных роботов, таких как роботы-
фермеры и автономные роботы-машины.
Чтобы увидеть действительно классный проект с Pi, взгляните
на скульптуру SeeMore (рис. 0.2), приводимую в движение 256-уз-
ловым кластером Raspberry Pi. Она демонстрирует всю красоту па-
раллельных алгоритмов.
Руководство для начинающих
20
1
Распиновка — это разговорное название распайки электронных схем, которое при-
шло из практики прототипирования без пайки. Сегодня в большинстве случаев
достаточно соединить гнезда и штекеры контактов. — Прим. перев.
Знакомство с Raspberry Pi и ее компонентами
21
Характеристики Pi 1 Pi 1 Pi 2 Pi 3
Модель В Модель В+ Модель В Модель В
Процессор 700 МГц, 700 МГц, 900 МГц, че- 1,2 ГГц, четы-
одноядерный одноядерный тырехъядер- рехъядерный
ARMv6 ARMv6 ный ARMv7 ARMv8
Оперативная память 512 Мб 512 Мб 1 Гб 1 Гб
USB-порты 2 4 4 4
Порты GPIO 26 40 40 40
Порт Ethernet + + + +
Разъем HDMI + + + +
Карта памяти SD microSD microSD microSD
Wi-Fi – – – +
Bluetooth – – – +
Цена $35 $25 $35 $35
Разъем питания MicroUSB MicroUSB MicroUSB MicroUSB
Знакомство с Raspberry Pi
и ее компонентами
Давайте поближе познакомимся с платой Raspberry Pi 3 модели В
(рис. 0.4).
Итак, модель В состоит из следующих компонентов:
• USB-порты для подключения периферийных устройств, таких
как мышь и клавиатура;
• порт Ethernet для подключения Raspberry Pi к Интернету;
• аудиоразъем Audio jack (3,5 мм) для подключения аудио-
устройств;
Руководство для начинающих
22
ПРИМЕЧАНИЕ
Вы также можете запускать свою Raspberry Pi через компьютер
в так называемом безголовом режиме (headless mode), то есть
без клавиатуры, мыши или монитора.
1
Эти магазины в Россию доставляют не весь ассортимент, поэтому мы рекоменду-
ем рассмотреть отечественные компании, например «Амперка». — Прим. перев.
2
Для поддержки кириллицы лучше приобрести ЖК-дисплей российского произ-
водства НЭЛТ или аналог с указанием такой поддержки. — Прим. ред.
Руководство для начинающих
26
ПРИМЕЧАНИЕ
Компоненты, обозначенные *, мы рекомендуем покупать сразу на-
борами. Вам понадобится много таких деталей, а в наборах они
будут дешевле.
ПРИМЕЧАНИЕ
Для Raspberry Pi существуют также версии операционных систем
Android и Windows, но все же они не так хорошо работают с Pi,
как Linux. Поэтому мы будем использовать именно Linux.
Загрузка NOOBS
Подключение Raspberry Pi
ПРИМЕЧАНИЕ
Если вы по какой-то причине еще не установили NOOBS на кар-
ту памяти microSD, вернитесь в раздел «Загрузка NOOBS», чтобы
вспомнить, как это делается.
ПРИМЕЧАНИЕ
Очень важно выбрать правильную раскладку клавиатуры. Иначе,
когда вы печатаете, на экране будут появляться не те символы,
что вы набираете.
Настройка Raspberry Pi в качестве настольного компьютера
35
ПРИМЕЧАНИЕ
Установочное окно появляется только при первом запуске Pi. При
последующих запусках вы сразу будете попадать на рабочий стол.
В левой части панели задач есть кнопка вызова меню панели задач
и несколько значков быстрого запуска программ (рис. 0.19). Пона-
жимайте эти значки и посмотрите, какие программы они запускают.
1
Файловый менеджер — это программа для работы с файлами, хранящимися на ва-
шем компьютере. В нем ваша файловая система представлена как структура папок,
лежащая в одной (корневой) папке. — Прим. перев.
Настройка Raspberry Pi в качестве настольного компьютера
39
ПРИМЕЧАНИЕ
На Python 2 мы будем программировать только в проекте 12, по-
тому что в нем используются пакеты, которых не было в Python 3
на момент написания этой книги.
Интегрированная среда
разработки Python 3
Чтобы писать код на Python, вам понадобится интегрированная сре-
да разработки Python 3 IDLE (Integrated DeveLopment Environment).
Она устанавливается автоматически при установке дистрибутива
Raspbian, поэтому никаких дополнительных действий от вас не по-
требуется.
Подключите к вашей Pi монитор, мышь и клавиатуру и запусти-
те IDLE. Для этого выберите в главном меню панели задач пункт
Интегрированная среда разработки Python 3
43
>>> 2 + 2
4
>>>
Оператор Описание
== Равно
!= Не равно
> Больше
< Меньше
>= Больше или равно
<= Меньше или равно
>>> 2 > 4
Основные команды Python
45
False
>>>
>>> 2 < 4
то получите результат:
True
>>>
>>> my_variable = 10
>>> my_variable
10
>>>
Редактор Python
Оболочка Python удобна для экспериментов с простыми фрагмента-
ми кода, но в нее можно вводить код только по одной строке. Чтобы
написать более серьезную программу (скрипт), нужно собрать вместе
Ваша первая программа на Python
47
ПРИМЕЧАНИЕ
Все скрипты, написанные на Python, должны иметь расширение
.py. Не забывайте добавлять расширение к имени файла.
1
Далее вам встретятся термины «закомментируйте» и «раскомментируйте» строку.
Это означает добавить или убрать метку хэша в начале строки. — Прим. ред.
Ваша первая программа на Python
49
print('Загадайте фрукт:')
print('клубника, банан или киви?')
color = input ('Введите цвет загаданного фрукта: ')
1 if (color == 'красный'):
2 print('Загаданный фрукт — клубника.')
3 elif (color == 'желтый'):
print('Загаданный фрукт — банан.')
4 elif (color == 'зеленый'):
print('Загаданный фрукт — киви.')
5 else:
print('Введено неверное значение.')
ПРИМЕЧАНИЕ
Стандартный отступ в коде на языке Python — это именно четыре
пробела, а не табуляция. Однако в IDLE вы все же можете нажать
клавишу TAB — нужные четыре пробела будут вставлены автома-
тически.
number = 1
while(number <= 10):
print(number)
number = number + 1
number = 1
for number in range(1,11):
print(number)
5 while running:
print('Операции')
print('1 = Сложение')
print('2 = Вычитание')
print('3 = Умножение')
print('4 = Деление')
print('5 = Выход из программы')
ПЕРЕЧЕНЬ КОМПОНЕНТОВ:
• Raspberry Pi
• Макетная плата
• Красный светодиод диаметром 5 мм
• Резистор 330 Ом
• Соединительные провода
1
Мигание светодиодом
Вот вы и добрались до своего первого проек-
та с Raspberry Pi. В этом проекте вы подключите
к вашей Pi светодиод, напишете скрипт на Python
и с его помощью заставите светодиод мигать.
Научиться мигать светодиодом, используя пор-
ты GPIO, — очень важный шаг в освоении Pi. Как
только вы поймете, как управлять светодиодом,
вы сможете управлять практически любыми под-
ключенными устройствами, будь то мотор, лампа
или даже тостер.
1
Их еще называют колодкой универсальных контактов GPIO. — Прим. перев.
Окончание табл.
Функция Имя Номер Номер Имя Функция
вывода вывода
SPI_MISO GPIO 9 21 22 GPIO 25 GPIO_GEN6
SPI_CLK GPIO 11 23 24 GPIO 8 SPI_CE0_N
GND 25 26 GPIO 7 SPI_CE1_N
2 2
I C ID EEPROM DNC 27 28 DNC I C ID EEPROM
GPIO 5 29 30 GND
GPIO 6 31 32 GPIO 12
GPIO 13 33 34 GND
GPIO 19 35 36 GPIO 16
GPIO 26 37 38 GPIO 20
GND 39 40 GPIO 21
ПРЕДУПРЕЖДЕНИЕ
Выводы GPIO рассчитаны на работу при напряжении 3,3 В. Поэто-
му, если вы подадите на них более высокое напряжение, то мо-
жете серьезно повредить свою Pi.
Знакомство со светодиодами
Светодиоды бывают самых разных размеров, цветов и форм. Неко-
торые из них даже могут смешивать цвета, в результате чего мож-
но получить почти любой цвет. В этом проекте вы будете работать
с простым 5-миллиметровым красным светодиодом.
Мигание светодиодом
62
ПРИМЕЧАНИЕ
Мы рекомендуем вам приобрести набор резисторов с мощностью
рассеивания 1 / 4 Вт. Он будет содержать резисторы с довольно
широким диапазоном сопротивления и подойдет для решения
большинства ваших задач.
Сборка схемы
Ну вот, теперь вы уже готовы собрать свою первую схему. Во всех
проектах этой книги используется беспаечная макетная плата, а по-
тому для подключения компонентов к ней вам не понадобятся ни па-
яльник, ни припой. Это гораздо проще и дешевле. Если вы никогда
раньше не работали с беспаечной макетной платой, обязательно про-
чтите раздел «Как устроена макетная плата?», который вы найдете
чуть дальше.
1
В России продаются также резисторы с пятью полосками. Для них номинал —
первые три (а не две) полоски. — Прим. перев.
Мигание светодиодом
64
Программирование
Привыкайте хранить ваши проекты упорядоченно. С этой целью
создайте на рабочем столе папку с именем Projects и сохраняйте
в ней все свои проекты из этой книги. Для начала создайте внутри
этой папки новую папку с именем LEDs и сохраняйте в ней скрипты,
относящиеся к проектам со светодиодами.
Ваш первый проект «Мигание светодиодом» должен работать так:
1. Светодиод загорается на одну секунду (для порта GPIO 25
установлен режим HIGH).
2. Светодиод отключается на одну секунду (для порта GPIO 25
установлен режим LOW).
3. Светодиод снова включается на одну секунду (для порта GPIO
25 установлен режим HIGH).
4. Светодиод снова отключается на одну секунду (для порта
GPIO 25 установлен режим LOW).
Этот алгоритм должен выполняться до тех пор, пока вы не оста-
новите программу.
Во всех проектах этой книги мы будем управлять портами GPIO
Raspberry Pi, используя библиотеку Python gpiozero. Библиотека
Мигание светодиодом
66
Написание скрипта
Чтобы создать новый скрипт, запустите Python 3 (IDLE) и выбери-
те пункт меню File→New File. Скопируйте приведенный ниже код
в редактор Python и сохраните скрипт с именем blinking_led.py
в папку LEDs. Напоминаем, что все скрипты можно скачать с сайта
http://pilotlz.ru/books/files/10857 /
5 while True:
#включаем светодиод на время, равное времени задержки
6 led.on()
print ('светодиод включен')
7 sleep(delay)
#выключаем светодиод на время, равное времени задержки
8 led.off()
print('светодиод выключен')
sleep(delay)
Запуск скрипта
ПЕРЕЧЕНЬ КОМПОНЕНТОВ:
• Плата Raspberry Pi
• Макетная плата
• Светодиод диаметром 5 мм
• Резистор 330 Ом
• Кнопочный переключатель
• Соединительные провода
2
Кнопочный светодиодный
фонарик
Этот светодиодный фонарик научит вас приме-
нять кнопочные переключатели и кнопки, что очень
важно для работы с электронными схемами. Вы
узнаете, как использовать переключатели в вашей
схеме для запуска некоторого события при нажа-
тии кнопки и прекращения события, когда кнопка
будет отпущена. В данном проекте событием бу-
дет включение светодиода.
Знакомство с переключателями
и кнопками
Переключатели нужны повсюду. С их помощью вы включаете свет,
регулируете скорость блендера, включаете микроволновую печь и так
далее. Существует множество различных переключателей, некоторые
из них вы можете постоянно видеть вокруг себя и использовать: кно-
почные переключатели, тумблеры, поворотные и магнитные переклю-
чатели. На рисунке 2.1 показано несколько типов переключателей,
которые обычно используются в электронике.
Переключатель может работать как прерыватель, прерывая элек-
трический ток, или как ответвитель, отводя ток в другую часть схе-
мы. В этом проекте будет использоваться простой кнопочный пере-
Кнопочный светодиодный фонарик
70
Сборка схемы
В этом проекте требуется, чтобы светодиод включался только при
нажатии кнопки, поэтому ваша Raspberry Pi должна различать, когда
кнопка нажата, а когда нет. Эту информацию Pi будет получать через
порты GPIO.
Чтобы собрать схему, выполните следующие шаги (в качестве при-
мера ориентируйтесь на рис. 2.3):
1. Соедините один из выводов GND на Raspberry Pi с синей ши-
ной GND на макетной плате.
2. Установите светодиод на макетной плате и подключите анод
светодиода к GPIO 25 через резистор 330 Ом, как уже делали в про-
екте 1. Соедините катод светодиода с синей шиной GND.
3. Вставьте ножки переключателя в отверстия на середине макет-
ной платы так, чтобы пары его ножек находились по разные стороны
от разделительной борозды. Убедитесь, что между верхней и нижней
парами нет связи. (Помните, что соединение отверстий в рядах раз-
рывается бороздой.)
Кнопочный светодиодный фонарик
72
Программирование
Этот скрипт должен инициировать разные события в зависимости
от того, нажата кнопка или отпущена. Приведенный ниже псевдо-
скрипт — упрощенная версия кода, изложенная на русском языке,
которая поможет вам понять скрипт на языке Python. Написание
псевдоскрипта — отличный способ сделать «набросок» вашей про-
граммы, описать и понять ее основные функции. Вот как выглядит
псевдоскрипт нашей будущей программы:
• Когда кнопка нажата — светодиод включается.
• Когда кнопка не нажата (то есть отпущена), светодиод остается
выключенным (или выключается, если был включен).
Чтобы создать новый скрипт, запустите Python 3 (IDLE) и вы-
берите пункт меню File→New File. Скопируйте приведенный
ниже код в редактор Python, а затем сохраните скрипт с именем
led_flashlight.py в папке LEDs (напоминаем, что можно скачать
все скрипты с сайта http://pilotlz.ru/books/files/10857 / ):
Идеи для продолжения
73
2 led = LED(25)
button = Button(2)
3 button.when_pressed = led.on
4 button.when_released = led.off
5 pause()
НЕОБХОДИМЫЕ ДЕТАЛИ:
• Raspberry Pi
• Макетная плата
• Потенциометр 10 кОм
• Микросхема MCP3008
• Светодиод диаметром 5 мм
• Резистор 330 Ом
• Соединительные провода
3
Регулятор яркости
светодиода
В этом проекте вы соберете регулятор силы света,
управляющий яркостью светодиода с помощью
потенциометра. Важность этого проекта заклю-
чается в том, что вы научитесь преобразовывать
с помощью Raspberry Pi входные аналоговые сиг-
налы в выходные сигналы с широтно-импульсной
модуляцией. Это будут очень полезные навыки
для будущих проектов и для вашего обучения ис-
пользованию Pi в целом.
Знакомство
с потенциометрами
Потенциометры находят широкое примене-
ние в повседневной жизни как регуляторы
мощности, например для управления гром-
костью радиоприемника, регулировки ярко-
сти дисплея, установки скорости вращения
вентилятора и многого другого. Вы буде-
те использовать потенциометр на 10 кОм Рис. 3.1. Потенциометр
(рис. 3.1). на 10 кОм
Регулятор яркости светодиода
76
Аналого-цифровые преобразователи
Окончание табл.
Вывод Обозначение Описание
6 CH5 Аналоговый вход (канал 5)
7 CH6 Аналоговый вход (канал 6)
8 CH7 Аналоговый вход (канал 7)
9 DGND Цифровое заземление
10 CS / SHDN Выбор ввода / выключение микросхемы
11 DIN Вход последовательных данных
12 DOUT Выход последовательных данных
13 CLK Синхронизация
14 AGND Аналоговое заземление
15 VREF Вход опорного напряжения
16 VDD Напряжение питания от +2,7 до 5,5 В
Широтно-импульсная модуляция
Сборка схемы
Для сборки этой схемы вам необходимо подключить к Pi светодиод,
микросхему MCP3008 и потенциометр, выполняя следующие шаги
(в качестве примера ориентируйтесь на рис. 3.6):
1. Соедините один из выводов GND на Raspberry Pi с синей ши-
ной GND на макетной плате.
2. Соедините контакт питания 3.3 V с красной шиной на макетной
плате.
3. Установите светодиод на макетной плате, подключив его длин-
ную ножку к GPIO 17 через резистор 330 Ом, а короткую ножку —
к GND-шине.
Регулятор яркости светодиода
80
MCP3008 Raspberry Pi
9 GND
10 GPIO 8
11 GPIO 10
12 GPIO 9
13 GPIO 11
14 GND
15 3.3 V
16 3.3 V
Программирование
81
ПРИМЕЧАНИЕ
Перед подачей питания убедитесь, что микросхема MCP3008 под-
ключена правильно, сверившись со схемой расположения выводов
на рис. 3.4. Иначе микросхема может быть повреждена.
Программирование
Raspberry Pi читает аналоговые сигналы от микросхемы MCP3008
через шину SPI, поэтому вам необходимо сначала включить ее.
В главном меню панели задач выберите Preferences→Raspberry Pi
Configuration. На вкладке Interfaces включите SPI (как показано
на рис. 3.7) и нажмите OK.
Ваш скрипт должен уметь:
• считывать сигналы с потенциометра через аналоговый вход ми-
кросхемы MCP3008;
• регулировать яркость светодиода с помощью ШИМ;
• изменять коэффициент заполнения сигнала ШИМ в соответ-
ствии с уровнем входного сигнала, считанного с потенциометра.
Написание скрипта
3 while True:
#сравниваем значение pot с текущими значениями
выхода потенциометра
4 if(pot.value < 0.001):
#если значение pot очень мало — выключаем
светодиод
5 led.value = 0
6 else:
#изменяем яркость светодиода в соответствии
со значением pot
led.value = pot.value
#выводим значение pot
print(pot.value)
#пауза на 0.1 секунды
sleep(0.1)
Запуск скрипта
ПЕРЕЧЕНЬ КОМПОНЕНТОВ:
• Raspberry Pi
• Макетная плата
• RGB-светодиод с общим катодом
• Резистор 330 Ом, 3 шт.
• Соединительные провода
4
Графический
пользовательский
интерфейс для
управления многоцветным
светодиодом
В этом проекте мы познакомим вас с многоцвет-
ным RGB-светодиодом, и вы узнаете, как создать
простой графический пользовательский интер-
фейс в Tkinter для управления электроникой.
Знакомство с RGB-светодиодами
RGB-светодиод — это три светодиода в одном (Red — красный,
Green — зеленый и Blue — синий). Комбинируя эти цвета, можно
получить практически любой цвет.
Используя RGB-светодиоды вы, разумеется, можете получить
чистый красный, зеленый или синий свет. Но если менять соот-
ношение интенсивностей элементарных светодиодов, можно по-
лучить любой другой цвет спектра. Например, чтобы получить
чистый синий свет, нужно установить синему светодиоду самую
высокую интенсивность, а зеленому и красному — самую низкую.
Для получения белого света вы должны установить всем трем све-
тодиодам самую высокую интенсивность. На рисунке 4.1 показана
Графический пользовательский интерфейс
86
Сборка схемы
Процесс подключения RGB-светодиода к Raspberry Pi на самом деле
прост и не слишком отличается от подключения обычного светодио-
да. Только в этом случае вам понадобятся три резистора, ограничи-
вающих ток, — по одному для светодиода каждого цвета.
Чтобы собрать схему, выполните следующие шаги (в качестве при-
мера ориентируйтесь на рис. 4.4):
1. Вставьте все четыре вывода светодиода в отверстия макетной
платы и подключите последовательно с каждым цветовым выводом
резистор 330 Ом.
2. Соедините GND с синей шиной макетной платы. Затем соеди-
ните RGB-светодиод с портами GPIO Raspberry Pi в соответствии
с таблицей ниже. Красный светодиод подключите к GPIO 23, катод
к GND, зеленый светодиод — к GPIO 24, синий — к GPIO 25. Про-
верьте правильность соединения по рис. 4.3.
RGB-светодиод Raspberry Pi
Первый вывод: красный GPIO 23
Второй вывод: катод GND
Третий вывод: зеленый GPIO 24
Четвертый вывод: синий GPIO 25
ПРИМЕЧАНИЕ
Если вы используете RGB-светодиод с общим анодом, подключите
самый длинный вывод (анод) к красной шине питания 3,3 В.
Графический пользовательский интерфейс
88
Программирование
Управлять RGB-светодиодом вы будете с помощью окна пользова-
тельского интерфейса в среде рабочего стола Raspbian. Для создания
такого окна вы будете использовать в вашем скрипте библиотеку
Tkinter. Tkinter уже установлена в вашей системе Raspbian, поэтому
вам просто нужно импортировать ее в свой скрипт.
В окне будут располагаться три слайдера (со значениями от 0
до 1) для управления яркостью красного, зеленого и синего свето-
диодов, а также кнопка закрытия для завершения программы. Регу-
лируя уровни яркости с помощью слайдеров, вы сможете изменять
цвет RGB-светодиода.
Чтобы создать новый скрипт, запустите Python 3 (IDLE) и выбе-
рите пункт меню File→New File. Скопируйте приведенный ниже код
в редактор Python, а затем сохраните скрипт с именем rgb_led_
Программирование
89
#закрываем окно
3 def close_window():
window.destroy()
#создаем окно
5 window = Tk()
window.title ('Управление RGB-светодиодом')
window.geometry ('300x200')
8 mainloop()
ПОЛЬЗОВАТЕЛЬСКИЕ ФУНКЦИИ
Для определения новой (пользовательской) функции используется
слово def, за ним следует имя, которое вы хотите задать функции,
и круглые скобки.
После скобок вы добавляете двоеточие (:), а затем указываете
вашей функции, какие инструкции ей нужно выполнять. Python
узнает, какие инструкции являются частью определения функции
с помощью двоеточия и отступов: каждая строка с отступом после
двоеточия является частью функции. Позже вы можете вызвать
эту функцию, то есть запустить выполнение инструкций, из кото-
рых она состоит. Для этого нужно только ввести в код имя этой
функции.
Проектирование пользовательского
интерфейса с помощью Tkinter
Запуск скрипта
ПЕРЕЧЕНЬ КОМПОНЕНТОВ:
• Raspberry Pi
• Макетная плата
• Адресуемая лента RGB-светодиодов WS2812B
• Модуль преобразования логического уровня BSS 138
• Два потенциометра по 10 кОм
• Микросхема MCP3008
• Кнопочный переключатель
• Трехконтактный соединитель
• Соединительные провода
НЕОБХОДИМОЕ ПО:
• Библиотека WS281X
5
Радужная
светодиодная лента
В этом проекте вы создадите эффект радуги на ос-
нове адресуемой ленты RGB-светодиодов. Кнопка
и два потенциометра — вот все, с помощью чего
вы будете включать и выключать эффект радуги,
а также управлять ее скоростью и яркостью.
ПРИМЕЧАНИЕ
Мы обнаружили, что вывод 5 V Raspberry Pi (например, GPIO 2 или
GPIO 4) способен работать с лентой до 20 светодиодов. Но если
у вас в проектах будет задействована более длинная лента,
то придется использовать внешний источник питания на 5 В для
обеспечения достаточного тока.
Знакомство с преобразователем
логического уровня
Преобразователь логического уровня может преобразовывать сигна-
лы с уровнем 3,3 В в сигналы с уровнем 5 В. Из множества типов
преобразователей логического уровня мы выбрали для этого проекта
двухканальный двунаправленный модуль преобразования логического
уровня (рис. 5.3). Такой же модуль вы можете найти в Интернете
по запросу «модуль преобразования логического уровня bss138».
Двунаправленность этого модуля позволяет конвертировать данные
в обоих направлениях: с 3,3 до 5 В и с 5 до 3,3 В. В этом проекте
вам не нужно преобразовывать 5 В в 3,3 В, но более универсальная
модель в вашем наборе инструментов (по сравнению с однонаправ-
ленной моделью) может пригодиться для будущих проектов. Кроме
того, этот преобразователь логического уровня имеет два канала: ка-
нал 1 и канал 2. Это тоже задел на будущее, потому что в этом про-
екте вы будете использовать только один из каналов для управления
выводом DATA светодиодной ленты.
Скорее всего, выводные контакты к вашему модулю будут постав-
ляться отдельно. Поэтому, чтобы присоединить модуль к макетной
плате, вам придется припаять к нему контакты. Отломите два ряда
по шесть контактов и припаяйте по одному контакту к каждому ма-
ленькому отверстию.
На одной стороне модуля расположены контакты с меньшим на-
пряжением (левая сторона рис. 5.3). Сюда подключается оборудова-
ние, работающее от 3,3 В. На другой стороне — контакты с большим
напряжением (правая сторона рис. 5.3). Сюда присоединяется все,
что должно работать от 5 В. Для этого проекта вам нужно задей-
ствовать один из выводов, отмеченных красной стрелкой, так как вы
хотите преобразовать данные с уровнем 3,3 В в уровень 5 В.
Радужная светодиодная лента
98
Сборка схемы
ПРЕДУПРЕЖДЕНИЕ
Помните, что нельзя подключать 5 В непосредственно к портам
GPIO вашей Pi, так как это может повредить ее.
Сборка схемы
99
ПРИМЕЧАНИЕ
Чтобы идентифицировать выводы MCP3008, расположите микро-
схему так, чтобы она была обращена своей лицевой стороной
к вам и полукруглый вырез был вверху. В таком положении пер-
вый вывод — верхний левый, а последний — верхний правый.
Полное описание выводов MCP3008 см. в разделе «Аналого-циф-
ровые преобразователи» в проекте 3.
MCP3008 Вывод
1 Выходной контакт одного из потенциометров
2 Выходной контакт другого потенциометра
9 GND
10 GPIO 8
11 GPIO 10
12 GPIO 9
13 GPIO 11
14 GND
15 3.3 V
16 3.3 V
Преобразователь Raspberry Pi
логического уровня
TX1 (канал 2) GPIO 18
LV 3.3 V
GND GND
Преобразователь Присоединить к
логического уровня
TX0 (канал 2) выводу Data (средний вывод) ленты RGB-светодиодов
HV 5V
GND GND
Программирование
101
ПРИМЕЧАНИЕ
Если вы решите выполнить этот проект с лентой в 20 и более све-
тодиодов, вам нужно будет присоединить вывод 5 V ленты к вы-
воду 5 V внешнего источника питания, а GND внешнего источника
питания к GND шине макетной платы.
Программирование
Этот скрипт для управления отдельными светодиодами основывает-
ся на использовании библиотеки WS281X, поэтому вам необходимо
установить эту библиотеку, а затем подключить последовательный
периферийный интерфейс (Serial Peripheral Interface — SPI), который
должен связать светодиодную ленту с Pi.
pi@raspberrypi:~ $ cd ~ / Desktop
Радужная светодиодная лента
102
Написание скрипта
hdmi_force_hotplug = 1
hdmi_force_edid_audio = 1
pos -= 85
return Color(255 - pos * 3, 0, pos * 3)
else:
pos -= 170
return Color(0, pos * 3, 255 - pos * 3)
#объявляем ленту
strip.begin()
0 while True:
if running_animation == True:
#задаем яркость светодиодной ленты
strip.setBrightness(int(pot_brightness.value*255))
rainbowCycle(strip)
button.when_pressed = function_name
Запуск скрипта
ПЕРЕЧЕНЬ КОМПОНЕНТОВ:
• Плата Raspberry Pi
• Макетная плата
• Hitachi HD44780-совместимый ЖК-дисплей 16×2
• Потенциометр на 10 кОм
• Соединительные провода
НЕОБХОДИМОЕ ПО:
• Библиотека Adafruit_CharLCD
6
Отображение напоминаний
на ЖК-дисплее
В этом проекте вы подключите символьный
жидкокристаллический (ЖК) дисплей к плате
Raspberry Pi, чтобы отображать на этом экране
прокручивающиеся сообщения-напоминания. Вы
начнете с вывода статического текста для корот-
ких сообщений, а затем научитесь отображать
на экране прокручивающийся текст для более
длинных сообщений.
Знакомство с ЖК-дисплеями
Жидкокристаллические дисплеи (Liquid Crystal Display — LCD) —
это самые простые и дешевые дисплеи, которые встречаются в по-
вседневной жизни. ЖК-дисплеи можно найти в привычных бытовых
устройствах, таких как торговые автоматы, калькуляторы (рис. 6.1),
парковочные счетчики и принтеры. Они идеально подходят для ото-
бражения текста и небольших значков.
Основная характеристика ЖК-дисплея — это количество строк
и столбцов символов, которые помещаются на экране. ЖК-дисплей
16 × 2 может отобразить 2 строки по 16 символов в каждой. Встре-
чаются и размеры от 8 × 1 до 40 × 4.
Отображение напоминаний на ЖК-дисплее
112
ПРЕДУПРЕЖДЕНИЕ
Порты GPIO платы Raspberry Pi рассчитаны на 3,3 В, а выводы
большинства ЖК-дисплеев — на 5 В. Это не будет проблемой,
если вы только посылаете данные от Pi к модулю и не считываете
данные с модуля на Pi. Не подключайте вывод R / W 5-вольтового
дисплея напрямую к Pi. Этот вывод отправляет данные с уровнем
5 В, и скорее всего это сожжет вашу Pi.
Сборка схемы
Теперь, когда ваш ЖК-дисплей готов к работе, можно приступить
к сборке схемы этого проекта. Подключайте ЖК-дисплей к Pi со-
гласно шагам 1–4 и ориентируясь на схему, показанную на рис. 6.4.
1. Подключите 5 V и GND Raspbery Pi к шинам макетной платы.
2. Для питания ЖК-дисплея подайте 5 В от шины питания
к выводам 2 (VDD) и 15 (LEDA) ЖК-дисплея. Соедините выводы
1 (VSS), 5 (R / W) и 16 (LEDK) ЖК-дисплея с шиной GND на ма-
кетной плате.
3. Установите подстроечный потенциометр для регулировки кон-
трастности: один из крайних его контактов подключите к GND,
а другой — к 5 V. Затем средний контакт подключите к выводу 3
(V0) дисплея.
Программирование
115
ЖК-дисплей Raspberry Pi
4 (RS) GPIO 27
6 (E) GPIO 22
11 (DB4) GPIO 25
12 (DB5) GPIO 24
13 (DB6) GPIO 23
14 (DB7) GPIO 18
Программирование
Прежде чем писать скрипт для отображения сообщений на ЖК-
дисплее, необходимо установить библиотеку Python Adafruit_
CharLCD для символьных ЖК-дисплеев. Эта библиотека содержит
набор функций, делающих управление ЖК-дисплеем намного проще.
Отображение напоминаний на ЖК-дисплее
116
pi@raspberrypi:~ $ cd ~ / Desktop
pi@raspberrypi:~ / Desktop $ mkdir Libraries
pi@raspberrypi:~ / Desktop $ cd Libraries
pi@raspberrypi:~ / Desktop / Libraries $
#инициализация ЖК-дисплея
4 lcd = LCD.Adafruit_CharLCD(lcd_rs, lcd_en, lcd_d4, lcd_
d5, lcd_d6, lcd_d7, lcd_columns, lcd_rows, lcd_backlight)
1
У дисплеев этого типа не предусмотрена поддержка кириллицы «из коробки», по-
этому вам придется выводить текст через дополнительные символы или найти
пользовательскую библиотеку. Самое простое решение — использовать похожие
буквы латиницы ('РА \ хА0ОТАЕТ!'). — Прим. ред.
Отображение напоминаний на ЖК-дисплее
118
lcd_d6 = 23
lcd_d7 = 18
lcd_backlight = 4
#инициализация ЖК-дисплея
lcd = LCD.Adafruit_CharLCD (lcd_rs, lcd_en, lcd_d4, lcd_
d5, lcd_d6, lcd_d7, lcd_columns, lcd_rows, lcd_backlight)
7 lcd.clear()
lcd.home()
lcd.message(title)
ПРИМЕЧАНИЕ
В Python используется индексация с нуля — это значит, что все
индексы начинают счет с нуля. Для примера, первый символ стро-
ки имеет индекс 0.
Запуск скрипта
ПЕРЕЧЕНЬ КОМПОНЕНТОВ:
• Raspberry Pi
• Макетная плата
• OLED-дисплей размером 0,96 дюйма
• Соединительные провода
НЕОБХОДИМОЕ ПО:
• Библиотека Adafruit_SSD1306
7
Мини-устройство
прогноза погоды
В этом проекте вы создадите предсказатель по-
годы на день в выбранной вами местности. Вы
научитесь делать API-запросы, которые бывают
очень полезны для проектов, использующих ка-
кие-либо часто обновляемые данные, а также на-
учитесь управлять OLED-дисплеем.
Знакомство с OLED-дисплеями
В этом проекте используется органический светодиодный дисплей
(Organic Light-Emitting Diode — OLED) модели SSD1306: одно-
цветный, размером 0,96 дюйма, с разрешением 128 × 64 пикселей
(рис. 7.1). По сравнению с ЖК-дисплеем, в котором было зарезер-
вировано 5 × 8 пикселей для каждого символа, OLED-дисплей более
универсальный. Он позволяет выбирать, какие пиксели включать,
а какие выключать, в результате чего можно создавать любой текст
или изображение в любом месте экрана. OLED-дисплей также не тре-
бует подсветки экрана, что обеспечивает очень хорошую контраст-
ность при плохой освещенности. Кроме того, его пиксели потребляют
энергию, только пока они включены, благодаря чему OLED-дисплей
потребляет меньше энергии, чем LCD.
Обычно OLED-дисплеи имеют четыре вывода: GND, VCC, SCL
и SDA (см. рис. 7.1), но можно встретить модели с дополнительным
Мини-устройство прогноза погоды
126
ПРИМЕЧАНИЕ
Некоторые OLED-дисплеи используют SPI-протокол вместо I2C
и соответственно имеют другой набор выводов. Проверьте набор
выводов OLED-дисплея перед покупкой.
Использование API-сервиса
OpenWeatherMap
Программный интерфейс приложения (Application Programming
Interface — API) — это набор функций, написанных разработчи-
ками ПО для того, чтобы кто-либо мог использовать их данные
или сервисы. Например, в проекте OpenWeatherMap (https://
Использование API-сервиса OpenWeatherMap
127
ПРЕДУПРЕЖДЕНИЕ
Ключи API уникальны для пользователя и не следует ни с кем ими
делиться. В нашем случае любой, у кого есть ваш ключ API, может
только запрашивать погоду. Однако если вы, например, использу-
ете интерфейсы API социальных сетей, то у вас могут возникнуть
проблемы с приватностью — кто-то получит доступ к вашей личной
информации. Поэтому не делитесь вашими ключами API ни с кем.
ПРИМЕЧАНИЕ
Более подробно прочитать о получении информации о погоде
с помощью API можно по адресу https://openweathermap.org /
current
"temp":288.15,
"pressure":1020,
"humidity":93,
"temp_min":288.15,
"temp_max":288.15
},
"visibility":10000,
"wind":{
"speed":3.6,
"deg":230
},
"clouds":{
"all":75
},
"dt":1488726000,
"sys":{
"type":1,
"id":5959,
"message":0.002,
"country":"PT",
"sunrise":1488697277,
"sunset":1488738646
},
"id":2735943,
"name":"Porto",
"cod":200
}
Создание API-запроса
weather_data.json().get('wind').get('speed')
weather_data.json().get('name')
БИБЛИОТЕКА REQUESTS
Библиотека requests, также известная как «HTTP для людей», —
это библиотека Python с лицензией Apache2, используемая для от-
правки запросов через HTTP (hypertext transfer protocol — протокол
передачи гипертекста). Эта мощная библиотека упрощает подклю-
чение к веб-серверам через HTTP, что позволяет легко запраши-
вать информацию с любой веб-страницы, как вы это делали выше.
Сборка схемы
Просто подключите OLED-дисплей к плате Pi в соответствии с рас-
пиновкой, показанной в таблице. Помните, что на разных моделях
OLED-дисплеев порядок выводов может быть разным, поэтому ори-
ентируйтесь на обозначения выводов.
OLED-дисплей Raspberry Pi
VCC 3.3 V
GND GND
SDA GPIO 2 (SDA)
SCL GPIO 3 (SCL)
RST (если есть) GPIO 24
Программирование
Перед вводом самого скрипта следует установить библиотеку
Adafruit_SSD1306, чтобы можно было использовать OLED-
дисплеи с Raspberry Pi. Эта библиотека упрощает вывод текста
и изображений на экран. Кроме того, вам также надо активировать
протокол I2C для взаимодействия OLED-дисплея с Pi.
Написание скрипта
#инициализация дисплея
5 disp.begin()
while True:
#очистка дисплея
disp.clear()
disp.display()
draw = ImageDraw.Draw(image)
#отображение местоположения
7 location = weather_data.json().get('name') + ' — ' +
weather_data.json().get('sys').get'('country')
draw.text((x, top), location, font=font, fill=255)
#отображение описания
description = 'Desc ' + weather_data.json().
get('weather')[0].get('main')
draw.text((x, top+10), description, font=font,
fill=255)
raw_temperature = weather_data.json().get('main').
get('temp') –273.15
#температура по Цельсию
temperature = 'Temp ' + str(raw_temperature) + '*C'
#отображение температуры
draw.text((x, top+20), temperature, font=font,
fill=255)
#отображение давления
pressure = 'Pres ' + str(weather_data.json().
get('main').get('pressure')) + 'hPa'
draw.text((x, top+30), pressure, font=font, fill=255)
#отображение влажности
humidity = 'Humi ' + str(weather_data.json().
get('main').get('humidity')) + '%'
draw.text((x, top+40), humidity, font=font, fill=255)
#отображение ветра
wind = 'Wind ' + str(weather_data.json().get('wind').
get('speed')) + 'mps ' + str(weather_data.json().
get('wind').get('deg')) + '*'
draw.text((x, top+50), wind, font=font, fill=255)
БИБЛИОТЕКИ OLED
Библиотека Adafruit_SSD1306 относится ко всему, что выводится
на дисплей, как к изображению, даже к тексту. Три модуля, ис-
пользуемые вами в скрипте, выполняют следующее:
• Image создает новое изображение (объект).
• ImageDraw рисует текст или значки внутри изображения и по-
казывает, что вы увидите на самом OLED-дисплее.
• ImageFont устанавливает шрифт текста.
Мини-устройство прогноза погоды
138
Запуск скрипта
ПЕРЕЧЕНЬ КОМПОНЕНТОВ:
• Raspberry Pi (модель с 40 портами GPIO)
• Плата расширения Sense HAT
8
Игра в Pong с Sense HAT
В этом проекте вы будете создавать свою соб-
ственную игру Pong на светодиодах, используя
плату расширения Sense HAT. Плата Sense HAT
чрезвычайно расширяет возможности Pi благода-
ря дополнительным функциям, таким как свето-
диодная матрица, джойстик и различные датчики
для получения информации из внешнего мира.
Знакомство с Pong
Pong — одна из первых видеоигр, когда-либо созданных, Это очень
популярная игра в двумерный настольный теннис (пинг-понг), в ко-
торую можно играть как одному, так и вдвоем. Вы будете делать
версию для одного игрока, которая больше похожа на игру в сквош:
вы отбиваете мяч к стене своей битой и ловите его битой, когда он
возвращается. Если вы пропустили мяч, то проиграли.
Игра в Pong с Sense HAT
142
Монтаж платы
В этом проекте монтаж очень прост — вставьте плату Sense Hat в Pi,
а все остальное делается в коде.
ПРИМЕЧАНИЕ
Плата Sense HAT не совместима с Raspberry Pi 1 моделей А и В.
Однако вы можете это преодолеть с помощью эмулятора, если
у вас как раз такая Pi.
Работа с функциями
и управлением Sense HAT
Прежде чем приступать к разработке игры, важно понять, как управ-
лять светодиодной матрицей и считывать информацию с джойстика.
Давайте рассмотрим некоторые примеры, которые вы будете исполь-
зовать позже в скрипте Pong.
ПРИМЕЧАНИЕ
В библиотеке sense_hat применяется британское написание
«colour», поэтому и в коде вам придется использовать слово
именно в этой форме.
#красный цвет
X = [255, 0, 0]
#нет цвета
N = [0, 0, 0]
N, N, X, X, X, X, N, N,
N, X, N, N, N, N, X, N,
X, N, X, N, N, X, N, X,
X, N, N, N, N, N, N, X,
X, N, N, X, X, N, N, X,
X, N, X, N, N, X, N, X,
N, X, N, N, N, N, X, N,
N, N, X, X, X, X, N, N
]
sense.set_pixels(sad_face)
ПРИМЕЧАНИЕ
Красные буквы X в массиве sad_face не будут отображаться
красным в вашем редакторе кода. Мы выделяем их, чтобы было
легче визуализировать, как будет выглядеть матрица светодиодов.
1 def move_up(event):
print('джойстик сдвинут вверх')
def move_down(event):
print('джойстик сдвинут вниз')
def move_right(event):
print('джойстик сдвинут вправо')
Программирование
149
def move_left(event):
print('джойстик сдвинут влево')
def move_middle(event):
print('джойстик нажат')
2 sense.stick.direction_up = move_up
sense.stick.direction_down = move_down
sense.stick.direction_right = move_right
sense.stick.direction_left = move_left
sense.stick.direction_middle = move_middle
pause()
Программирование
Теперь вы знаете, как отображать текст, рисовать на светодиодной
матрице, а также делать что-либо с помощью джойстика, поэтому
можно приступать к написанию скрипта для вашей игры.
Сначала давайте разберемся, как игра должна работать:
• Ракетка, состоящая из трех пикселей в длину и одного в шири-
ну, находится в столбце 0.
• Каждый раз, когда вы сдвигаете джойстик вверх или вниз, ра-
кетка передвигается в соответствующую сторону.
• Мяч стартует с произвольного места и двигается по диагонали.
• Когда мяч касается чего-либо — стены, потолка или ракетки, —
он должен продолжить движение по диагонали, но в противо-
роложную сторону.
• Если мяч достиг столбца 0, это означает, что вы пропустили мяч
и проиграли.
Написание скрипта
#красный цвет
X = [255, 0, 0]
#нет цвета
N = [0, 0, 0]
X, N, N, X, N, N, N, X,
X, N, X, N, N, X, N, X,
N, X, N, N, N, N, X, N,
N, N, X, X, X, X, N, N
]
#запуск игры
0 while True:
sense.clear()
draw_bat()
draw_ball()
sleep(0.25)
Запуск скрипта
1
Имеется в виду расстояние, пройденное мячом с этой скоростью. — Прим. ред.
Идеи для продолжения
155
ПЕРЕЧЕНЬ КОМПОНЕНТОВ:
• Raspberry Pi (модель с 40 портами GPIO)
• Плата расширения Sense HAT
9
Сенсорная погодная
станция «все-в-одном»
В этом проекте вы построите локальную мете-
останцию, которая будет определять темпера-
туру, влажность и давление с помощью датчи-
ков платы Sense HAT. Кроме того, вы сделаете
графический пользовательский интерфейс для
отображения температуры, влажности и давле-
ния в реальном времени.
Датчик температуры
ПРИМЕЧАНИЕ
Показания температуры могут отличаться от реального значения
температуры на несколько градусов. Это объясняется тем, что пла-
та Sense HAT находится над Pi и тепло от процессора Raspberry
Pi может немного изменить результаты.
Датчик влажности
while True:
3 temperature = sense.temperature
4 temperature = str(round(temperature, 2))
5 print('Температура: ' + temperature + '*C \ n')
humidity = sense.humidity
humidity = str(round(humidity, 2))
print('Влажность: ' + humidity + '% \ n')
pressure = sense.pressure
pressure = str(round(pressure, 2))
print('Давление: ' + pressure + 'hPa \ n')
sleep(1)
Создание пользовательского
интерфейса для считанных данных
Давайте переведем этот проект на новый уровень и создадим класс-
ный пользовательский интерфейс для отображения показаний датчи-
ков. В вашем интерфейсе должно быть:
• Окно на рабочем столе, которое отображает температуру, влаж-
ность и давление.
• Отображение влажности вертикальным индикатором состояния
от 0 до 100%.
• Отображение температуры и давления числами.
• Подписи для каждого значения.
На рисунке 9.2 показан макет пользовательского интерфейса, ко-
торый поможет вам понять, как устроен код.
Виджет Опция
Заголовок окна Текст: «Локальная метеостанция»
Заголовок влажности Текст: «Влажность», шрифт: Helvetica, размер: 18,
вертикальный отступ: 3
Значение влажности Шрифт: Courier, размер: 20, цвет: синий, расположение:
север
Полоса индикатора Ориентация: вертикальная, размер 20, цвет: синий,
влажности расположение: север, длина: 200, максимальное
значение: 100
Заголовок температуры Текст: «Температура», шрифт: Helvetica, размер: 18,
расположение: юг
Значение температуры Шрифт: Courier, размер: 20, цвет: красный,
расположение: север
Заголовок давления Текст: «Давление», шрифт: Helvetica, размер: 18,
расположение: юг
Значение давления Шрифт: Courier, размер: 20, цвет: зеленый,
расположение: север
Программирование
Откройте Python 3 (IDLE) и создайте новый файл, выбрав File→New
File. Скопируйте код из листинга 9.2 в редактор Python и сохраните
скрипт как weather_station.py в папку Sensors (напоминаем,
что все скрипты можно загрузить по адресу: http://pilotlz.ru/books/
files/10857 / ).
#создание окна
2 window = Tk()
window.title('Локальная метеостанция')
window.geometry('200x480')
4 humidity = StringVar()
8 progressbar_humidity = ttk.Progressbar(humidity_canvas,
variable = humidity_bar, orient = VERTICAL, length = 200,
maximum = 100)
progressbar_humidity.pack(fill=X, expand=1)
temperature = StringVar()
pressure = StringVar()
9 def update_readings():
humidity.set(str(round(sense.humidity, 2)) + '%')
humidity_bar.set(sense.humidity)
temperature.set(str(round(sense.temperature, 2)) +
'°C')
#temperature.set(str(round(sense.temperature* (9 / 5)
+32, 2)) + '*F')
pressure.set(str(round(sense.pressure)) + 'hPa')
window.update_idletasks()
window.after(3000, update_readings)
0 update_readings()
window.mainloop()
#temperature.set(str(round(sense.temperature, 2)) +
'*C')
temperature.set(str(round(sense.temperature* (9 / 5) +32,
2)) + '*F')
Запуск скрипта
ПЕРЕЧЕНЬ КОМПОНЕНТОВ:
• Raspberry Pi
• Макетная плата
• PIR-датчик движения HC-SR501
• Два светодиода диаметром 5 мм (разных цветов)
• Три резистора по 330 Ом
• Кнопка
• Соединительные провода
10
Охранная сигнализация
с уведомлением по e-mail
В этом проекте вы создадите охранную сигнали-
зацию, отправлющую уведомления на e-mail. Сиг-
нализация обнаруживает проникновение на охра-
няемую территорию с помощью пассивного
инфракрасного датчика (PIR). Когда датчик засе-
чет движение, будет отправлено предупреждаю-
щее письмо.
ПРИМЕЧАНИЕ
Не называйте ваш скрипт email.py, потому что в Python есть биб-
лиотека с таким именем и ваш скрипт не будет работать.
ПРЕДУПРЕЖДЕНИЕ
Если вы используете фрагмент кода 5 внутри цикла while без
задержки, то вы будете заполнять свой почтовый ящик тысячами
писем и ваша учетная запись, скорее всего, будет заблокирова-
на. Поэтому обязательно включите задержку, если вы используете
этот фрагмент в любом другом проекте!
Сборка схемы
Давайте подключим пассивный инфракрасный датчик движения (PIR)
к Raspberry Pi, чтобы она смогла отправлять сообщения по электрон-
ной почте, как только датчик засечет движение. Кроме того, вам по-
Охранная сигнализация с уведомлением по e-mail
176
Программирование
Откройте среду Python 3 (IDLE) и затем выберите File→New File,
чтобы создать новый скрипт. Введите код, представленный в листин-
ге 10.2, в созданный файл и сохраните его в папке Sensors под
именем intruder_alarm.py (напоминаем, что все скрипты можно
скачать на https://www.npstarch.com / RaspberryPiProject / ).
#Управляющие переменные
3 motion_sensor_status = False
email_sent = False
led_triggered.off()
else:
motion_sensor_status = True
email_sent = False
led_status.on()
led_triggered.on()
print('Письмо отправлено')
#Указание, какую функцию вызовет нажатие кнопки
6 button.when_pressed = arm_motion_sensor
#Указание, какая функция запускается при обнаружении
движения
7 pir.when_motion = send_email
8 pause()
ПЕРЕЧЕНЬ КОМПОНЕНТОВ:
• Raspberry Pi
• Макетная плата
• Датчик газа и дыма MQ-2
• Микросхема MCP3008
• Звуковой пьезоизлучатель (зуммер)
• Светодиод диаметром 5 мм
• Резистор 330 Ом
• Кнопочный переключатель
• Газовая зажигалка
• Соединительные провода
11
Газовая и дымовая
сигнализация
В этом проекте вы создадите газовую и дымовую
сигнализацию на основе датчика газов и дыма
MQ-2 и пьезоэлектрического зуммера. Как толь-
ко датчик обнаружит наличие в воздухе газа или
дыма с концентрацией выше некоторого порого-
вого значения, зуммер начнет издавать звуковой
сигнал.
1
Если вы используете для данного проекта новый датчик, его нужно предваритель-
но «прогреть». Подключите его к Pi и оставьте включенным на день. Не пугайтесь
неприятного запаха, который можете почувствовать поначалу. После этого датчик
будет выдавать действительно корректные показания. — Прим. ред.
Сборка схемы
185
Знакомство с пьезоэлектрическим
зуммером
Пьезоэлектрический зуммер издает зву-
ковой сигнал тревоги, когда получает
цифровой сигнал от Pi. Зуммер, кото-
рый вы будете использовать, имеет очень
простое устройство (рис. 11.2).
В корпусе зуммера находится диск,
который вибрирует с определенной ча-
стотой, когда на него подается напря-
жение. Подключить пьезоэлектрический
зуммер совсем несложно: подключите Рис. 11.2. Пьезоэлектриче-
ский зуммер
один провод к выводу GND на вашей Pi,
а другой — к порту GPIO.
Сборка схемы
Вам нужно подключить к Pi светодиод, кнопку, датчик MQ-2 (че-
рез микросхему MCP3008) и зуммер. Кнопку и светодиоды вы уже
много раз подключали в предыдущих проектах и знаете, что это не-
сложно. Для сборки выполните следующие шаги (в качестве примера
ориентируйтесь на рис. 11.3):
1. Подключите порт GND на Pi к синей шине на макетной плате,
а контакт питания 3.3 V — к красной шине.
2. Установите микросхему MCP3008 на середине макетной платы
так, чтобы ряды ее ножек разместились параллельно центральной
борозде по обе ее стороны (см. рис. 11.3), и подключите ее в соот-
ветствии со следующей таблицей:
Окончание табл.
Вывод MCP3008 Подключить к
14 GND
15 3.3 V
16 3.3 V
Датчик MQ -2 Подключить к
VCC 5V
GND GND
DO Не присоединять
AO MCP3008, вывод 1
Программирование
Чтобы создать новый скрипт, запустите Python 3 (IDLE) и выбе-
рите пункт меню File→New File. Скопируйте приведенный ниже
код (листинг 11.1) в редактор Python, а затем сохраните скрипт
с именем smoke_detector.py в папке Sensors (помните,
что все скрипты можно скачать с сайта http://pilotlz.ru/books/
files/10857 / ).
2 led = LED(17)
button = Button(2)
buzzer = Buzzer(27)
gas_sensor = MCP3008(0)
3 gas_sensor_status = False
4 threshold = 0.1
5 def arm_gas_sensor():
global gas_sensor_status
if gas_sensor_status == True:
gas_sensor_status = False
led.off()
Газовая и дымовая сигнализация
188
else:
gas_sensor_status = True
led.on()
6 button.when_pressed = arm_gas_sensor
7 while True:
8 #print(gas_sensor.value)
#проверяем, включен ли датчик и зафиксировано ли
пороговое значение
if(gas_sensor_status == True and gas_sensor.value >
threshold):
buzzer.beep()
else:
buzzer.off()
sleep(2)
ПРЕДУПРЕЖДЕНИЕ
Будьте очень осторожны при использовании зажигалок и газа!
Не удерживайте кнопку зажигалки слишком долго и не зажигайте
огонь сразу после того как выпустили некоторое количество газа.
Газовая и дымовая сигнализация
190
Запуск скрипта
ПРЕДУПРЕЖДЕНИЕ
Собранная в этом проекте газовая и дымовая сигнализация —
всего лишь эксперимент. Она не может заменить собой ваш до-
машний датчик дыма.
ПЕРЕЧЕНЬ КОМПОНЕНТОВ:
• Raspberry Pi
• Макетная плата
• Датчик температуры и влажности DHT22 (также можно использовать
DHT11 или AM2302)
• Резистор 4,7 кОм
• Соединительные провода
НЕОБХОДИМОЕ ПО:
• Библиотека Adafruit_Python_DHT
12
Регистратор температуры
и влажности
В этом проекте вы соберете регистратор, который
автоматически фиксирует значения температуры
и влажности. Вы узнаете, как считать и записать
данные об окружающей среде и где это можно
применить с пользой.
Знакомство
с датчиком DHT22
DHT22 (рис. 12.1) — это цифровой датчик
температуры и влажности со встроенной
микросхемой, которая преобразует аналого-
вые сигналы в цифровые. Поэтому в данном
проекте вам понадобится аналого-цифровой
преобразователь, что очень упростит сборку.
Сборка схемы
Рис. 12.1. Датчик тем-
пературы и влажности Сборка схемы состоит всего-навсего в том,
DHT22
чтобы через резистор подключить датчик
DHT22 к Pi. Для этого выполните следую-
щие шаги (в качестве примера ориентируйтесь на рис. 12.2):
1. Подключите GND и 3,3 V вашей Pi к синей и красной шинам
макетной платы соответственно.
DHT22 Raspberry Pi
1 3.3 V
2 GPIO 4;
также подключить к 3.3 V
через резистор 4,7 кОм
3 Не подключать
4 GND
Программирование
Будем использовать библиотеку Adafruit_Python_DHT, с помо-
щью которой легко управлять датчиком DHT22 и считывать его по-
казания.
pi@raspberrypi:~ $ cd ~ / Desktop
pi@raspberrypi:~ / Desktop $ mkdir Libraries
pi@raspberrypi:~ / Desktop $ cd Libraries
pi@raspberrypi:~ / Desktop / Libraries $
Регистратор температуры и влажности
196
Написание скрипта
1
На момент перевода книги эта библиотека уже поддерживалась Python 3, поэтому
вы можете выполнить этот проект в привычной Python 3 (IDLE). — Прим. ред.
Программирование
197
#бесконечный цикл
while running:
try:
#считываем значения влажности и температуры
5 humidity, temperature = Adafruit_DHT.read_
retry(sensor, sensor_pin)
#раскомментируем следующую строку, если нужно
перевести температуру в градусы Фаренгейта
6 #temperature = temperature * 9 / 5.0 + 32
Запуск скрипта
ПРИМЕЧАНИЕ
Каждый раз, когда вы запускаете код, он перезаписывает все, что
уже было в файле sensor_readings.txt. Если вы не хотите,
чтобы это происходило, при каждом запуске скрипта изменяйте
имя файла в 4, чтобы создавать новый файл.
Регистратор температуры и влажности
200
ПЕРЕЧЕНЬ КОМПОНЕНТОВ:
• Raspberry Pi
• Макетная плата
• Модуль камеры V2
• Датчик движения PIR HC-SR501
• Кнопочный переключатель (кнопка)
• Соединительные провода разных типов
13
Детектор взлома
с фоторегистрацией
В этом проекте вы научитесь использовать модуль
камеры V2 Raspberry Pi, который в паре с датчиком
движения PIR будет обнаруживать злоумышлен-
ников и фотографировать их. Когда датчик обна-
руживает движение, запускается процесс фото-
съемки. Таким образом, вы всегда будете знать,
что происходит в вашем доме, когда вас там нет.
Знакомство с модулем
камеры V2 Raspberry Pi
Модуль камеры V2 Raspberry Pi (рис. 13.1) оснащен 8-мегапиксель-
ным сенсорным датчиком изображений Sony IMX219 и объективом
с фиксированным фокусом. Он способен делать снимки с разрешени-
ем 3280 × 2464 пикселей и снимать видео с разрешением 1080p при
частоте 30 кадров в секунду, 720p при частоте 60 кадров в секунду
и 640 × 480 при частоте 90 кадров в секунду. Все эти характеристики
говорят о том, что это довольно мощная камера для своих размеров!
В этом проекте вы будете использовать только часть возможностей
модуля — получение статичного изображения.
Эта камера совместима со всеми моделями Raspberry Pi (1, 2, 3
и zero). Она идет в комплекте с ленточным кабелем длиной 15 см,
Детектор взлома с фоторегистрацией
204
Активация камеры
Подключение камеры
ПРИМЕЧАНИЕ
Передвигая камеру, будьте внимательны. Шлейф камеры очень
хрупкий, и, если он будет тереться о штырьки портов GPIO, ваша
камера может быть серьезно повреждена. Для обеспечения без-
опасности камеры обмотайте ее кабель, например, скотчем.
Сборка схемы
207
Сборка схемы
После подключения камеры для завершения сборки выполни-
те приведенные ниже шаги (в качестве примера ориентируйтесь
на рис. 13.5):
1. Соедините GND платы Raspberry Pi с синей шиной GND ма-
кетной платы.
2. Установите кнопку на макетную плату так, чтобы ее ножки рас-
положились по разные стороны от борозды. Соедините одну ножку
с GND, а вторую (с той же стороны от борозды) с GPIO 2.
3. Подключите датчик движения PIR, как расписано в таблице:
Программирование
Для управления камерой вы будете использовать встроенную би-
блиотеку picamera. Это очень простая библиотека, поэтому и весь
скрипт будет предельно прост. Вот что он должен делать:
1. Вызывать камеру.
2. Делать снимок, когда датчик движения PIR обнаруживает ка-
кое-либо движение.
3. Сохранять фотографии в папке Desktop.
4. Именовать фотографии по порядку, чтобы вы знали, в какой
последовательности они были сделаны. Например, image_1.jpg,
image_2.jpg и так далее.
5. Останавливать камеру, когда нажимается кнопка. Если вы
не добавите эту функцию, вы просто не сможете закрыть окно пред-
варительного просмотра камеры, которое будет отображаться на ва-
шем экране.
Написание скрипта
ПРИМЕЧАНИЕ
Не называйте ни один из ваших файлов picamera.py, потому
что picamera — имя встроенной библиотеки Python и оно не мо-
жет использоваться.
#запускаем камеру
camera.rotation = 180
3 camera.start_preview()
pause()
Запуск скрипта
ПЕРЕЧЕНЬ КОМПОНЕНТОВ:
• Raspberry Pi
• Модуль камеры V2 Raspberry Pi
14
Система домашнего
видеонаблюдения
В этом проекте вы создадите систему домашнего
видеонаблюдения, которая отправляет записан-
ное видео на веб-страницу. Таким образом, вы
сможете просматривать его со своей Pi или любо-
го устройства, подключенного к сети и способно-
го воспроизводить видео через браузер. Это зна-
чит, что вы сможете контролировать любой уголок
вашего дома, буквально не вставая с дивана!
1 import picamera
2 camera = picamera.PiCamera()
3 camera.resolution = (640, 480)
4 camera.start_recording('videotest.h264')
5 camera.wait_recording(60)
6 camera.stop_recording()
Программирование
Теперь перейдем к главному. Как было сказано в описании проекта,
для воспроизведения видео вы создадите веб-страницу. Веб-сервером
для этой страницы будет служить Raspberry Pi. (Более подробно веб-
серверы рассматриваются в проектах 15, 16 и 17.)
Система домашнего видеонаблюдения
216
Написание скрипта
1 PAGE="""\
<html>
<head>
<title>Система домашнего видеонаблюдения с Raspberry Pi</
title>
</head>
<body>
<center><h1>Raspberry Pi. Система домашнего
видеонаблюдения</h1></center>
<center><img src="stream.mjpg" width="640"
height="480"></center>
Программирование
217
</body>
</html>
"""
class StreamingOutput(object):
def __init__(self):
self.frame = None
self.buffer = io.BytesIO()
self.condition = Condition()
class StreamingHandler(server.BaseHTTPRequestHandler):
def do_GET(self):
if self.path == '/':
self.send_response(301)
self.send_header('Location', '/index.html')
self.end_headers()
elif self.path == '/index.html':
content = PAGE.encode('utf-8')
self.send_response(200)
self.send_header('Content-Type', 'text/html')
self.send_header('Content-Length',
len(content))
self.end_headers()
self.wfile.write(content)
elif self.path == '/stream.mjpg':
self.send_response(200)
self.send_header('Age', 0)
self.send_header('Cache-Control', 'no-cache,
private')
self.send_header('Pragma', 'no-cache')
self.send_header('Content-Type', 'multipart/x-
mixed-replace; boundary=FRAME')
Система домашнего видеонаблюдения
218
self.end_headers()
try:
while True:
with output.condition:
output.condition.wait()
frame = output.frame
self.wfile.write(b'--FRAME\r\n')
self.send_header('Content-Type',
'image/jpeg')
self.send_header('Content-Length',
len(frame))
self.end_headers()
self.wfile.write(frame)
self.wfile.write(b'\r\n')
except Exception as e:
logging.warning('Подключенный удаленный
клиент %s: %s', self.client_address, str(e))
else:
self.send_error(404)
self.end_headers()
class StreamingServer(socketserver.ThreadingMixIn,
server.HTTPServer):
allow_reuse_address = True
daemon_threads = True
2 with picamera.PiCamera(resolution='640x480',
framerate=24) as camera:
output = StreamingOutput()
camera.start_recording(output, format='mjpeg')
try:
address = ('', 8000)
server = StreamingServer(address,
StreamingHandler)
server.serve_forever()
finally:
camera.stop_recording()
Запуск скрипта
pi@raspberrypi:~ $ hostname -I
1
Эти надписи прописаны в тегах <title> и <h1>. — Прим. перев.
2
Для этого нужно изменить значение параметров resolution и framerate со-
ответственно. — Прим. перев.
Система домашнего видеонаблюдения
220
ПЕРЕЧЕНЬ КОМПОНЕНТОВ:
• Raspberry Pi
15
Ваш первый веб-сайт
В этом проекте вы создадите простой веб-сайт
с заголовками, разделами, изображениями, ссыл-
ками и кнопками. Вы будете использовать язык
HTML, чтобы создать страницу, и CSS, чтобы
оформить ее на свой вкус. Эти навыки позволят
вам в дальнейшем создавать самые разные сай-
ты, какие только захотите.
<head>
<title>Полицейский пес Макс< / title>
< / head>
1
Многие теги в HTML — парные. Открывающий тег (<>) ставится перед на-
чалом содержимого, а закрывающий тег (< / >) — после его окончания. То есть
все содержимое HTML-файла оформляется следующим образом: <тег>содержи-
мое< / тег>. — Прим. перев.
Ваш первый веб-сайт
226
ПРИМЕЧАНИЕ
После сохранения файла вам необязательно каждый раз перета-
скивать его в браузер. Просто обновите веб-страницу — измене-
ния тут же вступят в силу.
<body>
<h1>ПОЛИЦЕЙСКИЙ ПЕС МАКС< / h1>
<h2>О Максе< / h2>
< / body>
<img src='max.jpg'>
1
Именно потому, что файл gallery.html помещен в ту же папку, что и файл
index.html, в качестве гиперссылки мы можем указать сокращенный путь
к нему, то есть только имя самого файла "gallery.html". — Прим. перев.
Создание веб-страницы на языке HTML
229
1
Тегом header обозначается верхний колонтитул, то есть «шапка» веб-страницы.
В данном случае верхний колонтитул вашей веб-страницы содержит заголовок
первого уровня, который прописан в теге h1. — Прим. перев.
Изменение стилей веб-страницы с помощью CSS
231
selector {
property: value;
}
header {
1 background: url(background.jpg);
2 background-size: cover;
3 height: 70vh;
}
Изменение стилей веб-страницы с помощью CSS
233
1
А title соответственно является наследником класса header. — Прим. перев.
Ваш первый веб-сайт
234
СВОЙСТВО POSITION
Свойство position может иметь следующие значения:
• static
Элемент со значением static располагается независимо
от свойств top, bottom, left и right. По умолчанию элементы
HTML располагаются статично, с выравниванием по левому краю.
• relative
Элемент со значением relative с помощью свойств top,
bottom, left и right сдвигается относительно своей позиции
по умолчанию (относительно всех остальных элементов).
• fixed
Элемент со значением fixed остается в том же положении, даже
когда страница прокручивается. Скорректировать расположение
элемента в области просмотра можно с помощью свойств top,
bottom, left и right.
• absolute
Элемент со значением absolute расположен относительно его
ближайшего элемента-родителя. Скорректировать расположение
элемента внутри элемента-родителя можно с помощью свойств
top, bottom, left и right.
1
Больше информации о различных тегах и CSS-свойствах, а также об их примене-
нии можно получить в онлайн-справочнике htmlbook.ru. — Прим. ред.
Powered by TCPDF (www.tcpdf.org)
СТОИМОСТЬ: $
ПРИМЕРНОЕ ВРЕМЯ СБОРКИ: 2 часа
ПЕРЕЧЕНЬ КОМПОНЕНТОВ:
• Raspberry Pi
• Релейный модуль HL-52S
• Лампа на напряжение 12 В с патроном
• Адаптер для подачи питания на напряжение пост. тока 12 В
• Разъем питания типа штекер с клеммником
• Пластиковый корпус
• Соединительные провода
НЕОБХОДИМОЕ ПО:
• Фреймворк Flask
16
Подключение электроники
к Интернету
В этом проекте вы создадите собственный веб-
сервер для Интернета вещей, который сможете
применять для удаленного управления лампой
с помощью телефона. Этот веб-сервер пригодит-
ся вам и в других проектах для управления элек-
тронными устройствами.
Знакомство с веб-серверами
Веб-сервер — это компьютер, который обслуживает веб-страницы. Он
хранит файлы веб-сайта, включая все HTML-файлы и все, что с ними
связано, например изображения, таблицы стилей CSS, шрифты и ви-
део. Он также доставляет эти файлы в веб-браузер устройства поль-
зователя, когда пользователь делает запрос на URL-адрес сервера.
Когда вы получаете доступ к веб-странице в своем браузере, вы
фактически отправляете запрос через протокол передачи гипертекста
(Hypertexr Transfer Protocol — HTTP) на сервер. Это просто процесс
запроса и получения информации в Интернете. Сервер возвращает
запрошенную веб-страницу также через HTTP.
В этом проекте вы будете использовать свою Raspberry Pi для раз-
мещения веб-сервера в локальной сети (рис. 16.1).
Подключение электроники к Интернету
242
ПРИМЕЧАНИЕ
Доступ к веб-странице, размещенной на вашей Pi, могут получить
через браузер только устройства, подключенные к тому же роуте-
ру, что и ваша Pi.
Организовать доступ к вашему веб-серверу за пределами вашей
локальной сети сложнее. Вы можете сделать ваш веб-сервер
Raspberry Pi доступным с любого компьютера в любом месте, ис-
пользуя метод переадресации портов на роутере, но данный во-
прос выходит за рамки этой книги.
ОПТРОН (ОПТОПАРА)
Мы не будем давать очень подробное описание оптрона. В двух
словах, оптрон — это компонент, который позволяет передавать
сигналы между двумя электрически изолированными цепями.
В результате цепь с высоким напряжением может управлять-
ся от цепи с низким напряжением без физического соединения
между ними. Оптрон «соединяет» эти цепи лучом светодиода. Под
действием света в фототранзисторе начинает протекать ток, кото-
рый включает или выключает реле.
Использование реле
ПРЕДУПРЕЖДЕНИЕ
Если вы опасаетесь работать с более высоким напряжением, на-
пример 12 В, но все же хотите выполнить данный проект, замени-
те релейный модуль на светодиод. При этом вам придется внести
некоторые изменения в скрипт Python, поскольку реле работает
с инвертированной логикой, а светодиод нет.
Обзор проекта
Прежде чем приступать к выполнению этого проекта, рассмотрим его
стуктурную схему (рис. 16.4), чтобы вам было проще понимать каж-
дый шаг.
Кроме того, для выполнения данного проекта вам понадобится зна-
ние основ языков HTML и CSS. Поэтому, если вы еще не выполняли
проект 15, мы рекомендуем вам вернуться и выполнить сначала его.
Подключение электроники к Интернету
246
Сборка схемы
Из соображений безопасности релейный модуль лучше поместить
в пластиковый корпус. Возможно, в этом корпусе вам потребуется
просверлить отверстия для проводов: одно отверстие для подключе-
ния Raspberry Pi, еще одно — для подключения лампы и третье —
для адаптера питания. На рисунке 16.5 показана внутренность кор-
пуса без крышки. Провода Raspberry Pi в данном случае пройдут
через отверстие в крышке.
Отключите питание Pi и выполните следующие шаги:
1. Подключите одну из клемм лампы к отрицательной (–) клемме
на клеммнике разъема питания.
2. Подключите положительную (+) клемму разъема к контакту
COM релейного модуля.
1
По умолчанию в протоколе HTTP, отвечающем за передачу html-страниц, исполь-
зуется порт 80. Самим его указывать не нужно. — Прим. ред.
Сборка схемы
247
ПРИМЕЧАНИЕ
Проверьте, соединены ли перемычкой контакты JD-VCC и VCC.
ПРЕДУПРЕЖДЕНИЕ
Не прикасайтесь к релейному модулю или к оголенным проводам,
когда они подключены к напряжению 12 В. Если что-то не работает
и вы решили внести изменения в схему, выдерните вилку адаптера
питания из сетевой розетки, прежде чем прикасаться к чему-либо.
Установка Flask
Программирование
Для выполнения данного проекта вам необходимо:
• написать скрипт на языке Python, в котором вы создадите веб-
сервер Pi;
• создать файл HTML для описания вашей веб-страницы;
• создать файл CSS для стилизации вашей веб-страницы.
Создание веб-сервера
Создание HTML-файла
.off{
color: #fff;
background-color: #604f43;
}
a {
text-decoration: none;
}
Запуск веб-сервера
pi@raspberrypi:~ $ hostname –I
ПЕРЕЧЕНЬ КОМПОНЕНТОВ:
• Raspberry Pi
• Макетная плата
• Датчик температуры и влажности DHT22
• Резистор 4,7 кОм
• Два светодиода диаметром 5 мм
• Два резистора по 330 Ом
• Соединительные провода разных типов
НЕОБХОДИМОЕ ПО:
• Node-RED узел для датчика DHT
• Панель управления Node-RED
17
Создание центра
управления Интернетом
вещей с помощью
Node-RED
В этом проекте вы создадите приложение для Ин-
тернета вещей, чтобы управлять вашей любимой
домашней электроникой через веб-сервер с по-
мощью Node-RED — мощного и простого в ис-
пользовании инструмента.
Знакомство с Node-RED
Node-RED — это инструмент визуального проектирования с откры-
тым исходным кодом для создания приложений для Интернета ве-
щей. Он уже установлен в операционной системе вашей Pi и пре-
красно взаимодействует с ней.
1
Подойдет и датчик DHT11. Он немного отличается диапазоном работы, но для
данного проекта его будет вполне достаточно. — Прим. перев.
Создание центра управления Интернетом вещей с помощью Node-RED
258
pi@raspberrypi:~ $ cd bcm2835–1.55
pi@raspberrypi:~ / bcm2835–1.55 $ . / configure
pi@raspberrypi:~ / bcm2835–1.55 $ make
pi@raspberrypi:~ / bcm2835–1.55 $ sudo make check
pi@raspberrypi:~ / bcm2835–1.55 $ sudo make install
pi@raspberrypi:~ / bcm2835–1.55 $ cd
pi@raspberrypi:~ $ sudo npm install --unsafe-perm -g node-
dht-sensor
pi@raspberrypi:~ $ sudo npm install --unsafe-perm -g node-
red-contrib-dht-sensor
pi@raspberrypi:~ $ sudo npm install --unsafe-perm -g node-
red-dashboard
ПРИМЕЧАНИЕ
Обычно вы можете запускать Node-RED и не через терминал. Для
этого перейдите в главное меню панели задач и выберите пункт
Programming→Node-RED.
Однако в этом проекте вам нужно запустить Node-RED именно
через терминал, поскольку для использования узлов DHT22 тре-
буются права администратора.
pi@raspberrypi:~ $ hostname –I
Сборка схемы
Вам уже хорошо знакомы светодиоды и датчик DHT22, но если вы
забыли, как работать с датчиком, вернитесь к проекту 12. Для того
чтобы собрать схему, выполните следующие шаги:
1. Соедините контакт питания 5 V и GND вашей Pi с красной
и синей шинами на макетной плате соответственно.
2. Установите на макетной плате два светодиода. Соедините катод
(более короткую ножку) каждого светодиода с шиной GND через ре-
Создание потока Node-RED
263
зистор 330 Ом. Соедините анод (более длинную ножку) одного све-
тодиода с GPIO 18, а другого — с GPIO 17.
3. Установите на макетной плате датчик DHT22 (лицевой сторо-
ной к себе) и выполните подключения в соответствии с приведенной
ниже таблицей. Собранная схема должна соответствовать рис. 17.4.
DHT 22 Raspberry Pi
1 3.3 V
2 GPIO 4 и 3.3 V
(через резистор 4,7 кОм)
3 Не подключать
4 GND
Подключение узлов
Узел Свойства
timestamp 1 Payload: числовое значение 1
Repeat: at a specific time
At: 19:00
On: выберите все дни
timestamp 2 Payload: числовое значение 0
Repeat: at a specific time
At: 23:00
On: выберите все дни
switch Group: Панель управления [Главная]
Label: Светодиод 1
On Payload: 1
Off Payload: 0
Name: LED 1 — Switch
pin GPIO: GPIO17–11
Type: Digital output
Name: LED 1 — GPIO 17
Создание центра управления Интернетом вещей с помощью Node-RED
268
Узел Свойства
slider Group: Панель управления [Главная]
Label: Светодиод 2
Range: min:0; max:100; step:1
Name: LED 2 — Slider
pin GPIO: 12 — GPIO18
Type: PWM output
Name: LED 2 — GPIO 18
Узел Свойства
timestamp Payload: логическое значение true
Repeat: interval
Every: 1 minute
Name: Read DHT22
rpi-dht22 Sensor model: DHT22
Pin numbering: BCM GPIO
Pin number: 4
Name: DHT22 — GPIO 4
chart Group: Панель управления [Главная]
Label: Температура
Type: Line Chart
X-axis: 1 hour
X-axis Label: HH: mm
Name: Temperature — Chart
f Name: Get humidity
Function:
msg.payload = msg.humidity;
return msg;
gauge Group: Панель управления [Главная]
Type: Gauge
Label: Влажность
Value format: { {value}}
Units: %
Range: min:0; max:100
Name: Humidity — Gauge
Запуск приложения
271
Запуск приложения
Поздравляем! Вы создали свое первое приложение для Интерне-
та вещей с помощью Node-RED. Откройте в браузере страницу
http://<IP-адрес вашей Pi>:1880 / ui, чтобы посмотреть, как выгля-
дит ваш пользовательский интерфейс. Вы можете получить доступ
к этой странице с помощью любого браузера в локальной сети на ва-
шем компьютере или смартфоне. На рисунке 17.13 показан финаль-
ный вариант схемы данного проекта, которой вы можете управлять,
используя приложение Node-RED.
ПЕРЕЧЕНЬ КОМПОНЕНТОВ:
• Raspberry Pi
• Макетная плата
• Кнопки, 8 шт.
• Наушники или монитор с динамиками, подключаемый к Pi через HDMI
• Соединительные провода
НЕОБХОДИМОЕ ПО:
• avconv
18
Цифровая барабанная
установка
В этом проекте вы создадите цифровую барабан-
ную установку с кнопочным управлением. Для это-
го понадобится лишь макетная плата и несколько
кнопок. При нажатии кнопок будут воспроизво-
диться различные звуки барабана, в том числе
две барабанные дроби.
Подготовка аудиофайлов
Сначала нужно правильно настроить звук Raspberry Pi и активиро-
вать возможность использования семплов из Sonic Pi.
Настройка аудио
Итак, подключите наушники или динамики к аудиоразъему Rasp-
berry Pi. Если ваш монитор имеет встроенные динамики и подклю-
чен к Pi кабелем HDMI, то ничего не нужно подключать к аудио-
разъему — звук можно прослушивать через динамики монитора.
В правом верхнем углу рабочего стола щелкните правой кнопкой
мыши по значку динамика и выберите источник звука (рис. 18.1).
Цифровая барабанная установка
276
ПРИМЕЧАНИЕ
Мы не будем подробно рассматривать Sonic Pi в этой книге,
но если вы хотите изучить его самостоятельно, выберите в глав-
ном меню панели задач пункт Programming→Sonic Pi, чтобы от-
крыть программное обеспечение и ознакомиться с ним.
Итак, теперь в папке для каждого семпла должны быть как .wav-,
так и .flac-файлы. Чтобы удалить файлы .flac из папки samples,
введите следующую команду:
Сборка схемы
Схема для этого проекта достаточно проста и состоит из восьми кно-
пок, подключенных к Pi. Каждая кнопка отвечает за свой звук.
Сборка схемы
279
Кнопка Raspberry Pi
1 GPIO 2
2 GPIO 3
3 GPIO 14
4 GPIO 15
5 GPIO 17
6 GPIO 18
7 GPIO 22
8 GPIO 27
Программирование
Чтобы создать новый скрипт, запустите Python 3 (IDLE) и выберите
пункт меню File→New File. Скопируйте приведенный ниже код в ре-
дактор Python, а затем сохраните скрипт с именем digital_drum_
set.py в папке Games_and_Toys (как всегда, все скрипты можно
скачать с сайта http://pilotlz.ru/books/files/10857/ ):
ПЕРЕЧЕНЬ КОМПОНЕНТОВ:
• Raspberry Pi
• Две кнопки
• Макетная плата
• Соединительные провода
19
Игра Hungry Monkey
на языке Scratch
В этом проекте вы познакомитесь с блочным
языком программирования Scratch и с его помо-
щью создадите собственную игру, которой можно
управлять двумя кнопками и Raspberry Pi.
ПРИМЕЧАНИЕ
Чтобы узнать больше о Scratch, посетите его официальный сайт:
http://scratch.mit.edu /
Игра Hungry Monkey на языке Scratch
284
Сборка схемы
Схема состоит из двух кнопок, макетной платы и платы Raspberry Pi.
Выполните приведенные ниже шаги, сверяясь с рис. 19.2:
1. Соедините один из выводов GND на Raspberry Pi с синей ши-
ной GND на макетной плате.
2. Установите две кнопки на макетной плате, как показано
на рис. 19.2.
3. Соедините правые нижние ножки кнопок с синей шиной GND.
4. Соедините левую нижнюю ножку одной кнопки с GPIO 2,
а другой кнопки — с GPIO 3.
1
Слово «scratch» в переводе с английского означает «царапать». По мнению не-
официального сообщества Scratch, кота, который является символом языка, зо-
вут Scratch (Царапка). В то же время словосочетание «from scratch» означает
«с нуля». Этим и объясняется название языка — играя с очаровательным котом
Царапкой, вы с нуля изучаете основы программирования. — Прим. перев.
2
Если при запуске среды программирования все названия отображаются на ан-
глийском языке, вы всегда можете это изменить. Просто нажмите на значок гло-
буса в главном меню и выберите русский язык. — Прим. перев.
Игра Hungry Monkey на языке Scratch
286
Создание скрипта
Перед созданием игры полезно составить список функций, которые
вы хотите в ней реализовать. Имея такой список перед глазами, вы
будете точно знать, что вам нужно делать сейчас.
В игре «Hungry Monkey» игрок управляет обезьянкой, которая
старается поймать как можно больше спелых бананов, пропуская
гнилые. За каждый пойманный спелый банан игрок получает один
балл, за пойманный гнилой — лишается одного балла. Вот описание
основных шагов для создания игры «Hungry Monkey»:
1. Создать спрайт главного героя — обезьянки и реализовать воз-
можность управлять ее движением с помощью двух кнопок: одна
кнопка отвечает за перемещение обезьянки вправо, а другая — влево.
Кроме того, нужно реализовать управление обезьянкой с помощью
клавиш со стрелками на клавиатуре.
Создание скрипта
287
ПРИМЕЧАНИЕ
Вы можете создать спрайт с нуля, нарисовав его с помощью знач-
ка кисти, загрузить свой собственный спрайт, щелкнув по знач-
ку папки, или сделать снимок с помощью веб-камеры, щелкнув
по значку камеры.
Редактирование спрайтов
ПРИМЕЧАНИЕ
Найти нужные блоки несложно. Помните, что каждая катего-
рия блоков имеет свой цвет и каждый блок внутри нее окрашен
в тот же цвет.
Создание скрипта
291
Тестирование скрипта
Запуск игры
Поздравляем! Ваша игра готова. Чтобы запустить игру в полно-
экранном режиме, щелкните на значок полного экрана в правом
верхнем углу сцены, а затем щелкните по зеленому флажку. Запуск
игры в полноэкранном режиме делает ее отображение более плавным
и быстрым.
Помните, что управлять игрой можно двумя способами: кнопками
и клавишами клавиатуры. Когда игра закончится, щелкните по зеле-
ному флажку, чтобы начать ее заново.
ПЕРЕЧЕНЬ КОМПОНЕНТОВ:
• Raspberry Pi Zero W (или другая модель Raspberry Pi с 40 портами GPIO)
• Двухколесная платформа Smart Robot
• Модуль MotoZero (или другой драйвер моторов)
• Четыре батарейки типа AA
• Портативное зарядное устройство
• Соединительные провода разных типов
НЕОБХОДИМОЕ ПО:
• Панель управления Node-RED
20
Робот с дистанционным
Wi-Fi-управлением
В этом проекте вы соберете двухколесного ро-
бота на основе Raspberry Pi модели Zero W и до-
полнительного модуля MotoZero. Ваш робот будет
питаться от батареек, и вы сможете дистанционно
управлять им по Wi-Fi с помощью веб-приложения,
которое сделаете сами в приложении Node-RED.
Подготовка Raspberry Pi
Плата Raspberry Pi Zero W (рис. 20.2) является модификацией
платы Raspberry Pi Zero. Она имеет встроенную беспроводную сеть
WLAN и Bluetooth. Но, как мы уже говорили, можно взять лю-
бую другую, совместимую с Wi-Fi модель Pi или добавить внешнее
Wi-Fi-устройство. Raspberry Pi Zero W имеет совсем небольшой
размер, всего 2,56 × 1,18 × 0,20 дюйма (65 × 30 × 5 мм) и стоит
около 10 долл.
Pi Zero имеет 40 портов GPIO, которые расположены так же, как
и на уже знакомой вам Pi 3. Эта модель имеет видеоразъем mini-
HDMI и два разъема microUSB, один из которых предназначен ис-
ключительно для питания (см. рис. 20.2). Чтобы превратить Pi Zero
Робот с дистанционным Wi-Fi-управлением
304
Сборка схемы
Для сборки робота вам понадобится двухколесная платформа для
робота, два двигателя постоянного тока с соответствующими ко-
лесами, модуль MotoZero, соединительные провода и ваша Pi
(с возможностью Wi-Fi-подключения). При сборке рис. 20.1 будет
служить вам в качестве образца. Для начала установите модуль
MotoZero поверх вашей Raspberry Pi, а затем подключите к нему
двигатели.
ПРИМЕЧАНИЕ
Если при тестировании приложения на этапе завершения проекта
вы обнаружите, что колеса робота вращаются не в том направле-
нии, в котором нужно вам, поменяйте местами красные и черные
провода двигателей, подключенные к положительным (+) и отри-
цательным (–) контактам Motor 1 или Motor 2 на MotoZero.
Motor 1 Motor 2
enable: GPIO 5 enable: GPIO 6
Motor 1 (+): GPIO 27 Motor 2 (+): GPIO 22
Motor 1 (–): GPIO 24 Motor 2 (–): GPIO 17
ПРИМЕЧАНИЕ
Информацию о том, к каким портам GPIO можно подключать
Motor 3 и Motor 4, вы можете найти в руководстве по использо-
ванию модуля MotoZero на его странице в интернет-магазине The
Pi Hut: https://thepihut.com / motozero /
Разработка приложения
Итак, сборка закончена, пора приступать к разработке приложения
Node-RED. Но ваша Pi уже занята — установлена на двухколесную
платформу робота, поэтому проще всего создавать приложение Node-
RED, а затем и управлять роботом с помощью обычного настольного
компьютера или ноутбука.
В первую очередь вам нужно узнать IP-адрес вашей Raspberry Pi
Zero W, чтобы получить доступ к панели управления Node-RED ва-
шей Pi. Именно на ней вы сможете создать приложение для управ-
ления роботом.
Прежде чем продолжить, убедитесь, что Raspberry Pi включена
и что ваш компьютер и Pi подключены к одной сети.
ПРЕДУПРЕЖДЕНИЕ
Плата Raspberry Pi Zero W имеет два порта mini-USB. Один из них,
обозначенный PWR IN, предназначен для питания Pi.
Разработка приложения
309
ПРИМЕЧАНИЕ
Для знакомства с Node-RED см. проект 17.
Робот с дистанционным Wi-Fi-управлением
310
Узел Свойства
Forward Group: Главная [Робот]
Size: auto
Icon: fa-arrow-up
Label: Вперед
Payload: forward
Left Group: Главная [Робот]
Size: auto
Icon: fa-arrow-left
Label: Налево
Payload: left
Right Group: Главная [Робот]
Size: auto
Icon: fa-arrow-right
Label: Направо
Payload: right
Reverse Group: Главная [Робот]
Size: auto
Icon: fa-arrow-down
Label: Назад
Payload: reverse
Stop Group: Главная [Робот]
Size: auto
Icon: fa-hand-paper-o
Label: Остановка
Payload: stop
f Function: введите код из листинга 20.1
Outputs: 6
Enable M1 GPIO: GPIO 5–29
Type: Digital output
+ M1 GPIO: GPIO 27–13
Type: Digital output
– M1 GPIO: GPIO 24–18
Type: Digital output
Enable M2 GPIO: GPIO 17–11
Type: Digital output
+ M2 GPIO: GPIO 6–31
Type: Digital output
– M2 GPIO: GPIO 22–15
Type: Digital output
Робот с дистанционным Wi-Fi-управлением
312
Написание скрипта
Запуск приложения
Теперь ваше Node-RED-приложение готово. Откройте в браузере
страницу http://<IP-адрес вашей Pi>:1880 / ui (не забудьте заменить
Запуск робота
315
Запуск робота
Теперь, когда приложение готово, нажмите кнопку выключения
Raspberry Pi и подождите несколько секунд до полного ее отклю-
чения.
Замените источник питания Pi на внешний аккумулятор. Подожди-
те несколько минут, пока включится Pi и автоматически запустится
Робот с дистанционным Wi-Fi-управлением
316
Окончание табл.
Функция Обозна- Номер Номер Обозна- Функция
чение вывода вывода чение
GND 25 26 GPIO 7 SPI_CE1_N
2
I C ID EEPROM DNC 27 28 DNC I2C ID EEPROM
GPIO 5 29 30 GND
GPIO 6 31 32 GPIO 12
GPIO 13 33 34 GND
GPIO 19 35 36 GPIO 16
GPIO 26 37 38 GPIO 20
GND 39 40 GPIO 21
Приложение Б.
Таблица цветовой маркировки
резисторов
Это руководство подскажет вам, как определить значения сопротив-
лений резисторов по их цветовой маркировке.
Резистор — компонент, который создает сопротивление электриче-
скому току, ограничивая его величину на отдельных участках элек-
трической цепи. В проектах этой книги вы применяете резисторы
в основном для того, чтобы ограничить ток, протекающий через све-
тодиоды.
Используйте таблицу цветовой маркировки резисторов при вы-
полнении проектов этой книги. Она поможет вам определить значе-
ние сопротивления выбранного вами резистора по цветным полоскам
на его корпусе.
1
В России продаются также резисторы с пятью полосками. Для них номинал —
первые три (а не две) полоски. — Прим. перев.
Приложения
320
ʗʒʟʢʧʙʗǡʗʜʠʡʟʢʛʔʜʡʪǡ
ʒʏʓʕʔʡʪˋˏːˑˆˑˈˇ˓˖ˆˑˈ
Открой для себя дверь в мир электроники и программирования с помощью
Raspberry Pi®!
Придумывайте и реализуйте свои фантазии в виде всевозможных забавных и полезных про-
ектов на основе Raspberry Pi! Этот крошечный недорогой компьютер позволит вам быстро
создавать настоящие электронные гаджеты. Ознакомьтесь с кратким вводным курсом по
настройке Raspberry Pi, выберите проект, который вам приглянулся, и начинайте творить!
Каждый проект снабжен всем, что требуется для его воплощения: пошаговые инструк-
ции, красочные фотографии, электрические схемы и даже готовые программные коды. По
мере усложнения проектов вы освоите работу с ЖК-дисплеями, камерой и датчиками, а также
настроите собственный веб-сервер.
20 проектов с пошаговыми инструкциями:
1. Мигание светодиодом
2. Кнопочный светодиодный фонарик
3. Регулятор яркости светодиода
4. Графический пользовательский интерфейс
для управления многоцветным светодиодом
5. Радужная светодиодная лента
6. Отображение напоминаний на ЖК-дисплее
7. Мини-устройство прогноза погоды
8. Игра в Pong с Sense Hat
9. Сенсорная погодная станция «все-в-одном»
10. Охранная сигнализация с уведомлением по e-mail
11. Газовая и дымовая сигнализация
12. Регистратор температуры и влажности
13. Детектор взлома с фоторегистрацией
14. Система домашнего видеонаблюдения
15. Ваш первый веб-сайт
16. Подключение электроники к Интернету
17. Создание центра управления Интернетом вещей
с помощью Node-RED
18. Цифровая барабанная установка
19. Игра Hungry Monkey на языке Scratch
20. Робот с дистанционным Wi-Fi управлением
6+