/
Теги: взаимодействие сетей межсетевой обмен программирование
ISBN: 978-5-93700-296-9
Текст
Гарет Халфакри
Raspberry Pi.
Официальное руководство
для начинающих
The Official Raspberry Pi
Beginner’s Guide,
5th Edition
How to use your new computer
Gareth Halfacree
Raspberry Pi.
Официальное руководство
для начинающих
Как пользоваться микрокомпьютером
Гарет Халфакри
Москва, 2024
УДК 004.738, 004.62, 519.6
ББК 32.973
Х17
Х17 Гарет Халфакри
Raspberry Pi. Официальное руководство для начинающих. / пер. с англ.
С. В. Черникова. – М.: ДМК Пресс, 2024. – 286 с.: ил.
ISBN 978-5-93700-296-9
Raspberry Pi – это миниатюрный компьютер, обладающий огромным
потенциалом. Созданный на базе энергоэффективного настольного
процессора, Raspberry Pi предназначен в том числе и для того, чтобы
стать вашим помощником в обучении программированию. Вы научитесь настраивать Raspberry Pi и устанавливать операционную систему
Raspberry Pi OS; программировать с помощью пошаговых инструкций
на языках Scratch 3, Python и MicroPython; подключать дополнительные
электронные устройства. Материал обновлен с учетом новейших моделей микрокомпьютеров Raspberry Pi 5 и Raspberry Pi Zero 2 W, кроме
того, добавлена глава про Raspberry Pi Pico.
Издание предназначено начинающим пользователям Raspberry Pi,
готовым получать удовольствие от создания удивительных проектов!
First published in 2023 by Raspberry Pi, Ltd. Copyright © 2024 Gareth Halfacree. All rights
reserved. Russian-language edition copyright © 2024 by DMK Press. All rights reserved.
Все права защищены. Любая часть этой книги не может быть воспроизведена в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения
владельцев авторских прав.
Материал, изложенный в данной книге, многократно проверен. Но, поскольку вероятность технических ошибок все равно существует, издательство не может гарантировать
абсолютную точность и правильность приводимых сведений. В связи с этим издательство
не несет ответственности за возможные ошибки, связанные с использованием книги.
ISBN 978-1-912047-26-0 (англ.)
ISBN 978-5-93700-296-9 (рус.)
Copyright © 2024 Gareth Halfacree
© Оформление, перевод на русский язык,
издание, ДМК Пресс, 2024
Оглавление
Добро пожаловать в официальное руководство
по использованию Raspberry Pi..................................................................... 9
Об авторе........................................................................................................ 10
Вступительное слово..................................................................................... 11
Глава 1. Знакомство с Raspberry Pi.............................................................. 13
Экскурсия по Raspberry Pi.................................................................................14
Компоненты Raspberry Pi....................................................................................... 15
Порты Raspberry Pi.................................................................................................. 17
Raspberry Pi 400..................................................................................................21
Raspberry Pi Zero 2 W.........................................................................................22
Глава 2. Начинаем работу с Raspberry Pi..................................................... 25
Настройка оборудования..................................................................................27
Сборка корпуса для Raspberry Pi......................................................................27
Сборка корпуса Raspberry Pi Zero.....................................................................29
Подключение microSD-карты................................................................................. 30
Подключение клавиатуры и мыши........................................................................ 31
Подключение дисплея............................................................................................ 32
Подключение сетевого кабеля (опционально)...................................................... 33
Подключение Raspberry Pi к источнику питания................................................. 33
Настройка Raspberry Pi 400...............................................................................35
Подключение мыши................................................................................................ 35
Подключение дисплея............................................................................................ 35
Подключение сетевого кабеля (опционально)...................................................... 36
Подключение Raspberry Pi 400 к источнику питания........................................... 36
Глава 3. Использование Raspberry Pi........................................................... 39
Окно приветствия..............................................................................................39
Навигация по рабочему столу...........................................................................42
Браузер Chromium.............................................................................................46
Файловый менеджер.........................................................................................47
Инструмент Recommended Software.................................................................51
Офисный пакет LibreOffice................................................................................53
Инструмент Raspberry Pi Configuration............................................................55
Обновления ПО..................................................................................................57
Выключение.......................................................................................................58
Глава 4. Программируем на Scratch 3.......................................................... 61
Знакомство с интерфейсом Scratch 3...............................................................61
Ваша первая Scratch-программа: Привет, мир!..............................................63
6
Оглавление
Следующий шаг – последовательность действий...........................................65
Цикличность............................................................................................................ 68
Переменные и условные конструкции.................................................................. 70
Проект № 1 «Скорость реакции космонавта»..................................................77
Проект № 2 «Синхронное плавание»...............................................................85
Проект № 3 «Стрельба из лука»........................................................................93
Глава 5. Программируем на Python............................................................. 99
Thonny – интегрированная среда разработки для Python..............................99
Ваша первая программа на Python: Привет, мир!........................................100
Следующий шаг: циклы и отступы в коде.....................................................103
Условные конструкции и переменные................................................................ 106
Проект 1 «Черепашьи подсолнухи»................................................................110
Проект 2 «Поиск страшных отличий»............................................................117
Проект 3 «Текстовый квест»............................................................................122
Глава 6. Физические вычисления на базе Scratch и Python.....................129
Интерфейс GPIO..............................................................................................129
Считываем цветовую маркировку резисторов................................................... 134
Ваша первая электронная программа: Hello, LED!............................................. 136
Управление светодиодом с помощью Scratch .................................................... 138
Управление светодиодом с помощью Python...................................................... 140
Использование макетной платы.......................................................................... 141
Следующий шаг: работа с кнопкой...................................................................... 142
Управление кнопкой с помощью Scratch............................................................ 143
Управление кнопкой с помощью Python............................................................. 146
Пошумим: управление излучателем звука......................................................... 147
Управление излучателем звука с помощью Scratch........................................... 148
Управление излучателем звука с помощью Python............................................ 149
Проект на Scratch «Светофор»........................................................................150
Проект на Python «Игра на реакцию»............................................................157
Глава 7. Физические вычисления с помощью Sense HAT.........................163
Изучаем плату Sense HAT................................................................................164
Подключение Sense HAT....................................................................................... 166
Привет, Sense HAT!................................................................................................ 168
Приветствие с помощью Scratch.......................................................................... 168
Приветствие с помощью Python.......................................................................... 172
Следующий шаг: светоживопись......................................................................... 175
Рисование с помощью Scratch.............................................................................. 176
Рисование с помощью Python ............................................................................. 179
Ощущаем окружающий мир...........................................................................184
Экологический мониторинг................................................................................. 185
Экологический мониторинг с помощью Scratch................................................ 185
Экологический мониторинг с помощью Python................................................. 187
Инерциальная система отсчета............................................................................ 191
Инерциальная система отсчета в Scratch ........................................................... 192
Оглавление 7
Инерциальная система отсчета в Python............................................................ 193
Управление джойстиком.................................................................................196
Управление джойстиком с помощью Scratch...................................................... 196
Управление джойстиком с помощью Python...................................................... 198
Проект в Scratch: бенгальский огонек............................................................200
Проект в Python: трикордер............................................................................202
Глава 8. Модуль камеры для Raspberry Pi..................................................207
Типы камер......................................................................................................208
Raspberry Pi Camera Module 3............................................................................... 208
Raspberry Pi High Quality Camera.......................................................................... 209
Raspberry Pi Global Shutter Camera ...................................................................... 209
Raspberry Pi Camera Module 2............................................................................... 209
Установка модуля камеры...............................................................................210
Съемка видео......................................................................................................... 215
Замедленная видеосъемка................................................................................... 217
Дополнительные настройки камеры.............................................................220
Команды libcamera-still и libcamera-vid.............................................................. 220
Команда libcamera-still......................................................................................... 222
Глава 9. Модели Raspberry Pi Pico и Pico W................................................225
Краткий экскурс по Raspberry Pi Pico.............................................................226
Штыревые вилки.............................................................................................229
Установка MicroPython....................................................................................230
Контакты на плате Pico...................................................................................233
Подключение Thonny к Pico............................................................................235
Первая программа на MicroPython: Hello, World!.........................................236
Первая программа для физических вычислений: Hello, LED!......................239
Приложение А. Установка операционной системы
на microSD-карту..........................................................................................245
Загрузка Raspberry Pi Imager...........................................................................245
Запуск Raspberry Pi Imager по сети.................................................................246
Запись ОС на microSD-карту ..........................................................................247
Приложение Б. Установка и удаление программного обеспечения.......251
Просмотр доступного программного обеспечения......................................251
Установка программ........................................................................................253
Удаление программ.........................................................................................255
Приложение В. Интерфейс командной строки.........................................259
Загрузка программы Терминал......................................................................259
Приглашение...................................................................................................260
Навигация по каталогам.................................................................................260
Работа с файлами............................................................................................262
Запуск программ.............................................................................................263
Использование TTY-абстракции....................................................................263
8
Оглавление
Приложение Г. Дополнительные материалы............................................267
Приложение Bookshelf.....................................................................................267
Новости Raspberry Pi.......................................................................................268
Проекты Raspberry Pi.......................................................................................268
Образовательный ресурс Raspberry Pi...........................................................269
Форумы Raspberry Pi........................................................................................270
Журнал MagPi...................................................................................................270
Журнал HackSpace...........................................................................................271
Приложение Д. Инструмент настройки Raspberry Pi................................273
Вкладка System................................................................................................273
Вкладка System................................................................................................275
Вкладка Interfaces............................................................................................276
Вкладка Performance .......................................................................................277
Вкладка Localisation........................................................................................278
Приложение Е. Технические характеристики Raspberry Pi.....................281
Raspberry Pi 5....................................................................................................281
Raspberry Pi 4 и 400..........................................................................................282
Raspberry Pi Zero 2 W.......................................................................................282
Предметный указатель................................................................................283
Добро пожаловать
в официальное руководство
по использованию Raspberry Pi
Мы уверены, что вам понравится доступный и компактный компьютер Raspberry Pi. Независимо от модели – стандартная версия Raspberry Pi, компактная
Raspberry Pi Zero 2 W или Raspberry Pi 400 со встроенной клавиатурой, – этот
доступный компьютер может выступать в качестве помощника в обучении
программированию, создания роботов и других странных, но очень оригинальных и интересных проектов.
Raspberry Pi собрал в себе все те функции, которыми обладают обычные компьютеры, начиная от поддержки интернета и всевозможных игр и заканчивая
возможностью воспроизведения музыки и фильмов.
Однако Raspberry Pi – это что-то большее, чем просто современный компьютер. С его помощью вы можете изучить компьютер изнутри, а именно создать
собственную операционную систему и соединить провода, цепи и контакты
на плате воедино. Целью создания Raspberry Pi является обучение подростков
программированию с помощью Scratch, Python и других популярных языков
программирования, которые встроены в систему нашего компьютера. На основе Raspberry Pi Pico вы можете создавать компактные устройства с низким
энергопотреблением, взаимодействующие с реальным миром.
На данном этапе профессия программиста очень востребована, а Raspberry
Pi помог пробудить интерес в молодом поколении к этой сфере.
Raspberry Pi востребован среди людей абсолютно разных возрастов. С его
помощью можно создать все, что угодно, как старомодные игровые консоли,
так и метеорологические станции с выходом в интернет.
Советуем ознакомиться с этим руководством, если у вас есть желание на
учиться создавать игры, строить роботов или даже взламывать некоторые программы как настоящие хакеры.
Файлы с примерами кода и дополнительную информацию об этой книге,
включая исправления ошибок, вы найдете в репозитории GitHub по адресу
rptl.io/bg-resources. Если вы обнаружили в книге ошибку или неточность, пожалуйста, сообщите об этом в издательство с помощью веб-формы на сайте
rptl.io/bg-errata.
Об авторе
Гарет Халфакри – внештатный технологический журналист, писатель и
бывший системный администратор в сфере образования. Молодой человек,
страстно интересующийся бесплатным программным обеспечением и техническим оснащением, считается одним из первых последователей Raspberry Pi.
Гарет даже опубликовал несколько статей о возможностях данного компьютера и о том, как он удобен в использовании. Познакомиться с ними можно в
социальной сети Mastodon, перейдя в его профиль @ghalfacree@mastodon.
social, либо на сайте freelance.halfacree.co.uk.
Вступительное слово
Raspberry Pi – доступный способ сотворить что-нибудь полезное или веселое.
Демократизация технологий – предоставление общественного доступа к
инструментарию – мотивировала нас с самого начала работы над проектом
Raspberry Pi. Снизив стоимость универсальных вычислительных устройств до
нескольких тысяч рублей, мы открыли возможность любым пользователям
задействовать компьютеры в проектах, которые раньше требовали внушительных капиталовложений. Сегодня, когда ограничения сведены на нет, компьютеры Raspberry Pi используются повсюду – от интерактивных музейных и
школьных экспозиций до национальных почтовых сортировочных центров
и административных служб поддержки. Частные предприниматели по всему
миру смогли масштабировать свой бизнес и добиться успеха, что было бы невозможно в мире, где интеграция технологий означала колоссальные капиталовложения на ноутбуки и ПК.
Благодаря Raspberry Pi компьютерные технологии стали по средствам людям всех демографических групп: теперь дети могут получить ранее недоступное образование в сфере ИТ, а взрослые, многие годы лишенные возможности
приобрести компьютеры для бизнеса, развлечений и творчества, – заполнить
этот пробел с помощью Raspberry Pi.
Raspberry Pi Press
store.rpipress.cc
Raspberry Pi Press – ваше незаменимое издательство материалов по ИТ,
играм и творчеству. Это подразделение компании Raspberry Pi Ltd, относящейся к организации Raspberry Pi Foundation. Все навыки, от сборки компьютеров
до конструирования сложнейших устройств, вы получите, читая широкий ассортимент наших книг и журналов, удовлетворяя свою страсть к креативу.
MagPi
magpi.raspberrypi.com
MagPi – официальный журнал, посвященный Raspberry Pi. Созданный для
сообщества Raspberry Pi, журнал полон Pi-проектов, учебных материалов по
вычислительной технике и электронике, руководств по эксплуатации, а также
последних тематических новостей и событий.
HackSpace
hackspace.raspberrypi.com
Журнал HackSpace полон проектов для гиков и профи всех мастей. Вы научитесь новым приемам и отполируете имеющиеся, от 3D-печати, лазерной резки и деревообработки до электроники и интернета вещей. Журнал HackSpace
вдохновит вас мечтать о большем и творить лучше.
Глава
1
Знакомство с Raspberry Pi
Давайте изучим ваш новый крошечный компьютер Raspberry Pi. Рассмотрим, как он работает, и откроем безграничный мир возможностей
этого девайса.
Raspberry Pi – замечательное устройство. Это точная, бюджетная, миниатюрная копия полноценного компьютера. Вне зависимости от ваших целей, будь
то поиск информации в интернете, игры, написание собственных программ,
конструирование цепей или подключение физических устройств, Raspberry Pi,
оснащенный замечательным дополнительным оборудованием и сопровождаемый отзывчивым сообществом, несомненно поддержит вас во всех начинаниях.
Raspberry Pi известен как одноплатный компьютер. Из определения мы понимаем, что данное устройство состоит из одной печатной платы, при этом
схоже со стационарным компьютером, ноутбуком или смартфоном. Как и
большинство одноплатных компьютеров, Raspberry Pi имеет небольшой размер (с банковскую карту), но это не означает, что он абсолютно не мощный.
Напротив, Raspberry Pi обладает теми же функциями, которыми обладают более мощные компьютеры, – от просмотра веб-страниц и запуска игр до управления другими устройствами.
Серия компьютеров Raspberry Pi появилась благодаря желанию распространить рациональное обучение программированию по всему миру. Поначалу
основатели некоммерческого фонда не ожидали, что устройство окажется настолько популярным. В 2012 году несколько тысяч устройств были мгновенно
скуплены из-за необходимости проверки качества водных ресурсов, а в последующие годы свыше пятидесяти миллионов девайсов были распространены
уже по всему миру. Вскоре устройства Raspberry Pi стали неотъемлемой частью
в большинстве школ, домов, офисов, информационных центров, фабрик и
даже беспилотных лодок и космических аэростатов.
Все началось с модели В. В дальнейшем она была модифицирована под различные конкретные случаи использования. Отсюда и появилась серия компьютеров Raspberry Pi, где каждая последующая модель является улучшенной
версией предыдущей. Возьмем, к примеру, модель Raspberry Pi Zero, которая
представляет собой мини-версию полноразмерного компьютера Raspberry Pi.
14
Глава 1. Знакомство с Raspberry Pi
У модели Zero в силу своего размера и низкого энергопотребления отсутствуют
некоторые функции: несколько USB-разъемов и интерфейс проводной сети.
Несмотря на отличительные черты каждой модели, в целом они совместимы. Поэтому программное обеспечение (ПО), созданное для одной модели, подойдет и для всех других. Если хотите убедиться сами, то просто установите на
прототип модели В последнюю версию операционной системы Raspberry Pi.
Конечно, работать она будет гораздо медленнее, чем должна, но все же.
В этом руководстве речь пойдет о новейших и самых мощных версиях
Raspberry Pi – Raspberry Pi 4 Model B, Raspberry Pi 5, Raspberry Pi 400 и Raspberry
Pi Zero 2 W. Однако если вы используете другую модель семейства Raspberry Pi,
не волнуйтесь: вся информация, найденная вами здесь, легко применима и к
другим моделям.
Raspberry Pi 400
Если вы пользуетесь моделью Raspberry Pi 400, то микрокомпьютер встроен в корпус клавиатуры. Читайте далее, чтобы узнать обо всех компонентах, отвечающих за функционирование Raspberry Pi, или перейдите к разделу «Raspberry Pi 400», чтобы познакомиться именно с вашей моделью.
Raspberry Pi Zero 2 W
Если вы пользуетесь моделью Raspberry Pi Zero 2 W, некоторые порты и
компоненты будут отличаться от Raspberry Pi 4 Model B. Читайте далее,
чтобы узнать обо всех компонентах, отвечающих за функционирование
Raspberry Pi, или перейдите к разделу «Raspberry Pi Zero 2 W», чтобы познакомиться именно с вашей моделью.
Экскурсия по Raspberry Pi
В отличие от обычного компьютера, внутренние компоненты которого спрятаны в корпусе, все составляющие стандартной платы Raspberry Pi находятся на
поверхности. Если же вы хотите дополнительно защитить Raspberry Pi снаружи, то можете приобрести специальный корпус. Однако в отсутствии корпуса
есть свои плюсы: вы можете с легкостью изучить все компоненты Raspberry Pi
и процесс подключения дополнительных периферийных устройств.
На рис. 1-1 модель Raspberry Pi 5 показана сверху. Чтобы не запутаться, рекомендуем вам при изучении повернуть ваш мини-компьютер так же, как показано на рисунке, особенно когда речь идет об интерфейсе GPIO (подробно
поговорим о нем в главе 6).
Вам может показаться, что крошечная плата Raspberry Pi состоит из огромного количества сложных для понимания деталей. На самом деле составляющие и механизм работы устройства достаточно просты. Для начала изучим
компоненты, приводящие в работу внутренние компоненты устройства.
Экскурсия по Raspberry Pi 15
А.
Б.
В.
Г.
Интерфейс GPIO
Д.
Е.
Ж.
Разъем для вентилятора
З.
И.
К.
Порт Ethernet
Модуль беспроводной сети
Оперативная память
Микросхема контроллера ввода/вывода
RP1
USB 2.0
USB 3.0
Разъем питания через Ethernet (PoE)
Л.
М.
Н.
Порт 1 для камеры/дисплея CSI/DSI
О.
П.
Р.
С.
Система на кристалле
Т.
У.
Кнопка питания
Разъем micro-HDMI 1
Разъем для последовательного
порта UART
Разъем micro-HDMI 0
Разъем аккумулятора RTC
Разъем питания USB Type-C
Разъем PCI Express (PCIe)
Порт 0 для камеры/дисплея CSI/DSI
Рис. 1-1. Raspberry Pi 5
Компоненты Raspberry Pi
Как и любой компьютер, Raspberry Pi состоит из определенного набора
компонентов, каждая из которых выполняет определенную функцию в дальнейшей его работе. Наиболее важный из них – система на кристалле (systemon-chip, SoC). Найти его можно чуть левее центра платы. Компонент защищен
металлической крышкой (рис. 1-2).
Название «система на кристалле» говорит само за себя. Если вы решите посмотреть, что находится под крышкой, то увидите кремниевый кристалл, который носит название интегральной схемы. Она и составляет основную часть
16
Глава 1. Знакомство с Raspberry Pi
механизма Raspberry Pi. Сюда также входят: центральный процессор (central
processing unit, CPU), часто известный как «мозг» компьютера, и графический
процессор (graphics processing unit, GPU), отвечающий за визуализацию изображения и вывод информации на дисплей.
Однако работа процессора не имеет смысла без наличия памяти. Сбоку от
системы на кристалле вы можете заметить маленький черный пластиковый
квадрат (рис. 1-3). Это чип, отвечающий за память, – оперативная память
(random access memory, RAM) Raspberry Pi. При работе на Raspberry Pi все данные хранятся именно в оперативной памяти. И только после того, как вы сохраните свою работу, они будут записаны на microSD-карту. В совокупности
эти элементы составляют два вида памяти Raspberry Pi, энергозависимую и
энергонезависимую: энергозависимая оперативная память теряет все свои
данные при отключении Raspberry Pi от питания, в то время как энергонезависимая microSD-карта, напротив, сохраняет свое содержимое.
Рис. 1-2. Система на кристалле
на плате Raspberry Pi
Рис. 1-3. Оперативная память
Raspberry Pi
Обратите внимание на левый верхний угол платы. Здесь находится еще одна
металлическая крышка (рис. 1-4), защищающая модуль беспроводной сети, позволяющий Raspberry Pi соединяться с другими устройствами по воздуху. Этот
модуль имеет две основные функции: во-первых, это связь по Wi-Fi, которая позволяет подключаться к сети другого компьютера, а во-вторых, связь по Bluetooth,
которая дает возможность подключать различные периферийные устройства
(например, компьютерную мышь) и передавать или получать данные от «умных
устройств» (например, смартфонов и датчиков), находящихся вблизи.
Еще один чип, покрытый черным пластиком с логотипом Raspberry Pi, вы
увидите на правой стороне платы, рядом с USB-разъемами (рис. 1-5). Это RP1,
микросхема контроллера ввода-вывода, отвечающего за работу четырех портов USB, порта Ethernet и большинства низкоскоростных интерфейсов для обмена данными с подключаемым оборудованием.
Еще один черный чип, самый маленький, находится чуть выше разъема питания USB Type-C, а именно в левом нижнем углу платы. Он получил название интегральной схемы управления питанием (power management integrated
circuit, PMIC) (рис. 1-6), поскольку преобразует энергию, поступившую из порта micro-USB, в энергию, необходимую для питания и дальнейшего запуска
Raspberry Pi.
Экскурсия по Raspberry Pi 17
Рис. 1-4. Модуль беспроводной сети
Raspberry Pi
Рис. 1-5. Чип контроллера RP1 платы
Raspberry Pi
Последняя микросхема черного цвета, расположенная ниже контроллера
RP1 под углом, помогает RP1 взаимодействовать с Ethernet-портом Raspberry
Pi. Она реализует в чипе RP1 так называемый физический интерфейс Ethernet
PHY, между портом Ethernet и контроллером Ethernet.
Рис. 1-6. Интегральная схема управления питанием Raspberry Pi
Если вам показалось все вышепрочитанное слишком сложным, не стоит переживать! Для использования Raspberry Pi вы не обязательно должны запоминать каждый компонент и его местоположение на плате.
Порты Raspberry Pi
В Raspberry Pi вы можете обнаружить целый ряд различных портов, начиная
с четырех портов универсальной последовательной шины (Universal Serial Bus,
USB) (рис. 1-7), размещенных в центре и внизу справа. Эти разъемы позволяют
подключить к компьютеру Raspberry Pi любые периферийные USB-устройства,
начиная от клавиатур и компьютерных мышей, заканчивая цифровыми камерами и Flash-накопителями. Если уточнить технические детали, существует два типа USB-портов: компоненты первых окрашены в черный цвет – это
порты, основанные на старой версии универсальной последовательной шины,
USB 2.0. Компоненты вторых окрашены в синий цвет – эти порты поддержи-
18
Глава 1. Знакомство с Raspberry Pi
вают гораздо более высокую скорость передачи данных, чем предыдущие, поскольку основаны на более новой версии: USB 3.0.
Слева от USB-портов находится Ethernet-порт, известный также как сетевой порт (рис. 1-8). Используйте этот разъем для подключения Raspberry Pi к
проводной компьютерной сети с помощью кабеля со штекером RJ45. Если вы
внимательно посмотрите на порт Ethernet, то заметите снизу два светоизлучающих диода (светодиода). Это светодиоды состояния, по которым мы с вами
можем определить, осуществлено соединение или нет.
Рис. 1-7. USB-порты
платы Raspberry Pi
Рис. 1-8. Ethernet-разъем
платы Raspberry Pi
Левее порта Ethernet, на нижней грани Raspberry Pi, находится разъем Power
over Ethernet (PoE) (рис. 1-9). Он вместе со специальной дополнительной платой
Raspberry Pi 5 PoE+ HAT (Hardware Attached on Top) и поддерживаемой моделью
PoE-коммутатора обеспечивает микрокомпьютер Raspberry Pi электроэнергией от порта Ethernet без необходимости подключать источник питания к разъему USB Type-C. Аналогичным разъемом оборудована и модель Raspberry Pi 4,
но несколько иначе; в моделях Raspberry Pi 4 и 5 используются разные версии
HAT для поддержки PoE.
Левее контактов PoE расположена пара разъемов необычной формы с плас
тиковыми заслонками, которые можно сдвинуть вверх. Это разъемы модулей
камеры и дисплея, также известные как последовательные интерфейсы камеры (CSI) и дисплея (DSI) (рис. 1-10).
Рис. 1-9. Разъем PoE на Raspberry Pi lkx
питания через интерфейс Ethernet
Рис. 1-10. Разъемы для модулей
камеры и дисплея Raspberry Pi
Экскурсия по Raspberry Pi 19
Вы можете использовать эти разъемы для подключения дисплеев с интерфейсом DSI, например Raspberry Pi Touchscreen Display, и специально разработанных модулей камеры семейства Raspberry Pi Camera Module (рис. 1-11).
Подробнее о модулях камеры мы поговорим в главе 8. Каждый порт поддерживает и ввод, и вывод, т. е. подключение как камеры, так и дисплея, поэтому к
одному компьютеру Raspberry Pi 5 можно подключить как две CSI-камеры, так
и два DSI-дисплея, либо по одному устройству каждого вида.
Слева от разъемов камеры и дисплея, на нижнем краю платы, находятся
микропорты мультимедийного интерфейса высокой четкости (High Definition
Multimedia Interface, HDMI) – уменьшенная версия разъемов, которые вы можете найти в игровых консолях, видеотехнике и телевизорах (рис. 1-12). Слово
«мультимедиа» в названии данного разъема говорит нам о том, что здесь передаются как аудио-, так и видеосигналы. Фраза же «высокая четкость» уверяет нас в их отличном качестве. Благодаря этому разъему вы можете подключать Raspberry Pi к одному-двум устройствам воспроизведения: к монитору
компьютера, телевизору или проектору.
Рис. 1-11. Модуль камеры
Raspberry Pi
Рис. 1-12. Разъемы micro-HDMI
платы Raspberry Pi
Между двумя портами micro-HDMI расположен небольшой разъем с надпи
сью «UART», реализующий доступ к последовательному интерфейсу универсального асинхронного приемопередатчика (UART, Universal Asynchronous
Receiver-Transmitter). В этой книге мы не рассматриваем этот порт, но он может
понадобиться вам в более сложных проектах для передачи данных или устранения неполадок.
Слева от портов micro-HDMI находится еще один небольшой разъем, на
этот раз с надписью «BAT». К нему можно подключить небольшой аккумулятор для поддержки работы часов реального времени (RTC) микрокомпьютера
Raspberry Pi, если тот обесточен. Тем не менее для работы Raspberry Pi не обязательно подключать аккумулятор, так как при включении микрокомпьютера
время автоматически синхронизируется через интернет.
В левом нижнем углу платы находится порт питания USB-порт типа Type-C
(рис. 1-13), предназначенный для подключения Raspberry Pi к источнику питания. Данный разъем часто используется в смартфонах, планшетах и других
портативных устройствах. Конечно, для питания вашего устройства вы можете использовать любой блок питания, однако лучше будет, если вы выберете
20
Глава 1. Знакомство с Raspberry Pi
именно оригинальный USB Type-C адаптер для Raspberry Pi: он лучше справляется с внезапным ростом потребления энергии, возникающим при интенсивной работе Raspberry Pi.
На левом краю платы расположена небольшая кнопка, направленная наружу. Это новая кнопка питания Raspberry Pi 5, которая используется для безопасного выключения микрокомпьютера после окончания работы с ним. Такой
кнопки нет на плате Raspberry Pi 4 и более старых моделях.
Выше кнопки питания находится еще один необычный разъем (рис. 1-14),
на первый взгляд похожий на уменьшенную версию разъемов CSI и DSI. Он
используется для передачи данных через шину PCI Express (PCIe) Raspberry Pi –
высокоскоростной интерфейс для подключения дополнительного оборудования, например твердотельных дисков (SSD). Чтобы использовать интерфейс
PCIe, вам понадобится плата адаптера Raspberry Pi PCIe HAT для преобразования описываемого компактного разъема в более распространенный слот PCIe
стандарта M.2. Для полноценного использования микрокомпьютера Raspberry
Pi адаптер HAT обычно не нужен, так что можете не обращать внимания на
этот разъем, пока он вам не понадобится.
Рис. 1-13. Разъем USB Type-C платы
Raspberry Pi
Рис. 1-14. Разъем PCI Express платы
Raspberry Pi
В верхней части платы вы можете заметить 40 металлических контактов,
разбитых на два ряда по 20 штук (рис. 1-15). Это низкоуровневый интерфейс
ввода/вывода общего назначения (general-purpose input/output, GPIO). Он необходим для взаимодействия с дополнительным оборудованием: светодиодами, различными кнопками, датчиками температуры, джойстиками, пульсомет
рами и т. д. Более детальная информация о GPIO приведена в главе 6.
Наконец мы добрались до финального порта Raspberry Pi, расположенного
далеко не на самом видном месте. Переверните плату, и вы увидите разъем
microSD-карты, находящийся в том же месте, только на другой стороне платы
(рис. 1-16). Этот разъем предназначен для подключения устройства хранения
данных Raspberry Pi: вставленная в него microSD-карта хранит все загруженные файлы, установленное программное обеспечение и операционную систему, под управлением которой работает Raspberry Pi. Также можно запус
тить Raspberry Pi без microSD-карты, загрузив соответствующее программное
обеспечение по сети, с USB-накопителя или с твердотельного накопителя M.2.
Raspberry Pi 400 21
В этой книге мы сосредоточимся на наипростейшем подходе – использовании
microSD-карты в качестве основного устройства хранения данных.
Рис. 1-15. Вилка штырьевая
интерфейса GPIO платы Raspberry Pi
Рис. 1-16. Разъем для подключения
microSD-карты на плате Raspberry Pi
Raspberry Pi 400
В Raspberry Pi 400 используются те же компоненты, что и в Raspberry Pi 4, в том
числе система на кристалле и модуль оперативной памяти, и все они помещены в удобный корпус с клавиатурой. Помимо защиты электронных компонентов от механических воздействий, корпус устройства занимает меньше места
на столе и избавляет пользователя от необходимости распутывать многочисленные провода.
Не разобрав корпуса, до внутренних компонентов не добраться, зато можно
увидеть внешние элементы, начиная с самой клавиатуры (рис. 1-17). В правом верхнем углу корпуса расположены три светодиода: первый загорается
при активации режима Num Lock, который переключает некоторые клавиши в
режим ввода цифр (как цифровая панель на полноразмерной клавиатуре); второй загорается при выборе режима Caps Lock, допускающего ввод прописных
букв без удерживания клавиши Shift; а третий оповещает о подаче питания на
Raspberry Pi 400.
На задней панели корпуса Raspberry Pi 400 (рис. 1-18) вы увидите различные
порты. Слева расположен низкоуровневый интерфейс ввода/вывода общего
назначения (GPIO). Он аналогичен разъему, показанному на рис. 1-15, только
перевернут: контакт 1 располагается вверху справа, а контакт 40 – внизу слева.
Подробнее об интерфейсе GPIO вы узнаете в главе 6.
Рис. 1-17. Плата Raspberry Pi 400 интегрирована в клавиатуру
22
Глава 1. Знакомство с Raspberry Pi
Рис. 1-18. Разъемы на задней стороне корпуса Raspberry Pi 400
Рядом с разъемом GPIO расположен слот для карты памяти формата microSD.
Как и в случае с моделью Raspberry Pi 5, в этот разъем вставляется для записи файлов операционной системы, приложений и прочих данных Raspberry
Pi 400. Модель Raspberry Pi 400 комплектуется microSD-картой, уже вставленной в описываемый разъем. Чтобы извлечь ее, аккуратно надавите на карту до
щелчка, а затем вытяните ее из разъема. Устанавливая карту в разъем, убедитесь, что ее блестящие металлические контакты направлены вниз. Осторожно
вставьте карту до щелчка, чтобы она зафиксировалась в разъеме.
Следующие два отверстия открывают доступ к портам micro-HDMI, используемым для подключения монитора, телевизора или другого устройства вывода изображения. Как и модели Raspberry Pi 4 и Raspberry Pi 5, устройство
Raspberry Pi 400 поддерживает подключение через интерфейс HDMI одного
или двух дисплеев. Рядом расположен порт USB-C для подачи на Raspberry Pi
питания от оригинального блока питания Raspberry Pi или любого другого совместимого блока питания со штекером USB-C.
Два синих порта USB 3.0 обеспечивают высокоскоростное подключение к
таким устройствам, как твердотельные накопители (SSD), кардридеры, принтеры и т. д. Белый порт правее – более низкоскоростной порт USB 2.0, который
можно использовать для подключения мыши Raspberry Pi Mouse, входящей в
комплект Raspberry Pi 400.
Последний порт – гигабитный сетевой порт RJ45, используемый для подключения Raspberry Pi 400 к сети Ethernet с помощью витой пары. Это необходимо для подключения устройства к интернету, если доступ к Wi-Fi сетям по
каким-то причинам отсутствует. Подробнее о подключении Raspberry Pi 400 к
сети вы прочитаете в главе 2.
Raspberry Pi Zero 2 W
Микрокомпьютер Raspberry Pi Zero 2 W (рис. 1-19) во многом обладает теми
же возможностями, что и другие модели семейства Raspberry Pi, но при этом
гораздо компактнее. Он дешевле и потребляет меньше электроэнергии, но и в
нем отсутствуют несколько портов, которые есть у более крупных собратьев.
Raspberry Pi Zero 2 W 23
Рис. 1-19. Модель Raspberry Pi Zero 2 W
В отличие от моделей Raspberry Pi 5 и Raspberry Pi 400, микрокомпьютер
Raspberry Pi Zero 2 W не оборудован разъемом для подключения к проводной
сети Ethernet. Выход в сеть доступен только через интерфейс Wi-Fi. Подробнее
о подключении Raspberry Pi Zero 2 W к сети вы узнаете в главе 2.
Вы также заметите разницу в системе на кристалле: здесь она черного цвета,
а не серебристого, и нет отдельного чипа оперативной памяти. Все дело в том,
что и система на кристалле, и оперативная память объединены в один чип с
вытравленным логотипом Raspberry Pi, расположенным практически в центре
платы.
В левой части платы расположен уже знакомый вам слот для карт памяти
формата microSD, а ниже – один порт mini-HDMI (не micro!) для передачи видео- и аудиосигналов. В отличие от моделей Raspberry Pi 5 и Raspberry Pi 400,
микрокомпьютер Raspberry Pi Zero 2 W поддерживает подключение только одного устройства вывода изображения.
Справа находятся два порта micro-USB: левый из них, с надписью USB, поддерживает технологию On-The-Go (OTG) для подключения клавиатур, мышей,
USB-концентраторов и других периферийных устройств с поддержкой OTG;
правый, с надписью PWR IN, используется для питания Raspberry Pi 400. Адаптер питания, предназначенный для Raspberry Pi 4 или Raspberry Pi 400, не подойдет к Raspberry Pi Zero 2 W, так как используются разные разъемы.
В правой части платы расположен последовательный интерфейс камеры,
который применяется для подключения модуля камеры Raspberry Pi. Подробнее об этом вы узнаете в главе 8.
Наконец, микрокомпьютер Raspberry Pi Zero 2 W оборудован таким же
40-контактным интерфейсом ввода/вывода общего назначения (GPIO), что и
старшие модели, но без самой вилки. То есть на плате нет штырьков для подключения. Если вы хотите использовать интерфейс GPIO, вам нужно припаять
на это место штырьевую вилку 2×20 с 2,54-мм контактами либо обратить внимание на модель Raspberry Pi Zero 2 WH, на плате которой вилка уже припаяна.
Глава
2
Начинаем работу
с Raspberry Pi
Изучаем подключение основных девайсов к микрокомпьютеру Rasp
berry Pi, так чтобы обеспечить его нормальную работу.
Цель разработчиков Raspberry Pi заключалась в разработке максимально прос
того и быстрого в сборке и использовании компьютера. Однако функцио
нирование Raspberry Pi, как и любого другого компьютера, невозможно без
подключения дополнительных аксессуаров, называемых периферийными
устройствами. Взгляните на ничем не защищенную печатную плату Raspberry
Pi. Она выглядит иначе, чем привычные вам стационарные компьютеры, содержимое которых скрыто корпусом. Возможно, вы начали переживать, что
вам будет нелегко разобраться с Raspberry Pi. На самом деле это не так. С нашим руководством, выполняя все шаги поэтапно, вы сможете подготовить
устройство к работе всего за 10 минут.
Если вы приобрели набор Raspberry Pi Desktop Kit, то у вас в наличии уже
имеются все необходимые для работы компоненты. Единственное, что от вас
потребуется, – компьютерный монитор или телевизор с интерфейсом HDMI –
стандартным разъемом для подключения аудио/видеотехники и игровых консолей. Монитор необходим для того, чтобы вы видели результат вашей работы.
Если же у вас нет комплекта Raspberry Pi Desktop Kit, то в дополнение к
Raspberry Pi 5 вам необходимо приобрести следующее:
• блок (адаптер) питания с интерфейсом USB. Для модели Raspberry
Pi 5 понадобится источник питания с напряжением 5 В (вольт) и силой тока 5 А (ампер), оборудованный штекером USB Type-C. Для моделей Raspberry Pi 4 Model B и Raspberry Pi 400 подойдет источник питания с напряжением 5 В и силой тока 3 А, оборудованный штекером
USB Type-C. Ну а модели Raspberry Pi Zero 2 W будет достаточно источника питания с напряжением 5 В и силой тока 2,5 А, оборудованного
штекером micro-USB. Мы рекомендуем выбирать оригинальные адаптеры питания Raspberry Pi, поскольку они отлично справляются с быстро
меняющимися потребностями в электропитании Raspberry Pi. Блоки
26
Глава 2. Начинаем работу с Raspberry Pi
питания сторонних производителей могут с задержкой реагировать на
смену потребления тока и вызывать проблемы с питанием Raspberry Pi;
• microSD-карта служит хранилищем информации в Raspberry Pi. Здесь
находятся все созданные вами файлы, а также программное обеспечение, установленное вместе с самой операционной системой. Для начала
вам хватит карты объемом 8 ГБ, однако карта на 16 ГБ предоставит вам
больше возможностей в будущем. В комплект Raspberry Pi Desktop Kit
входит microSD-карта с предустановленной ОС Raspberry Pi. Инструкции по установке операционной системы (ОС) на новую карту памяти
приведены в приложении А;
Рис. 2-1. Сетевой блок (адаптер) питания
Рис. 2-2. microSD-карта
• клавиатура и мышь с USB-интерфейсом позволяют управлять
Raspberry Pi. Почти любая проводная или беспроводная клавиатура и
мышь с разъемом USB будут функционировать с Raspberry Pi. Однако
«игровые» клавиатуры с подсветкой клавиш могут не подойти к устройству, поскольку потребляют слишком много энергии. Для подключения
клавиатуры/мыши к Raspberry Pi Zero 2 W понадобится переходник
micro-USB OTG, а если вы хотите подключить несколько USB-устройств
сразу, потребуется USB-концентратор с внешним питанием;
• HDMI-кабель. По нему звук и изображение передаются с Raspberry Pi
на телевизор или монитор. Для подключения моделей Raspberry Pi 4,
Raspberry Pi 5 и Raspberry Pi 400 нужен кабель с разъемами micro-HDMI
и HDMI, а для Raspberry Pi Zero 2 W – кабель с разъемами mini-HDMI и
HDMI. Вы также можете воспользоваться адаптером HDMI/micro-HDMI
или HDMI/mini-HDMI и стандартным HDMI-кабелем с полноразмерными
параметрами. Если ваш монитор не оборудован разъемом HDMI, вы можете приобрести переходники на интерфейсы DVI-D, DisplayPort или VGA.
Рис. 2-3. USB-клавиатура
Рис. 2-4. HDMI-кабель
Сборка корпуса для Raspberry Pi 27
Raspberry Pi вполне безопасно использовать без защитного корпуса, но только при условии, что не произойдет контакта с металлической поверхностью,
проводящей электричество и способной вызвать короткое замыкание. Специальный защитный корпус, однако, может обеспечить дополнительную защиту
для вашего компьютера. Комплект Raspberry Pi Desktop Kit включает в себя
оригинальный корпус для Raspberry Pi, а если у вас его нет, в любом специализированном магазине при желании вы также сможете подобрать себе подходящий.
Если вы хотите подключить свой компьютер Raspberry Pi 4, Raspberry Pi 5
или Raspberry Pi 400 к проводной сети, а не к беспроводной (Wi-Fi), вам понадобится сетевой Ethernet-кабель (витая пара), который одним концом будет
подключен непосредственно к плате, а другим – к сетевому коммутатору или
маршрутизатору (роутеру). Если же вы хотите воспользоваться встроенным в
Raspberry Pi модулем беспроводной сети, кабель вам не потребуется. Однако
вам понадобится знать название и пароль вашей беспроводной сети.
Настройка Raspberry Pi 400
Дальнейшие инструкции предназначены для настройки модели Raspberry
Pi 5 или иного представителя линейки Raspberry Pi на печатной плате. Настройки модели Raspberry Pi 400 приведены в соответствующем отделе
в конце этой главы.
Настройка оборудования
Для начала распакуйте Raspberry Pi. Плата достаточно прочная, однако это не
значит, что она неуязвима. Не хватайтесь за компоненты платы, возьмите ее
аккуратно за края. Если погнуть какие-нибудь штырьки или жир с пальцев попадет на контакты, то в лучшем случае у вас будут проблемы с подключением
оборудования и передачей данных, а в худшем – это может привести к короткому замыканию, которое повредит Raspberry Pi. Если вы начали читать руководство не с самого начала, то рекомендуем вернуться к главе 1, чтобы узнать
о размещении различных компонентов платы и их функциях.
Сборка корпуса для Raspberry Pi
Вашим первым шагом на данном этапе будет установка Raspberry Pi в корпус.
Если у вас оригинальный корпус для Raspberry Pi, то сначала разъедините три
его части: красное основание корпуса, вентилятор с каркасом и белую крышечку.
Возьмите красное основание корпуса и поверните его так, чтобы сторона со
стенкой находилась слева от вас, а сторона без стенки – справа (рис. 2-5).
Удерживая Raspberry Pi 5 (без вставленной microSD-карты) за USB и
Ethernet-разъемы под небольшим углом, аккуратно опустите другую сторону
28
Глава 2. Начинаем работу с Raspberry Pi
в основание до щелчка, чтобы компьютер Raspberry Pi плотно поместился в
чехол.
Рис. 2-5. Установка платы
Raspberry Pi 5 в корпус
Рис. 2-6. Подключение вентилятора
к плате
Установка вентилятора в сборе
Вентилятор уже должен быть вставлен в каркас, когда вы распакуете набор с Raspberry Pi. Если это не так, соберите вентилятор с каркасом, как
показано на рис. 2-7.
Теперь подключите белый JST-коннектор вентилятора к соответствующему разъему на плате Raspberry Pi 5, как показано на рис. 2-6. Он вставляется
только одной стороной, так что вы не перепутаете. Собранный вентилятор с
каркасом вставьте в корпус, как показано на рис. 2-7, и аккуратно надавите
до щелчка.
Чтобы полностью собрать корпус, возьмите белую крышку и расположите ее
так, чтобы логотип Raspberry Pi оказался около разъемов USB и Ethernet компьютера Raspberry Pi 5, как видно на рис. 2-8. Чтобы закрепить крышку, аккуратно надавите на ее центр до щелчка.
Рис. 2-7. Установка в корпус
вентилятора в сборе с каркасом
Рис. 2-8. Установка крышки
на верхнюю часть корпуса
Сборка корпуса Raspberry Pi Zero 29
Модули расширения HAT
Вы можете установить модуль расширения HAT (Hardware Attached on
Top) на Raspberry Pi 5 либо вместо вентилятора с каркасом, либо поверх
него с помощью 14-мм стоек и 19-мм переходника GPIO. Их можно приобрести отдельно в специализированных магазинах.
Сборка корпуса Raspberry Pi Zero
Если вы приобрели микрокомпьютер Raspberry Pi Zero 2 W, по его сборке читайте это руководство. Если у вас есть оригинальный корпус Raspberry Pi Zero,
сначала распакуйте его. Комплект состоит из четырех частей: красного основания и трех белых крышек.
Для сборки корпуса с платой Raspberry Pi Zero 2 вам понадобится сплошная
крышка. Если вы планируете использовать разъем GPIO, о котором говорится
в главе 6, выберите крышку с длинным прямоугольным отверстием. Если же
вы будете использовать модуль камеры версии 1 или 2, выберите крышку с
круглым отверстием.
Модули камер версии 3 и версии HQ не могут быть установлены вместе с
крышкой Raspberry Pi Zero с круглым отверстием и должны использоваться вне
корпуса; в конце корпуса Raspberry Pi Zero есть отверстие для кабеля камеры.
Возьмите основание и положите его на стол так, чтобы отверстия для портов
были обращены к вам, как показано на рис. 2-9.
Взяв плату Raspberry Pi Zero (со вставленной microSD-картой) за края, выровняйте ее так, чтобы маленькие круглые стойки в углах основания корпуса
вошли в монтажные отверстия в углах печатной платы Raspberry Pi Zero 2 W.
Когда они совпадут (рис. 2-10), аккуратно надавите на Raspberry Pi Zero 2 W,
пока не раздастся щелчок и порты не совпадут с отверстиями в корпусе.
Рис. 2-9. Корпус
Raspberry Pi Zero
Рис. 2-10. Установка Raspberry
Pi Zero в корпус
Возьмите подходящую белую крышку и установите ее на основание корпуса
Raspberry Pi Zero, как показано на рис. 2-11. Если вы устанавливаете крышку с
30
Глава 2. Начинаем работу с Raspberry Pi
круглым отверстием, убедитесь, что она не пережимает кабель. Когда крышка
будет установлена, аккуратно надавите на нее до щелчка.
Установка модуля камеры в корпус с крышкой
Если вы используете модуль камеры Raspberry Pi 1 или 2, используйте
крышку с круглым отверстием. Совместите монтажные отверстия модуля
камеры с крестообразными стойками в крышке так, чтобы разъем камеры был направлен в сторону логотипа на крышке. Защелкните крышку.
Аккуратно отодвиньте заслонку на разъеме камеры на плате Raspberry Pi,
затем вставьте узкий конец шлейфа камеры (которым та комплектуется)
в разъем и установите заслонку обратно. Аналогичным образом подключите широкий конец шлейфа к модулю камеры. Дополнительную информацию об установке модуля камеры см. в главе 8.
На этом этапе вы также можете приклеить входящие в комплект резиновые
ножки к нижней части корпуса (рис. 2-12): переверните корпус, отклейте ножки от подложки и приклейте их в круглые углубления основания, чтобы корпус
не скользил по поверхности.
Рис. 2-11. Установка крышки
Рис. 2-12. Приклеивание ножек
Подключение microSD-карты
Для установки microSD-карты – хранилища данных Raspberry Pi – переверните Raspberry Pi (в корпусе, если вы его собрали) и вставьте в слот microSD-карту наклейкой, повернутой в противоположную от Raspberry Pi сторону. Вставляться она может только одной стороной, при этом проскальзывать внутрь она
должна без чрезмерного давления (рис. 2-13).
MicroSD-карта плавно входит в разъем до упора и без щелчка.
Для Raspberry Pi Zero 2 W слот для microSD-карты находится сверху с левой стороны. Вставьте карту так, чтобы этикетка была направлена в сторону
от Raspberry Pi.
Если в дальнейшем вы захотите ее достать, то просто потяните за торчащий край и аккуратно вытащите. Если у вас более старая модель Raspberry Pi,
Сборка корпуса Raspberry Pi Zero 31
то сначала вам нужно будет слегка нажать на карту, чтобы высвободить ее из
разъема. В моделях Raspberry Pi 3, 4, 5 и Zero такую манипуляцию совершать
не нужно.
Рис. 2-13. Установка карты памяти формата microSD
Подключение клавиатуры и мыши
Подключите USB-кабель клавиатуры к любому из четырех USB-портов (черный USB 2.0 или синий USB 3.0) на Raspberry Pi, как показано на рис. 2-14. Если
вы используете оригинальную клавиатуру Raspberry Pi, на ее задней панели
есть USB-порт для подключения мыши. Если же такого разъема нет, подключите USB-кабель мыши к другому USB-порту Raspberry Pi.
Рис. 2-14. Подключение USB-кабеля к Raspberry Pi 5
Для Raspberry Pi Zero 2 W вам понадобится кабель-переходник micro-USB
OTG. Вставьте его в левый порт micro-USB, затем подключите USB-кабель от
клавиатуры к адаптеру USB OTG.
32
Глава 2. Начинаем работу с Raspberry Pi
Если вы используете клавиатуру и мышь по отдельности, а не клавиатуру со
встроенным тачпадом, вам понадобится USB-концентратор, подключенный к
источнику питания. Подключите кабель адаптера micro-USB OTG, как описано
выше, затем подключите USB-кабель концентратора к адаптеру USB OTG, после чего подключите клавиатуру и мышь к USB-концентратору. Наконец, подключите адаптер питания концентратора и включите его.
USB-штекеры клавиатуры и мыши должны легко входить в разъемы. Если
при подключении вам приходится применять силу, значит, вы делаете что-то
не так. Проверьте, той ли стороной вы вставляете USB-штекер в порт!
Клавиатура и мышь
Клавиатура и мышь выступают в качестве основных девайсов, управляющих работой Raspberry Pi. В программировании они известны как устройства ввода, в отличие от дисплея, который является устройством вывода.
Подключение дисплея
Если вы пользуетесь версией Raspberry Pi 4 и Raspberry Pi 5, подключите конец HDMI-кабеля штекером micro-HDMI к разъему micro-HDMI, находящемуся ближе к порту USB Type-C платы Raspberry Pi (рис. 2-16), а другой конец –
к дисплею.
В случае Raspberry Pi Zero 2 W (рис. 2-15) подключите конец HDMI-кабеля
штекером mini-HDMI к разъему mini-HDMI на левой стороне платы Raspberry
Pi, под слотом microSD, а другой конец – к дисплею.
Рис. 2-15. Подключение HDMI-кабеля
к Raspberry Pi Zero
Рис. 2-16. Подключение HDMI-кабеля
к Raspberry Pi 5
Если ваш дисплей оборудован несколькими HDMI-разъемами, посмотрите
номер, указанный рядом с разъемом; вам необходимо переключить телевизор на этот ввод, чтобы увидеть изображение с платы Raspberry Pi. Если вы
не понимаете, какой именно порт вам необходим, не волнуйтесь: вы можете
проверять каждый ввод по очереди, пока не найдете нужный.
Сборка корпуса Raspberry Pi Zero 33
Подключение к телевизору
Если на вашем телевизоре или мониторе отсутствует разъем HDMI, это
не значит, что у вас нет возможности подключить Raspberry Pi. На такой случай были созданы адаптеры, доступные сейчас в любом магазине электроники. Они позволят вам преобразовать интерфейс micro или
mini-HDMI Pi в DVI-D, DisplayPort или VGA для использования со старыми
мониторами.
Подключение сетевого кабеля (опционально)
Чтобы подключить Raspberry Pi к проводной сети, возьмите сетевой кабель,
известный как Ethernet-кабель или витая пара, – и вставьте его в порт Ethernet
в Raspberry Pi до щелчка. Пластиковый зажим при этом должен быть повернут
вниз. Если вам нужно извлечь кабель, надавите на пластиковый зажим по направлению к штекеру и осторожно потяните его на себя (рис. 2-17).
Таким же образом необходимо подключить другой конец сетевого кабеля к
любому свободному порту сетевого концентратора, коммутатора или маршрутизатора (роутера).
Подключение Raspberry Pi к источнику питания
Подключение Raspberry Pi к источнику питания – самый последний шаг
в процессе настройки оборудования, и сделать это вы должны только тогда,
когда будете готовы настроить его программное обеспечение: у Raspberry Pi
отсутствует кнопка включения и выключения, следовательно, устройство заработает сразу же после подключения к источнику питания.
Для Raspberry Pi 4 и Raspberry Pi 5: подключите конец USB-кабеля с разъ
емом Type-C к порту USB Type-C на плате Raspberry Pi (рис. 2-18). Он вставляется любой стороной без особых усилий. Если источник питания, к которому
вы подключили Raspberry Pi, имеет съемный кабель, убедитесь, что другой его
конец подключен к самому источнику питания.
Рис. 2-17. Подключение
Ethernet-кабеля к Raspberry Pi 5
Рис. 2-18. Подключение Raspberry Pi 5
к источнику питания
34
Глава 2. Начинаем работу с Raspberry Pi
Внимание!
Для Raspberry Pi 5 необходим блок питания с напряжением 5 В и силой
тока 5 А и подходящий кабель USB Type-C с чипом E-mark. Если вы подключите блок питания с меньшей силой тока, что касается и оригинального блока питания Raspberry Pi 4, то USB-порты Raspberry Pi 5 смогут
обеспечить работу только маломощных устройств.
Для Raspberry Pi Zero 2W: подключите конец USB-кабеля с разъемом microUSB к порту micro-USB на плате Raspberry Pi. Он вставляется только одной стороной, так что убедитесь, что держите штекер правильно.
Поздравляем: вы собрали Raspberry Pi!
Рис. 2-19. Микрокомпьютер Raspberry Pi готов к работе!
Наконец, подключите источник питания к разъему электропитания и подайте его. Ваш компьютер Raspberry Pi сразу же заработает.
На несколько секунд появится разноцветный кубик, а потом информационный экран с логотипом Raspberry Pi. Затем экран может окраситься в синий
цвет, пока загружается операционная система на microSD-карте. Если черный
цвет экрана не сменяется на синий, подождите несколько минут. При первой
загрузке Raspberry Pi компьютер упорядочивает данные в фоновом режиме.
Через некоторое время вы увидите рабочий стол Raspberry Pi OS и окно мас
тера первоначальной настройки, продемонстрированные на рис. 2-20. Теперь
вы можете перейти к настройке операционной системы, прочитав об этом
больше в главе 3.
Настройка Raspberry Pi 400 35
Рис. 2-20. Мастер настройки Raspberry Pi OS
Настройка Raspberry Pi 400
В отличие от модели Raspberry Pi 4, устройство Raspberry Pi 400 поставляется
встроенным в клавиатуру и с предустановленной microSD-картой. Для начала
работы вам все же придется подключить несколько кабелей, но это займет всего пару минут.
Подключение мыши
Клавиатура Raspberry Pi 400 уже подключена, осталось только добавить
мышь. Возьмите USB-кабель мыши и вставьте его в любой из трех USB-портов
(белый 2.0 или синий 3.0) на задней панели корпуса Raspberry Pi 400. Если вы
хотите использовать высокоскоростной интерфейс USB 3.0 для других аксес
суаров, используйте для подключения мыши белый порт USB 2.0.
USB-штекер мыши должен легко входить в разъем (рис. 2-21). Если при подключении вам приходится применять силу, значит, вы делаете что-то не так.
Проверьте, той ли стороной вы вставляете USB-штекер в порт!
Подключение дисплея
Подключите конец HDMI-кабеля штекером micro-HDMI к разъему microHDMI, находящемуся ближе к слоту microSD корпуса Raspberry Pi 400
(рис. 2-22), а другой конец к дисплею. Если ваш дисплей оборудован несколькими HDMI-разъемами, посмотрите номер, указанный рядом с разъемом; вам
необходимо переключить телевизор на этот ввод, чтобы увидеть изображение
с платы Raspberry Pi. Если вы не понимаете, какой именно порт вам необходим,
не волнуйтесь: вы можете проверять каждый ввод по очереди, пока не найдете
нужный.
36
Глава 2. Начинаем работу с Raspberry Pi
Рис. 2-21. Подключение USB-кабеля
к Raspberry Pi 400
Рис. 2-22. Подключение HDMI-кабеля
к Raspberry Pi 400
Подключение сетевого кабеля (опционально)
Чтобы подключить Raspberry Pi 400 к проводной сети, возьмите сетевой
кабель, известный как Ethernet-кабель или витая пара, и вставьте его в порт
Ethernet на корпусе Raspberry Pi 400 до щелчка. Пластиковый зажим при этом
должен быть повернут вверх. Если вам нужно извлечь кабель, надавите на плас
тиковый зажим по направлению к штекеру и осторожно потяните его на себя.
Таким же образом необходимо подключить другой конец сетевого кабеля к
любому свободному порту сетевого концентратора, коммутатора или маршрутизатора (роутера).
Подключение Raspberry Pi 400 к источнику питания
Подключение Raspberry Pi 400 к источнику питания – самый последний шаг
в процессе настройки оборудования, и сделать это вы должны только тогда,
когда будете готовы настроить его программное обеспечение: у Raspberry Pi
отсутствует кнопка включения и выключения, следовательно, устройство заработает сразу же после подключения к источнику питания.
Сначала подключите конец USB-кабеля с разъемом Type-C к порту USB
Type-C на корпусе Raspberry Pi 400. Он вставляется любой стороной без особых усилий. Если источник питания, к которому вы подключили Raspberry Pi,
имеет съемный кабель, убедитесь, что другой его конец подключен к самому
источнику питания.
Рис. 2-23. Подключение Ethernet-кабеля к Raspberry Pi 400
Настройка Raspberry Pi 400 37
Наконец, подключите источник питания к разъему электропитания и подайте его. Ваш компьютер Raspberry Pi 400 сразу же заработает. Поздравляем,
вы собрали компьютер Raspberry Pi 400 (рис. 2-24)!
Рис. 2-24. Микрокомпьютер Raspberry Pi 400 готов к работе!
На несколько секунд появится разноцветный кубик, а потом информационный экран с логотипом Raspberry Pi. Затем экран может окраситься в синий
цвет, пока загружается операционная система на microSD-карте. Если черный
цвет экрана не сменяется на синий, подождите несколько минут. При первой
загрузке Raspberry Pi компьютер упорядочивает данные в фоновом режиме.
Через некоторое время вы увидите рабочий стол Raspberry Pi OS и окно мас
тера первоначальной настройки, продемонстрированные на рис. 2-20. Теперь
вы можете перейти к настройке операционной системы, прочитав об этом
больше в главе 3.
Глава
3
Использование
Raspberry Pi
Узнаем больше об операционной системе Raspberry Pi.
При работе с Raspberry Pi вы можете запускать широкий спектр программ.
Сюда также относятся различные операционные системы – основное программное обеспечение, позволяющее устройству функционировать. Самой
популярной и официальной операционной системой организации Raspberry
Pi Foundation является операционная система Raspberry Pi OS. Raspberry Pi OS
основана на Debian Linux и специально разработана для устройств Raspberry Pi.
Поставляется она с рядом встроенных дополнительных программ, предварительно установленных и готовых к работе.
Если ранее вы работали только в операционной системе Microsoft Windows
или Apple macOS, не переживайте. Raspberry Pi OS основана на тех же принципах: интуитивно понятные окна, ярлыки, меню и курсор, так что все это покажется вам знакомым. В следующей главе вы познакомитесь с некоторыми из
программ и начнете с ними работать.
Читайте далее, чтобы узнать, как начать работу и получить дополнительные
сведения о некоторых программах, входящих в состав дистрибутива.
Окно приветствия
При первом запуске Raspberry Pi OS вы увидите окно приветствия (рис. 3-1).
Это полезный инструмент, который поможет изменить некоторые настройки
в Raspberry Pi OS, получившие название конфигурация. Это необходимо для
того, чтобы упорядочить и облегчить использование Raspberry Pi.
Нажмите кнопку Next (Далее), затем выберите вашу страну, язык и часовой пояс, щелкнув по очереди каждый открывшийся список и выбрав нужный
вариант (рис. 3-2). Если обычно вы используете иную раскладку клавиатуры,
нажмите кнопку переключения клавиатуры и убедитесь, что в данный момент
используется нужная вам раскладка. Если вы хотите, чтобы надписи на рабочем столе и различные программы отображались на английском языке, неза-
40
Глава 3. Использование Raspberry Pi
висимо от выбранного вами родного языка, установите флажок Use English
language (Использовать английский язык). После завершения настройки нажмите кнопку Next (Далее).
Рис. 3-1. Окно приветствия
Рис. 3-2. Среди различных настроек
выберите подходящий язык
В следующем открывшемся окне вам будет предложено выбрать имя и пароль для учетной записи пользователя (рис. 3-3). Укажите имя – оно может
быть любым, но должно начинаться с латинской буквы и содержать только латинские строчные буквы, цифры и дефисы. Затем нужно создать запоминающийся пароль. Вам будет предложено ввести пароль дважды, чтобы избежать
ошибок и блокировки новой учетной записи. Когда вы будете довольны своим
выбором, нажмите кнопку Next (Далее).
Рис. 3-3. Введите имя пользователя и пароль
В следующем окне компьютер предложит вам выбрать из списка сеть Wi-Fi
(рис. 3-4).
Окно приветствия 41
Рис. 3-4. Выбор беспроводной сети
Беспроводная сеть
Подключиться к беспроводной сети Интернет без дополнительных девайсов вам удастся только на моделях семейств Raspberry Pi 3, Raspberry
Pi 4, Raspberry Pi 5, Raspberry Pi Zero W и Zero 2 W. Если же вы являетесь
обладателем другой модели Raspberry Pi, вам необходимо приобрести
Wi-Fi-модуль с интерфейсом USB.
С помощью мыши или клавиш ↑ и ↓ на клавиатуре пролистайте список и
выберите название вашей интернет-сети. Нажмите кнопку Next (Далее). Предполагается, что ваша беспроводная сеть защищена (это действительно должно
быть так). Поэтому перед вами откроется окошко, в которое будет необходимо
ввести пароль (ключ сети). Обычно он записан в документации маршрутизатора или на наклейке, расположенной на нижней части самого маршрутизатора
(если вы не сменили пароль на устройстве). Для подключения к сети нажмите
кнопку Next (Далее). Если же вы не хотите подключать Raspberry Pi к беспроводной сети, нажмите кнопку Skip (Пропустить).
Теперь перед вами появится окно, в котором предлагается проверить наличие обновлений для Raspberry Pi OS или другого ПО и при необходимости
установить их (рис. 3-5). Программное обеспечение Raspberry Pi OS регулярно обновляется в рамках исправления ошибок, добавления новых функций и
повышения производительности. Чтобы установить эти обновления, нажмите
кнопку Next (Далее). Если же вы не хотите, нажмите кнопку Skip (Пропустить).
Загрузка обновлений может занять несколько минут, так что будьте терпеливы.
Когда обновления будут установлены, появится окно с надписью System is
up to date (Система обновлена до актуальной версии). Нажмите кнопку OK.
42
Глава 3. Использование Raspberry Pi
Последнее окно, которое откроется перед вами (рис. 3-6), сообщит, что внесенные изменения сработают только после перезапуска устройства. Этот процесс в Raspberry Pi носит название перезагрузки. В таком случае нажимаем на
кнопку перезагрузки (Restart), после чего компьютер автоматически перезапустит свою работу. На этот раз окно приветствия не откроется, поскольку его
миссия уже выполнена, а Raspberry Pi OS готова к работе.
Рис. 3-5. Проверка обновлений
Рис. 3-6. Перезагрузка Raspberry Pi OS
Внимание!
Если после запуска Raspberry Pi вы видите в правом верхнем углу экрана
сообщение «this power supply is not capable of supplying 5A», используемый блок питания не обеспечивает требуемое напряжение 5 В с силой
тока 5 А, необходимое для полноценной работы компьютера Raspberry
Pi 5. Вам следует заменить устройство питания на подходящий, например
на оригинальный, блок питания Raspberry Pi 5. Вы также можете проигнорировать предупреждение и продолжать использовать Raspberry Pi 5, но
некоторые мощные USB-устройства, подключаемые к микрокомпьютеру,
например жесткие диски, работать не будут.
Если вы видите сообщение «low voltage warning» с символом молнии,
вам следует прекратить использование Raspberry Pi до замены блока
питания: скачки напряжения в низкокачественных блоках питания могут
привести к сбоям в работе Raspberry Pi и потере данных.
Навигация по рабочему столу
Операционная система Raspberry Pi OS данной версии установлена на большинстве моделей Raspberry Pi и содержит инструмент «рабочий стол Raspberry
Pi OS». Это основной графический интерфейс пользователя (рис. 3-7). Основная часть рабочего стола демонстрирует изображение и носит название «обои»
(А на рис. 3-7). Здесь будут отображаться ярлыки установленных программ.
Навигация по рабочему столу 43
В верхней части рабочего стола находится панель задач (Б), которая позволяет
открыть любую из установленных программ. Запущенные программы обозначаются кнопками (В) на панели задач.
А.
Б.
В.
Г.
Д.
Е.
Ж.
З.
И.
К.
Обои рабочего стола
Л.
Панель задач
Значок обработчика раскладки
клавиатуры
Кнопка запущенного приложения
Панель быстрого запуска
М.
Н.
Системный лоток
Уведомление о наличии обновлений ПО О.
П.
Кнопка извлечения накопителя
Р.
Значок сетевого соединения
С.
Значок Bluetooth
Т.
Значок регулятора громкости
У.
Часы
Кнопка меню (значок Raspberry Pi)
Значок корзины
Значок съемного устройства
Заголовок окна
Кнопка сворачивания окна
Кнопка разворачивания окна
Кнопка закрытия окна
Рис. 3-7. Рабочий стол Raspberry Pi OS
В правой части строки меню находится системный лоток (Г). Уведомление о наличии обновлений Д появляется только при наличии обновлений
для операционной системы ОС Raspberry Pi и установленных приложений.
44
Глава 3. Использование Raspberry Pi
Если к Raspberry Pi подключены какие-либо съемные накопители, например
USB-флешки, вы увидите значок извлечения (Е). Щелкнув по нему мышью, вы
сможете безопасно извлечь подключенные ранее устройства. Справа находятся часы (К). Щелкните по часам мышью, и перед вами откроется электронный
календарь (рис. 3-8).
Рис. 3-8. Электронный календарь
Рядом с часами находится динамик (И). Щелкните по нему мышью для настройки громкости звука Raspberry Pi. Также для настройки дополнительных
параметров вы можете щелкнуть по нему правой кнопкой мыши. Левее расположен значок сети (Ж). Если устройство Raspberry Pi подключено к беспровод
ной сети, вы увидите мощность сигнала, отображаемую в виде нескольких полос. Однако если подключение проводное, вместо полос будут отображены две
стрелочки. При щелчке мышью по значку сети открывается список доступных
беспроводных сетей (рис. 3-9), а при щелчке по значку Bluetooth (З) появляется
список доступных для подключения по Bluetooth устройств.
Рис. 3-9. Список доступных беспроводных сетей
Навигация по рабочему столу 45
Справа от часов отображается значок обработчика раскладок клавиатуры (Л). По умолчанию он не виден, но нужен для пользователей с языками,
отличными от английского.
Добавление раскладки клавиатуры
Русскоязычным пользователям привычно переключать раскладку клавиа
туры и иметь соответствующий индикатор на панели. Чтобы добавить отсутствующий по умолчанию индикатор обработчика раскладок клавиатуры, выполните следующие действия.
1. Щелкните по системному лотку правой кнопкой мыши.
2. В контекстном меню выберите пункт Add/remove panel plugins (Добавить/убрать элементы панели).
3. В открывшемся окне перейдите на вкладку Panel applets (Апплеты
панели).
4. Нажмите кнопку Add (Добавить) и в списке доступных дополнений
выберите пункт Keyboard layout handler (Обработчик раскладки клавиатуры).
5. Выделите добавленный пункт и нажмите кнопку Preferences (Настройки).
6. В открывшемся окне настроек обработчика раскладки клавиатуры
сбросьте флажок Keep system layouts (Сохранить системные раскладки) и добавьте необходимые раскладки с помощью кнопки Add
(Добавить).
Здесь же можно изменить настройки обработчика раскладки клавиа
туры, например сменить вид значка раскладки с флага страны на
текстовое название и активировать функцию сохранения раскладки
для отдельных окон.
Переключение раскладки осуществляется щелчком мыши по значку обработчика раскладки клавиатуры в системном лотке или с помощью назначенного сочетания клавиш.
В левой части строки меню находится панель быстрого запуска (М) и кнопка
главного меню (Н), нажав которую, вы увидите программы, установленные на
Raspberry Pi OS. Некоторые из них показаны на самой панели быстрого запус
ка, другие же скрыты в меню (рис. 3-10).
Все программы в меню разбиты на категории, по названию которых вы можете понять их предназначение: категория Программирование (Programming),
например, содержит программное обеспечение, предназначенное для помощи
в написании ваших собственных программ (подробнее в главе 4). Программы,
находящиеся в категории Игры (Games), скоротают вам время. В этом руководстве мы разберем не все программы, поэтому не бойтесь экспериментировать,
тем самым получая дополнительные знания. На рабочем столе вы найдете
значок корзины (О) и значки всех внешних устройств хранения данных (П),
подключенных к Raspberry Pi.
46
Глава 3. Использование Raspberry Pi
Рис. 3-10. Меню Raspberry Pi OS
Браузер Chromium
Перейдем к практике. И первое, что мы сделаем, – загрузим браузер Chromium.
Для этого щелкните мышью по значку Raspberry Pi в виде ягоды малины, расположенному в левом верхнем углу. Перед вами откроется меню. Переместите
указатель мыши на пункт Интернет (Internet) и для запуска выберите пункт
Веб-браузер Chromium (Chromium web-browser).
Если раньше вы работали в браузере Google Chrome, то Chromium покажется
вам очень знакомым. Браузер Chromium предоставляет доступ к веб-сайтам,
воспроизводит видео и игры и даже дает возможность общаться с людьми из
разных точек мира на форумах и различных сайтах.
При работе в Chromium рекомендуем вам развернуть окно на весь экран:
найдите три кнопки в правом верхнем углу заголовка окна Chromium (Р) и нажмите на расположенную посередине кнопку со стрелкой вверх (Т). Эта кнопка разворачивает окно браузера. Слева от нее находится кнопка сворачивания (С), после нажатия на которую окно свернется во вкладку, расположенную
на панели задач в верхней части экрана. Крестик, расположенный справа от
кнопки разворачивания, – кнопка Закрыть (У) – осуществляет именно то, что
вы подумали, а именно закрывает окно.
Закрыть нельзя сохранить
Закрыть вкладку, не сохранив перед этим внесенные в нее изменения, –
плохая идея. Многие программы, конечно, предлагают вам сохранить
данные перед закрытием, однако некоторые – нет.
Файловый менеджер 47
При первом запуске веб-браузера Chromium веб-сайт Raspberry Pi должен
загрузиться автоматически, как показано на рис. 3-11. Если это не так (а также для посещения других сайтов), щелкните по адресной строке в верхней части окна Chromium – большой белой полосе – и введите raspberrypi.com (или
адрес сайта, который вы хотите посетить), а затем нажмите клавишу Enter на
клавиатуре. Загрузится веб-сайт Raspberry Pi. Вы также можете ввести в адресную строку поисковый запрос, например «Raspberry Pi», «Raspberry Pi OS» или
«ретро-игры».
Рис. 3-11. Браузер Chromium с открытым веб-сайтом Raspberry Pi
При первой загрузке в Chromium могут открыться сразу несколько вкладок.
Чтобы перейти на другую вкладку, просто щелкните по ней мышью. Чтобы
закрыть вкладку, при этом не закрывая сам Chromium, щелкните мышью по
значку в виде крестика в правом углу этой вкладки.
Чтобы открыть новую вкладку, удерживайте клавишу Ctrl, а затем, не отпуская ее, нажмите клавишу Т. Это позволит вам пользоваться сразу несколькими вкладками одновременно, не путаясь в огромном количестве открытых
окон Chromium.
Когда вы решите завершить работу с браузером Chromium, нажмите кнопку
«Закрыть» в правом верхнем углу окна.
Файловый менеджер
Файлы, которые вы сохраняете, – будь то написанные вами программы или
стихи, снятые вами видео или скачанные из интернета изображения – все сохраняются в домашний каталог. Чтобы отобразить домашний каталог, нажмите
на панели задач кнопку в виде малины. Перед вами откроется меню, в котором
выберите пункт Стандартные (Accessories), а затем программу Файловый
менеджер (File manager) (рис. 3-12).
48
Глава 3. Использование Raspberry Pi
Рис. 3-12. Файловый менеджер
Файловый менеджер позволяет просматривать файлы и папки, еще известные как каталоги, находящиеся на microSD-карте Raspberry Pi, а также на любых съемных носителях, например USB-накопителях, которые вы подключаете
к USB-портам Raspberry Pi. Когда вы впервые открываете менеджер, он автоматически переносит вас в ваш домашний каталог. Здесь находится множество
других папок, известных как подкаталоги, которые также расположены по категориям. Выделяют следующие основные подкатегории:
• Bookshelf. Здесь содержатся цифровые копии книг и журналов издательства Raspberry Pi Press. Читать и скачивать книги можно с помощью
приложения Bookshelf, доступного в разделе меню Help (Справка);
• Desktop. Его вы можете наблюдать при первой загрузке Raspberry Pi OS.
Если вы сохраните файл сюда, он появится на рабочем столе Raspberry Pi
OS, что облегчит вам его поиск при дальнейшем использовании;
• Documents. В этой папке находится большая часть созданных вами
файлов (это могут быть как короткие рассказы, так и различные рецепты и т. д.);
• Downloads. При скачивании файла из интернета через веб-браузер
Chromium он будет автоматически сохранен в этом разделе;
• Music. Здесь хранится вся созданная вами или скачанная на Raspberry
Pi музыка;
• Pictures. Данная папка предназначена специально для картинок. В технической сфере они получили название файлы изображений;
Файловый менеджер 49
• Public. Конечно, большинство ваших файлов являются частными, однако то, что вы загрузите в эту папку, будет доступно и другим пользователям Raspberry Pi, даже если они зайдут через свой личный аккаунт;
• Templates. В этой папке хранятся шаблоны – пустые документы с уже
имеющимся базовым макетом или структурой, – установленные сторонними приложениями и созданные вами;
• Videos. Папка для хранения видео. Именно сюда в первую очередь будут
сохраняться ролики, проигрываемые различными программами для
воспроизведения видео.
Окно файлового менеджера состоит из двух панелей: левая панель показывает доступные на вашем Raspberry Pi каталоги, а правая панель – файлы и
подкаталоги выбранного вами на левой панели каталога.
Если вы подключите съемный накопитель к USB-порту Raspberry Pi, появится окно с запросом открыть содержимое накопителя через файловый менеджер (рис. 3-13). Нажмите кнопку OK, и перед вами появятся файлы и каталоги.
Рис. 3-13. Запрос просмотра съемного накопителя
Файлы со съемного устройства можно легко скопировать на microSD-карту
вашего Raspberry Pi или наоборот (с microSD-карты на съемное устройство).
Для этого в отдельных окнах файлового менеджера откройте домашний каталог и съемное устройство. Установите указатель мыши на файл, который вы хотите скопировать. Затем, нажав и удерживая левую кнопку мыши, переместите
мышь из одного окна в другое и отпустите кнопку мыши (рис. 3-14). Данный
процесс носит название перетаскивания.
50
Глава 3. Использование Raspberry Pi
Рис. 3-14. Перетаскивание файла
Переместить файл можно также другим способом: щелкните один раз по
нужному вам файлу, затем в меню Правка (Edit) выберите команду Копировать (Copy). Теперь переходим в другое окно и выбираем в меню Правка (Edit)
команду Вставить (Paste).
Команда Вырезать (Cut), также доступная в меню Правка (Edit), схожа с
предыдущим способом манипулирования файлами, за исключением того, что
при перемещении файл удаляется с исходного носителя.
Осуществить оба варианта вы можете также с помощью клавиатуры. Для
этого нажмите сочетание клавиш Ctrl+C (копировать) или Ctrl+X (вырезать),
а затем Ctrl+V (вставить).
Комбинации клавиш
Когда вам нужно нажать сочетание клавиш, например Ctrl+C, вам необходимо удерживать первую клавишу (Ctrl), а затем нажать вторую клавишу (C), после чего нужно отпустить обе клавиши.
После завершения экспериментов закройте файловый менеджер, нажав
кнопку «Закрыть», расположенную в правом верхнем углу окна. Если у вас открыто сразу несколько окон, закройте их. Если к Raspberry Pi подключено съемное устройство, извлеките его, нажав на кнопку извлечения в правом верхнем
углу экрана. Найдите устройство в списке и щелкните по нему мышью, прежде
чем отсоединять от компьютера.
Извлечение устройств
Прежде чем отсоединять съемное устройство, всегда нажимайте на кнопку безопасного извлечения. В противном случае файлы могут повредиться или выйти из строя.
Инструмент Recommended Software 51
Инструмент Recommended Software
Хотя операционная система Raspberry Pi OS поставляется с широким спект
ром заранее установленных программ, вы можете дополнить их. Выбор нужных вам программ можно осуществить с помощью специальной программы
Recommended Software.
Обратите внимание, что программа Recommended Software требует подключения к интернету. Если операционная система Raspberry Pi подключена, нажмите
на панели задач кнопку в виде малины, а затем в меню Параметры (Preferences)
выберите пункт Recommended Software. Программа откроется, потом начнется
загрузка информации о доступном программном обеспечении.
Через несколько секунд появится список совместимых пакетов программного обеспечения (рис. 3-15). Все рекомендуемое программное обеспечение
разбито в меню на различные категории. Выберите понравившуюся вам категорию, чтобы увидеть входящие в нее программы, либо выберите пункт All
Programs (Все программы), чтобы просмотреть их все.
Рис. 3-15. Программа Recommended Software
Если рядом с понравившейся вам программой поставлен флажок, значит,
она установлена на Raspberry Pi. Если же нет, поставьте флажок для дальнейшей установки соответствующей программы. Вы можете отметить флажками
столько программ, сколько захотите, а затем установить их все сразу, но если
объем вашей microSD-карты мал, у вас может не хватить места.
Предустановленные приложения
В одних версиях операционной системы Raspberry Pi OS установлено
больше программного обеспечения, чем в других. Если в рекомендуемом
программном инструменте указано, что Code the Classics уже поставлен
(если флажок уже установлен), вы можете выбрать что-то другое из спис
ка для установки.
52
Глава 3. Использование Raspberry Pi
Для операционной системы Raspberry Pi доступен широкий спектр ПО,
включая подборку игр, созданных для книги Code the Classics, Volume 1 – экскурса в историю игр и учебника программирования на языке Python. Книга
доступна на сайте store.rpipress.cc.
Чтобы установить игры из данной подборки, поставьте флажок Code the
Classics; вам может потребоваться прокрутить список приложений вниз, чтобы увидеть указанный пункт. Справа от названия пакета вы увидите текст «will
be installed», как показано на рис. 3-16.
Рис. 3-16. Выбор пункта Code the Classics
Нажмите кнопку Apply (Применить), чтобы установить выбранное ПО; вам
будет предложено ввести пароль.
Установка займет около минуты, в зависимости от скорости соединения с
интернетом (рис. 3-17). После завершения процесса вы увидите сообщение о
том, что установка завершена. Нажмите кнопку OK, чтобы закрыть диалоговое
окно, затем нажмите кнопку Close (Закрыть), чтобы закрыть окно программы
Recommended Software.
Рис. 3-17. Установка пакета Code the Classics
Офисный пакет LibreOffice 53
Таким же образом вы можете удалить ненужную вам программу, чтобы
освободить пространство в памяти устройства. Снова запустите инструмент
Recommended Software, найдите нужный пункт в списке и установите напротив
его названия флажок. После того как вы нажмете кнопку Apply (Применить),
выбранное ПО будет удалено, но все файлы, которые вы создали с его помощью
и сохранили в папке «Документы», останутся.
Другую программу для установки или удаления программ – Add/Remove
Software – вы найдете в том же разделе, Параметры (Preferences), в меню операционной системы. Здесь предоставляется более широкий спектр дополнительных программ, однако они не были проверены компанией Raspberry Pi
Foundation. Вы узнаете, как использовать инструмент Add/Remove Software, в
приложении Б.
Офисный пакет LibreOffice
Узнаем, на что еще способен Raspberry Pi. Для этого снова нажмите на панели
задач кнопку в виде малины и в меню Офис (Office) выберите пункт LibreOffice
Writer. Перед вами откроется текстовый редактор Writer из популярного офисного пакета LibreOffice с открытым исходным кодом (рис. 3-18).
Рис. 3-18. Программа LibreOffice Writer
Если ранее вы работали с Microsoft Office или Google Docs, то понимаете, о
чем идет речь.
54
Глава 3. Использование Raspberry Pi
Если LibreOffice нет
LibreOffice может быть не установлен по умолчанию в операционной системе Raspberry Pi OS, и в этом случае пункт Офис (Office) может не отображаться в меню. В таком случае для установки LibreOffice используйте
инструмент Recommended Software, как описано выше.
При помощи текстового редактора вы можете не только самостоятельно писать тексты, но и редактировать их различными путями: вы можете менять
стиль шрифта, его цвет, размер, добавлять эффекты и даже вставлять изображения, диаграммы, таблицы и многое другое. К тому же текстовый редактор
проверяет вашу работу на наличие ошибок, выделяя орфографические и грамматические ошибки красным и зеленым цветами соответственно.
Начнем нашу работу в текстовом редакторе с написания абзаца, чтобы вы
могли поэкспериментировать с форматированием. Если вас посетила муза, вы
можете написать о том, что узнали об операционной системе Raspberry Pi и
входящем в ее состав программном обеспечении. Испробуйте в работе различные значки, расположенные в верхней части окна, чтобы узнать, для чего
они предназначены. Узнайте, как сделать шрифт крупнее и как изменить его
цвет. Если у вас не получается, наводите курсор мыши по очереди на каждый
значок. «Всплывающая подсказка» поможет вам разобраться. Когда вы будете
удовлетворены своей работой, выберите команду меню Файл ➯ Сохранить
(File ➯ Save), чтобы сохранить внесенные изменения (рис. 3-19). Придумайте
файлу имя и нажмите кнопку Сохранить (Save).
Рис. 3-19. Сохранение документа
Инструмент Raspberry Pi Configuration 55
Сохраните проделанную вами работу
Заведите привычку периодически сохранять проделанную вами работу,
даже если вы ее еще не закончили. Это избавит вас от лишних проблем.
Например, если электричество внезапно отключат, вам не придется проделывать все заново.
Текстовый редактор LibreOffice Writer – это всего лишь одна программа из
числа офисных приложений LibreOffice. В той же категории, что и LibreOffice
Writer, находятся следующие программы:
• LibreOffice Base – база данных, приложение для хранения информации,
ее быстрого поиска и анализа;
• LibreOffice Calc – электронная таблица, приложение для работы с числами и создания диаграмм и графиков;
• LibreOffice Draw – программа для создания иллюстраций. Помогает
в создании изображений и диаграмм;
• LibreOffice Impress – программа, предназначенная для создания презентаций (разработки слайдов и показа слайд-шоу);
• LibreOffice Math – редактор формул, программа, предназначенная для
создания правильно сформированных математических формул, которые в дальнейшем могут быть использованы в других документах.
LibreOffice также доступен на других компьютерах и операционных системах. Если вам понравилось работать с ним в операционной системе Raspberry
Pi, то можете скачать его бесплатно с сайта libreoffice.org и установить на любой компьютер под управлением операционной системы Microsoft Windows,
Apple macOS или Linux.
Закройте программу LibreOffice Writer, нажав кнопку в виде крестика в правом верхнем углу окна.
Получение справки
В большинстве программ есть специальное меню Справка (Help), открыв
которое, вы сможете получить больше информации об этой программе
(что это за программа, руководство к ее использованию и т. д.). Если в какой-то момент вы запутаетесь и вам потребуется помощь, откройте меню
Справка (Help), и оно поможет вам сориентироваться.
Инструмент Raspberry Pi Configuration
Последняя программа, о которой мы с вами поговорим в этой главе, – инструмент настройки Raspberry Pi под названием Raspberry Pi Configuration. Функции
этой программы схожи с функциями мастера начальной настройки – они обе
56
Глава 3. Использование Raspberry Pi
позволяют вносить изменения в различные настройки Raspberry Pi OS. Нажмите на панели задач кнопку в виде малины, откройте меню Параметры
(Preferences) и выберите пункт Raspberry Pi Configuration (Конфигурация
Raspberry Pi) (рис. 3-20).
Рис. 3-20. Инструмент Raspberry Pi Configuration
Окно программы разделено на пять вкладок, каждая из которых отвечает
за определенную категорию настройки Raspberry Pi OS. При открытии инструмента Raspberry Pi Configuration программа сначала показывает содержимое первой вкладки – System (Система), позволяющей менять пароль вашей
учетной записи, присваивать локальной или беспроводной сети Raspberry Pi
имя узла, а также подстраивать остальные настройки. Большинство из них не
нуждаются в изменениях.
Откройте вторую категорию, перейдя на вкладку Display (Экран). Здесь вы
можете регулировать некоторые настройки, связанные с выводом изображения на экран, в соответствии с параметрами вашего телевизора или монитора.
Подробная информация
Сейчас мы кратко знакомим вас со всеми программами, чтобы вы к ним
привыкли. Если вы хотите узнать о них более подробно, предлагаем вам
перейти в приложение Д.
Чтобы перейти к следующему разделу, щелкните мышью по вкладке
Interfaces (Интерфейсы). Обратите внимание, большинство пунктов (за исключением Serial Console (Серийная консоль) и Serial Port (Последовательный
порт)) этой категории отключены. Вносить изменения в настройки данного
раздела следует только в случае подключения дополнительного оборудования
и исключительно опираясь на приложенную к нему инструкцию. Исключением
из этого правила является протокол SSH, задействующий «безопасную оболочку» и позволяющий удаленно управлять вашей учетной записью Raspberry Pi с
другого компьютера в вашей сети с помощью клиента SSH. Ключевая особен-
Обновления ПО 57
ность заключается в том, что SSH шифрует трафик, делая подключения безопасными. А также система удаленного доступа к рабочему столу компьютера –
VNC (Virtual Network Computer), управляемая клиентом VNC. Дистанционный
низкоуровневый интерфейс ввода/вывода общего назначения (Remote GPIO)
позволяет управлять устройством с другого компьютера (больше информации
о нем в главе 6).
Откройте четвертую категорию, перейдя на вкладку Performance (Производительность). Здесь настраивается оверлейная файловая система (OverlayFS),
которая позволяет запускать Raspberry Pi без записи данных на microSD-карту.
В большинстве случаев это не понадобится, поэтому большинство пользователей могут оставить данный раздел без изменений.
И наконец, перейдите на последнюю вкладку Localisation (Локализация).
Здесь вы можете управлять настройками локали, отвечающей за язык, отображение чисел, часовой пояс, раскладку клавиатуры и определение вашей страны, для дальнейших действий, осуществляемых по сети Wi-Fi. А пока нажмите
кнопку Cancel (Отмена) для закрытия окна инструмента, не внося каких-либо
изменений.
Внимание!
Частотные каналы беспроводной сети Wi-Fi определяются особыми правилами, разнящимися от страны к стране. Поэтому если в настройках вы
укажете не ту страну, в которой вы на самом деле находитесь, то, скорее
всего, работа сети Wi-Fi будет осложнена и даже может стать незаконной,
опираясь на закон «О средствах массовой информации». Именно поэтому
мы не советуем вам этого делать.
Обновления ПО
Разработчики Raspberry Pi OS часто выпускают обновления, которые добавляют новые функции или исправляют ошибки. Если операционная система
Raspberry Pi подключена к интернету через Ethernet-кабель или сеть Wi-Fi, обновления будут проверены автоматически, и при наличии готовых к установке обновлений появится уведомление в виде маленького значка в системном
лотке (стрелка, направленная вниз и заключенная в кружок).
Если вы видите такой значок в правом верхнем углу экрана, значит, обновления готовы к установке. Щелкните мышью по этому значку, а затем выберите
пункт Install Updates (Установить обновления), чтобы загрузить и установить
обновления. Если вы хотите сначала посмотреть доступные обновления, выберите пункт Show Updates (Показать обновления), чтобы отобразить список
(рис. 3-21).
Время, необходимое для установки обновлений, зависит от их количества и
скорости соединения с интернетом, но обычно ограничивается несколькими
минутами. После установки обновлений значок исчезнет из системного лотка,
пока не будут выпущены новые обновления.
58
Глава 3. Использование Raspberry Pi
Рис. 3-21. Значок и команды инструмента обновления ПО
Некоторые обновления предназначены для повышения безопасности
Raspberry Pi OS. Важно ответственно использовать инструмент обновления ПО,
чтобы поддерживать операционную систему в актуальном состоянии!
Выключение
Теперь, когда вы владеете навыками работы с приложениями в операционной
системе Raspberry Pi OS, пришло время обсудить очень важный вопрос: безопасное выключение устройства Raspberry Pi. Как и любой компьютер, Raspberry
Pi хранит ваши файлы в энергозависимой памяти, которая удаляет все содержимое при выключении системы. Чтобы сохранить содержимое документа,
достаточно перенести файл из энергозависимой памяти в энергонезависимую
(на microSD-карту), тогда у вас точно ничего не удалится.
Однако созданные вами файлы – не единственное, что требует сохранения.
Сама операционная система Raspberry Pi OS осуществляет работу ряда процессов в фоновом режиме. Таким образом отключение кабеля, соединяющего
компьютер с источником питания, может привести к сбоям в работе операционной системы и необходимости ее переустановки.
Чтобы этого не случилось, вам необходимо посредством нажатия специальной кнопки сообщить системе о намерении ее отключения. Тогда компьютер
сохранит все необходимые файлы и будет готов к безопасному выключению.
Этот процесс носит название завершение работы операционной системы.
Нажмите на панели задач кнопку в виде малины, расположенной в левом верхнем углу рабочего стола, а затем выберите пункт Завершить сеанс (Shutdown). Появится окно с тремя вариантами (рис. 3-22): выключение
(Shutdown), перезагрузка (Reboot) и выход из системы (Logout). Shutdown
(Выключение) – действие, которое вы будете использовать чаще всего: выполняя его, Raspberry Pi OS закроет все открытые программы и файлы, а затем
выключит Raspberry Pi. Как только монитор погаснет, подождите несколько секунд, пока зеленый огонек на Raspberry Pi не перестанет мигать. Только теперь
можно безопасно отключить устройство от источника питания.
Выключение 59
Рис. 3-22. Завершение работы Raspberry Pi
Если однократно нажать кнопку питания Raspberry Pi, появится такое же
окно, как если бы вы нажали на панели задач кнопку в виде малины, расположенной в левом верхнем углу рабочего стола, а затем выбрали пункт Завершить сеанс (Shutdown). Нажмите кнопку питания еще раз, пока окно отображается, и Raspberry Pi безопасно выключится.
Если вы нажмете и некоторое время будете удерживать кнопку питания,
произойдет принудительное выключение – фактически то же самое, как если
бы вы просто обесточили Raspberry Pi. Поступайте так только в том случае, если
Raspberry Pi не реагирует на ваши команды и не может выключиться обычным
способом. Принудительное выключение чревато повреждением пользовательских документов или файлов операционной системы.
Для включения Raspberry Pi просто отсоедините, а потом снова подключите
кабель питания.
При выборе варианта Reboot (Перезагрузка) происходит тот же процесс,
что и при выключении. Все вкладки закрываются, но вместо того, чтобы выключить Raspberry Pi, система перезапускает его (словно вы сначала выбрали
Shutdown (Завершение работы), а потом заново подключили кабель к источнику питания). Кнопка Reboot (Перезагрузка) может понадобиться в том случае, если были внесены определенные изменения, потребовавшие перезагрузки операционной системы. Например, когда вы устанавливаете обновления
для вашего основного ПО или что-то пошло не так (произошел сбой) и работа
Raspberry Pi OS перестала осуществляться должным образом.
И наконец, пункт Logout (Выход из системы) необходим только в том случае,
если у вас имеется более одной учетной записи пользователя на Raspberry Pi.
Тогда система закрывает все открытые в данный момент программы и переносит вас на экран входа, где вам будет предложено ввести имя и пароль другого
пользователя. Если вы нажмете эту кнопку по ошибке, а затем захотите вернуться, просто введите выбранное вами ранее (в начале этой главы и введенное в окне приветствия) имя пользователя и пароль.
Внимание!
Никогда не отключайте кабель от источника питания раньше выключения самого устройства Raspberry Pi. Это может привести к повреждению
операционной системы, а также потере созданных или загруженных вами
файлов.
Глава
4
Программируем
на Scratch 3
Учимся писать программы на Scratch, блочном языке программирования.
Raspberry Pi не ограничивается использованием приложений, написанных другими людьми. Пользователи могут создавать свое собственное программное
обеспечение, основываясь на безграничных возможностях своего воображения. В данном случае не важно, есть у пользователя опыт создания программ –
процесса, называемого программированием, или кодированием, – или нет.
Данная платформа является огромным полем для экспериментов.
Ключевой аспект доступного программирования на Raspberry Pi – образовательный язык программирования с графическим интерфейсом – Scratch.
Он был разработан Массачусетским технологическим институтом (MIT). Написание текстовых инструкций с использованием традиционных языков программирования можно сравнить с составлением рецепта для торта. Scratch же
в игровой форме (в форме головоломок) предлагает создать программу, со
единяя фрагменты кодов, написанных на кубиках, в единую форму – сценарий.
Scratch – отличный помощник в освоении начинающими программистами
этой сферы. Некоторые могут подумать, что это всего лишь игрушка. Не стоит
торопиться с выводами. Scratch – очень мощная и многофункциональная среда программирования, позволяющая создать все, что угодно, начиная от самых
простых игр и анимаций и заканчивая сложными интерактивными проектами
по робототехнике.
Знакомство с интерфейсом Scratch 3
Подобно актерам в театре, игровые персонажи перемещаются по сцене (A) под
управлением вашей программы на языке Scratch. Эти персонажи называются
спрайтами (Б). Чтобы изменить сцену, например добавить новый фон, используйте элементы управления сценой (В). Все созданные или загруженные вами
спрайты перечислены в списке спрайтов (Г). Все блоки, доступные для вашей
62
Глава 4. Программируем на Scratch 3
программы, отображаются в палитре блоков (Д), которая имеет цветовые категории. Блоки (Е) – это заранее написанные фрагменты кода. Вы «пишете» свою
программу в области сценариев (Ж), перетаскивая блоки из палитры, формируя сценарии.
А.
Б.
В.
Г.
Сцена
Спрайт
Управление сценой
Д.
Е.
Ж.
Палитра блоков
Блоки
Область сценариев
Список спрайтов
Версии Scratch
Для Raspberry Pi OS доступны две версии Scratch: Scratch и Scratch 3. Эта
книга описывает версию Scratch 3, совместимую только с Raspberry Pi 4,
Raspberry Pi 5 и Raspberry Pi 400.
Установка Scratch
ПО Scratch может быть не установлено по умолчанию в операционной
системе Raspberry Pi OS, и в этом случае соответствующий пункт может не
отображаться в меню Программирование (Programming). В таком случае
для установки Scratch используйте инструмент Recommended Software,
как описано в предыдущей главе, а затем вернитесь к чтению этой главы.
Ваша первая Scratch-программа: Привет, мир! 63
Ваша первая Scratch-программа: Привет, мир!
Загрузка Scratch 3 происходит так же, как загрузка любой другой программы,
предназначенной для операционной системы Raspberry Pi. Сначала нажмите на панели задач кнопку в виде малины. Перед вами появится меню операционной системы Raspberry Pi OS. Откройте меню Программирование
(Programming) и выберите пункт Scratch 3. Через несколько секунд вы увидите
пользовательский интерфейс Scratch 3. Вы можете увидеть сообщение о сборе
пользовательских данных: нажмите кнопку Yes (Да), если согласны отправлять
данные об использовании программы компании Scratch Team, или No (Нет).
Загрузка Scratch завершится после того, как выберете один из вариантов.
В большинстве языков программирования вам самим приходится задавать
команды посредством написания различных инструкций. В этом-то и отличие
программы Scratch. Для начала выберите раздел Внешний вид (Looks), чтобы
увидеть группу блоков фиолетового цвета. Нажав и удерживая кнопку мыши
на блоке сказать Привет! , перетащите его в центр области сценариев (рис. 4-1),
а потом отпустите кнопку мыши.
Рис. 4-1. Перетащите блок в область сценариев
Обратите внимание на форму только что выбранного вами блока. Заметили
выемку сверху и выпуклость снизу? Похоже на фрагмент пазла и подразумевает то, что сверху и снизу к этому блоку должны быть в дальнейшем присоединены какие-то детали. В данной программе часть, которую мы будем присо
единять сверху, носит название триггера.
Теперь перейдем в раздел События (Events), выделенный золотым цветом.
Нажав и удерживая кнопку мыши на блоке когда
нажат (так называемая
64
Глава 4. Программируем на Scratch 3
шапка блока), перетащите его в область сценариев. При этом располагаем этот
блок так, чтобы он соединился с уже имеющимся блоком сказать Привет! фиолетового цвета, как пазл. Необязательно располагать блоки с максимальной
точностью друг к друг. Если вы поднесли один блок достаточно близко к другому, они соединятся самостоятельно. Если же не удастся с первого раза, пробуйте регулировать положение блока до тех пор, пока кусочек не встанет на
нужное место.
когда
нажат
сказать Привет!
Вот мы и завершили создание нашей первой с вами программы. Для ее запуска нажмите кнопку в виде зеленого флажка в левом верхнем углу сцены.
Если вы сделали все верно, то ваш спрайт котика радостно вас поприветствует!
(рис. 4-2) – ваша первая программа удалась!
Рис. 4-2. Нажмите кнопку в виде зеленого флажка, расположенную в левом
верхнем углу сцены, и котик скажет: «Привет!»
Прежде чем двигаться дальше, назовите и сохраните вашу программу. Для
этого в меню Файл (File) выберите пункт Сохранить на свой компьютер
(Save to your computer). Придумайте имя и нажмите кнопку Сохранить (Save)
(рис. 4-3).
Следующий шаг – последовательность действий 65
Рис. 4-3. Придумайте название программы и сохраните ее
Что можно сказать?
Некоторые блоки в Scratch можно изменить. Попробуйте написать что-то
другое вместо слова «Привет!». Затем нажмите кнопку в виде зеленого
флажка. Что поменялось?
Следующий шаг – последовательность
действий
Хотя в основе созданной вами программы лежат два блока, при запуске выполняется лишь одна команда: сказать Привет! . Для достижения большего результата вам необходимо ознакомиться с алгоритмом создания последовательности действий. Ранее мы уже сравнивали коды к самым простым компьютерным
программам с рецептом для пирога. Здесь каждая новая инструкция логически
вытекает из предыдущей. Такая последовательность называется линейной.
Теперь, нажав и удерживая кнопку мыши на блоке сказать Привет! , перетащим его обратно в палитру блоков (рис. 4-4). Тем самым мы удаляем его из
нажат .
нашей программы и оставляем лишь триггерный блок когда
Перейдите в категорию Движение (Motion), а затем перетащите блок
идти 10 шагов в область сценариев так, чтобы он прикрепился к триггерному
блоку снизу.
66
Глава 4. Программируем на Scratch 3
Рис. 4-4. Чтобы удалить блок, просто перетащите его
из области сценариев в палитру блоков
Уже по названию блока мы понимаем, что он задает команду нашему спрайту котика двигаться на несколько шагов вперед.
когда
идти
нажат
10 шагов
Теперь немного усложним задачу, а именно создадим последовательность
действий. Перейдите в раздел Звук (Sound), выделенный сиреневым цведо конца под блок идти 10 шагов .
том, и перетащите блок играть звук Мяу
Снова вернитесь к разделу Движение (Motion) и перетащите еще один блок
идти 10 шагов под блок играть звук Мяу
до конца , но на этот раз измените
значение в нем с 10 на –10. Таким образом у вас получится блок идти —10 шагов .
Следующий шаг – последовательность действий 67
когда
идти
нажат
10 шагов
играть звук
идти
Мяу
до конца
—10 шагов
Нажмите кнопку в виде зеленого флажка, расположенную над областью сцены, чтобы запустить программу. Ваш котик будет мяукать и двигаться вправо, а
затем вернется обратно на свое место. Убедитесь, что у вас работают динамики
или подключены наушники. Если хотите повторить, просто нажмите кнопку в
виде зеленого флажка еще раз, и котик снова выполнит указанные команды.
Поздравляем! Вы создали последовательность действий, которую спрайт
выполняет по порядку, сверху вниз. Хотя ваш спрайт и выполняет каждое действие по отдельности, вы этого не замечаете, поскольку происходит это достаточно быстро. Теперь удалите блок играть звук Мяу
до конца , перетащив в па-
литру блоков, предварительно отсоединив от него нижний блок идти —10 шагов .
Далее заменим звуковой блок более простым: включить звук Мяу
. И перета-
щите блок идти —10 шагов обратно в конец программы.
когда
идти
нажат
10 шагов
включить звук Мяу
идти
—10 шагов
Нажмите кнопку в виде зеленого флажка. Однако сейчас при запуске программы ваш котик почему-то не двигается. На самом деле это не так. Спрайт
движется, но делает это так быстро, что вам кажется, что он стоит на месте. Свяпрозано это с тем, что при выполнении команды блока включить звук Мяу
грамме не нужно ждать ее окончания перед переходом к следующему действию.
Raspberry Pi «думает» очень быстро, настолько, что человеческим глазом невозможно уловить выполнение данной команды. Для того чтобы все-таки увидо конца .
деть движение нашего героя, воспользуемся блоком играть звук Мяу
Перейдите в раздел Управление (Control), выделенный оранжевым цветом на
палитре блоков, и перетащите блок ждать 1 секунд , разместив его между блоками включить звук Мяу
и идти —10 шагов .
68
Глава 4. Программируем на Scratch 3
когда
идти
нажат
10 шагов
включить звук Мяу
ждать
идти
1 секунд
—10 шагов
При запуске программы происходит следующее: котик перемещается вправо, ждет секунду и перемещается обратно влево. В данном случае можно говорить о задержке – команде, позволяющей контролировать время выполнения
действий блоков последовательности.
Задача: еще больше шагов!
Попробуйте увеличить количество шагов, изменив значения в соответствующих блоках. Что произойдет, если количество шагов в одном синем блоке
не совпадет с количеством шагов в другом синем блоке?
А что произойдет, если вы попробуете воспроизвести несколько звуков
одновременно?
Цикличность
Последовательность действий, которую мы только что задали спрайту, выполняется лишь один раз после нажатия кнопки в виде зеленого флажка: котик
передвигается в сторону, мяучит, а затем возвращается обратно. Программа
Scratch еще предоставляет нам возможность сделать так, чтобы спрайт выполнял данную последовательность циклично, посредством использования
циклов, расположенных в разделе Управление (Control). Для этого вам нужно
щелкнуть по разделу Управление (Control), расположенному на палитре блоков, выбрать блок повторять всегда и переместить его в область сценариев между блоками когда
нажат и идти 10 шагов .
Следующий шаг – последовательность действий 69
когда
нажат
повторять всегда
идти
10 шагов
включить звук Мяу
ждать
идти
1 секунд
—10 шагов
Обращаем ваше внимание на то, как С-образный блок повторять всегда заключил в себе остальные блоки последовательности. После нажатия кнопки
в виде зеленого флажка ваш спрайт будет выполнять данную цепочку команд
по кругу – и так до бесконечности, пока вы сами не решите прервать ее. В программировании данное явление получило название бесконечного цикла –
проще говоря, цикла, который никогда не завершится.
Если же мяуканье вашего спрайта усиливается, нажмите кнопку в виде красного восьмиугольника рядом с зеленым флажком, расположенным над областью
сцены. Это остановит программу. Для изменения типа цикла перетащите блок
идти 10 шагов и все расположенные под ним блоки из цикла повторять всегда
нажат . После чего перетащите блок повторять всегда на палитру
под блок когда
блоков, для того чтобы его удалить. А затем перетащите блок повторить 10 раз
в то место, где ранее находился блок повторять всегда .
когда
нажат
повторить 10 раз
идти
10 шагов
включить звук Мяу
ждать
идти
1
секунд
—10 шагов
70
Глава 4. Программируем на Scratch 3
Для запуска новой программы нажмите кнопку в виде зеленого флажка.
Вам может показаться, что ничего не изменилось: котик так же повторяет последовательность. Однако на этот раз цикл завершится после 10 повторений
(итераций цикла). Данное явление носит название определенного цикла. Здесь
вы сами определяете, когда он должен закончиться. В большинстве программ,
особенно в игровых и работающих с датчиками, часто применяются как бесконечные, так и определенные циклы.
А что произойдет сейчас?
Что произойдет, если вы измените число в блоке, отвечающем за цикличность, в большую сторону? А если в меньшую? Что произойдет, если вы
введете число 0?
Переменные и условные конструкции
Наконец, ознакомимся с заключительными понятиями, которыми необходимо овладеть перед началом работы со Scratch, – переменными и условными
конструкциями. Переменная – значение, которое может варьироваться (другими словами, измениться) с течением времени или под воздействием программы. Два основных свойства переменной – имя и значение. Значение не
обязательно передается посредством чисел. Оно может быть передано также
текстом, являться истинным или ложным и иногда даже пустым (т. е. носить
нулевое значение).
Переменная играет очень важную роль. Представьте, что в игре вам необходимо постоянно отслеживать уровень здоровья персонажа, перемещение какого-либо объекта, уровень, которого вы достигли к настоящему моменту, счет
и прочее. Каждая из них представляет собой переменную.
Для начала сохраним нашу программу: откройте меню Файл (File), а затем
выберите пункт Сохранить на свой компьютер (Save to your computer). Если
вы ранее уже сохраняли изменения, то программа предложит вам заменить
старую копию новой актуальной версией. После этого в меню Файл (File) выберите пункт Новый (New). Если появится диалоговое окно с запросом «Заменить содержимое текущего проекта?», нажмите кнопку OK. Теперь в палитре
блоков перейдите в темно-оранжевый раздел Переменные (Variables) и нажмите кнопку Создать переменную (Make a Variable). В появившемся окне
введите слово цикл (рис. 4-5), после чего нажмите кнопку OK, и в палитре блоков появится новый блок.
Перетащите блок задать цикл значение 0
в область сценариев. Данная
команда задает переменной значение 0. Затем из категории Внешний вид
(Looks) перетащите блок говорить Привет!
блоком задать цикл
значение 0
.
2 секунд так, чтобы он оказался под
Следующий шаг – последовательность действий 71
задать
говорить
цикл
значение
Привет!
2
0
секунд
Как вы могли заметить, блок сказать Привет! задает спрайту котика команду
говорить то, что написано в данном блоке. При этом вы можете не только вручную написать фразу, но и задать ее с помощью переменной. Снова перейдите к
палитре блоков в раздел Переменные (Variables) и перетащите блок цикл поверх слова Привет! в блоке сказать Привет! . Оранжевый блок цикл по-другому
называется репортером и находится в самом начале списка (рядом с такими
блоками есть пространство для установки флажка). Таким образом вы создали
новый комбинированный блок говорить цикл
2 секунд .
Рис. 4-5. Присваиваем имя новой переменной
Перейдите в раздел События (Events) на палитре блоков, а затем перетащи-
нажат в самое начало нашей последовательности. При нажатии
те блок когда
кнопки в виде зеленого флажка, расположенной в области сцены, мы видим,
что котик говорит 0 (рис. 4-6) – значение, которое вы задали переменной цикл.
Как вы уже поняли, мы можем задать любое значение переменной. Для этого перейдите к палитре блоков и загляните в раздел Переменные (Variables).
на 1 в нижнюю часть последоваЗатем перетащите блок изменить цикл
тельности.
72
Глава 4. Программируем на Scratch 3
задать
цикл
говорить
значение
цикл
2
0
секунд
Рис. 4-6. Котик произносит значение переменной
Далее перейдите в раздел Управление (Control), а затем перетащите блок повторить 10 раз так, чтобы он располагался под блоком
задать цикл
значение 0
и заключал в себе последние блоки последовательно-
сти.
когда
задать
нажат
цикл
значение
0
повторить 10 раз
говорить
цикл
изменить цикл
2
на
секунд
1
Снова нажмите кнопку в виде зеленого флажка. Ваш спрайт произносит числа по порядку от 0 до 9. Происходит это потому, что заданная вами команда
Следующий шаг – последовательность действий 73
изменяет, или, другими словами, модифицирует, саму переменную. Теперь
каждый раз при запуске цикла программа прибавляет единицу к значению
переменной цикл (рис. 4-7).
Рис. 4-7. Благодаря переменной котик теперь может считать
Считаем с нуля
Цикл, который вы создали, выполняется 10 раз. Так почему же котик считает до 9? Дело в том, что программа также учитывает и 0. Поэтому если
вы хотите, чтобы котик досчитал до «10», вам следует изменить начальное
значение переменной с 0 на 1.
Существуют и другие способы изменения значения переменной. Перетащите блок говорить цикл
2 секунд из блока
повторить 10 раз . Теперь удалите
сам блок повторить 10 раз , перетащив его на палитру блоков. Вместо удален, прикрепив его снизу блока
ного блока поместите блок повторять пока не
задать цикл значение 0 . В результате блок повторять пока не
должен заключать в себе два соединенных между собой блока, говорить цикл 2 секунд и
изменить цикл
на 1 . Далее на палитре блоков перейдите в раздел Операто= 50 и перетащите его на
ры (Operators). Найдите ромбовидный блок
.
соответствующее ему ромбовидное отверстие блока повторять пока не
Зеленый блок из раздела Операторы (Operators) позволяет нам приравнять два значения, включая переменные. Перейдите в раздел Переменные
74
Глава 4. Программируем на Scratch 3
(Variables) и перетащите блок цикл в пустое окошко зеленого блока
а затем в этом же блоке замените число 50 на число 10.
когда
задать
= 50 ,
нажат
цикл
значение
повторять пока не
0
= 50
говорить
цикл
2
секунд
изменить
цикл
на
1
Нажмите кнопку в виде зеленого флажка, расположенную над областью сцены. Программа запустится, и вы обнаружите, что ничего не поменялось и ваш
спрайт так же, как и раньше, считает от 0 до 9 (рис. 4-8), после чего программа
завершает свою работу.
Это происходит потому, что действия блоков повторять пока не
и
повторить 10 раз схожи. Разница состоит в том, что первый блок вместо подсчета циклов сравнивает значение переменной цикл со значением, введенным
после знака равно. Когда значение переменной цикл достигает 10, программа
завершает работу.
Исходя из названия, оператор сравнения сравнивает два значения. Щелк
нув по разделу Операторы (Operators), расположенному на палитре блоков,
вы можете найти два других таких блока. Все они имеют ромбовидную форму. Также здесь вы можете найти блок, содержащий знак =. Блок со значком <
сравнивает два значения и запускает программу тогда, когда значение слева
меньше значения справа. С точностью до наоборот происходит с блоком, включающим значок >: программа сравнивает два значения и запускает программу
тогда, когда значение слева больше значения справа.
Перейдите в раздел Управление (Control) на палитре блоков и перетащите блок если
, то в область сценариев. Далее поместите его под
говорить цикл
2 секунд , тем самым автоматически заключив блок
блок
изменить цикл
на 1 . Потом перетащите блок изменить цикл
на 1
так,
Следующий шаг – последовательность действий 75
чтобы он соединился с нижней частью блока если
, то . Щелкните мышью
по категории Внешний вид (Looks), расположенной на палитре блоков, а за-
, то . Тетем перетащите блок говорить Привет! 2 секунд внутрь блока если
перь щелкните мышью по категории Операторы (Operators), расположенной
на палитре блоков, и выберите блок
ное пространство блока если
> 50 . Перетащите его в ромбовид-
, то .
Рис. 4-8. Пример совместного использования
блока «Повторять пока не» и оператора сравнения
Блок если
, то задает условие. Это означает, что программа заработает
только при соблюдении условия, указанного внутри этого блока. Перейдите
в раздел Переменные (Variables) на палитре блоков и перетащите блок цикл
в незаполненное пространство в блоке
> 50 , а затем введите число 5
вместо 50. Теперь в блоке говорить Привет!
строку Это число больше!.
2 секунд замените слово Привет! на
76
Глава 4. Программируем на Scratch 3
когда
задать
нажат
цикл
повторять пока не
говорить
если
значение
0
цикл
= 10
2
секунд
цикл
цикл
>
, то
5
говорить Это число больше!
изменить
цикл
на
2 секунд
1
Нажмите кнопку в виде зеленого флажка. Сначала программа будет работать, как раньше: котик будет считать от нуля и дальше. Когда цифра будет
, то сработает и спрайт скажет вам: «Это
больше 5 (например, 6), блок если
число больше!» (рис. 4-9). Поздравляем! Теперь вы владеете навыками работы
с переменными и условными конструкциями!
Рис. 4-9. Котик говорит, что число больше заданного, когда оно достигает 6
Проект № 1 «Скорость реакции космонавта» 77
Задача: больше или меньше
Что нужно изменить в последовательности, для того чтобы котик сообщил
о том, что число меньше 5? А что для того, чтобы он говорил и про большие, и про меньшие числа? Для облегчения задачи поэкспериментируйте
с блоком
Проект № 1 «Скорость реакции космонавта»
Теперь, когда вы уже достаточно хорошо знакомы с принципами работы
Scratch, пора создать что-то более масштабное. А именно игру «Скорость реакции космонавта», разработанную в честь астронавта Бориса Егорова и его
продолжительного полета в космос.
При желании вы можете сохранить созданную вами ранее программу. Теперь создадим новый проект: в меню Файл (File) выберите пункт Новый
(New). И прежде чем начать, сохраните файл под именем «Скорость реакции
космонавта»: в меню Файл (File) выберите пункт Сохранить на свой компьютер (Save to your computer).
В этом проекте мы с вами будем уделять внимание двум вещам: фону сцены
и спрайту. Данные компоненты не загружены в проект изначально, поэтому
вам будет необходимо добавить их: нажмите на панели задач кнопку в виде
малины, чтобы открыть меню Raspberry Pi OS, затем в категории Интернет
(Internet) щелкните мышью по значку браузера Chromium. После загрузки
браузера введите адрес rptl.io/astro-bg в адресную строку и нажмите клавишу
Enter. Правой кнопкой мыши щелкните по изображению космического пространства, а затем выберите пункт Save image as… (Сохранить изображение
как...). Введите подходящее имя файла и нажмите кнопку Save (Сохранить)
(рис. 4-10). Вернитесь к адресной строке и введите rptl.io/astro-sprite. Нажмите клавишу Enter.
Рис. 4-10. Сохранение изображения для фона сцены
78
Глава 4. Программируем на Scratch 3
Теперь щелкните правой кнопкой мыши по изображению Бориса, затем выберите пункт Save image as… (Сохранить изображение как…) и откройте папку загрузок. Введите подходящее имя файла и нажмите кнопку Save (Сохранить). Сохранив оба изображения, закройте браузер и перейдите к программе
Scratch 3.
Пользовательский интерфейс
Если вы следовали инструкциям, указанным в данной главе, от начала и
до конца, то вы уже знакомы с интерфейсом программы Scratch 3. Дальнейшие инструкции будут преподноситься с учетом того, что вы уже ознакомлены с расположением основных разделов. В случае если вы все-таки
забыли, где найти тот или иной раздел, вернитесь в начало этой главы.
Щелкните правой кнопкой мыши по изображению спрайта котика, а затем выберите пункт Удалить (Delete). Установите указатель мыши на зна
Выбрать фон (Choose a Backdrop) и нажмите кнопку
Загрузить
чок
фон (Upload Backdrop).
Найдите скачанное изображение космоса (с введенным вами при сохранении именем, например Космос.png) в папке с загруженными файлами, щелк
ните по нему мышью и нажмите клавишу OK. Белый фон сцены был заменен изображением космоса, а область сценариев сменится на раздел Фоны
(Backdrops) (рис. 4-11). Здесь вы можете рисовать прямо поверх фона, но это
чуточку позже. Сейчас вернитесь обратно в раздел Код (Code) с помощью
вкладки, расположенной в верхней части окна приложения Scratch 3.
Рис. 4-11. Белый фон сцены был заменен изображением космоса
Проект № 1 «Скорость реакции космонавта» 79
Теперь займемся загрузкой нового спрайта: установите указатель мыши на
значок
Выбрать спрайт (Choose a Sprite) и щелкните мышью по кноп-
ке
Загрузить спрайт (Upload Sprite). Найдите файл Астронавт.png (или
как вы его там назвали) в папке с загруженными файлами, щелкните по нему
мышью, а затем нажмите кнопку OK. Спрайт автоматически появится на сцене, однако может оказаться не по центру. Для изменения его положения, нажав
и удерживая на нем левую кнопку мыши, перетащите его так, чтобы он оказался в центре (рис. 4-12).
Рис. 4-12. Перетащите спрайт в виде астронавта
в нижнюю центральную часть сцены
Теперь, когда у вас готовы базовые элементы, такие как спрайт и фон, можно приступать к созданию программы. Начнем с создания новой переменной
время, в настройках которой следует установить флажок Для всех спрайтов
(For all sprites). Для того чтобы выбрать спрайт, щелкните мышью по нему
либо на сцене, либо в списке спрайтов. Затем перетащите в область сценариев блок когда
нажат из раздела События (Events). Далее добавьте блок
говорить Привет! 2 секунд из раздела Внешний вид (Looks). Щелкните мышью
по последнему блоку и смените текст Привет! на Привет! Это российский астронавт Борис! Вы готовы?.
80
Глава 4. Программируем на Scratch 3
Перетащите в область сценариев блок ждать 1 секунд из раздела Управление (Control) и блок сказать Привет! из раздела Внешний вид (Looks).
В последнем блоке замените текст Привет! на Полетели!. Теперь добавим блок
сбросить таймер из категории Сенсоры (Sensing). Данный блок отвечает за отдельную переменную, позволяющую определить время, которое будет отведено на реакцию игрока.
Теперь перетащите блок ждать до
из раздела Управление (Control) в об-
ласть сценариев, а блок клавиша пробел нажата? из раздела Сенсоры (Sensing)
в пустой многоугольник предыдущего блока. Благодаря данному блоку программа останавливается и запускается только после нажатия клавиши Пробел.
При этом таймер будет продолжать свою работу, подсчитывая время, которое
прошло с момента появления фразы «Полетели!» до нажатия клавиши Пробел.
Проект № 1 «Скорость реакции космонавта» 81
Теперь необходимо сделать так, чтобы Борис сообщил вам то самое время в
простой, понятной для вас форме. И в этом случае мы будем использовать блок
объединить яблоко банан из раздела Операторы (Operators). Переменная здесь
принимает два значения и в дальнейшем сливается в одно. Такой процесс получил название конкатенации.
сказать Привет!
Поверх слова «Привет!» блока
поместите блок
объединить яблоко банан . Щелкните мышью по слову яблоко и вместо него
напишите фразу Время вашей реакции. Убедитесь, что вы поставили пробел
в конце вписанной фразы. Далее подставляем тот же самый зеленый блок
объединить яблоко банан , но уже на место слова банан. В этом блоке в первую
ячейку поместите блок таймер из раздела Сенсоры (Sensing), а во вторую впишите слово секунд. Не забудьте про пробел перед словом «секунд».
значение 0 из раздела ПеременПеретащите блок задать моя переменная
ные (Variables) в конец заданной последовательности. Откройте в этом блоке
раскрывающийся список «моя переменная» и выберите пункт время, а вместо
значения 0 подставьте блок таймер , находящийся в разделе Сенсоры (Sensing).
Теперь вы можете запустить игру, нажав кнопку в виде зеленого флажка, расположенную над областью сцены. Будьте внимательны! Как только на экране
появится фраза «Полетели!», нажмите клавишу Пробел настолько быстро, насколько сможете (рис. 4-13) – попробуйте побить наш рекорд!
82
Глава 4. Программируем на Scratch 3
Рис. 4-13. Время играть!
Теперь можем усложнить задачу и попробовать рассчитать расстояние, которое пролетел наш герой в космос за то время, пока мы еще не нажали клавишу Пробел. Будем ссылаться на общедоступную информацию о скорости,
а именно 7 км/с. Для этого создадим новую переменную с именем дистанция.
Обратите внимание на то, что блоки категории Переменные (Variables) автоматически обновляются, при этом блоки, содержащие переменную время ,
остаются неизменными.
Добавим блок задать дистанция
ножения
*
значение 0
и вместо 0 подставим блок ум-
из раздела Операторы (Operators). Далее перетащите блок
время в первый пустой кружок, а во втором укажите число 7. В результате у вас
получится блок задать дистанция значение время * 7 . Благодаря данной инструкции программа рассчитывает расстояние, пройденное космическим кораблем
в километрах, умножая скорость (7) на время, потребовавшееся вам для нажатия клавиши Пробел.
Проект № 1 «Скорость реакции космонавта» 83
Добавьте блок ждать 1 секунд
и замените 1 на 4. Перетащите блок
сказать Привет! в самый конец последовательности и вместо слова Привет! поставьте два блока объединить яблоко банан так, как мы делали с вами раньше.
В первом кружке вместо слова яблоко введите: За это время МКС пролетит, а в
последнем кружке вместо слова банан впишите километров. Опять же не забывайте про пробелы.
Теперь перетащите блок округлить
в средний пустой кружок. А сейчас
. Зеленый блок округляет числа до
вставьте блок дистанция в блок округлить
целого. Преимущество здесь заключается в том, что хотя число и не сверхточное, зато оно легко воспринимается.
Нажмите кнопку в виде зеленого флажка. После запуска программы мы
узнаем, сколько же километров пролетит МКС за время до нажатия клавиши
Пробел. После того как вы закончите, не забудьте сохранить программу, чтобы
потом не начинать все с самого начала!
Задача: пользовательские изображения
Вы можете щелкнуть мышью по спрайту или фону, затем перейти на
вкладку Костюмы (Costumes) или Фоны (Backdrops) соответственно, чтобы открыть окно редактора с инструментами рисования. Сможете нарисовать собственных персонажей и фон и отредактировать код, дабы ваш
персонаж говорил что-нибудь другое?
84
Глава 4. Программируем на Scratch 3
Рис. 4-14. Борис докладывает, сколько километров
пролетел космический корабль
Проект № 2 «Синхронное плавание» 85
Проект № 2 «Синхронное плавание»
В большинстве игр для управления персонажем используется несколько клавиш на клавиатуре. Мы тоже не будем отставать и попробуем создать игру,
управлять персонажем которой будет возможно при помощи клавиш ←, ↑, ↓
и → на клавиатуре.
Создайте и сохраните новый проект под названием «Синхронное плавание».
Щелкните мышью по слову Сцена (Scene) в правой части окна программы, а
затем перейдите на вкладку Фоны (Backdrops), расположенную в левом верхнем углу. Нажмите кнопку Конвертировать в растровую графику (Convert to
Bitmap). В раскрывающемся списке Заливка (Fill) выберите синий цвет, выберите инструмент
фону (рис. 4-15).
Заливка (Fill), а после щелкните мышью по клетчатому
Рис. 4-15. Залейте фон синим цветом
Теперь удалите спрайт котика, щелкнув по нему правой кнопкой мыши, а затем выбрав пункт Удалить (Delete). Далее откройте список доступных спрайтов, щелкнув мышью по кнопке
Выбрать спрайт (Choose a Sprite). В категории Животные (Animals) выберите спрайт Cat Flying (рис. 4-16) и нажмите
кнопку OK. Этот спрайт отлично впишется в наш проект.
Щелкните мышью по новому спрайту. А теперь на вкладке Код (Code) перетащите два блока когда клавиша пробел нажата из раздела События (Events) в
область сценариев. Нажмите на маленькую стрелочку рядом со словом «Пробел» и замените его на Стрелка влево. Далее из раздела Движение (Motion)
86
Глава 4. Программируем на Scratch 3
перетащите блок
повернуть
когда клавиша стрелка влево
ком когда клавиша пробел
на 15 градусов и поместите его под блок
нажата . Проделайте то же самое со вторым бло-
нажата , но уже выберите в раскрывающемся спи-
ске пункт Стрелка вправо и добавьте блок повернуть
дела Движение (Motion).
на 15 градусов из раз-
Рис. 4-16. Выберите спрайт в библиотеке
когда клавиша стрелка влево
повернуть
на 15 градусов
когда клавиша стрелка вправо
повернуть
нажата
на 15 градусов
нажата
Проект № 2 «Синхронное плавание» 87
Чтобы протестировать нашу программу, нажмите на одну из клавиш,
← или →. Вы заметите, что ваш спрайт поворачивается в сторону в зависимости от клавиши, которую вы нажали. Хочу обратить ваше внимание на то, что
программа сработала даже без нажатия кнопки в виде зеленого флажка, поскольку команды используемых в проекте блоков из раздела События (Events)
всегда активны в фоновом режиме.
Повторите шаги, но для клавиш ↑ и ↓. Используйте блоки идти 10 шагов и
идти 10 шагов из раздела Движение (Motion). Попробуйте нажимать клавиши и
убедитесь в том, что теперь котик может разворачиваться и плыть вперед и назад.
когда клавиша стрелка влево
�оверн�т�
нажата
на 15 град�сов
когда клавиша стрелка в�раво
�оверн�т�
на 15 град�сов
когда клавиша стрелка вверх
идти
нажата
10 шагов
когда клавиша стрелка вниз
идти
нажата
нажата
−10 шагов
Чтобы спрайт был привлекательнее, вы можете изменить его внешний вид,
известный в Scratch как костюм. Щелкните мышью по спрайту, а затем перейдите на вкладку Костюмы (Costumes), расположенную в верхней части палит
ры блоков. Щелкните мышью по костюму «Cat Flying – а», а потом по знач
ку
, расположенному в правом верхнем углу спрайта. Теперь щелкните
мышью по костюму «Cat Flying – b» и в поле Костюм (Costume) введите слово
право.
88
Глава 4. Программируем на Scratch 3
Рис. 4-17. Назовите костюм «право»
Щелкните правой кнопкой мыши по только что переименованному костюму
«право», а затем выберите пункт Дублировать (Duplicate). Вы создали копию.
Щелкните мышью по этой копии, выберите инструмент
Выбрать (Select)
и нажмите кнопку
Отразить по горизонтали (Flip Horizontal). Присвойте
костюму имя лево (рис. 4-18). Таким образом мы получили два костюма: один
с названием «право» – котик повернут направо, другой с названием «лево» –
котик повернут налево.
Рис. 4-18. Дублируем костюм, отражаем его зеркально и называем его «лево»
Проект № 2 «Синхронное плавание» 89
На вкладке Код (Code) найдите и перетащите из раздела Внешний вид
(Looks) палитры блоков два блока изменить костюм на лево
под оранжевые блоки раздела События (Events), отвечающих за действия по нажатию клавиш
← и →. Блок, помещенный под блок со стрелкой вправо, измените следующим образом: изменить костюм на право . Попробуйте нажимать клавиши – и
увидите результат: котик плывет в нужном вам направлении, поворачиваясь в
указанную сторону мордочкой.
когда клави�а стрелка влево на�ата
лево нажата
когдаизменить
клавиша кост�м
стрелканавлево
повернуть
15 градусов
изменить
костюм наналево
повернуть
на 15 градусов
когда клави�а стрелка вправо
на�ата
когдаизменить
клавиша кост�м
стрелканавправо
право нажата
изменить
костюм нанаправо
повернуть
15 градусов
повернуть
на 15 градусов
когда клави�а стрелка ввер�
на�ата
Однако если мы претендуем на участие в Олимпийских играх по синхронному плаванию, когда
намклавиша
нужнастрелка
целая
команда
вверх
нажата пловцов. Добавьте блок
когда
идти 10 �агов
нажат , находящийся в разделе События (Events), а под него перемес
идти 10 шагов
тите перейти в x: 0 в y: 0 – блок, отвечающий за движение, в котором вы
можете изменить значения при необходимости. Теперь добавим блок, также
когда клави�а стрелка вниз
на�ата
отвечающий за движение, повернуться в направлении 90 . Сейчас при нажатии
когда клавиша стрелка вниз нажата
кнопки в виде зеленого флажка
идти ваш
ȿ10 спрайт
�агов переместится в центр сцены и поидти
−10
шагов
вернется направо.
когда
на�ат
пере�ти в �� 0 в �� 0
повернуться в направлении 90
повторить 6 раз
Для создания команды пловцов перетащите блок повторить 10 раз и измеповернуть на 60 градусов
ните значение с 10 на 6. Соедините его с блоком создать клон самого себя . Для
клон
самого себя в нижней части последоватого чтобы задать пловцам создать
разные
направления
когда клави�а стрелка ввер�
90
идти
на�ата
10 �агов
Глава 4. Программируем на Scratch 3
когда к�ави�а стре�ка в�ево
нажата
повернуть
навниз
15 градусов
тельности, добавьте блок
когда
клави�а
на�ата и замените значение с
из�енить
кост��стрелка
на �ево
15 на 60. Блок должен также оказаться внутри блока повторить 6 раз . После
повернуть
15 градусов
идти
ȿ10 нафлажка
�агов
нажмите кнопку в виде
зеленого
и с помощью стрелок управляйте вашей командой пловцов!
когда к�ави�а
стре�ка вправо
когда
на�ат
нажата
из�енить кост�� на право
пере�ти в �� 0 в �� 0
повернуть
на 15 градусов
повернуться в направлении 90
повторить 6 раз
когда к�ави�а стре�ка ввер�
повернуть
идти
нажата
на 60 градусов
10 �агов
создать клон самого себя
когда к�ави�а стре�ка вниз нажата
И для полного погружения в атмосферу Олимпийских игр можно добавить
музыкальное сопровождение.
на вкладку Звуки (Sounds), распоидти ȿ10Перейдите
�агов
ложенную над палитрой блоков, а затем нажмите кнопку
Выбрать звук
(Choose a Sound). Перейдите в категорию Циклы (Loops) (рис. 4-19). Прослушивайте мелодии до тех
когдапор, пока
нажатне найдете то, что нужно. Мне больше по
душе «Dance Around». Нажмите кнопку OK, а затем перейдите на вкладку Код
(Code), чтобы снова вернуться
пере�ти в ��в область
0 в �� 0 сценариев.
нажат , доступный в разделе События
Добавим еще один блок когда
повернуться в направ�ении 90
(Events). Далее добавьте из раздела Управление (Control) блок повторять всегда
, а внутрь него поместите
блок 6. Нераззабудьте проверить, корректная ли компоповторить
зиция указана в последнем блоке.
повернуть
нафлажка
60 градусов
Нажмите кнопку в виде
зеленого
и посмотрите, что же получилось.
Если вы захотите остановить
музыку
или
создать к�он са�ого се�я завершить программу, нажмите
кнопку в виде красного восьмиугольника, расположенную рядом с зеленым
флажком.
когда
нажат
повторять всегда
играть звук Dance Around
до конца
Проект № 2 «Синхронное плавание» 91
Рис. 4-19. Выбор музыкальной композиции из списка
Внесем пару финальных штрихов. Добавим блок когда клавиша пробел
нажата ,
находящийся в разделе События (Events), и блок изменить костюм на право
.
Ниже присоедините блок повторить 36 раз , а внутрь последовательно блоки
повернуть
на 10 градусов и идти 10 шагов .
Посмотреть результат вы можете, нажав кнопку в виде зеленого флажка. Запустите программу и нажмите клавишу Пробел (рис. 4-20). Не забудьте сохранить вашу программу!
Задача: индивидуальная программа
Сможете ли вы самостоятельно создать подобную программу с использованием циклов? Что вам нужно сделать, чтобы изменить количество пловцов? Способны ли вы добавить новые действия, управление которыми вы
сможете осуществлять нажатиями клавиш на клавиатуре?
92
Глава 4. Программируем на Scratch 3
когда клавиша стрелка влево
нажата
изменить костюм на лево
повернуть
на 15 градусов
когда клавиша стрелка вправо
нажата
изменить костюм на право
повернуть
на 15 градусов
когда клавиша стрелка ввер�
идти
нажата
10 шагов
когда клавиша стрелка вниз
идти
ȿ10 шагов
когда
нажат
нажата
пере�ти в �� 0 в �� 0
повернутьс� в направлении 90
повторить 6 раз
повернуть
на 60 градусов
создать клон самого себ�
когда клавиша пробел
нажата
изменить костюм на право
когда
нажат
повторить 36 раз
повернуть
повтор�ть всегда
играть звук ����� ������
до кон�а
на 10 градусов
идти 10 шагов
Проект № 3 «Стрельба из лука» 93
Рис. 4-20. Готовая программа «Синхронное плавание»
Проект № 3 «Стрельба из лука»
Теперь, когда вы стали профи в работе с программой Scratch, настало время
заняться чем-то более серьезным. Создадим игру, в которой нужно будет стрелять по мишени из лука.
Откройте браузер Chromiun и введите адрес rptl.io/p/en/archery. Нажмите
клавишу Enter. Файлы скачиваются в формате Zip-архива, поэтому вам нужно
будет их распаковать, щелкнув правой кнопкой мыши, а затем нажав кнопку
Извлечь (Extract). Перейдите обратно в программу Scratch. В меню Файл (File)
выберите пункт Загрузить с компьютера (Load from your computer). Выберите файл ArcheryResources. sb3 и нажмите кнопку Открыть (Open). Появится
запрос, хотите ли вы заменить прошлый проект на новый. При необходимости
нажмите кнопку OK. Если же вы еще не сохранили проект, нажмите кнопку
Отмена (Cancel) и сохраните его.
Материалы, которые вы только что загрузили, содержат фон сцены и
спрайт (рис. 4-21). При этом не было загружено ни одного сценария, ведь
их составление – это ваша задача. Добавьте блок когда
нажат , затем блок
создать клон самого себя .В раскрывающемся списке этого блока выберите пункт
Новое сообщение (New Message), а потом введите текст Новая стрелочка. Нажмите кнопку OK. Таким образом мы получили блок передать новая стрелочка
.
94
Глава 4. Программируем на Scratch 3
Рис. 4-21. Загрузка фона сцены и спрайта
для дальнейшего создания программы
когда
нажат
передать новая стрелочка
Передать в данном блоке означает то, что данное сообщение воспринимается любой частью программы. Теперь добавьте блок когда я получу сообщение1
и смените значение в раскрывающемся списке с сообщение1 на Новая стрелочка.
В результате получится блок когда я получу новая стрелочка . В этот раз вам не
нужно снова самостоятельно вводить фразу, достаточно просто выбрать ее из
списка.
Под блок когда я получу новая стрелочка
перетащите блок перейти в x: 0 в y: 0 .
В данном случае необходимо изменить установленные по умолчанию значения
по осям х и у на –150. Ниже разместите блок установить размер 400 % . У последнего блока, как и у предыдущего, нужное значение не установлено по умолчанию, поэтому убедитесь, что вы все настроили правильно. Нажмите кнопку в
виде зеленого флажка, и вы заметите, что мишень, в которую игрок пытается
попасть стрелой, переместилась в левый угол и увеличилась в размере.
когда
нажат
Проект № 3 «Стрельба из лука» 95
передать новая стрелочка
когда я получу новая стрелочка
перейти в x: 150 y: –150
установить размер 400 %
Чтобы усложнить задачу игроку, заставим мишень двигаться тогда, когда лучник прицеливается и натягивает лук. Добавьте блок повторять всегда
и вложите в него блок плыть 1 секунд в точку x: 0 y: 0 . Смените значение с 1 на 0.5, а затем из раздела Операторы (Operators) перетащите блоки
выдать случайное от 0 до 10 вместо чисел, указанных для осей х и у. В зеленых
блоках укажите значения –150 и 150 соответственно. Эта последовательность
когда на�ат
блоков позволяет мишени произвольно перемещаться по сцене, что значительно
задачу игроку.
передатьусложняет
новая стрелочка
когда я получу новая стрелочка
перейт� в x: 150 y: –150
установ�ть ра��ер 400 %
повторять всегда
когда
нажат
передат� нова� стрело�ка
плыть 1 секунд в точку x: выдать случайное от –150 до 150 y: выдать случайное от –150 до 150
когда � полу�у нова� стрело�ка
в �� флажка.
150 �� –150
Нажмите кнопку в видеперейти
зеленого
Сейчас мишень движется в произвольных направлениях вдоль всей области сцены, однако вы все еще не можете
установит� ра��ер 400 %
выстрелить из лука. Перетащите блок когда клавиша пробел
нажата в область
сценариев, а под него из раздела Управление (Control) блок стоп все . Откройте раскрывающийся список
последнем
выберите
вариант
плыт� 1и всекунд
в то�ку ��блоке
выдат�
слу�айное от
–150 доДругие
150 �� выдат� слу�а
стоп
другие
скрипты
спрайта
скрипты спрайта:
.
повтор�т� всегда
когда клавиша пробел
нажата
стоп другие скрипты спрайта
Если вы остановили программу перед добавлением новых блоков, нажмите
кнопку в виде зеленого флажка, а затем клавишу Пробел. Мишень останавливается, однако не происходит эффекта попадания в цель. Исправим это: добавьте блок повторить 50 раз , а под него блок изменить размер на –10 % . Теперь
снова нажмите кнопку в виде зеленого флажка, и вы увидите, что стрела летит
в цель очень правдоподобно! Мы добились желаемого результата!
��тановить размер 400 %
повторять в�е��а
96
п��ть 1 �е��н� в то��� �� в��ать ����а�ное от –150 �о 150 �� в��ать ����а�ное от
Глава 4. Программируем на Scratch 3
�о��а ��ави�а про�е�
на�ата
�топ �р��ие ��рипт� �пра�та
повторять 50 раз
изменить размер на –10 %
Чтобы играть стало еще интереснее, введем счет. К уже имеющейся последовательности добавьте блок если
, то под блок повторить 50 раз . Убедитесь,
что блок если
, то находится под блоком цикла, а не внутри него. В пус
? .
тое ромбовидное окошко первого блока поместите блок касается цвета
Этот блок доступен в разделе Сенсоры (Sensing). Щелкните мышью по индикатору цвета в этом блоке и при помощи палитры и инструмента
цвет центра мишени, т. е. желтый.
Оповестим
говорить 200 очков
победителя,
добавив
блоки
захватите
включить звук cheer
2 секунд последовательно внутрь блока если
, то . Теперь
в самый низ последовательности переместите блок передать новая стрелочка
Убедитесь, что блоки находятся вне блока если
и
.
, то . Данная команда будет
выдавать игроку одну стрелу для выстрела. Запустите программу и попробуйте
попасть «в яблочко». Когда вам все-таки это удастся, программа поддержит вас
овациями и наградит 200 очками.
Вы создали достаточно сложную игру. Попробуйте на основе изученного материала добавить баллы за попадание в другие части мишени: 100 баллов за
красный сектор, 50 баллов за синий и т. д.
Если вы хотите создать больше проектов в программе Scratch, см. приложение Г.
Проект № 3 «Стрельба из лука» 97
когда
на�ат
передать новая стрелочка
когда я получу новая стрелочка
пере�ти в �� 150 �� –150
установить раз�ер 400 %
повторять всегда
пл�ть 1 секунд в точку �� в�дать случа�ное от –150 до 150 �� в�дать случа�ное от –150 до 150
когда клави�а про�ел
на�ата
стоп другие скрипт� спра�та
повторять 50 раз
из�енить раз�ер на –10 %
если касается цвета
?
, то
включить звук cheer
говорить 200 очков
2 секунд
передать новая стрелочка
Задача: внесем некоторые изменения?
Как вы можете упростить игру? А усложнить? Какой блок нужно добавить,
чтобы выдать игроку сразу несколько стрел? Как добавить таймер с обратным отсчетом для создания более напряженной обстановки?
Глава
5
Программируем
на Python
Теперь, когда вы освоили Scratch, мы научим вас программировать на
языке Python.
Гвидо ван Россум создал известный язык программирования Python. Название
было дано в честь комедийной труппы Монти Пайтон, и сам язык программирования изначально было просто хобби-проектом и обнародован в 1991 г.
Python отличается от визуальной объектно-ориентированной среды программирования Scratch, поскольку работа его основывается на текстовом коде: при
написании программы, которая в дальнейшем будет выполняться компьютером, вы используете определенный формат и упрощенный язык.
Python отлично подходит для развития новых навыков у тех, кто уже знаком
со Scratch, ведь программа предоставляет нам повышенную гибкость и более
«традиционную» среду программирования. Работа с программой не составит
огромного труда. К тому же с практикой каждому пользователю удастся написать программу любого уровня сложности, начиная с простых вычислений и
заканчивая невероятно сложными играми.
Эта глава будет основываться на терминах и понятиях, введенных в главе 4.
Если вы еще не ознакомились с ней, советуем перед началом работы с Python
вернуться к ней и проработать разобранные там упражнения.
Thonny – интегрированная среда разработки
для Python
По умолчанию интерфейс Thonny представлен в «простом» режиме: на панели инструментов (А) отображаются понятные значки, позволяющие создавать,
сохранять, загружать и запускать программы на языке Python, а также тестировать их всевозможными способами. В области сценария (Б) отображается
код написанных вами программ на языке Python. Она поделена на основную
область и небольшое боковое поле, где отображаются номера строк кода (В).
В оболочке (Г) вы можете выполнять отдельные команды, нажимая после их
100
Глава 5. Программируем на Python
ввода клавишу Enter, а также выводить данные и результаты запуска сценариев программ.
Версии интерфейса Thonny
Данная программа создана в двух версиях интерфейса: «обычном» и
«простом», последний из которых больше подходит для начинающих.
В этой главе мы рассмотрим простой режим, используемый по умолчанию. Он открывается автоматически после выбора ярлыка программы в
меню Программирование (Programming) Raspberry Pi OS.
А.
В.
Б.
Г.
А.
Б.
Панель инструментов
Область сценария
В.
Г.
Номера строк
Оболочка
Ваша первая программа на Python:
Привет, мир!
Как и другие предустановленные программы в Raspberry Pi OS, программа Thonny запускается из меню: нажмите на панели задач кнопку в виде
малины, установите указатель мыши на пункт меню Программирование
(Programming) и щелкните мышью по значку Thonny Python IDE. Через несколько секунд загрузится пользовательский интерфейс Thonny (простой режим выбран по умолчанию).
Ваша первая программа на Python: Привет, мир!
101
Thonny – программа, известная как интегрированная среда разработки
(IDE). Само название кажется сложным, однако на деле все просто: программа
интегрирует (объединяет) различные средства, необходимые для написания
или разработки ПО, в единую пользовательскую среду (интерфейс). Существует множество доступных IDE, некоторые из которых поддерживают несколько различных языков программирования, в то время как другие, такие как
Thonny, способны поддерживать лишь один язык.
Python – более традиционный язык программирования, поскольку в основе
создания сценариев лежат текстовые символы. В этом-то и отличие от Scratch
(визуальной объектно-ориентированной среды), где основой для создания
программы являются блоки. Запустим нашу первую программу. Для этого в
интерфейсе Thonny перейдите на вкладку Shell (Оболочка), расположенную
в левом нижнем углу окна, а затем введите код, указанный ниже, и нажмите
клавишу Enter:
print("Привет, мир!")
Программа мгновенно начинает работать после нажатия клавиши Enter.
В ответ Python выведет сообщение «Привет, мир!» в той же самой области
(рис. 5-1). Происходит это потому, что оболочка и интерпретатор имеют прямую связь друг с другом. Задача последнего заключается в интерпретации
инструкций. Такой процесс получил название интерактивного режима: создается атмосфера диалога – как только вы произносите фразу, программа вам
отвечает, а затем ждет следующую вашу реплику.
Рис. 5-1. Программа Python выводит сообщение «Привет, мир!»
в области оболочки
102
Глава 5. Программируем на Python
Синтаксическая ошибка
Если вам не удается запустить программу и на экран выводится сообщение «SYNTAX ERROR» («Синтаксическая ошибка»), значит, в вашем коде
была допущена ошибка. Инструкции на языке Python должны строго отвечать правилам. Если вы пропустили скобку или кавычку, написали слово
«print» неправильно или сделали первую букву прописной, добавили дополнительные символы и т. д., программа не будет работать. В таком случае перепишите код заново, убедившись, что он соответствует правилам,
указанным в этом руководстве, и только потом нажмите клавишу Enter!
Конечно, вовсе необязательно использовать Python в интерактивном режиме. Перейдите в область сценария в левой части окна Thonny, а затем введите
код снова:
print("Привет, мир!")
В этот раз после нажатия клавиши Enter никаких изменений не произойдет, за исключением того, что теперь у вас появилась еще одна строка в области сценариев, но при этом пустая. Чтобы программа заработала, нажмите
кнопк у
Выполнить (Run) на панели инструментов. После этого вам будет
предложено сохранить программу: введите название (например, Hello World)
и нажмите кнопку OK. После сохранения программы в области оболочки по
явятся два сообщения (рис. 5-2):
>>> %Run 'Hello World.py'
Привет, мир!
Рис. 5-2. Запуск простой программы
Следующий шаг: циклы и отступы в коде 103
Первая строка – команда для интерпретатора Python запустить только
что сохраненную программу. Вторая – команда вывода сообщения на экран.
Поздравляем, вы только что написали и запустили вашу первую программу
Python как в интерактивном режиме, так и из файла сценария!
Задача: новое сообщение
Можете ли вы изменить текст сообщения, которое программа Python в
итоге выводит на экран? При желании добавить еще несколько сообщений, какой режим следует выбрать? Режим сценария или интерактивный?
Что будет, если вы запустите программу, предварительно удалив скобки
или кавычки?
Следующий шаг: циклы и отступы в коде
В программе Scratch для соединения блоков между собой на каждом из них
есть специальные выступы и впадины. Точно так же и в Python, только вместо
выступов в программе используется свой собственный способ управления: отНовое (New) на панели
ступ. Создайте новую программу: нажмите кнопку
инструментов Thonny. Предыдущая программа при этом не будет потеряна,
так как приложение создаст новую вкладку над областью сценария. Далее напечатайте следующее:
print("Цикл начат!")
for i in range(10):
Первая строка, как и в предыдущей программе, Hello Word, выводит прос
тое сообщение на экран. Вторая строка задает программе определенный
цикл, работающий так же, как и в Scratch: циклу присваивается счетчик
в виде переменной i, а далее с помощью ключевого слова range вводится
перечень чисел – диапазон выполнения команды. Числа начинаются с 0 и
сортируются в порядке возрастания до 10, при этом не включая его. Символ
двоеточия (:) инструктирует Python, что следующие строки кода являются
частью цикла.
Если сравнивать Python со Scratch, то во втором случае такая команда обозначается в сценарии С-образным блоком. В Python же применяется другой
подход, а именно расстановка отступов. Следующая строка будет начинаться с
четырех пробелов, которые должны автоматически появиться в третьей строке, после нажатия клавиши Enter.
print("Итерация", i)
Таким образом, пробелы смещают код ближе к центру. Благодаря отступу Python распознает разницу между командами, относящимися к циклу, и
командами, к нему не относящимися. Такой код получил название вложенного.
104
Глава 5. Программируем на Python
Обратите внимание, что при нажатии клавиши Enter программа автоматически делает отступ и в четвертой строке, предполагая, что она тоже является
частью цикла. Чтобы удалить отступ, нажмите клавишу Backspace один раз,
после чего можете работать с кодом для четвертой строки:
print("Цикл закончен!")
Ваша программа, состоящая из четырех строк, завершена. Первая команда
находится вне цикла, следовательно, выполняться будет один раз, код из второй строки непосредственно задает сам цикл, третья команда находится внут
ри цикла и будет выполняться один раз для каждого цикла, четвертая же, как и
первая, находится вне цикла.
print("Цикл начат!")
for i in range(10):
print("Итерация", i)
print("Цикл закончен!")
Нажмите кнопку
Выполнить (Run), а затем сохраните программу, озаглавив ее Indentation, и полюбуйтесь на полученный результат, выведенный в
области оболочки (рис. 5-3):
Цикл начат!
Итерация 0
Итерация 1
Итерация 2
Итерация 3
Итерация 4
Итерация 5
Итерация 6
Итерация 7
Итерация 8
Итерация 9
Цикл закончен!
Отсчет с нуля
Python – это язык с так называемой нулевой индексацией, т. е. отсчет начинается с 0, а не с 1, поэтому в вашей программе счет идет от 0 до 9, а
не от 1 до 10. При желании это можно исправить, изменив инструкцию
range(10) на range(1, 11) или на диапазон с любыми другими числами.
Отступы – очень важная вещь в Python, поскольку их пропуск – одна из самых распространенных причин, по которым программа может не работать
должным образом. При поиске неполадок в программе, процессе, известном
как отладка, советуем дважды проверять отступы, особенно если в программе
имеются циклы, вложенные внутри других циклов.
Следующий шаг: циклы и отступы в коде 105
Рис. 5-3. Выполнение цикла
В Python также поддерживаются бесконечные циклы, которые выполняются
без остановки. Чтобы изменить определенные циклы на бесконечные, отредактируйте вторую строку следующим образом:
while True:
Если сейчас вы решите запустить программу, то на экране высветится сообщение об ошибке: name 'i' is not defined. Причина в том, что вы удалили
строку, которая создавала и присваивала значения переменной i. Чтобы исправить это, просто отредактируйте третью строку так, чтобы в ней больше не
фигурировала переменная:
print("Цикл начат!")
Нажмите кнопку
Выполнить (Run), и если вы будете предельно быстры
и внимательны, то заметите, что на экране высветится сообщение «Цикл начат!» и будет бесконечно повторяться (рис. 5-4). При этом сообщение «Цикл
закончен!» никогда не появится на экране, так как у данного цикла нет конца:
каждый раз, когда Python завершает вывод на экран сообщения «Цикл начат!»,
приложение возвращается к началу цикла, тем самым выводя сообщение
вновь.
Для остановки программы нажмите кнопку
Остановить (Stop) на панели инструментов Thonny. Эта функция называется прерыванием программы.
Вы увидите сообщение, появившееся в области оболочки Python. Программа
остановится, при этом не выполнив команду из последней строки.
106
Глава 5. Программируем на Python
Рис. 5-4. Бесконечный цикл продолжается до тех пор,
пока вы сами не остановите программу
Задача: замкнуть цикл
Сможете ли вы самостоятельно сменить бесконечный цикл на определенный? А сможете ли вы добавить в программу второй определенный
цикл? Что нужно сделать, чтобы поместить цикл в цикл? Каким образом
он будет работать?
Условные конструкции и переменные
Во всех языках программирования переменные выполняют и другие функции, помимо управления циклами. Создайте новую программу, нажав кнопку
Новое (New) на панели Thonny, а затем введите в область сценария следующее:
userName = input("Как тебя зовут? ")
Нажмите кнопку
Выполнить (Run), сохраните программу под названием Name Test и изучите вывод в оболочке. Вам будет предложено ввести
свое имя. Введите его и нажмите клавишу Enter. Поскольку это единственная
Следующий шаг: циклы и отступы в коде 107
заданная программе команда, никаких действий не произойдет (рис. 5-5). Однако если вы захотите, чтобы программа провела какие-либо манипуляции
над этой переменной, вам будет необходимо ввести дополнительные строки
кода.
Рис. 5-5. Функция ввода позволяет пользователю
вводить необходимые данные
Чтобы программа совершила какие-либо действия с именем, добавьте условие, введя следующее:
if userName == "Кларк Кент":
print("Ты – супермен!")
else:
print("Ты не супермен!")
Помните о том, что при вводе кода программа автоматически добавляет отступы, так как не может определить, в какой момент отступы должны отсутствовать, поэтому вам придется убирать их вручную перед словом else:.
Нажмите кнопку
Выполнить (Run) и присвойте имя новой программе. Программа выведет на экран сообщение «Ты не супермен!» (если, конечно,
ваше имя не Кларк Кент). Нажмите кнопку
Выполнить (Run) еще раз и
попробуйте ввести «Кларк Кент» (проверьте, чтобы имя было написано в точности как в коде, с прописных букв «К»). Теперь приложение сообщает вам о
ваших супергеройских способностях (рис. 5-6)!
108
Глава 5. Программируем на Python
Рис. 5-6. Разве вы не должны сейчас спасать мир?
Символы == инструктируют Python произвести точное сравнение, чтобы
понять, соответствует ли значение переменной userName тексту, называемому строкой, в вашей программе. При работе с числами вы можете также
обратиться и к другим символам сравнения: > определяет, больше ли первое число, чем второе, < определяет, меньше ли первое число, чем второе, =>
определяет, больше оно или равно, и =< определяет, меньше оно или равно.
А еще есть комбинация символов != , определяющая, что числа не равны, –
полная противоположность ==. Эти символы в данном контексте известны
как операторы сравнения.
Использование символов = и ==
Ключ к успеху в использовании этих символов заключается в запоминании разницы между ними. Запомните: = означает присвоить переменной
определенное значение, == означает проверить, равна ли переменная
определенному значению. Проверка этих двух операторов – залог успеха,
в случае когда программа по какой-либо причине не работает!
Операторы сравнения также могут быть задействованы в циклах. Удалите
строки со второй по пятую, а вместо них введите следующее:
while userName != "Кларк Кент":
print("Ты не супермен – попробуй еще раз!")
Следующий шаг: циклы и отступы в коде 109
userName = input ("Как тебя зовут? ")
print("Ты – супермен!")
Снова нажмите кнопку
Выполнить (Run). На этот раз программа не завершит работу, а будет продолжать спрашивать ваше имя до тех пор, пока вы
не окажетесь суперменом (рис. 5-7). Напоминает ввод пароля. Чтобы завершить цикл, вам необходимо либо ввести Кларк Кент, либо нажать кнопку
Остановить (Stop), расположенную на панели инструментов Thonny. Поздравляю: теперь вы знаете, как использовать условные конструкции и операторы
сравнения!
Рис. 5-7. Программа будет спрашивать ваше имя до тех пор,
пока вы не признаетесь, что вы – «Кларк Кент»
Задача: добавить больше вопросов
Можете ли вы внести изменения в написанную программу, так чтобы при
запуске было задано больше одного вопроса, при этом допустив различные ответы к каждому из них? Сумеете ли вы создать программу, в которой будут использоваться условные конструкции и операторы сравнения
для следующего условия: является ли число, введенное пользователем,
больше или меньше 5? (Похоже на программу, которую мы с вами создавали в главе 4.)
110
Глава 5. Программируем на Python
Проект 1 «Черепашьи подсолнухи»
Теперь, когда вы знакомы с Python, пришло время поработать с графикой
и создать снежинку с помощью инструмента, получившего название «черепашка».
Свое название этот инструмент получил благодаря схожей с черепашкой форме, а предназначен он для перемещения ее по полю вперед и назад, для поворотов, а также для поднятия и опускания пера (в цифровой версии это означает,
что программа начинает или прекращает рисовать линию). В отличие от других языков программирования, таких как Logo и некоторые иные, инструмент
«черепашка» не встроен по умолчанию в Python, однако в библиотеке доступен специальный модуль, поддерживающий работу инструмента «черепашка»
после импорта. Библиотека – набор модулей, хранящих в себе дополнительные
сценарии, тем самым расширяющие возможности Python. С помощью команды
import вы можете самостоятельно добавлять модули в свои программы.
Создайте новую программу, нажав кнопку
Новое (New), и введите следующее:
import turtle
При использовании модулей, импортированных из библиотеки, необходимо соблюдать правила написания инструкций: писать имя модуля, затем точку, а после – необходимую команду. Вам может не понравиться каждый раз
печатать столько знаков, ведь можно было бы и сократить их количество, выбрав короткое имя переменной (состоящее, например, всего из одной буквы).
Однако нам показалось, что будет здорово присвоить нашей черепашке имя
pat. Введите следующее:
pat = turtle.Turtle()
Чтобы проверить, работает ли программа, необходимо задать черепашке команду. Напечатайте:
pat.forward(100)
Запустите программу, нажав кнопку
Выполнить (Run), а затем сохраните свой сценарий под названием Turtle Snowflakes. После сохранения программы появится окно с надписью «Turtle Graphics», и вы увидите результат
вашей работы: черепашка по имени Пэт переместится вперед на 100 шагов,
оставляя за собой прямую линию (рис. 5-8).
Вернитесь в главное окно Thonny, скрытое за окном Turtle Graphics. Для
этого нажмите кнопку Свернуть (Minimize) окна Turtle Graphics либо щелк
ните мышью по вкладке программы Thonny, расположенной на панели задач
Остановить (Stop) для
в верхней части экрана, а затем нажмите кнопку
закрытия окна Turtle Graphics.
Достаточно утомительно печатать отдельную инструкцию для каждого действия вручную, поэтому мы предлагаем вам удалить третью строку и создать
цикл, который задаст черепашке команду нарисовать фигуру:
Проект 1 «Черепашьи подсолнухи» 111
for i in range(2):
pat.forward(100)
pat.right(60)
pat.forward(100)
pat.right(120)
Рис. 5-8. Черепашка движется вперед, рисуя прямую линию
Запустите программу, и Пэт нарисует параллелограмм (рис. 5-9).
Рис. 5-9. Комбинируя повороты и перемещение, можно создавать фигуры
112
Глава 5. Программируем на Python
Чтобы превратить параллелограмм в снежинку, нажмите кнопку
Остановить (Stop) в окне Thonny и вложите цикл внутрь цикла, добавив следующую строку вместо третьей:
for i in range(10):
…и следующий код в самый конец программы:
pat.right(36)
На данном этапе ваша программа не будет работать, поскольку в цикле отсутствуют нужные отступы. Исправим это: по очереди, начиная с 4-й и заканчивая 8-й строкой, расставьте по четыре пробела в начале каждой строки, нажимая клавишу Пробел.
Вы добавили необходимые отступы, и теперь код должен выглядеть следующим образом:
import turtle
pat = turtle.Turtle()
for i in range(10):
for i in range(2):
pat.forward(100)
pat.right(60)
pat.forward(100)
pat.right(120)
pat.right(36)
Нажмите кнопку
Выполнить (Run) и понаблюдайте за черепашкой:
сначала она, как и раньше, нарисует параллелограмм, но затем повернется на
36 градусов и нарисует еще один, потом еще один и так далее, пока на экране
не появится десять перекрещенных параллелограммов, похожих на снежинку
(рис. 5-10).
Рис. 5-10. Дублируем фигуру, создавая тем самым из простой более сложную
Проект 1 «Черепашьи подсолнухи» 113
В то время как в реальности робот-черепашка способен рисовать на ватмане
фигуру лишь одним цветом, черепашка Python способна задействовать целую
палитру цветов. Сдвиньте вниз имеющиеся строки кода начиная с третьей и
добавьте новые 3 и 4 строки:
turtle.Screen().bgcolor(“blue")
pat.color("cyan")
Снова запустите программу, и вы увидите результат: цвет фона стал синим,
а снежинка – голубой (рис. 5-11).
Рис. 5-11. Изменение цвета фона и снежинки
Вы также можете выбрать цвет случайным образом из списка, воспользовавшись модулем random из библиотеки. Вернитесь в начало программы и вместо
второй строки вставьте следующее:
import random
Измените цвет фона в четвертой строке с blue (синий) на grey (серый), а
затем создайте новую переменную с именем colours (цвета), вставив новую
пятую строку:
colours = ["cyan", "purple", "white", "blue"]
Такой тип значения переменной называется списком и указывается в квад
ратных скобках. В подобном случае список заполняется допустимыми для
рисования сегментов снежинки цветами. Однако вам все равно будет необходимо указывать один из них каждый раз при повторе цикла. В самый конец
программы введите следующее (набрав в этой строке отступ из 4 пробелов, как
и в строке сверху, поскольку они являются частью цикла):
pat.color(random.choice(colours))
114
Глава 5. Программируем на Python
Тонкости диалектов
Во многих языках программирования используется американская орфография, и Python не исключение: команда для изменения цвета линий
носит имя color, и если вы напишете ее в британском варианте colour,
программа попросту не будет работать. Переменные, однако, могут быть
определены с любым подходящим именем. Именно поэтому вы можете
присвоить переменной имя colour.
Выполнить (Run), и программа снова нарисует снеНажмите кнопку
жинку, похожую на сюрикен. Однако на этот раз Python будет рандомно выбирать цвет из списка для каждого лепестка, тем самым рисуя многоцветную
снежинку (рис. 5-12).
Рис. 5-12. Использование случайно выбранных цветов для «лепестков»
Чтобы фигура стала больше похожа на настоящую снежинку, а не на сюрикен, добавьте новую шестую строку под строку со списком colour и введите
следующее:
pat.penup()
pat.forward(90)
pat.left(45)
pat.pendown()
Инструкции penup и pendown позволяют поднять и опустить кисть на бумагу
(в случае когда мы говорим о реальном роботе-черепахе), в виртуальном мире
эти команды позволят программе начать или закончить рисовать линии. На
Проект 1 «Черепашьи подсолнухи» 115
этот раз вместо цикла мы используем функцию – фрагмент кода, который вы
сможете применить в любое время, например для создания собственной инст
рукции в Python.
В первую очередь удалите ту часть кода, которая задает программе команду
нарисовать снежинку из параллелограммов. Это строки, находящиеся между
10-й строкой pat.color("cyan") и 17-й строкой pat.right(36), включая сами
строки. Оставьте строку pat.color(random.choice(colours)), но поставьте в начало хеш-символ (#). Таким образом мы закомментировали эту строку, чтобы
игнорировать ее при запуске программы. Вы также можете использовать комментарии при желании добавить пояснения к определенному коду, что позволяет облегчить понимание при прочтении его спустя долгое время или при
прочтении его другим человеком.
Создайте собственную функцию с именем branch, введя следующую инст
рукцию в 10-ю строку под кодом pat.pendown():
def branch():
Данная инструкция определяет функцию branch. При нажатии клавиши
Enter программа автоматически добавит отступ перед строками внутри функции. Убедитесь, что тщательно проверили все отступы, поскольку перед некоторыми строками был добавлен тройной отступ! Введите следующее:
for i in range(3):
for i in range(3):
pat.forward(30)
pat.backward(30)
pat.right(45)
pat.left(90)
pat.backward(30)
pat.left(45)
pat.right(90)
pat.forward(90)
В заключение создадим новый цикл в конце программы, но над закомментированной строкой кода, задающей цвет, для запуска (вызова) нашей новой
функции:
for i in range(8):
branch()
pat.left(45)
В итоге код программы должен выглядеть следующим образом:
import turtle
import random
pat = turtle.Turtle()
turtle.Screen().bgcolor("grey")
colours = ["cyan", "purple”, "white", "blue"]
pat.penup()
116
Глава 5. Программируем на Python
pat.forward(90)
pat.left(45)
pat.pendown()
def branch():
for i in range(3):
for i in range(3):
pat.forward(30)
pat.backward(30)
pat.right(45)
pat.left(90)
pat.backward(30)
pat.left(45)
pat.right(90)
pat.forward(90)
for i in range(8):
branch()
pat.left(45)
#
pat.color(random.choice(colours))
Запустите программу, нажав кнопку
Выполнить (Run), и понаблюдайте
за изменениями, происходящими на экране: за тем, как Пэт рисует картинку,
следуя вашим инструкциям. Поздравляем! Теперь снежинка похожа на настоя
щую (рис. 5-13)!
Рис. 5-13. Дополнительные ответвления оживляют снежинку
Проект 2 «Поиск страшных отличий» 117
Задача: что же дальше?
Можете ли вы использовать закомментированную строку кода для
окраски «лепестков» снежинки в разные цвета? Можете ли вы создать
функцию с именем snowflake, для того чтобы программа создала сразу
несколько снежинок? Способны ли вы задать программе команду произвольной смены размера и цвета снежинок?
Проект 2 «Поиск страшных отличий»
В программе Python можно также обрабатывать загруженные изображения и
звуки с помощью уже известной вам черепашки. Вы можете вызвать бурю эмоций у своих друзей, подшутив над ними. Для этого отлично подойдет игра в
духе поиска отличий на страшных картинках, особенно в ночь Ивана Купалы,
ведь секрет ее заключается в испуге пользователя.
Для создания проекта вам потребуются два изображения: первое – обычное, а второе – пугающее, которое появится неожиданно. Также необходимо
соответствующее звуковое сопровождение. Нажмите на панели задач кнопку в виде малины. Перед вами откроется меню Raspberry Pi OS. Переместите
указатель мыши на пункт Интернет (Internet) и для запуска выберите пункт
Веб-браузер Chromium (Chromium web-browser). После загрузки браузера
введите в адресную строку ссылку rptl.io/spot-pic и нажмите клавишу Enter.
Правой кнопкой мыши щелкните по изображению, а затем выберите пункт
Save image as… (Сохранить изображение как…). Выберите домашний каталог,
введите подходящее имя файла и нажмите кнопку Save (Сохранить). Вернитесь
к адресной строке браузера и введите другой адрес – rptl.io/scary-pic. Нажмите клавишу Enter. Снова правой кнопкой мыши щелкните по изображению,
а затем выберите пункт Save image as… (Сохранить изображение как…). Выберите домашний каталог, введите подходящее имя файла и нажмите кнопку
Save (Сохранить).
Теперь скачаем подходящий звуковой файл. Вернитесь к адресной строке
браузера и введите другой адрес – rptl.io/scream. Нажмите клавишу Enter.
Файл, содержащий аудиозапись крика, загрузится автоматически. Но для использования его предварительно необходимо сохранить в домашний каталог.
Правой кнопкой мыши щелкните по пункту en_images_...wav в левом нижнем
углу окна Chromium и выберите команду Show in folder (Показать в папке).
В появившемся окне файлового менеджера щелкните правой кнопкой мыши
по файлу scream.wav и выберите пункт Cut (Вырезать). Наконец, щелкните по
папке Home в левой части окна файлового менеджера, щелкните правой кнопкой мыши по свободному от объектов пространству области просмотра файлов
в правой части окна и выберите пункт Paste (Вставить). Теперь можно закрыть
браузер Chromium.
Для создания нового проекта нажмите на панели инструментов кнопку
Новое (New). Как и в прошлом проекте, для расширения возможностей Python
118
Глава 5. Программируем на Python
вам нужно будет воспользоваться дополнительным модулем Pygame. Модуль
Pygame создан для разработки игр. Введите следующее:
import pygame
Для работы вам потребуется как содержимое модуля Pygame, так и содержимое других модулей. Импортируйте их, введя следующее:
from pygame.locals import *
from time import sleep
from random import randrange
Команда from отличается от команды import, поскольку позволяет импортировать только те части модуля, которые необходимы, а не весь модуль целиком. Теперь настроим Pygame (процесс называется инициализацией). Для
этого программе Pygame понадобится информация о ширине и длине экрана
монитора или телевизора пользователя. Называется это разрешением. Введите следующее:
pygame.init()
width = pygame.display.Info().current_w
height = pygame.display.Info().current_h
Последний шаг перед запуском программы Pygame – создание самого окна,
которое в данном случае носит название screen. Введите следующее:
screen = pygame.display.set_mode((width, height))
pygame.display.update()
# А здесь размещается ваш код
pygame.quit()
Обратите внимание на промежуток между строками. В этом пространстве
и будет создаваться ваша программа. А пока сохраним ее под названием Spot
Выполнить (Run). Обратите внимание:
The Difference, нажав кнопку
Pygame создаст окно, фон которого будет полностью черным. Как только программа получит команду выхода, окно сразу же исчезнет. Пока мы не создали
сложную программу и в оболочке выведено лишь одно сообщение (рис. 5-14).
Чтобы отобразить изображение с отличиями, введите следующую инструкцию над строкой pygame.quit():
difference = pygame.image.load('spot_the_diff.png')
Чтобы изображение заполняло экран целиком, масштабируйте его в соответствии с разрешением вашего монитора или телевизора. Для этого введите
следующее:
difference = pygame.transform.scale(difference, (width, height))
Теперь изображение хранится в памяти, и нам необходимо дать команду
Pygame отобразить его на экране (процесс, известный как блиттинг, или передача битовых блоков). Введите следующее:
Проект 2 «Поиск страшных отличий» 119
screen.blit(difference, (0, 0))
pygame.display.update()
Рис. 5-14. Ваша программа работает, но задач пока у нее немного
Первая функция позволяет вывести изображение на экран, начиная с верхнего левого угла, а вторая – отображает его. Без второй строки изображение
будет находиться в нужном месте в памяти, однако видеть его вы не сможете!
Нажмите кнопку
на экране (рис. 5-15).
Выполнить (Run), и изображение ненадолго появится
Рис. 5-15. Ваше изображение с отличиями
120
Глава 5. Программируем на Python
Для того чтобы изображение отображалось дольше, добавьте еще одну строку над функцией pygame.quit():
sleep(3)
Нажмите кнопку
Выполнить (Run) еще раз. Изображение будет отображаться на экране немного дольше. Добавьте сюрприз (пугающее изображение),
введя под строкой pygame.display.update() следующее:
zombie = pygame.image.load('scary_face.png')
zombie = pygame.transform.scale(zombie, (width, height))
Добавьте строку, задающую небольшую паузу перед появлением изображения зомби на экране.
sleep(3)
Затем выведите изображение на экран:
screen.blit(zombie, (0,0))
pygame.display.update()
Нажмите кнопку
Выполнить (Run), и вы увидите следующее: сначала
Pygame загрузит изображение с отличиями, но через три секунды заменит его
изображением страшного зомби (рис. 5-16)!
Рис. 5-16. Вы «страшно» удивите кого-то
Однако, так как пауза каждый раз составляет 3 секунды, игра со второго запуска становится предсказуемой. Для этого изменим строку sleep(3), расположенную над строкой screen.blit(zombie, (0,0)), на
sleep(randrange(5, 15))
Проект 2 «Поиск страшных отличий» 121
Благодаря измененной функции программа выберет случайное число в
диапазоне от 5 до 15 (время в секундах отображения первого изображения на
экране), прежде чем покажет зомби. Для загрузки звукового файла с криком
добавьте следующий код над строкой с функцией sleep():
scream = pygame.mixer.Sound('scream.wav')
А теперь, для того чтобы воспроизвести звук при появлении изображения
зомби, введите под строкой с функцией sleep() следующий код:
scream.play()
Сейчас зададим программе команду прекратить воспроизведение звука,
для этого над строкой pygame.quit() введите следующее:
scream.stop()
Выполнить (Run), и насладитесь
Запустите программу, нажав кнопку
результатом: спустя несколько секунд беззаботной игры в поиск отличий на
экране появится ужасный зомби с леденящим кровь криком, что несомненно
напугает ваших друзей! Если вдруг изображение появляется раньше звука, исправьте это, добавив паузу в конце функции scream.play() и в начале функции
screen.blit():
sleep(0.4)
В результате проделанной работы ваша программа должна будет выглядеть
следующим образом:
import pygame
from pygame.locals import *
from time import sleep
from random import randrange
pygame.init()
width = pygame.display.Info().current_w
height = pygame.display.Info().current_h
screen = pygame.display.set_mode((width, height))
pygame.display.update()
difference = pygame.image.load('spot_the_diff.png')
difference = pygame.transform.scale(difference, (width, height))
screen.blit(difference, (0, 0))
pygame.display.update()
zombie = pygame.image.load('scary_face.png')
zombie = pygame.transform.scale (zombie, (width, height))
scream = pygame.mixer.Sound('scream.wav')
sleep(randrange(5, 15))
scream.play()
screen.blit(zombie, (0,0))
122
Глава 5. Программируем на Python
pygame.display.update()
sleep(3)
scream.stop()
pygame.quit()
Теперь вы смело можете приглашать друзей поиграть в поиск отличий. Главное – убедитесь, что динамики включены!
Задача: изменить внешний вид
Удастся ли вам сменить изображения под какую-нибудь другую тематику,
например новогоднюю? Способны ли вы самостоятельно нарисовать необычные пугающие картинки (используя какой-либо графический редактор, например GIMP)? Способны ли вы учесть наиболее частые действия,
выполняемые пользователем, для усовершенствования программы?
Проект 3 «Текстовый квест»
Теперь, когда вы уже достаточно хорошо освоились в программировании на
Python, пришло время создать что-то более сложное с помощью Pygame, а
именно полнофункциональную текстовую ролевую игру. Цель этой игры – поиск выхода из лабиринта. Она будет создана на основе классических ролевых
игр. Также подобные игры носят название текстовых квестов и берут свое начало со времен, когда компьютеры еще не поддерживали сложную графику.
Однако у таких игр имеется огромное количество поклонников, считающих,
что никакая компьютерная графика не сравнится с той, что может нарисовать
ваше воображение!
Работа над созданием этой программы – нелегкая задача, поэтому, чтобы
упростить ее решение, мы предлагаем совершать дальнейшие манипуляции
над уже частично написанной программой. Откройте браузер Chromium и перейдите по ссылке rptl.io/text-adventure.
Браузер автоматически загрузит файл с кодом программы в каталог
Downloads, однако перед этим предупредит вас, что загружаемый файл может
нанести вред вашему компьютеру. Поскольку вы скачиваете файл из проверенного источника, а именно с официального сайта Raspberry Pi Foundation,
нажмите кнопку Save (Сохранить), расположенную в нижней части открывшегося окна. Перейдите к окну Thonny и нажмите кнопку
Загрузить (Load).
Найдите файл rpg-rpg.py в папке Downloads и нажмите кнопку OK.
Предлагаем начать знакомство с работой текстового квеста с запуска программы. Нажмите кнопку
Выполнить (Run). В нижней части окна Thonny,
в оболочке, выводится текст игры. Разверните окно на весь экран. Это облегчит
вам прочтение информации.
На начальном этапе игра очень легкая: на экране рассказывается о двух комнатах. Другие предметы отсутствуют. Сначала игрок оказывается в зале – пер-
Проект 3 «Текстовый квест» 123
вой из двух комнат. Для перемещения на кухню необходимо написать команду
идти юг и нажать клавишу Enter (рис. 5-17). А когда вы оказались на кухне,
можно ввести идти север, и вы снова вернетесь в исходную позицию, в зал. Для
движения в две другие стороны вы можете ввести команды идти запад и идти
восток, однако пока в этих направлениях комнаты не расположены, и на экране
высветится сообщение об ошибке.
Рис. 5-17. Пока здесь только две комнаты
Прокрутите содержимое программы в области сценария вниз до 29-й строки
и найдите переменную rooms. Такой тип переменных носит название словарь
и передает программе данные о количестве комнат и выходов из них, в какую
именно комнату ведет определенный выход.
Чтобы игра стала более интересной, добавим еще одну комнату. Это будет
гостиная, расположенная восточнее зала. Найдите в области сценария переменную rooms и дополните ее, добавив символ запятой (,) после символа } в
38-й строке, а затем введите следующее (количество пробелов здесь не имеет
значения):
'Гостиная' : {
'запад' : 'Зал'
}
Вам также придется самостоятельно создать выход в эту комнату, поскольку
это не заложено изначально. Для этого в конце 33-й строки добавьте запятую,
а затем введите под ней следующее:
'восток' : 'Гостиная'
124
Глава 5. Программируем на Python
Нажмите кнопку
Выполнить (Run) и попробуйте войти в новую комнату. Введите идти восток, тем самым передвигаясь из зала в гостиную (рис. 5-18).
Теперь идти запад, чтобы перейти из гостиной в зал. Поздравляем, вам удалось
создать комнату!
Рис. 5-18. Вы добавили еще одну комнату
Однако будет гораздо интереснее, если мы заполним пустые комнаты. Для
того чтобы добавить элемент в комнату, необходимо изменить словарь комнаты. Остановите программу (нажмите кнопку
Остановить (Stop)). В области сценария найдите словарь 'Зал' и добавьте запятую в конце строки 'восток' : 'Гостиная'. Нажмите клавишу Enter. А теперь введите следующее:
'предмет' : 'ключ'
Снова нажмите кнопку
Выполнить (Run). Высветится подсказка о
том, что вам доступен новый предмет – ключ. Введите команду взять ключ
(рис. 5-19). Забрать ключ вы сможете после добавления его в список предметов (inventory), которыми вы на данный момент обладаете, – ваш инвентарь.
Инвентарь доступен вам в любой момент, даже при переходе из комнаты в
комнату.
Остановите программу, нажав кнопку
Остановить (Stop). Сделаем игру
интереснее, добавив монстра, которого пользователь должен избегать. Найдите словарь ‘Кухня’ и добавьте в него монстра так же, как вы добавляли ключ. Не
забудьте поставить запятую в конце предыдущей строки:
'предмет' : 'монстр'
Проект 3 «Текстовый квест» 125
Добавим новую концепцию в игру: цель монстра – нападение на игрока. Для
этого прокрутите программу вниз до конца и добавьте следующие строки, содержащие комментарий, сопровождающийся хеш-символом. Это поможет вам
освежить память при прочтении программы в другой день. Не забудьте про
отступы!
# игрок проигрывает, если входит в комнату с монстром
if 'предмет' in rooms[currentRoom]
and 'монстр' in rooms[currentRoom]['предмет']:
print('Монстр схватил тебя... ИГРА ОКОНЧЕНА!')
break
Рис. 5-19. Полученный ключ попадает в ваш инвентарь
Нажмите кнопку
Выполнить (Run) и попробуйте войти в кухню
(рис. 5-20) – монстр будет не слишком рад вашему появлению!
Превратим нашу программу в настоящую приключенческую игру. Для этого
создадим еще несколько предметов, комнат и даже дадим игроку возможность
победить. Победитель здесь тот, кто выберется из дома, собрав все находя
щиеся там предметы. Для этого добавим еще одну комнату по той же схеме,
которую вы проделывали во время создания гостиной. Теперь это комната под
названием 'Сад'. Добавим выход из гостиной, не забывая про запятую в конце
предыдущей строки:
'юг' : 'Сад'
Затем добавьте новую комнату в словарь rooms, опять же проверив наличие
запятой после символа } в строке выше:
126
Глава 5. Программируем на Python
'Сад' : {
'север' : 'Гостиная'
}
Рис. 5-20. Вы явно не обратите внимания на крыс,
потому что здесь есть кое-что пострашнее – монстр!
Добавим новый предмет – зелье – в словарь гостиной. Опять же не забываем
про запятую выше:
'предмет' : 'зелье'
Теперь прокрутите код в самый конец и добавьте условие, что если игрок
собрал все предметы, то он выиграл игру, о чем программа сообщит ему:
# игрок побеждает, если попадет в сад с ключом и зельем
if currentRoom == 'Сад' and 'ключ' in inventory
and 'зелье' in inventory:
print('Ты выбрался из дома... И ВЫИГРАЛ!')
break
Нажмите кнопку
Выполнить (Run) и попробуйте пройти созданную
игру: соберите ключ и зелье, а затем отправьтесь в сад. Помните об опасности
на кухне, там вас поджидает страшный монстр! И заключительный штрих –
подсказки игроку о том, как завершить игру. Прокрутите код программы к самому началу, к функции showInstructions(), и добавьте следующее:
Найди ключ и доберись до сада с зельем
Избегай монстров!
Проект 3 «Текстовый квест» 127
В последний раз запустите игру и полюбуйтесь на результат: новые указания
появляются перед началом игры. Поздравляем! Вы создали интерактивную
текстовую игру, суть которой – выбраться из лабиринта!
Задача: усложнить игру
Знаете ли вы, как добавить еще несколько комнат, чтобы увеличить продолжительность игры? Сможете ли вы добавить некий предмет, способный помочь вам защититься от монстра? Способны ли вы создать комнату,
находящуюся на другом этаже (верхнем или нижнем), зайти в которую
можно, поднявшись по лестнице?
Глава
6
Физические вычисления
на базе Scratch и Python
Программирование – это нечто большее, чем просто выполнение действий на экране. С его помощью вы также можете управлять электронными девайсами, подключенными к интерфейсу GPIO компьютера
Raspberry Pi.
Обычно, говоря о «программировании» или «кодировании», люди часто проводят параллель с программным обеспечением. Однако кодирование связано
не только с ПО. Оно может воздействовать на пользователя через техническое
оснащение. Данный процесс получил название физические вычисления.
Уже из самого названия следует, что физические вычисления – это управление дополнительно подключенными устройствами, т. е. аппаратным обеспечением, а не программным. Когда вы выбираете режим стиральной машины,
регулируете программируемый термостат или нажимаете кнопку на пешеходном светофоре, чтобы безопасно перейти дорогу, вы и пользуетесь той самой
аппаратурой.
Raspberry Pi отлично подходит для изучения физических вычислений благодаря его ключевой функции: интерфейсу ввода/вывода общего назначения
(GPIO).
Интерфейс GPIO
Разъем GPIO расположен в верхнем углу печатной платы Raspberry Pi или на
задней панели Raspberry Pi 400. Выглядит он как пара длинных рядов, заполненных металлическими контактами. Это т. н. штыревая вилка GPIO (generalpurpose input/output), к которой вы можете подключать такие устройства, как
светодиоды и переключатели, и управлять ими с помощью созданных вами
программ. Эти контакты могут использоваться как для ввода, так и для вывода
данных.
Разъем GPIO Raspberry Pi состоит из 40 штырьков, как показано на рис. 6-1.
Часть контактов можно использовать в проектах для физических вычислений,
130
Глава 6. Физические вычисления на базе Scratch и Python
другие обеспечивают питание, а третьи используются для взаимодействия с
дополнительным оборудованием, таким как платы Sense HAT (см. главу 7).
Распиновка GPIO Raspberry Pi (5, 4B, 3B+, 3B, 2B, Zero, Zero 2 W, At, B+)
GPIO
GND (заземление)
3V3
5V
ID EEPROM (только для профессионального использования)
Рис. 6-1. Распиновка интерфейса GPIO на Raspberry Pi
Модель Raspberry Pi 400 оборудована такой же вилкой GPIO с такими же
контактами, что и другие модели Raspberry Pi, только в перевернутом виде.
На рис. 6-2 разъем GPIO показан так, как он размещен на задней стороне
Raspberry Pi 400. Всегда перепроверяйте правильность подключения к разъ
ему GPIO Raspberry Pi 400 перемычек, контакты легко перепутать, несмотря на
надписи «Pin 40» и «Pin 1» на корпусе!
Модель Raspberry Pi Zero 2 W тоже оснащена интерфейсом GPIO, но без штыревой вилки. Если вы хотите выполнять физические вычисления с помощью
Raspberry Pi Zero 2 W или другой модели семейства Raspberry Pi Zero, нужно
сначала припаять вилку в позицию разъема. Если пайка вам не по силам, обратитесь в магазин электронных компонентов и приобретите модель Raspberry
Pi Zero 2 WH с уже припаянной вилкой.
Удлинители GPIO
Вы вполне можете подключать устройства напрямую к разъему GPIO
Raspberry Pi 400, но в некоторых случаях удобнее использовать специальный удлинитель GPIO. С помощью него контакты GPIO выводятся из
корпуса Raspberry Pi 400, и вы сможете с удобством проверить и настроить подключение без необходимости постоянно обращаться к задней
части микрокомпьютера.
Среди совместимых моделей можно назвать Black HAT Hack3r и Pi
T-Cobbler Plus, доступные к покупке в магазинах электроники, например
pimoroni.com и adafruit.com.
Задумавшись о покупке удлинителя, всегда проверяйте его распиновку.
Некоторые, например Pi T-Cobbler Plus, меняют расположение контактов
GPIO. В случае затруднений всегда читайте инструкции производителя, а
не руководствуйтесь распиновками, приведенными в этой книге.
Интерфейс GPIO 131
Распиновка GPIO Raspberry Pi 400
GPIO
GND (заземление)
3V3
5V
ID EEPROM (только для профессионального использования)
Рис. 6-2. Распиновка интерфейса GPIO на Raspberry Pi 400
Выделяют несколько категорий контактов в зависимости от присущей им
функции:
3V3
Напряжение
3.3 вольта
Источник непрерывного питания
напряжением 3,3 В;
под таким напряжением работает
и сама плата Raspberry Pi
5V
Напряжение
5 вольт
Источник непрерывного питания
напряжением 5 В;
такое же напряжение Raspberry Pi
получает через разъем питания USB-C
GND
(заземление)
Заземление,
0 вольт
Заземляющее соединение, используемое
для замыкания цепи, подключенной
к источнику питания
GPIO XX
Интерфейс
ввода/вывода
общего назначения,
контакт
с номером XX
Контакты GPIO, доступные вашему ПО
и обозначенные числами от 2 до 27
ID EEPROM
Контакты,
зарезервированные
под специальные
цели
Контакты, отведенные для подключения
плат расширения Hardware Attached on
Top (HAT), а также других устройств
132
Глава 6. Физические вычисления на базе Scratch и Python
Внимание!
Благодаря разъему GPIO платы Raspberry Pi вы можете с удовольствием
безопасно экспериментировать с физическими вычислениями, однако
вам следует быть осторожными, поскольку при подключении и отключении оборудования контакты могут погнуться. Если в инструкции не указано обратное, то никогда не замыкайте два контакта, умышленно или случайно. В противном случае может произойти короткое замыкание, в ходе
которого плата Raspberry Pi может выйти из строя.
Электронные компоненты
Разъем GPIO – лишь малая часть того, что вам необходимо изучить перед
началом работы с физической вычислительной техникой. Также предлагаем
вам ознакомиться с работой устройств, подключаемых к компьютеру через интерфейс GPIO. Существует огромное количество доступных для подключения к
компьютеру девайсов, однако чаще всего используются следующие:
А.
Б.
В.
Макетная плата
Перемычка
Моментальный переключатель (кнопка)
Д.
Е.
Ж.
Светоизлучающий диод (LED)
Резистор
Пьезоэлектрический зуммер
Рис. 6-3. Распространенные электронные компоненты
Беспаечная макетная плата (А) может значительно упростить работу в процессе физических вычислений. При ее наличии вы перестанете путаться в
огромном количестве проводов, подключая различные устройства к микро-
Интерфейс GPIO 133
компьютеру. Макетная плата дает возможность подключать и соединять девайсы между собой и компьютером через особые металлические контактные
дорожки, скрытые внутри корпуса. Большинство макетных плат содержат секции для распределения контактов питания, упрощающие сборку цепей. Конечно, макетная плата не является неотъемлемым атрибутом в проведении
физических вычислений, однако она, бесспорно, будет полезна.
Соединительные провода, также известные как перемычки (Б), соединяют
дополнительные устройства с вашим Raspberry Pi и, если у вас отсутствует
макетная плата, друг с другом. Существует три варианта перемычек: M2F (папа-мама), необходимые для подключения макетной платы к выводам GPIO;
F2F (мама-мама), необходимые для соединения дополнительных устройств
между собой при отсутствии макетной платы; и M2M (папа-папа), необходимые для соединения между собой контактов макетной платы. В зависимости
от проекта вам могут понадобиться перемычки даже трех типов одновременно. При наличии макетной платы вы можете обойтись без перемычек F2F.
Тактовую кнопку, также известную как мгновенный кнопочный переключатель (В), можно сравнить с элементами управления на джойстиках игровых
приставок. Обычно кнопка выпускается с двумя или четырьмя ножками (любая из них подходит для Raspberry Pi) и является устройством ввода, т. е. вы
можете задать программе отслеживать нажатия кнопки, после чего выполнять
необходимые задачи. Другой распространенный тип переключателя – кнопка
с фиксацией: в то время как тактовая кнопка без фиксации проводит напряжение, пока вы ее удерживаете, кнопка с фиксацией – например, выключатель
света – проводит напряжение после нажатия и до момента, пока вы не нажмете его снова.
Светоизлучающий диод (LED) является устройством вывода, которым вы
можете управлять непосредственно через программу. При включении светодиод загорается. В вашем доме расположено множество таких диодов, начиная
с маленьких – индикаторов включения стиральной машины – и заканчивая
большими, способными освещать комнаты. Внешний вид таких светоизлучающих диодов может быть абсолютно разным, они могут быть различных форм,
цветов и размеров, однако не каждый из них подходит для использования с
Raspberry Pi. Не подойдут те диоды, которые предназначены для источников
питания напряжением 5 или 12 В.
Резисторы – устройства, управляющие потоком электрического тока, которые различаются значением сопротивления, измеряемого в омах (Ω). Чем
больше значение, указанное в омах, тем выше сопротивление резистора. Чаще
всего данное устройство применяется в проектах физических вычислений для
защиты светодиодов и самого компьютера Raspberry Pi от воздействия слишком высокого напряжения и дальнейшего их повреждения. Для этой цели отлично подходят резисторы с номинальным сопротивлением около 330 Ω. Стоит добавить, что многие производители электротехники поставляют наборы,
содержащие резисторы с наиболее востребованными значениями сопротивления.
Пьезоэлектрический излучатель – чаще называемый просто зуммером, или
излучателем звука. Это еще одно устройство вывода. Светодиоды излучают
свет, пьезоизлучатель же воспроизводит звук, похожий на жужжание. Внутри
134
Глава 6. Физические вычисления на базе Scratch и Python
пластикового корпуса излучателя звука скрывается пара металлических плас
тин. Во время работы устройства они вибрируют, тем самым воспроизводя
жужжащий звук. Существует два типа излучателей звука: активные и пассивные. Покупайте активные излучатели звука, поскольку в использовании они
гораздо проще.
К другим распространенным электронным компонентам относятся моторы,
которым потребуется специальная плата управления перед подключением к
Raspberry Pi, инфракрасные датчики, обнаруживающие движение, датчики
температуры и влажности, необходимые для прогнозирования погоды, и фоторезисторы (LDR) – устройства ввода, работающие как светодиоды, только с
точностью да наоборот, регистрируя свет.
Интернет-магазины по всему миру предлагают различные дополнительные
компоненты для работы с физической вычислительной техникой на Raspberry
Pi. Продаются они либо по отдельности, либо в виде комплекта, содержащего
все необходимое для начала работы. Наиболее популярные интернет-магазины в Российской Федерации – это:
•
•
•
•
•
•
•
Чип и дип – chipdip.ru;
Амперка – amperka.ru;
Амперкот – amperkot.ru;
Платан – www.platan.ru;
iArduino – iarduino.ru;
Озон – www.ozon.ru/category/mikrokompyutery-15707/;
Яндекс.Маркет – clck.ru/39ck6z.
Для завершения проектов, описанных в этой главе, у вас в наличии должны
быть следующие компоненты:
•
•
•
•
•
три светодиода: красный, зеленый, желтый или оранжевый;
две тактовые кнопки;
один активный излучатель звука;
перемычки: папа-мама и мама-мама;
опционально: макетная плата и перемычки папа-папа.
Считываем цветовую маркировку резисторов
Резисторам присущ широкий диапазон значений, начиная с моделей, сопротивление которых равно нулю и которые фактически являются просто куском
проволоки, и заканчивая моделями, сопротивление которых очень высоко, а
сами они размером с вашу ногу. При этом существует очень мало резисторов,
код на которых указан в числовом виде. Вместо этого их маркируют специальным цветовым кодом в виде полос, идущих вдоль корпуса резистора (рис. 6-4).
Чтобы правильно интерпретировать сопротивление резистора, расположите его так, чтобы полосы, расположенные близко друг к другу, находились слева, а одиночная полоса – справа. Начнем с первых двух полос: определите цвет
и посмотрите соответствующее значение в таблице, в столбцах «1-я полоса» и
Интерфейс GPIO 135
«2-я полоса», тем самым вы получите первую и вторую цифры кода. На рисунке
выше первые две полосы – оранжевые. Этому цвету соответствует цифра «3»,
из чего в дальнейшем мы получим значение «33». Если в левой части резистора
нанесены четыре полосы, а не три, включите в полученное значение цифру,
соответствующую цвету третьей полосы (если на резистор нанесены 5 или 6
полос, перейдите по ссылке radio-hobby.org/modules/calculation/color-codecalc).
Теперь посмотрите цвет последней полосы в левой группе (3-я или 4-я полоса) и перейдите к таблице, к столбцу «Множитель». На указанное в этом столбце
значение необходимо умножить полученное вами число. Тем самым вы получите фактическое значение сопротивления резистора. На нашем рисунке это
коричневая полоса со значением «×101». Такое значение может напугать вас,
однако не стоит беспокоиться, это всего лишь экспоненциальная запись: «×101»
означает, что вам нужно «просто добавить один нолик к имеющемуся числу».
Если же у нас «×106», то нужно «добавить шесть ноликов к имеющемуся числу».
ЧЕРНЫЙ
КОРИЧНЕВЫЙ
КРАСНЫЙ
ОРАНЖЕВЫЙ
ЖЕЛТЫЙ
ЗЕЛЕНЫЙ
СИНИЙ
ФИОЛЕТОВЫЙ
СЕРЫЙ
БЕЛЫЙ
ЗОЛОТОЙ
СЕРЕБРЯНЫЙ
Отсутствие полосы
1-я полоса
0
1
2
3
4
5
6
7
8
9
–
–
–
2-я полоса
0
1
2
3
4
5
6
7
8
9
–
–
–
3-я полоса
0
1
2
3
4
5
6
7
8
9
–
–
–
Множитель
×100
×10¹
×10²
×10³
×104
×105
×106
×107
×108
×109
×10-¹
×10-²
–
Допустимое отклонение
–
±1 %
±2 %
–
–
±0,5 %
±0,25 %
±0,10 %
±0,05 %
–
±5 %
±10 %
±20 %
Рис. 6-4. Цветовая маркировка резисторов
Число 33, соответствующее первым двум оранжевым полосам, и ноль, соответствующий коричневой полосе, вместе дают нам число 330 – значение сопротивления резистора, измеряемое в омах. Последняя полоса, расположенная
отдельно справа, – допустимое отклонение (также называется толерантностью, или допуском). Данное значение показывает, насколько точно номинальное сопротивление резистора. Бюджетные резисторы маркированы серебрис
той полосой, указывающей на то, что итоговое значение может на 10 % быть
больше или меньше номинального. Также такие модели могут вообще быть не
промаркированы последней полосой. Тогда в этом случае процентное соотношение здесь составит 20 % в большую или меньшую сторону. Если же речь идет
о самых дорогих моделях, то обычно их маркируют серой полосой, значение
136
Глава 6. Физические вычисления на базе Scratch и Python
которой составляет 0,05 %. В рамках данного значения и будет варьироваться
отклонение от номинального значения. При создании любительских проектов
точность не так важна, любое отклонение здесь будет уместно.
Если сопротивление вашего резистора превышает 1000 Ом (1000 Ω), значение переводится в килоомы (кΩ), если же значение превышает 1 000 000 Ом, то
переводится в мегаомы (МΩ). Резистор с сопротивлением в 2200 Ω необходимо
обозначать как 2,2 кΩ, а резистор с сопротивлением в 2 200 000 Ом – 2,2 МΩ.
Сможете разобраться?
Какими цветовыми полосами будет маркирован резистор с сопротивлением 100 Ом? А резистор с сопротивлением 2,2 МОм? Если бы вам было
необходимо выбрать самый дешевый резистор, на какого цвета полосу
допустимого отклонения вы бы ориентировались?
Ваша первая электронная программа: Hello, LED!
Создание своего собственного проекта со светодиодом – первый шаг в
изучении физической вычислительной техники, некое введение. Это то же
самое, что при изучении языков программирования самостоятельно создать
программу, которая будет выводить на экран надпись «Привет, мир!». Для того
чтобы выполнить задачу, вам понадобится светодиод, резистор с сопротивлением 330 Ом (330 Ω) (или резистор с сопротивлением, максимально близким к
330 Ом), а также перемычка типа мама-мама (F2F).
Каждый резистор важен
Резистор – жизненно важный элемент цепи. Его задача – предохранять
светодиоды и сам компьютер Raspberry Pi от избыточного количества
электрического тока. При отсутствии резистора светодиод может поглотить слишком большое количество тока, после чего перегореть сам и,
возможно, повредить Raspberry Pi. Такой тип резисторов называют ограничивающим резистором. Точное значение сопротивления необходимого
резистора зависит от используемого вами светодиода. Резистор с сопротивлением 330 Ом универсален, поскольку подходит для большинства
наиболее распространенных светодиодов. Чем выше значение сопротивления, тем тусклее светится светодиод; чем ниже значение сопротивления, тем ярче.
Никогда не подключайте светодиоды к Raspberry Pi, если в вашей цепи
отсутствует ограничивающий резистор. Исключением здесь является случай, когда светодиод имеет встроенный резистор соответствующего сопротивления.
Для начала проверим, работает ли светодиод. Поверните Raspberry Pi так,
чтобы ряды контактов разъема GPIO располагались вертикально с правой сто-
Интерфейс GPIO 137
роны. Подсоедините резистор с сопротивлением 330 Ом к первому контакту с
напряжением 3,3 В (обозначенному меткой 3V3 на рис. 6-5) с помощью перемычки провода типа мама-мама. Затем соедините конец перемычки (того же
типа мама-мама), выходящей от светодиода, с длинной ножкой, положительной, которая носит название анода. Теперь соединим один конец перемычки
типа мама-мама с короткой ножкой светодиода, отрицательной, которая носит
название катода, а другой – с первым заземляющим контактом (рис. 6-5 обозначен как GND).
Рис. 6-5. Подключите светодиод и не забудьте про резистор!
Светодиод должен гореть все время, пока компьютер включен. В противном случае проверьте, правильно ли вы все подключили: убедитесь, что сопротивление резистора не слишком высокое, перемычки подключены верно,
а контакты GPIO соответствуют схеме. Также проверьте, не перепутали ли вы
ножки светодиода, поскольку его работа осуществляется только в случае, когда
к длинной ножке подключена перемычка с положительной полярностью, а к
короткой – с отрицательной.
Теперь, когда работа светодиода осуществляется должным образом, пришло время его запрограммировать. Отсоедините перемычку от контакта 3V3
(рис. 6-6) и подключите ее к контакту 25 разъема GPIO, обозначенному как
GP25 (рис. 6-6). Светодиод погаснет, но не волнуйтесь – все в порядке.
Рис. 6-6. Отсоедините перемычку от контакта 3V3
и подсоедините ее к GP25
Теперь вы подготовили все для дальнейшего создания программы на языке
Scratch или Python, суть которой – включение/выключение светодиода.
138
Глава 6. Физические вычисления на базе Scratch и Python
Владение навыками кодирования
Проекты, которые мы будем разбирать в этой главе, основаны на базовом
владении Scratch 3 и интегрированной среде разработки Thonny Python
(IDE). Если вы все еще не ознакомились с ними, обратитесь к главам 4 и 5,
проработав описываемые там программы.
Если вы еще не установили программу Scratch 3, следуйте инструкциям,
указанным в главе 3, чтобы установить ее.
Управление светодиодом с помощью Scratch
Загрузите программу Scratch 3 и нажмите кнопку
Добавить расширение (Add Extension). Прокрутите список вниз и найдите расширение Raspberry
Pi GPIO (рис. 6-7), а затем нажмите на него. Программа загрузит блоки, позволяющие управлять интерфейсом GPIO с помощью программы Scratch 3. Новые
блоки автоматически появятся на палитре блоков, и в дальнейшем вы сможете
их найти, перейдя в раздел Raspberry Pi GPIO.
Рис. 6-7. Добавляем расширение Raspberry Pi GPIO в Scratch 3
Для начала щелчком мыши перетащите блок когда
нажат из раздела События (Events) в область сценариев. Теперь под него поместите блок
set gpio to output high . Выберите номер контакта, нажав на маленькую стрелочку в блоке, тем самым открыв раскрывающийся список. Выберите число 25.
Таким образом вы сообщите программе Scratch, что номер необходимого контакта GPIO – 25.
Интерфейс GPIO 139
когда
нажат
set gpio 25
to output
high
Запустите программу, нажав на кнопку в виде зеленого флажка. Вы увидите,
что светодиод загорелся. Вам удалось запрограммировать ваш первый проект,
используя физическую вычислительную технику! Остановите программу, нажав кнопку в виде красного восьмиугольника. Обратите внимание на то, что
светодиод продолжает гореть. Происходит это потому, что значение output
high блока set gpio 25 to output high задает команду Raspberry Pi лишь включить светодиод. Для его отключения необходимо нажать на стрелку рядом со
словом «high» и выбрать в раскрывающемся списке пункт low.
когда
нажат
set gpio 25
to output
low
Снова нажмите кнопку в виде зеленого флажка, и на этот раз вы увидите,
что светодиод выключился. Сделаем программу более интересной. Добавим
оранжевый блок повторять всегда и пару оранжевых блоков
.
Эти блоки зададут программе команду включать и выключать светодиод с интервалом в одну секунду.
Нажмите кнопку в виде зеленого флажка и понаблюдайте за светодиодом.
Он включается на секунду, после чего выключается также на секунду, после
140
Глава 6. Физические вычисления на базе Scratch и Python
чего снова включается. И так будет продолжаться до тех пор, пока вы не остановите программу нажатием кнопки в виде красного восьмиугольника. Нажмите кнопку в виде красного восьмиугольника в момент свечения светодиода, а затем в тот момент, когда он погас, и сравните результаты.
Задача: внесите изменения
Какие изменения необходимо внести в программу, чтобы длительность
свечения светодиода увеличилась? А какие для того, чтобы увеличить
длительность нахождения светодиода в выключенном состоянии? Каково
минимальное время задержки, которое можно задать между включением
и выключением светодиода?
Управление светодиодом с помощью Python
Откройте приложение Thonny, щелкнув по его ярлыку в разделе Программирование (Programming) в меню Raspberry Pi OS. Теперь создадим новый
проект, нажав кнопку
Новое (New). Сохраним его под названием Hello
LED. Для того чтобы использовать интерфейс GPIO в Python, вам необходимо
импортировать модуль под названием GPIO Zero. Для работы над созданием
этого проекта вам понадобится только та группа инструкций этого модуля,
которая предназначена для проведения манипуляций со светодиодами. Для
этого введите следующее в область оболочки Python:
from gpiozero import LED
Теперь сообщим интерпретатору информацию о том, к какому контакту
GPIO подключен светодиод. Введите следующее:
led = LED(25)
Вместе эти две инструкции позволяют с помощью сценария Python управлять светодиодами, подключенными к контактам разъема GPIO Raspberry Pi, и
указывать, какой контакт или контакты (если у вас подключено более одного
светодиода) необходимо использовать. Для управления нашим светодиодом
введите следующее:
led.on()
Для отключения светодиода введите:
led.off()
Поздравляем, теперь вы можете управлять интерфейсом GPIO Raspberry Pi
с помощью Python! Введите последние две функции еще раз. Если светодиод
выключен, то функция led.off() ничего не даст. Также произойдет и с включенным светодиодом и функцией led.on().
Создадим полноценную программу. Для этого в область сценария введите
следующее:
Интерфейс GPIO 141
from gpiozero import LED
from time import sleep
led = LED(25)
while True:
led.on()
sleep(1)
led.off()
sleep(1)
Эта программа импортирует функцию LED() из модуля gpiozero (GPIO Zero)
и функцию sleep() из модуля time. После чего создает бесконечный цикл для
повторения включения и выключения светодиода с задержкой в одну секунду.
Нажмите кнопку
Выполнить (Run), тем самым запустив программу. Светодиод начнет мигать.
Как и в случае со Scratch, рекомендуем обратить внимание на изменения,
происходящие после нажатия кнопки
Остановить (Stop) (в случае с выключенным светодиодом и в случае со светящимся).
Задача: увеличить время работы светодиода
Какие изменения необходимо внести в программу, чтобы длительность
свечения светодиода увеличилась? А какие для того, чтобы увеличить
длительность нахождения светодиода в выключенном состоянии? Каково
минимальное время задержки, которое можно задать между включением
и выключением светодиода?
Использование макетной платы
Создавать проекты, которые мы будем разбирать в этой главе в дальнейшем,
будет намного проще, если у вас есть макетная плата (рис. 6-8), позволяющая
подключать и удерживать различные электрические компоненты.
Каждые пять
отверстий
в каждом ряду
соединены
между собой
Все отверстия
в каждой шине
соединены между
собой
Рис. 6-8. Беспаечная макетная плата
Основание макетной платы покрыто множеством отверстий, расположенных
обычно со стандартным шагом 2,54 мм. Под этими отверстиями помещены ме-
142
Глава 6. Физические вычисления на базе Scratch и Python
таллические пластины, выполняющие роль перемычек (тех, что вы использовали ранее). Эти пластины расположены вдоль шин и рядов по всему основанию. У
большинства плат имеется небольшая канавка посередине, изолирующая группы рядов друг от друга. На большей части плат нанесены числа и буквы возле
шин питания (горизонтальных последовательностей контактов) и рядов (вертикальных последовательностей контактов). Это облегчает поиск необходимого
отверстия: A1 – верхний левый угол, B1 – верхний правый угол, B2 – на одно
отверстие ниже предыдущего. Контакт A1 соединен с B1 скрытой металлической
пластиной. Однако не всегда нужные вам отверстия соединены друг с другом на
макетной плате. Иногда вам будет необходимо соединять их перемычками.
На макетных платах более крупных размеров также расположены отверстия
по краям, и обычно они помечены линиями красного и черного или синего
цвета. Это шины питания, предназначенные для упрощения подключения и
избавления от лишних перемычек. Вы можете подключить один конец перемычки к контакту заземления Raspberry Pi, а второй – к одному из отверстий
шины заземления (обычно отмеченной синей или черной линией и знаком
минуса) макетной платы. Так будет обеспечено общее заземление множества
компонентов, подключенных к макетной плате. То же самое вы можете проделать тогда, когда для вашего проекта необходимы два разных источника питания: например, 3,3 В и 5 В.
Подключать электронные компоненты к макетной плате очень просто: поднесите выступающие металлические контакты (ножки) к отверстиям и начните
осторожно надавливать, пока они не защелкнутся клеммами в макетной плате.
Для соединения разных отверстий макетной платы вам потребуется перемычка типа папа-папа (M2M), а для подключения макетной платы к Raspberry Pi –
перемычка типа папа-мама (M2F).
Внимание!
Никогда не подключайте более одного компонента или перемычки к одному отверстию платы. Запомните, что отверстия соединены между собой
рядами, если не считать канавку посередине, поэтому устройство, которое
вы подключите к контакту A1, будет соединено со всем, что вы подключите к B1, C1, D1 и E1.
Следующий шаг: работа с кнопкой
Устройства вывода, такие как светодиоды, – это одна сторона. Другая –
устройства ввода, которые также можно подключать к разъему GPIO. Интерфейс GPIO способен работать как в режиме вывода, так и ввода. Для создания
этого проекта вам потребуются: макетная плата, перемычки типа папа-папа
(M2M) и папа-мама (M2F), а также тактовая кнопка. В случае если у вас нет макетной платы, вы можете использовать перемычки, однако вам будет гораздо
сложнее нажать кнопку, не прервав электрическую цепь.
Для начала установим кнопку на макетную плату. Если у кнопки только
две ножки, убедитесь в том, что вставлены в отверстия разных рядов платы,
Интерфейс GPIO 143
с разными номерами. Если же у кнопки четыре ножки, расположите кнопку
так, чтобы стороны, на которых расположены ножки, находились параллельно канавке платы, а стороны без ножек – перпендикулярно им. С помощью
перемычки типа папа-мама соедините шину заземления макетной платы с
контактом заземления Raspberry Pi (разъем с меткой GND на рис. 6-9). А теперь с помощью перемычки типа папа-папа соедините ножку кнопки с шиной
заземления. При работе с кнопкой с четырьмя ножками подсоедините вторую
ножку, находящуюся на той же стороне, что и уже подключенная, с помощью
перемычки типа папа-мама ко второму контакту разъема GPIO Raspberry Pi
(контакт с меткой GP2 на рис. 6-4).
Рис. 6-9. Подключение кнопки к разъему GPIO
Управление кнопкой с помощью Scratch
Создайте новую программу в Scratch и перетащите оранжевый блок
когда
нажат в область сценариев. Затем вниз поместите зеленый блок
set gpio to input pulled high и в раскрывающемся списке выберите значение
2, соответствующее заданному кнопке номеру контакта разъема GPIO.
когда
нажат
set gpio
2
to input pulled high
После нажатия кнопки в виде зеленого флажка никаких изменений не последует. Причина заключается в том, что вы задали программе команду ис-
144
Глава 6. Физические вычисления на базе Scratch и Python
пользовать контакт с указанным номером в режиме ввода, но что делать с полученными данными, вы не указали. Перетащите блок повторять всегда в конец
. Найдите
сценария, а затем перетащите внутрь этого блока блок
блок gpio is high? и перетащите его в белое ромбовидное пространство блока
если
, то . В раскрывающемся списке выберите число 2, тем самым указы-
вая программе номер контакта разъема GPIO, с которого необходимо считывать данные. Поместите блок говорить Привет!
блока
2 секунд внутрь части
иначе
. Здесь внесем некоторые изменения: заменим надпись на
кнопка нажата!. Та часть, что находится в центре блока
нется пустой.
когда
, пока оста-
нажат
set gpio
2
to input pulled high
gpio
2
повторять всегда
если
is high
?
, то
иначе
говорить Кнопка нажата!
2 секунд
Мы можем добавить еще много различных блоков, но пока протестируем то,
что у нас получилось. Нажмите кнопку в виде зеленого флажка, а затем кнопку на макетной плате. На экране высветится сообщение от спрайта о том, что
кнопка нажата. Программе удалось прочитать входные данные, полученные
через определенный контакт GPIO!
Поскольку
и иначе
пространство
между
оранжевыми
блоками
если
, то
пока пустое, ничего не происходит, когда значение параметра
если gpio 2 is high? , то оценивается как true. Код, который запускается при нажатии кнопки, находится в другой части блока, иначе . Сценарий кажется за-
путанным, ведь кнопка при нажатии подает напряжение (о чем говорит зна-
Интерфейс GPIO 145
чение high). На самом деле в данном случае все происходит наоборот. Контакт
GPIO изначально находится в режиме high, а нажатие кнопки переводит его в
режим low.
Взгляните на схему еще раз: обратите внимание на то, как кнопка соединена с контактом GP2, т. е. положительным полюсом, и контактом GND. Когда
кнопка нажата, напряжение в разъеме GPIO снижается, проходя через контакт
заземления. Таким образом программа Scratch перестает выполнять команду,
заданную блоком если gpio 2 is high? , то , и начинает выполнять команду, заданную частью иначе этого блока.
Если же вам все еще тяжело вникнуть в этот процесс, просто запомните: при
нажатии кнопки контакт переводится в режим low. Обращаем ваше внимание
на то, что это применимо к конструкции конкретной цепи.
Давайте развивать проект. Добавим в цепь светодиод и резистор. Не забудьте проверить, верно ли вы подключили резистор: он должен быть соединен с
контактом 25 разъема GPIO и длинной ножкой светодиода, короткая же ножка
должна быть соединена с шиной заземления макетной платы.
Удалите блок говорить Кнопка нажата! 2 секунд из области сценариев, перетащив его в палитру блоков. Замените удаленный блок блоком
set gpio 25 to output high . Не забудьте изменить номер контакта GPIO, нажав на
маленькую стрелочку, открывающую раскрывающийся список. В пустую часть
блока если gpio 2 is high? , то добавьте блок set gpio 25 to output low , не забывая о том, что необходимо изменить значения.
когда
нажат
set gpio
2
to input pulled high
повторять всегда
если
gpio
2
is high
?
set gpio 25
to output low
set gpio 25
to output high
, то
иначе
После чего нажмите кнопку на макетной плате. Светодиод горит, пока вы
удерживаете кнопку нажатой. Как только вы отпустите ее, он погаснет. Поздравляем! Вам удалось управлять одним контактом GPIO, основываясь на
вводе данных, поступающих с другого контакта!
146
Глава 6. Физические вычисления на базе Scratch и Python
Задача: пусть светодиод светится
Какие изменения необходимо внести в программу, для того чтобы светодиод оставался включенным на протяжении нескольких секунд после того, как вы отпустили кнопку? Какие изменения необходимо внести
в программу, для того чтобы светодиод выключался при нажатии кнопки,
и наоборот, включался тогда, когда вы ее отпускаете?
Управление кнопкой с помощью Python
Создайте в программе Thonny новый проект, нажав кнопку
Новое
(New). Теперь сохраните программу под названием Button Input, нажав кнопку Сохранить (Save). Использование контакта GPIO в режиме ввода для подключения кнопки схоже с использованием контакта в режиме вывода при
подключении светодиода. Однако для использования кнопки вам необходимо
импортировать другой набор инструкций модуля GPIO Zero. Введите в области
сценария следующие строки:
from gpiozero import Button
button = Button(2)
Для того чтобы код выполнялся при нажатии кнопки, необходимо использовать функцию wait_for_press(), содержащуюся в модуле GPIO Zero. Введите
следующее:
button.wait_for_press()
print("Ты нажал меня!")
Нажмите кнопку
Выполнить (Run), а затем кнопку на макетной плате.
Ваше сообщение будет выведено в области оболочки Python, расположенной в
нижней части окна Thonny. Поздравляем! Вашей программе удалось считать
входные данные с указанного контакта GPIO! Если вы хотите запустить программу еще раз, снова нажмите кнопку
Выполнить (Run). После того как
программа выводит данные в область оболочки, она выключается. Происходит
это из-за отсутствия в программе цикла.
Дополним проект. Подключим к цепи новые компоненты: светодиод и
резистор (если вы не сделали этого ранее). Не забудьте проверить, верно ли вы
подключили резистор: он должен быть соединен с контактом GPIO 25 и длинной ножкой светодиода, короткая же ножка светодиода должна быть соединена с шиной заземления макетной платы.
Для управления светодиодом и кнопкой вам, помимо функции Button, потребуется импортировать функцию LED из модуля gpiozero. Вам также понадобится функция sleep из модуля time. Вернитесь в начало вашей программы и
введите следующее в качестве первых двух строк:
Интерфейс GPIO 147
from gpiozero import LED
from time import sleep
Под строкой button = Button(2) введите:
led = LED(25)
Удалите функцию print("Ты нажал меня!") и замените ее на
led.on()
sleep(3)
led.off()
В итоге ваша программа должна выглядеть следующим образом:
from gpiozero import LED
from time import sleep
from gpiozero import Button
button = Button(2)
led = LED(25)
button.wait_for_press()
led.on()
sleep(3)
led.off()
Нажмите кнопку
Выполнить (Run) в окне программы, а затем кнопку
на макетной плате. Светодиод будет гореть в течение трех секунд, а потом выключится. Программа завершит работу. Поздравляем! Вы научились регулировать работу светодиода с помощью кнопки и Python!
Задача: добавить цикл
Как правильно добавить цикл, чтобы программа продолжала работать
после первого нажатия кнопки? Какие изменения необходимо внести в
программу, для того чтобы светодиод выключался при нажатии кнопки, и
наоборот, включался, когда вы ее отпускаете?
Пошумим: управление излучателем звука
Светодиоды – отличное устройство вывода, однако неэффективное, если находится вне поля зрения. Решение есть: излучатели звука (пьезоэлектрические
излучатели или зуммеры), воспроизводящие звук, который вы можете услышать, находясь в любой части комнаты. Для работы над этим проектом вам
потребуется: макетная плата, перемычки типа папа-мама (M2F) и активный
излучатель звука. Если у вас нет макетной платы, вы можете подключить излучатель звука с помощью перемычек типа мама-мама (F2F).
148
Глава 6. Физические вычисления на базе Scratch и Python
Цепь и программа проекта с излучателем звука схожи с предыдущим проектом, со светодиодом. Возьмите цепь, которую вы собирали со светодиодом, но
замените светодиод активным излучателем звука и оставьте резистор выключенным, поскольку для работы излучателя звука требуется больше напряжения. С помощью макетной платы и перемычек типа папа-мама подсоедините
одну ножку излучателя звука к контакту 15 разъема GPIO (обозначенному как
GP15 на рис. 6-10), а другую – к контакту заземления (GND).
Если у излучателя звука три ножки, убедитесь, что ножка, отмеченная знаком минус (–), подключена к контакту заземления, а ножка, отмеченная буквой «S» или словом «SIGNAL», – к контакту 15 разъема GPIO, а затем подключите оставшуюся ножку (обычно это средняя ножка) к контакту с напряжением
3,3 В (обозначенному как 3V3).
Рис. 6-10. Подключение излучателя звука к разъему GPIO
Управление излучателем звука с помощью Scratch
Воссоздайте программу, которую мы создавали для управления светодио
дом, или загрузите ее, если она была сохранена. Откройте раскрывающийся список блока set gpio 25 to output high и выберите число 15, для того чтобы
Scratch ориентировался на нужный нам контакт разъема GPIO.
Интерфейс GPIO 149
когда
нажат
повторять всегда
set gpio 15
to output high
ждать 1 секунд
set gpio 15
to output low
ждать 1 секунд
Нажмите кнопку в виде зеленого флажка. Излучатель звука начнет гудеть:
одну секунду он будет включен, а одну – выключен. Если излучатель звука
только щелкает один раз в секунду, то перед вами пассивный, а не активный
излучатель. В отличие от пассивного излучателя, нуждающегося в быстро меняющемся сигнале (осциллирующем сигнале), активный излучатель сам направляет его на металлическую пластину, тем самым заставляя ее производить звук нужной частоты. Когда вы запускаете излучатель звука с помощью
Scratch, пластины соприкасаются лишь один раз, тем самым издавая короткий
звук «щелчка». Программа замолкает до следующего ее включения или выключения.
Нажмите кнопку в виде красного восьмиугольника, тем самым остановив
программу. Но сделать это нужно обязательно тогда, когда излучатель не издает звука, иначе он не перестанет шуметь до следующего запуска программы.
Задача: изменить параметры издаваемого излучателем звука
Какие изменения необходимо внести в программу, для того чтобы сократить время звучания излучателя? Можете ли вы создать программу,
позволяющую управлять излучателем с помощью кнопки?
Управление излучателем звука с помощью Python
Управление активным излучателем звука с помощью функций из модуля
GPIO Zero практически идентично управлению светодиодом, поскольку оба
этих устройства могут находиться в двух режимах: включенном и выключенном. Однако сейчас нам понадобится другая функция: buzzer. Создадим новый
проект в Thonny и сохраним его под названием Buzzer. Теперь введите следующее:
150
Глава 6. Физические вычисления на базе Scratch и Python
from gpiozero import Buzzer
from time import sleep
Как и при написании программы, управляющей светодиодом, для управления излучателем звука интерпретатору необходима информация о том, к какому именно контакту излучатель подключен. Введите следующий код:
buzzer = Buzzer(15)
С этого момента программа будет практически идентична той, что вы создали для управления светодиодом. Единственное отличие (кроме подключения к
другому контакту разъема GPIO) – использование другого устройства (излучателя звука, а не светодиода). Введите следующее:
while True:
buzzer.on()
sleep(1)
buzzer.off()
sleep(1)
После нажатия кнопки
Выполнить (Run) излучатель начнет издавать
звук: одна секунда – включен, одна секунда – выключен. При использовании
пассивного, а не активного излучателя звука вы будете слышать вместо непрерывного гудения только короткий щелчок с паузой в одну секунду. Причина
этого заключается в отсутствии у пассивного излучателя осциллятора, вырабатывающего быстро меняющийся сигнал, который заставляет пластины внутри
излучателя вибрировать.
Для завершения работы программы нажмите кнопку
Остановить (Stop),
но убедитесь в том, что излучатель не издает звуков, иначе он будет продолжать шуметь до следующего запуска программы!
Проект на Scratch «Светофор»
Теперь, когда вы научились пользоваться кнопками, излучателями звука и светодиодами – устройствами ввода/вывода, – пора обратить ваше внимание на
действительно сложный пример из реальной жизни. Создадим светофор, регулируемый кнопкой, для безопасного пересечения дороги. Для работы над этим
проектом вам понадобятся: макетная плата, желтый, зеленый и красный светодиоды, три резистора с сопротивлением 330 Ом, излучатель звука, тактовая
кнопка, набор перемычек типа папа-папа (M2M) и папа-мама (M2F).
Начнем с подключения компонентов (рис. 6-11). Подключите излучатель к
контакту 15 разъема GPIO (обозначен как GP15 на рис. 6-11), красный светодиод – к контакту 25 разъема GPIO (обозначен как GP25), желтый светодиод – к
контакту 8 разъема GPIO (GP8), зеленый светодиод – к контакту 7 разъема GPIO
(GP7), а кнопку – к контакту 2 разъема GPIO (GP2). Не забудьте подключить
резисторы с сопротивлением 330 Ом к контактам разъема GPIO и длинным
ножкам светодиодов так, чтобы резисторы оказались между ними. Также не
Проект на Scratch «Светофор» 151
забудьте подключить другие контакты всех компонентов к шине заземления
макетной платы. Для завершения цепи подключите шину заземления к контакту заземления (обозначенному как GND) на плате Raspberry Pi.
Рис. 6-11. Схема подключения компонентов
для дальнейшей работы над проектом светофора
нажат в
Создайте новый проект в Scratch 3. Перетащите блок когда
область сценариев. Теперь вам необходимо сообщить Scratch о том, что
контакт 2 разъема GPIO, к которому подключена кнопка, работает в режиме ввода, а не вывода. Для этого перетащим под уже имеющийся блок
когда
нажат блок set gpio to input pulled high из раздела Raspberry Pi GPIO,
расположенного на палитре блоков. В раскрывающемся списке set gpio выберите пункт 2.
Теперь зададим свою последовательность включения светодиодов. Добавьте блок повторять всегда , а затем поместите в него блоки, как показано
на рисунке ниже. Этими блоками вы задаете команду включения и выключения светодиодов светофора в определенном порядке. Помните о том, к
какому именно контакту GPIO был подключен тот или иной компонент: под
номером 25 – красный светодиод, под номером 8 – желтый, а под номером 7 – зеленый.
152
Глава 6. Физические вычисления на базе Scratch и Python
когда
нажат
set gpio 2
to input pulled high
повторять всегда
set gpio 25
to output high
ждать 5 секунд
set gpio 8
to output high
ждать 2 секунд
set gpio 25
to output low
set gpio
8
to output low
set gpio 7
to output high
ждать 5 секунд
set gpio
7
to output low
set gpio 8
to output high
ждать 5 секунд
set gpio
8
to output low
Нажмите кнопку в виде зеленого флажка и понаблюдайте за светодиодами:
сначала загорится красный, затем одновременно красный и желтый, потом зеленый, далее желтый, а дальше последовательность повторится снова.
По такой же схеме работают многие светофоры. При желании вы можете
отредактировать схему включения светодиодов так, чтобы она совпадала со
схемой работы светофоров любой другой страны.
Проект на Scratch «Светофор» 153
А теперь попробуем смоделировать пешеходный переход. Для этого необходимо, чтобы программа отслеживала нажатия кнопки. Если ваша программа запущена, нажмите кнопку в виде красного восьмиугольника, тем самым
остановив программу. Перетащите блок
в область сценариев и
поместите его непосредственно под блок повторять всегда . Пока не заполняйте
пустой ромбик блока.
В реальной жизни зеленый сигнал для пешеходов загорается не сразу после
нажатия кнопки, а сначала ожидает включения красного сигнала для автомобилей. Используем этот принцип в нашей программе. Для этого перетащите блок
when gpio is low в область сценариев и выберите значение 2 в раскрывающемся
списке. А под него перетащите блок
и измените имя переменной на pushed (вместо «моя переменная»), а значение
с 0 на 1.
Эта группа блоков отвечает за нажатие кнопки, а затем присваивает переменной pushed значение 1. Это позволит вам сохранить факт нажатия кнопки,
даже если действие не планируется выполнять сразу.
Вернитесь к предыдущей группе блоков и сосредоточьтесь на блоке
если
, то . Перетащите блок
в пустой ромбик блока если
=
из раздела Операторы (Operators)
, то , а затем перетащите блок pushed в пер-
вое пустое пространство блока
. В правой части блока введите 0
=
вместо 50.
Нажмите кнопку в виде зеленого флажка, и вы увидите, как светофор (светодиоды) выполняет заданную последовательность. Нажмите кнопку на макетной плате. Сначала вам покажется, что ничего не происходит, однако как
только последовательность завершится (после включения желтого сигнала),
светофор прекратит свою работу, выключив все светодиоды. Происходит это
благодаря команде, задаваемой переменной pushed.
154
Глава 6. Физические вычисления на базе Scratch и Python
когда
нажат
set gpio 2
to input pulled high
повторять всегда
если
pushed = 0
set gpio 25
, то
to output high
ждать 5 секунд
set gpio 8
to output high
ждать 2 секунд
set gpio 25
to output low
set gpio 8
to output low
set gpio 7
to output high
ждать 5 секунд
set gpio 7
to output low
set gpio 8
to output high
ждать 5 секунд
set gpio 8
иначе
to output low
Проект на Scratch «Светофор» 155
Теперь зададим кнопке немного другую команду, отличную от простого
выключения всех светодиодов светофора. В основной группе блоков найдите
блок иначе и перетащите в него блок set gpio 25 to output high . Не забудьте изменить номер контакта разъема GPIO, указав тот номер, к которому подключен светодиод красного цвета.
Создадим последовательность блоков, отвечающую за работу излучателя
звука. Работу продолжаем в том же самом блоке иначе . Перетащите в него
блок повторить 10 раз , разместив ниже блока set gpio 25 to output high , а затем внутрь блока повторить 10 раз поместите блоки set gpio 25 to output high ,
ждать 0.2 секунд , set gpio 25 to output low и еще один блок ждать 0.2 секунд . Отредактируйте значения контактов в этих блоках согласно подключению излучателя звука к разъему GPIO.
Теперь добавьте блоки set gpio 25 to output low и задать pushed
значение 0
так, чтобы они оказались под блоком повторить 10 раз , но внутри блока иначе .
Последний в этой части последовательности блок обнуляет переменную, передающую программе информацию о том, что кнопка нажата. Тем самым заданная излучателю звука последовательность имеет конец, а не повторяется
бесконечно.
Нажмите кнопку в виде зеленого флажка, а затем кнопку, расположенную
на макетной плате. После завершения заданной последовательности загорится красный светодиод и раздастся звуковой сигнал, сообщающий пешеходам о
том, что сейчас дорогу переходить безопасно. Через пару секунд звук, издаваемый излучателем звука, утихнет, а светофор продолжит выполнять заданную
последовательность до тех пор, пока вы не нажмете кнопку.
Поздравляем, вам удалось создать собственную программу, в которой режим работы светофора зависит от нажатия кнопки (для безопасного пересечения дороги)!
Задание: изменяем программу
Какие изменения нужно внести в код, чтобы увеличить время, отведенное
пешеходу для пересечения дороги? Поищите информацию о режиме работы светофоров других стран и перепрограммируйте ваши светофоры
в соответствии с полученными данными. Как можно уменьшить яркость
светодиодов?
156
Глава 6. Физические вычисления на базе Scratch и Python
когда нажат
set gpio 2
to input pulled high
повторять всегда
если
pushed = 0
set gpio 25
, то
to output high
ждать 5 секунд
set gpio 8
to output high
ждать 2 секунд
set gpio 25
to output low
set gpio
8
to output low
set gpio
7
to output high
ждать 5 секунд
set gpio
7
to output low
set gpio
8
to output high
ждать 5 секунд
set gpio
8
to output low
set gpio 25
to output high
иначе
повторить 10 раз
set gpio 15
to output high
ждать 0.2 секунд
set gpio 15
to output low
ждать 0.2 секунд
set gpio 25
задать pushed
значение 0
when gpio 2
задать pushed
to output low
is low
значение 0
Проект на Python «Игра на реакцию» 157
Проект на Python «Игра на реакцию»
Теперь, когда вы научились пользоваться кнопками, излучателями звука и светодиодами – устройствами ввода/вывода, – пора обратить ваше внимание на
действительно сложный пример: игру на реакцию для двух игроков. Проверьте, у кого из вас реакция быстрее! Для работы над проектом вам понадобится макетная плата, светодиод, резистор с сопротивлением 330 Ом, две тактовые кнопки, а также несколько перемычек типа папа-мама (M2F) и папа-папа
(M2M).
Начнем с подключения компонентов (рис. 6-12). Установите первую кнопку
в левой части макетной платы и подключите к контакту 14 разъема GPIO (обозначен как GP14 на рис. 6-12), а вторую кнопку установите в правой части макетной платы и подключите к контакту 15 разъема GPIO (обозначен как GP15).
Затем подключите длинную ножку светодиода к резистору с сопротивлением
330 Ом, а сам резистор соедините с контактом 4 разъема GPIO (обозначен как
GP4) на плате Raspberry Pi. Также не забудьте подключить другие ножки всех
компонентов к шине заземления макетной платы. Для завершения цепи подключите шину заземления к контакту заземления (обозначенному как GND)
платы Raspberry Pi.
Рис. 6-12. Подключение необходимых компонентов
для дальнейшего создания игры на реакцию
Создайте новый проект в Thonny и сохраните его под названием Reaction
Game. Для работы вам потребуются функции LED и button, доступные в модуле
158
Глава 6. Физические вычисления на базе Scratch и Python
GPIO Zero, а также функция sleep из модуля Time. Вы можете импортировать
функции из модуля GPIO Zero с помощью двух строк кода. Однако чтобы сэкономить время, попробуйте импортировать сразу две функции одной строкой,
используя знак запятой (,) для их разделения. Введите в область сценария следующее:
from gpiozero import LED, Button
from time import sleep
Как и раньше, сообщим интерпретатору информацию о том, к каким контактам подключены две кнопки и светодиод. Введите следующее:
led = LED(4)
right_button = Button(15)
left_button = Button(14)
Теперь добавьте функции, задающие светодиоду команды включения и выключения. Таким образом вы сможете проверить, корректно ли он работает:
led.on()
sleep(5)
led.off()
После нажатия кнопки
Выполнить (Run) светодиод загорится и будет
светиться в течение пяти секунд, после чего выключится, а программа завершит свою работу. Так как вы планируете использовать светодиод в игре на реакцию, то сейчас ее работа кажется слишком предсказуемой, поскольку установленное время всегда равно 5 секундам. Добавьте следующую строку кода
ниже строки from time import sleep:
from random import uniform
Модуль Random позволяет генерировать случайные числа (здесь с непрерывным равномерным распределением – см. rptl.io/uniform-dist). Найдите
функцию sleep(5) и отредактируйте ее следующим образом:
sleep(uniform(5, 10))
Снова нажмите кнопку
Выполнить (Run). На этот раз светодиод будет
гореть в течение случайного количества времени, в зависимости от случайно
выбранного числа в диапазоне от 5 до 10. Засеките, сколько времени горит светодиод в первый раз, а затем, после того как он погаснет, нажмите кнопку
Выполнить (Run) еще несколько раз, и вы заметите, что при каждом новом
запуске время изменяется. Программа стала непредсказуемой.
Для того чтобы превратить кнопки игроков в триггеры, введем следующий
код. Перейдите в самый конец написанной вами программы и введите следующее:
def pressed(button):
print(str(button.pin.number) + " выиграл")
Проект на Python «Игра на реакцию» 159
Помните, что Python автоматически добавляет отступ, тем самым определяя, какие строки являются частью функции. Именно поэтому во второй строке появился отступ. Для того чтобы игроки смогли во время игры нажимать
кнопку, добавьте строки, указанные ниже. Помните, что перед ними не должно
быть отступа, иначе Python будет рассматривать их в качестве части предыдущей функции.
right_button.when_pressed = pressed
left_button.when_pressed = pressed
Запустите программу и попробуйте нажать одну из двух кнопок сразу же
после выключения светодиода. В оболочке Python, расположенной в нижней части окна Thonny, высветится сообщение о том, что первая кнопка
была нажата. К сожалению, при нажатии любой из кнопок будет высвечиваться сообщение, в котором будет указано не имя игрока, а номер контакта
кнопки.
Исправим это. Попросим игроков вписать свои имена. Ниже строки from
random import uniform введите следующее:
left_name = input("Игрока слева зовут ")
right_name = input("Игрока справа зовут ")
Вернитесь к нашей функции и замените строку print(str(button.pin.
number) + " выиграл") на
if button.pin.number == 14:
print (left_name + " выиграл")
else:
print(right_name + " выиграл")
Нажмите кнопку
Выполнить (Run), а затем введите имена игроков в
область оболочки Python. Постарайтесь, после того как светодиод погаснет, нажать кнопку как можно быстрее. Теперь на экране высветится не номер контакта кнопки, а имя игрока.
Сейчас программа выводит имена всех игроков, которые нажали кнопку,
однако нам необходимо имя победителя. Для решения проблемы нам нужна
функция из системного модуля exit. Под последней строкой, содержащей инструкцию import, введите следующее:
from os import _exit
Теперь в конце вашей программы, над строкой, содержащей функцию
print(right_name + " выиграл"), введите следующее:
_exit(0)
В данном случае отступ очень важен. Перед функцией _exit(0) должны быть
указаны четыре пробела. Тем самым функция будет выровнена по ключевым
словам else и if, расположенным выше. Эта функция задает Python команду
завершить программу после того, как кто-либо из игроков нажмет кнопку. Из
160
Глава 6. Физические вычисления на базе Scratch и Python
этого следует, что игрок, нажавший кнопку позже, не выиграет, а значит, программа не поздравит его с победой!
В итоге код программы должен выглядеть следующим образом:
from
from
from
from
gpiozero import LED, Button
time import sleep
random import uniform
os import _exit
left_name = input("Игрока слева зовут ")
right_name = input ("Игрока справа зовут ")
led = LED(4)
right_button = Button(15)
left_button = Button(14)
led.on()
sleep(uniform(5, 10))
led.off()
def pressed(button):
if button.pin.number == 14:
print(left_name + " выиграл")
else:
print(right_name + " выиграл")
_exit(0)
right_button.when_pressed = pressed
left_button.when_pressed = pressed
Нажмите кнопку
Выполнить (Run), введите имена игроков, подождите, пока светодиод погаснет, и вы увидите имя победителя. На экране также
высветится сообщение: Process ended with exit code 0. Оно означает, что
Python получил команду _exit(0) и остановил программу, но для обнуления
всех результатов и подготовки к новому раунду вам нужно будет нажать кнопку
Выполнить (Run) (рис. 6-13).
Проект на Python «Игра на реакцию» 161
Рис. 6-13. После того как победитель определен,
завершите программу
Поздравляем, вы создали свою собственную игру!
Задача: улучшить игру
Можете ли вы добавить цикл для непрерывной работы программы? Не
забудьте перед этим удалить функцию _exit(0)! Способны ли вы ввести счетчик очков, для того чтобы проследить за тем, кто чаще всего вы
игрывает? А способны ли вы ввести таймер, с помощью которого сможете
отследить время, которое потребовалось на реакцию игрока?
Глава
7
Физические вычисления
с помощью Sense HAT
Первоначально продукт был разработан для полета Astro Pi на Международную космическую станцию (МКС), после чего стал доступен
в качестве дополнительного устройства для Raspberry Pi. Это много
функциональная дополнительная плата, оснащенная датчиками и
RGB-светодиодной матрицей.
Raspberry Pi поддерживает подключение плат расширения под названием
Hardware Attached on Top (HAT). Такие платы расширения можно использовать
для подключения чего угодно: от микрофонов и лампочек до электронных
реле и матриц к Raspberry Pi. Однако один из видов HAT уникальный и носит
название Sense HAT.
Внимание!
На момент написания книги возникали проблемы с работой Scratch 3
эмулятора Sense HAT в связке с Raspberry Pi 5, а также в последней версии Raspberry Pi OS (см. rptl.io/sense-emu-fix для частичного обходного пути). Если у вас возникли проблемы, проверьте наличие обновлений
(см. раздел «Обновление программного обеспечения» в главе 3 «Использование Raspberry Pi»).
Эта плата была разработана специально для космической миссии Astro Pi.
В рамках совместного проекта Raspberry Pi Foundation, Космического агентства Великобритании и Европейского космического агентства, Astro Pi доставил платы Raspberry Pi, камеры и Sense HAT на МКС на борту грузового корабля
Orbital Science Cygnus. С тех пор, как устройства достигли орбиты, с помощью
плат Sense HAT начали выполнять код и проводить различные эксперименты, в которых участвуют десятки тысяч школьников из десятков стран Европы.
Астронавты даже дали девайсам имена: Эд и Иззи. Новое, обновленное обо-
164
Глава 7. Физические вычисления с помощью Sense HAT
рудование Raspberry Pi (устройства Raspberry Pi 4 с именами Флора, Фауна и
Фанги) было отправлено на МКС в 2022 году. Жители Европы до 19 лет могут
запустить собственный код и провести эксперименты в космосе, воспользовавшись сайтом astro-pi.org.
Сами устройства все еще находятся на МКС, но можно приобрести точно такую же плату Sense HAT в любом розничном магазине Raspberry Pi. Если же
у вас нет возможности купить ее прямо сейчас, можно эмулировать ее с помощью программного обеспечения!
Реальное устройство и эмулятор
Проекты, которые мы будем разбирать в этой главе, удобнее будет создавать при наличии настоящей платы Sense HAT, подключенной к разъему
GPIO на Raspberry Pi. Однако любой пользователь, у которого нет этой
платы в наличии, может попробовать создать проекты в эмуляторе Sense
HAT, при этом пропустив раздел «Подключение Sense HAT». Результат будет ничем не хуже!
Изучаем плату Sense HAT
Sense HAT – мощная многофункциональная дополнительная плата для
Raspberry Pi. Помимо светодиодной матрицы 8×8, состоящей из 64 красных,
зеленых и синих программируемых светодиодов (RGB), цвет которых можно
настроить для получения абсолютно любого оттенка, Sense HAT включает в
себя пятипозиционный джойстик-контроллер и шесть (или семь на более новых моделях) бортовых датчиков.
Рис. 7-1. Плата Sense HAT
Изучаем плату Sense HAT 165
• Датчик положения (гироскоп): устройство, которое используется для
определения изменения угла ориентации тела с течением времени, получившего определение угловой скорости. Гироскопический датчик позволяет определить, что вы поворачиваете Sense HAT по любой из трех
осей и насколько быстро.
• Акселерометр: схож с предыдущим датчиком, но измеряет он уже не
угловую скорость относительно поверхности Земли, а ускорение (силы
тяжести) в различных направлениях. Совместив показания (данные)
обоих датчиков, вы сможете отследить, в какую сторону и как быстро
перемещается Sense HAT.
• Магнитометр: прибор для измерения характеристик магнитного поля
является еще одним датчиком, который помогает отследить перемещение Sense HAT. Измеряя естественное магнитное поле Земли, магнитометр может определить направление северного магнитного полюса. Этот датчик также можно использовать для поиска металлических
предметов и даже для обнаружения электрических полей. Все три перечисленных датчика встроены в один модуль под названием ACCEL/
GYRO/MAG, расположенный на печатной плате Sense HAT.
• Датчик влажности: измеряет процент водяного пара в воздухе, известного как относительная влажность. Относительная влажность воздуха
может колебаться от 0 %, если в нем отсутствует влага, и до 100 %, когда
воздух полностью насыщен водяным паром. Полученные данные можно использовать для метеопрогноза.
• Датчик измерения атмосферного давления: также известен как барометр и служит для измерения давления воздуха. Хотя большинство
людей знают, что такое атмосферное давление, из прогноза погоды,
у барометра есть еще одно секретное применение: он может определить, спускаетесь вы с горы или поднимаетесь на нее, поскольку чем
дальше вы удаляетесь от поверхности Земли, тем ниже падает давление,
а воздух становится разреженным.
• Датчик температуры: измеряет температуру окружающей среды,
а также платы Sense HAT. Если вы используете чехол, то показания будут
чуточку выше, чем вы могли бы ожидать. У платы Sense HAT отсутствует
отдельный датчик температуры, поэтому в данном случае используются
встроенные в датчики влажности и атмосферного давления. Программа
способна использовать один или оба этих датчика сразу.
• Датчик цвета и яркости: поддерживается только моделью Sense HAT
V2, улавливает окружающий свет и определяет его интенсивность. Такой датчик отлично подходит для проектов, в которых необходимо автоматически регулировать яркость светодиодов в зависимости от освещенности комнаты. Датчик также можно использовать для определения
цвета освещения. На его показания оказывает влияние свет, исходящий
от собственной светодиодной матрицы Sense HAT, поэтому учитывайте этот момент в процессе работы. Это единственный датчик, который
нельзя эмулировать с помощью Sense HAT; для его использования вам
понадобится сама плата Sense HAT V2.
166
Глава 7. Физические вычисления с помощью Sense HAT
Sense HAT и Raspberry Pi 400
Плата Sense HAT полностью совместима с моделью Raspberry Pi 400 и может быть подключена непосредственно к разъему GPIO на задней панели.
Однако в этом случае светодиоды будут направлены от вас, а плата будет
ориентирована вверх ногами.
Чтобы решить эту проблему, вам понадобится удлинитель/плата GPIO. Среди совместимых моделей удлинителей можно назвать линейку Black HAT
Hack3r (pimoroni.com): вы можете использовать Sense HAT как с самой
платой Black HAT Hack3r, так и воспользоваться прилагаемым 40-контактным шлейфом в качестве удлинителя. Обязательно читайте инструкцию
производителя, чтобы правильно подключить кабель и Sense HAT!
Подключение Sense HAT
Если вы приобрели плату Sense HAT, перед началом работы распакуйте ее и
убедитесь, что у вас имеются все ее компоненты: сама плата Sense HAT, четыре
металлические или пластиковые опоры (распорки) и восемь болтов. В наборе также может оказаться пластиковая вилка с несколькими металлическими
контактами, схожая с разъемом GPIO. В таком случае поверните вилку контактами вверх и подсоедините ее к Sense HAT снизу. При этом вы должны услышать щелчок.
Распорки предназначены для того, чтобы предотвратить деформацию
Sence HAT во время использования джойстика. Конечно, плата будет работать
и без распорок, но их наличие защитит от повреждений как Sense HAT, так и
Raspberry Pi с разъемом GPIO.
Если вы подключаете Sense HAT к Raspberry Pi Zero 2 W, вы не сможете использовать все четыре распорки. Кроме того, вам потребуется припаять несколько контактов к разъему GPIO или приобрести специальную плату в магазинах электроники.
Внимание!
Платы расширения HAT необходимо подключать к разъему GPIO и отключать от него, только когда компьютер Raspberry Pi выключен и отключен
от источника питания. Будьте осторожны, когда держите плату Sense HAT
горизонтально во время ее установки, и дважды проверьте, что она находится в одной линии с контактами вилки GPIO, прежде чем соединять их.
Установим распорки. Для этого возьмите четыре болта и вкрутите их в четыре крепежных отверстия, расположенных на нижней части Raspberry Pi (по
одному в каждом углу). А теперь прикрутим распорки с помощью этих болтов.
Соедините Sense HAT с разъемом GPIO плавным сжатием, убедившись в том,
что вы правильно расположили плату (контакты смотрят вниз, а части конструкции расположены параллельно).
Изучаем плату Sense HAT 167
И закрепим конструкцию, вкрутив четыре болта через крепежные отверстия
Sense HAT в распорки, подготовленные вами заранее. Если вы все соединили верно, то в итоге собранная конструкция должна быть плоской, ничего не
должно выпирать. Также она не должна сгибаться или трястись при нажатиях
на джойстик.
Подключите Raspberry Pi к источнику питания, обратите внимание на то, что
на Sense HAT загорелись различными цветами светодиоды (рис. 7-2), которые
в дальнейшем погаснут. Поздравляем! Вы подключили Sense HAT.
Рис. 7-2. Как только вы подключите Raspberry Pi к источнику питания,
светодиоды на Sense HAT загорятся всеми цветами радуги
При желании вы можете отключить Sense HAT. Для этого вам будет нужно
открутить верхние болты и осторожно снять плату (не погните штырьки вилки
GPIO), поскольку соединены детали достаточно плотно (возможно, вам даже понадобится маленькая отвертка). А теперь отсоедините распорки от Raspberry Pi.
Для программирования Sense HAT вам понадобится ПО, которое, возможно, еще не установлено. Если вы не видите пункты Scratch 3 и Sense HAT
Emulator в разделе Программирование (Programming) меню Raspberry, перейдите к главе 3 и следуйте инструкциям в разделе «Инструмент Recommended
Software», чтобы установить необходимое ПО.
Опыт в программировании
Информация, представленная в данной главе, основывается на уже имеющемся опыте работы со Scratch 3 или Python и интегрированной средой
разработки Thonny (IDE). Важно, чтобы ранее вы имели опыт работы с
блоками Scratch или с кодом на языке Python – или с тем и другим! Если
вы пока не обладаете необходимыми навыками, советуем вам обратиться
к главам 4 и 5 и проработать описанные там проекты.
168
Глава 7. Физические вычисления с помощью Sense HAT
Привет, Sense HAT!
Во всех проектах, связанных с программированием, есть некая точка отчета – то, с чего следует начать знакомство с программой. В случае с Sense HAT
это сообщение приветствия, выведенного на светодиодном дисплее. Если же
вы планируете пользоваться эмулятором Sense HAT, то загрузите его прямо
сейчас, открыв меню Raspberry Pi OS, выбрав категорию Программирование
(Programming) и пункт Sense HAT Emulator.
Приветствие с помощью Scratch
Загрузите программу Scratch 3 из меню Raspberry Pi OS и нажмите кнопку
Добавить расширение (Add Extension) (в нижнем левом углу окна приложения). Выберите расширение Raspberry Pi Sense HAT (рис. 7-3). Программа загрузит блоки, позволяющие управлять различными функциями HAT, включая
светодиодную матрицу. В дальнейшем вы сможете найти необходимые для
работы блоки, перейдя в раздел Raspberry Pi Sense HAT.
Рис. 7-3. Загрузка расширения Raspberry Pi Sense HAT для Scratch 3
Начнем создание программы. Перетащите блок когда
нажат из раздела Со-
бытия (Events) в область сценариев, а затем перетащите блок display text Hello!
под предыдущий. Отредактируйте надпись в блоке так, чтобы получилось
display text Hello, World! .
Изучаем плату Sense HAT 169
когда
нажат
display text
Hello, World!
Нажмите кнопку в виде зеленого флажка, и вы увидите, что на светодиодной
матрице Sense HAT или ее эмуляторе будет медленно двигаться сообщение, посредством включения светодиодных пикселей, для выведения каждой буквы
(рис. 7-4). Поздравляем, вам удалось создать новую программу!
Рис. 7-4. Сообщение медленно движется по светодиодной матрице
Теперь вы способны создать программу, которая будет выводить на светодиодную матрицу различные сообщения. Пришло время научиться управлять отображаемым сообщением, а именно изменять направление движения сообщения – то, как сообщение отображается на Sense HAT. Перетащите
блок
из палитры блоков и поместите его под блок
когда
нажат и над блоком display text Hello, World! . Теперь выберите в раскрывающемся списке угол поворота 90. Нажмите кнопку в виде зеленого флажка, и вы увидите то же самое сообщение, но вместо того, чтобы двигаться слева
направо, оно будет двигаться снизу вверх (рис. 7-5). Теперь, для того чтобы
прочитать сообщение, вам нужно будет повернуть либо голову, либо саму плату Sense HAT.
170
Глава 7. Физические вычисления с помощью Sense HAT
Рис. 7-5. На этот раз сообщение прокручивается снизу вверх
Измените число в блоке
тем перетащите блок
set rotation to 0 degrees
set colour
между блоками
обратно на 0, а за-
set rotation to 0 degrees
и
display text Hello, World! . Щелкните мышью по индикатору цвета в конце блока
set colour , тем самым открыв палитру цветов. Выберите приятный ярко-жел-
тый цвет, а затем нажмите кнопку в виде зеленого флажка, чтобы увидеть изменения, произошедшие в программе (рис. 7-6).
Рис. 7-6. Изменение цвета текста
Изучаем плату Sense HAT 171
А теперь перетащите блок
set background
между блоками set colour to
и display text Hello, World! . Щелкните мышью по индикатору цвета в конце блока set background для отображения палитры цветов. На этот раз мы с вами
изменим цвет не текста сообщения, а фона. Выберите красивый синий цвет и
снова нажмите кнопку в виде зеленого флажка. В данном случае цвет сообщения будет желтым, а цвет фона – синим. Поиграйте с цветовыми решениями и
найдите сочетание цветов, которое вам больше всего понравится. Помните о
том, что не все цвета хорошо сочетаются друг с другом.
Вы можете выводить на экран как целые сообщения, так и единые буквы.
Для этого перетащите блок display text из области сценариев, тем самым удалив его. А теперь перетащите блок display character A в область сценариев на
место только что удаленного блока. Нажмите кнопку в виде зеленого флажка,
и вы увидите разницу: теперь на Sense HAT выводится лишь одна буква за раз и
отображается там до тех пор, пока вы не зададите программе команду сменить
букву на другую или просто удалить имеющуюся. Блоки, отвечающие за смену
цвета текста, также можно применять и с блоком display character A : попробуйте изменить цвет буквы на красный (рис. 7-7).
Рис. 7-7. Отображение на экране только одной буквы
Задача: повторить сообщение
Можете ли вы, используя свои знания циклов, сделать так, чтобы выводимое на экран сообщение повторялось? Можете ли вы создать программу,
которая будет выводить буквы друг за другом, при этом меняя цвет каж
дой?
172
Глава 7. Физические вычисления с помощью Sense HAT
Приветствие с помощью Python
Запустите приложение Thonny, открыв меню Raspberry Pi OS и выбрав соответствующий пункт из раздела Программирование (Programming). Если вы
работаете с эмулятором Sense HAT, а окно Thonny скрыло его, то, нажав и удерживая кнопку мыши на одном из окон, перемещайте его по рабочему столу до
тех пор, пока перед вами не будут видны оба окна.
Изменение строки на Python
Код на языке Python, написанный для настоящей платы Sense HAT, подходит и для эмулятора, и наоборот, однако придется внести всего одну
корректировку. Если вы пишете код в Python для эмулятора Sense HAT, то
нужно внести изменения в строку from sense_hat import SenseHat для
всех программ. Должно получиться следующее: from sense_emu import
SenseHat. Если же потом вы захотите запустить созданные вами программы на оригинальном Sense Hat, просто верните все, как было!
Чтобы задействовать Sense HAT или эмулятор Sense HAT на Python, вам необходимо импортировать модуль Sense HAT. Для этого введите следующий код
в область сценария (если вы работаете с эмулятором, не забудьте изменить
sense_hat на sense_emu):
from sense_hat import SenseHat
sense = SenseHat()
С помощью кода, содержащегося в модуле Sense HAT, вы сможете создать
простую программу, транслирующую сообщение. Ее задача – вывод бегущей
строки на светодиодную матрицу. Для этого введите следующее:
sense.show_message("Hello, World!")
Сохраните созданную вами программу под названием Hello Sense HAT,
Выполнить (Run), и вы увидите результат: соа затем нажмите кнопку
общение медленно движется по светодиодной матрице Sense HAT, зажигая
светодиодные пиксели, для формирования букв (рис. 7-8). Поздравляем, вы
создали программу!
Однако функция show_message () скрывает еще несколько секретных возможностей. Вернитесь к программе и отредактируйте последнюю строку так,
чтобы получилось следующее:
sense.show_message("Hello, World!", text_colour=(255, 255, 0),
back_colour=(0, 0, 255), scroll_speed=(0.05))
Эти дополнительные команды, разделенные запятыми, называются пара
метрами и управляют различными аспектами функции show_message (). Самый
простой из них – scroll_speed=(), изменяющий скорость прокрутки сообщения. Значение 0,05 означает, что сообщение будет прокручиваться примерно в
два раза быстрее, чем обычно. Чем выше значение, тем меньше скорость.
Изучаем плату Sense HAT 173
Рис. 7-8. Движение сообщения на светодиодной матрице
Параметры text_colour=() и back_colour= () задают цвет текста и фона соответственно. Однако в коде используются не названия цветов, а их числовое
значение, состоящее из трех цифр по модели RGB. Первая цифра несет информацию о количестве красного в цвете (от 0, когда красного в цвете совсем нет, и
до 255, когда цвет максимально насыщен красным). Вторая цифра – количест
во зеленого в цвете, и третья – количество синего. Совместно эти цвета обозначаются аббревиатурой RGB: red – красный, green – зеленый, blue – синий.
Нажмите кнопку
Выполнить (Run) и обратите внимание на матрицу
Sense HAT: в этот раз сообщение движется гораздо быстрее, цвет надписи – ярко-желтый, а цвет фона – синий (рис. 7-9). Экспериментируйте с параметрами,
чтобы подобрать скорость и цвет, которые вам придутся по душе.
Рис. 7-9. Изменение цвета сообщения и цвета фона
174
Глава 7. Физические вычисления с помощью Sense HAT
Если вы хотите использовать названия цветов в функции, придется создать
переменные со значениями по модели RGB. Для этого над строкой sense.show_
message() введите следующее:
yellow = (255, 255, 0)
blue = (0, 0, 255)
Теперь вернитесь к строке sense.show_message() и внесите такие изменения:
sense.show_message("Hello, World!", text_colour=(yellow),
back_colour=(blue), scroll_speed=(0.05))
Снова нажмите кнопку
Выполнить (Run), и вы поймете, что ничего не изменилось: сообщение все еще отображается желтым цветом, а фон –
по-прежнему синим. Естественно, поскольку вы лишь ввели переменные с
целью облегчения прочтения кода. Теперь вместо чисел код содержит имена
переменных со значениями заданных цветов, а не непосредственно их числовые значения. Вы можете присвоить переменные любому количеству цветов.
Предлагаем вам добавить следующие переменные: red со значениями 255, 0, 0,
white со значениями 255, 255, 255 и black со значениями 0, 0, 0.
Помимо выведения на экран целых предложений, вы также можете выводить буквы отдельно. Удалите функцию sense.show_message() и введите вместо
нее следующее:
sense.show_letter("A")
Запустите программу, нажав кнопку
Выполнить (Run), и на матрице
Sense HAT появится буква «A». В данном случае эта отдельная буква не будет
двигаться вдоль экрана, в отличие от целых предложений, движущихся автоматически. Вы можете задавать различные цвета для окрашивания буквы в
функции sense.show_letter() с помощью тех же параметров, что и для sense.
show_message(). Попробуйте окрасить букву в красный цвет (рис. 7-10).
Рис. 7-10. Отображение на матрице отдельной буквы
Изучаем плату Sense HAT 175
Задача: повторить сообщение
Можете ли вы, используя свои знания циклов, сделать так, чтобы выводимое на экран сообщение повторялось? Можете ли вы создать программу,
которая будет выводить буквы друг за другом, при этом меняя цвет каж
дой? Какова максимальная скорость движения сообщения, которую вы
способны задать в программе?
Следующий шаг: светоживопись
Светодиодная матрица Sense HAT предназначена для вывода не только сообщений, но и изображений. Каждый светодиод можно рассматривать как отдельный пиксель – отдельный элемент изображения – в выбранном вами изображении. Различные иллюстрации и даже анимации позволят оживить вашу
программу.
Однако для того, чтобы создать рисунок, необходимо научиться контролировать свечение отдельных светодиодов. Для написания программы, с помощью которой вы сможете включать и выключать необходимые светодиоды,
советуем изучить то, как устроена светодиодная матрица Sense HAT.
Каждая строка, как и каждый столбец, состоит из восьми светодиодов
(рис. 7-11). Однако когда вы пересчитываете светодиоды, отсчет следует вести
с 0. Таким образом, последний светодиод будет седьмым. Первый светодиод
находится в левом верхнем углу, а последний – в правом нижнем. Присваивая каждому светодиоду номер строки и номер столбца, вы определяете его
координаты в системе координат матрицы. Обратите внимание на синий светодиод, изображенный на рисунке матрицы. Он находится в точке с координатами 0, 2. Красный светодиод – в координатах 7, 4. Первая координата – по
оси х – читается по горизонтали, за ней следует координата по оси y – читается
по вертикали.
Рис. 7-11. Система координат светодиодной матрицы
176
Глава 7. Физические вычисления с помощью Sense HAT
Для создания рисунка, выводимого на матрицу Sense HAT, советуем для
упрощения задачи сначала нарисовать его на бумаге в клетку или набросать
его в электронной таблице LibreOffice Calc.
Рисование с помощью Scratch
Начните новый проект, при необходимости сохранив предыдущий. Если последним вашим проектом был тот, что мы разбирали ранее, то Scratch 3 сохранит блоки загруженного расширения Raspberry Pi Sense HAT. Если вы закрыли Scratch 3 после работы над последним проектом, а потом снова открыли
программу, загрузите расширение с помощью кнопки Добавить расширение
(Add Extension). Из раздела События (Events) перетащите блок когда
нажат
в область сценариев. Затем перетащите под него блоки set background и
set colour . Настройте оба блока так, чтобы первый блок в итоге задавал черный цвет, а второй – белый. Для того чтобы задать черный цвет, переместите
ползунковые регуляторы, отвечающие за яркость и насыщенность цвета, на 0.
Для получения белого цвета сдвиньте ползунковый регулятор яркости на 100,
а ползунковый регулятор насыщенности – на 0. Повторяйте подобные манипуляции каждый раз перед началом работы с Sense HAT, поскольку Scratch будет
использовать последние заданные вами цвета, даже если вы задавали цвета
для другой программы. А теперь перетащите блок
часть программы.
в нижнюю
Нажмите кнопку в виде зеленого флажка, и вы увидите, что светодиоды
Sense HAT светятся в виде логотипа Raspberry Pi (рис. 7-12).
Внимание!
Не смотрите пристально на ярко-белые светодиоды, в этом и подобных
проектах, – это может привести к ухудшению зрения.
Очертания ягоды – лишь малая часть того, что доступно вам для выведения на экран. Откройте раскрывающийся список с изображением логотипа
Изучаем плату Sense HAT 177
Raspberry Pi на блок
, тем самым активировав режим рисования.
Теперь вы можете щелчком мыши по любому светодиоду на отобразившейся
панели включить его или выключить. Если вы щелкнете по одной из крохотных кнопок в нижней части панели, то все светодиоды будут отключены или,
наоборот, включены. А сейчас попробуйте нарисовать свой собственный рисунок. После чего нажмите кнопку в виде зеленого флажка для вывода изображения на матрицу Sense HAT. Используя уже имеющиеся блоки, попробуйте
внести в них изменения, так чтобы сменить цвета изображения и фона.
Рис. 7-12. Вывод логотипа ягоды малины с помощью Scratch
После завершения поставленной задачи удалите три блока, перетащив их в
нажат .
палитру блоков. А теперь перетащите блок clear display под блок когда
Нажмите кнопку в виде зеленого флажка, тем самым погасив все светодиоды.
Для создания собственного цветного рисунка необходимо научиться управлять отдельными пикселями и задавать им различные цвета. Сделать это вы
и set colour , или же задавать данные
можете, добавив блоки
для каждого пикселя отдельно. Для создания своей версии рисунка и вывода на светодиодную матрицу наподобие примера на рис. 7-1 переместите
блок clear display в самое начало программы, после чего переместите блок
set background под него. Измените цвет блока set background на черный,
после перетащите два блока set pixel x 0 y 0 в нижнюю часть сценария. Теперь
отредактируйте блоки так, как показано на рисунке.
Нажав на кнопку в виде зеленого флажка, вы увидите, что светодиоды загораются в соответствии с координатами (рис. 7-13). Поздравляем! Вы научились
управлять отдельными светодиодами!
178
Глава 7. Физические вычисления с помощью Sense HAT
когда
нажат
clear display
set background to
set pixel x 0
y 2
to
set pixel x 7
y 4
to
Добавьте необходимое количество блоков, отвечающих за отдельные пиксели, и отредактируйте их таким образом, как показано на рисунке снизу. Вот что
должно получиться в итоге:
когда
нажат
clear display
set background to
set pixel x 2
y 2
to
set pixel x 4
y 2
to
set pixel x 3
y 4
to
set pixel x 1
y 5
to
set pixel x 2
y 6
to
set pixel x 3
y 6
to
set pixel x 4
y 6
to
set pixel x 5
y 5
to
Изучаем плату Sense HAT 179
Прежде чем нажать кнопку в виде зеленого флажка, попробуйте угадать, какое изображение появится на координатной плоскости светодиодной матрицы, а затем запустите свою программу и проверьте, были ли вы правы!
Задача: создать новые рисунки
Можете ли вы создать дополнительные изображения? Для начала сделайте набросок рисунка на миллиметровке или листе в клетку. Сможете ли вы
вывести изображение и изменить цвета?
Рисование с помощью Python
Создайте новую программу в приложении Thonny и сохраните ее под названием Sense HAT Drawing, а затем введите следующее (не забудьте внести изменения в строку sense_hat, заменив ее на sense_emu при работе с эмулятором):
from sense_hat import SenseHat
sense = SenseHat()
Не забывайте об этих строках, ведь без них Sense HAT попросту не будет работать. Введите следующее:
sense.clear(255, 255, 255)
Не смотрите пристально на светодиоды матрицы Sense HAT, ведь это может
навредить вашему зрению! После нажатия кнопки
Выполнить (Run) все
светодиоды должны загореться ярко-белым цветом (рис. 7-13). Именно поэтому мы и не рекомендуем смотреть на них во время запуска программы!
Рис. 7-13. Включение всех светодиодов
180
Глава 7. Физические вычисления с помощью Sense HAT
Внимание!
Не смотрите пристально на ярко-белые светодиоды, как в этом примере
кода, – это может привести к ухудшению зрения.
Функция sense.clear() предназначена для сброса предыдущих настроек
светодиодов, однако параметры RGB сохраняются, поэтому вы все так же можете изменять цвет изображения на любой, который вам нравится. Измените
функцию следующим образом:
sense.clear(0, 255, 0)
Нажмите кнопку
Выполнить (Run), и вы увидите, как светодиоды мат
рицы Sense HAT загорятся ярко-зеленым цветом (рис. 7-14). Поэкспериментируйте, изменяя цвета или добавляя переменные, содержащие имена цветов,
для облегчения чтения кода.
Рис. 7-14. Светодиодная матрица загорелась ярко-зеленым цветом
Для сброса настроек светодиодов необходимо ввести значения, равные 0,
для следующих цветов: черного, красного, синего и зеленого. Но есть и более
простой способ. Отредактируйте функцию следующим образом:
sense.clear()
После выполнения функции sense.clear() светодиоды Sense HAT погаснут,
поскольку в скобках не указано значение. Это эквивалентно тому, если бы вы
задали команду зажечь светодиоды черным цветом (рис. 7-15). Запомните эту
функцию, она понадобится, если вы решите выключить все светодиоды.
Изучаем плату Sense HAT 181
Рис. 7-15. Использование функции sense.clear()
для выключения всех светодиодов
Чтобы создать собственную версию изображения для вывода на светодиодную матрицу (красного и синего цветов) на основе примера, изображенного
ранее в этой главе, введите следующий код после функции sense.clear():
sense.set_pixel(0, 2, (0, 0, 255))
sense.set_pixel(7, 4, (255, 0, 0))
Первая пара чисел – координаты пикселя на системе координат матрицы,
первое число – по оси x (по горизонтали), второе – по оси y (по вертикали).
Далее указаны числа, заключенные в скобки, которые являются значениями
RGB цвета определенного пикселя. Нажмите кнопку
Выполнить (Run), и
на матрице Sense HAT загорятся два светодиода (рис. 7-11).
Удалите имеющиеся две строки и введите следующее:
sense.set_pixel(2,
sense.set_pixel(4,
sense.set_pixel(3,
sense.set_pixel(1,
sense.set_pixel(2,
sense.set_pixel(3,
sense.set_pixel(4,
sense.set_pixel(5,
2,
2,
4,
5,
6,
6,
6,
5,
(0, 0, 255))
(0, 0, 255))
(100, 0, 0))
(255, 0, 0))
(255, 0, 0))
(255, 0, 0))
(255, 0, 0))
(255, 0, 0))
Прежде чем запустить программу, посмотрите на координаты пикселей и
сравните их с расположением светодиодов на матрице. Попробуйте угадать,
какой рисунок будет выведен на экран. Нажмите кнопку
и проверьте свои предположения!
Выполнить (Run)
182
Глава 7. Физические вычисления с помощью Sense HAT
Процесс вырисовывания изображения при помощи функции set_pixel()
длится достаточно медленно. В целях ускорения вы можете включать несколько пикселей одновременно. Для этого удалите все строки, содержащие функцию set_pixel(), и введите следующее:
g = (0, 255, 0)
b = (0, 0, 0)
creeper_pixels = [
g, g, g, g, g, g, g, g,
g, g, g, g, g, g, g, g,
g, b, b, g, g, b, b, g,
g, b, b, g, g, b, b, g,
g, g, g, b, b, g, g, g,
g, g, b, b, b, b, g, g,
g, g, b, b, b, b, g, g,
g, g, b, g, g, b, g, g
]
sense.set_pixels(creeper_pixels)
Выполнить (Run). УзФункция достаточно объемная. Нажмите кнопку
нали ли вы изображение, появляющееся на экране при запуске программы?
Первые две строки кода задают переменные цветов светодиода: зеленый и
черный. Для упрощения написания и прочтения кода, используемого для создания рисунка, переменные обозначены отдельными буквами: «g» – для зеленого и «b» – для черного.
Следующий блок кода задает переменную, содержащую значения цвета для
всех 64 пикселей, расположенных на светодиодной матрице. Все они разделены
запятыми и заключены в квадратные скобки. Однако вместо чисел программа
будет использовать заданные вами ранее переменные цвета. Запомните: «g»
означает зеленый цвет, а «b» – черный. Таким образом вы можете представить,
какое же изображение окажется на выходе (рис. 7-16).
В конце в скобки функции sense.set_pixels() помещается переменная.
В результате мы получаем строку sense.set_pixels(creeper_pixels), позволяя
программе выводить рисунок сразу на всю матрицу. Это гораздо лучше, чем
создавать рисунок пиксель за пикселем!
Вы также можете повернуть или развернуть изображение. Необходимо это
в том случае, если плата Sense HAT повернута и вам необходимо отобразить
изображение должным образом. Или же если вы решите создать простую анимацию, состоящую лишь из одного асимметричного изображения.
Закроем нашему криперу левый глаз. Для этого отредактируйте значение
переменной creeper_pixels следующим образом: замените четыре пикселя,
записанных в функции переменной, «b» на «g»: первые два в третьей строке,
а также первые два в четвертой строке. Вот что должно получиться:
creeper_pixels = [
g, g, g, g, g,
g, g, g, g, g,
g, g, g, g, g,
g, g, g, g, g,
g,
g,
b,
b,
g,
g,
b,
b,
g,
g,
g,
g,
Изучаем плату Sense HAT 183
g,
g,
g,
g,
g,
g,
g,
g,
g,
b,
b,
b,
b,
b,
b,
g,
b,
b,
b,
g,
g,
b,
b,
b,
g,
g,
g,
g,
g,
g,
g,
g
]
Рис. 7-16. Выведение изображения крипера на матрицу
Нажмите кнопку
Выполнить (Run), и вы увидите, как крипер закрывает
левый глаз (рис. 7-17). Чтобы создать анимацию, перейдите в начало программы и добавьте строку
from time import sleep
А теперь пролистайте вниз и введите
while True:
sleep(1)
sense.flip_h()
Нажмите кнопку
Выполнить (Run) и понаблюдайте за тем, как наш крипер то открывает, то закрывает глаз по очереди!
Функция flip_h() поворачивает изображение по горизонтальной оси (поперек). Если же вы хотите перевернуть изображение по вертикальной оси,
замените функцию sense.flip_h() на sense.flip_v(). Вы можете также повернуть изображение на 0, 90, 180 или 270 градусов, используя функцию sense.
set_rotation(90), изменяя число в скобках в зависимости от того, на сколько градусов вы хотите повернуть изображение. Поэкспериментируйте с этой
функцией, заставив нашего крипера не только подмигивать, но и вращаться!
184
Глава 7. Физические вычисления с помощью Sense HAT
Рис. 7-17. Вывод на матрицу простой двухкадровой анимации
Задача: создать новые фигуры
Можете ли вы создать другие изображения и анимации? Для начала сделайте набросок рисунка на миллиметровке или листе в клетку, который
в дальнейшем облегчит вам написание кода. Сможете ли вы нарисовать
картинку и изменить цвета?
Совет: вы можете изменять значение переменных, даже если вы их уже
использовали.
Ощущаем окружающий мир
Преимущество Sense HAT заключается в огромном количестве установленных
на плате датчиков. Они позволяют получать разные показания, начиная с данных температуры и заканчивая ускорением. В дальнейшем вы можете использовать полученные данные для создания своих программ.
Эмуляторы датчиков
Если вы используете эмулятор Sense HAT, вам также нужно подключить
эмуляторы датчиков окружающей среды и инерциального датчика. Для
этого в меню Edit (Правка) эмулятора выберите пункт Preferences (Параметры) и в открывшемся окне установите флажки напротив соответствующих датчиков. Далее в группе Orientation Scale (Шкала ориентации) установите переключатель в положение 180……360°|0°……180° и убедитесь,
что заданные значения соответствуют значениям, переданным Scratch и
Python. Закройте окно, нажав кнопку Закрыть (Close).
Ощущаем окружающий мир 185
Экологический мониторинг
Датчики атмосферного давления, влажности и температуры служат для
оценки окружающей среды. Они измеряют показания окружающей среды.
Экологический мониторинг с помощью Scratch
Создайте новую программу в Scratch, при желании сохранив старую. Добавьте расширение Raspberry Pi Sense HAT, если вы этого еще не сделали. Перетащите блок когда
нажат в область сценариев, а затем под него блок clear display
и под него блок set background
. Теперь перетащите блок set colour to
, изменив в нем цвет с помощью ползунковых регуляторов яркости и насыщенности на необходимый вам. Мы всегда советуем настраивать цвета в самом начале программы, чтобы убедиться в том, что Sense HAT не использует данные
из прошлой программы.
Перетащите блок говорить Привет! 2 секунд из категории Внешний вид
(Looks) под уже имеющиеся блоки. Для получения показаний датчика давления найдите блок pressure в разделе Raspberry Pi Sense HAT и поместите его
поверх слова Hello!, содержащегося в блоке говорить Привет!
2 секунд .
когда нажат
clear display
set background to
set colour to
говорить
pressure 2 секунд
Нажмите кнопку в виде зеленого флажка, и ваш спрайт котика сообщит текущее давление в миллибарах. Через пару секунд сообщение пропадет. Попробуйте подуть на плату Sense HAT (или переместить ползунковый регулятор,
отвечающий за давление, на эмуляторе) и снова нажмите кнопку в виде зеленого флажка. Программа запустится, и вы увидите, что значение изменилось,
а именно стало выше (рис. 7-18).
186
Глава 7. Физические вычисления с помощью Sense HAT
Рис. 7-18. Показания, полученные датчиком давления
Изменяем значения
Если вы работаете с эмулятором Sense HAT, то можете изменить значения, полученные каждым датчиком, используя ползунковые регуляторы
и кнопки эмулятора. Сдвиньте ползунковый регулятор датчика давления
вниз, а затем снова нажмите кнопку в виде зеленого флажка.
Чтобы получить показания с датчика влажности, удалите блок pressure и
замените его блоком humidity . Запустите программу, и вы получите данные
о текущей относительной влажности воздуха вашей комнаты. Как и в случае
с давлением, вы можете подуть на Sense HAT (или переместить ползунковый
регулятор влажности на эмуляторе вверх), тем самым изменив показания
(рис. 7-19) – влажность вашего дыхания очень высокая!
Рис. 7-19. Показания, полученные датчиком влажности
Ощущаем окружающий мир 187
Проведем те же самые манипуляции с датчиком температуры. Удалите блок
humidity и замените его на блок temperature . Запустите программу. Вы увидите значение температуры в вашей комнате в градусах Цельсия (рис. 7-20). Однако эти данные могут быть неточными, поскольку во время работы Raspberry
Pi нагревается, соответственно нагревая плату Sense HAT и ее датчики.
Задача: вывести данные на матрицу и создать цикл
Можете ли вы внести изменения в программу, так чтобы получать показания каждого из датчиков по очереди, после чего вывести их на светодиодную матрицу? Можете ли вы ввести в программу циклы, тем самым
задав ей команду постоянного мониторинга условий окружающей среды?
Рис. 7-20. Показания, полученные датчиком температуры
Экологический мониторинг с помощью Python
Чтобы получать показания датчиков, создайте новую программу в Thonny
и сохраните ее под названием Sense HAT Sensors. Введите следующий код в
область сценария (как и раньше, при работе с эмулятором Sense HAT, измените
код на sense_emu):
from sense_hat import SenseHat
sense = SenseHat()
sense.clear()
Как и прежде, рекомендуем включить в программу функцию sense.clear(),
на случай если Sense HAT все еще хранит данные предыдущих программ.
Чтобы получать данные с датчика давления, введите следующее:
pressure = sense.get_pressure()
print(pressure)
188
Глава 7. Физические вычисления с помощью Sense HAT
Нажмите кнопку
Выполнить (Run), и вы увидите число, которое программа вывела в область оболочки, расположенной в нижней части окна
Thonny. Это число – показания давления воздуха, определяемого баромет
ром, в миллибарах (рис. 7-21). Подуйте на плату Sense HAT (или переместите ползунковый регулятор на эмуляторе вверх) и снова запустите программу.
В этот раз число увеличится.
Рис. 7-21. Вывод на матрицу Sense HAT показаний давления
Изменяем значения
Если вы работаете с эмулятором Sense HAT, то можете изменить значения, полученные каждым датчиком, используя ползунковые регуляторы
и кнопки эмулятора. Сдвиньте ползунковый регулятор датчика давления
вниз, а затем снова нажмите кнопку
Выполнить (Run).
Чтобы получать показания с датчика влажности, удалите последние две
строки и замените их на следующее:
humidity = sense.get_humidity()
print(humidity)
Запустите программу, и вы обнаружите в области оболочки Python уже другое значение. Это текущая влажность воздуха в вашей комнате, указанная в
процентах. В данном случае вы также можете подуть на плату (или сдвинуть
ползунковый регулятор на эмуляторе вверх) и отследить изменения значения
Ощущаем окружающий мир 189
в большую сторону при запуске программы (рис. 7-22). Влажность вашего дыхания очень высокая!
Рис. 7-22. Вывод на матрицу Sense HAT показаний влажности
Для получения показаний с датчика температуры удалите последние две
строки и замените их на следующее:
temp = sense.get_temperature()
print(temp)
Снова запустите программу. Вы увидите данные температуры в вашей комнате в градусах Цельсия (рис. 7-23). Однако эти данные могут быть неточными,
поскольку во время работы Raspberry Pi нагревается, соответственно нагревая
плату Sense HAT и ее датчики.
Обычно Sense HAT считывает данные о температуре, полученные на основе
показаний встроенного в датчик влажности датчика температуры. Если же вы
хотите получить данные о температуре на основе датчика давления, используйте функцию sense.get_temperature_from_pressure (). Кроме того, можно
объединить два этих показания для получения усредненного значения. Оно
может оказаться более точным, чем показания, полученные с каждого датчика
по отдельности. Удалите последние две строки из вашей программы и введите
следующее:
htemp = sense.get_temperature()
ptemp = sense.get_temperature_from_pressure()
temp = (htemp + ptemp) / 2
print(temp)
190
Глава 7. Физические вычисления с помощью Sense HAT
Рис. 7-23. Вывод на матрицу Sense HAT данных
о текущей температуре
После запуска программы на экране Python появится новое число (рис. 7-24).
Оно основано на показаниях обоих датчиков, сложенных вместе и поделенных
на два (количество датчиков). Тем самым мы получаем их среднее значение.
Если же вы используете эмулятор, то все три значения (значение влажности,
давления и среднее значение) будут одинаковыми.
Рис. 7-24. Данные о температуре, основанные
на показаниях двух датчиков
Ощущаем окружающий мир 191
Задача: вывести данные на матрицу и создать цикл
Можете ли вы внести изменения в программу так, чтобы получать показания каждого из датчиков по очереди, после чего вывести их на светодиодную матрицу? Можете ли вы ввести в программу циклы, тем самым
задав ей команду постоянного мониторинга условий окружающей среды?
Инерциальная система отсчета
Гироскоп, акселерометр и магнитометр вместе формируют инерциальный
измерительный блок (ИИБ). Хотя эти датчики технически измеряют показатели окружающей среды (например, магнитометр измеряет силу магнитного
поля), обычно они используются для получения данных перемещения платы
Sense HAT. ИИБ – совокупность нескольких датчиков. При работе с некоторыми
языками программирования вы можете снимать показания каждого датчика
отдельно, в то время как при работе с другими вам доступна лишь их совместная обработка данных.
Однако прежде чем овладеть навыками работы с ИИБ, вам необходимо разобраться, как же все-таки анализируется перемещение Sense HAT. Raspberry
Pi и подсоединенная к ней плата Sense HAT имеют три направления движения
(три оси). Ось х – движение по горизонтали, ось y – движение вперед и назад, и
ось z – движение по вертикали (рис. 7-25). Устройства также могут вращаться
вокруг всех трех пространственных осей, при этом каждая из них носит свое
название: вращение вокруг оси х – крен, вокруг оси y – тангаж, а вокруг z – рыс
кание. Когда вы поворачиваете плату вокруг короткой оси, вы изменяете значение тангажа, если вокруг длинной оси, вы изменяете значение крена, а если
вы кладете плату на плоскую поверхность, вы изменяете значение рыскания.
Сравните плату с самолетом: когда он взлетает, значение тангажа растет, когда он совершает бочку – трюк высшего пилотажа, буквально вращаясь вокруг
оси крена, а когда самолет поворачивает, словно автомобиль, автоматически
изменяется значение рыскания.
Тангаж: y
Рыскание: z
Крен: x
Рис. 7-25. Пространственные оси ИИБ Sense HAT
192
Глава 7. Физические вычисления с помощью Sense HAT
Инерциальная система отсчета в Scratch
Создайте новую программу в Scratch 3 и загрузите расширение Raspberry Pi
Sense HAT, если вы не сделали этого ранее. Начнем программу по старой схеме:
перетащите блок когда
нажат из раздела События (Events) в область сцена-
риев, после поместите под него блок clear display и под них поместите блоки
set background
и set colour to
, при желании изменив на них цвета.
Затем перетащите блок повторять всегданиже имеющихся блоков и дополните все блоком сказать Привет! . Для того чтобы снять показания каждой из трех
осей ИИБ – тангажа, крена и рыскания, добавьте блоки объединить яблоко банан
с соответствующими блоками Sense HAT (измените дефолтные значения, как
показано на рисунке ниже). Не забудьте добавить пробелы и запятые, чтобы на
выходе получить читабельные данные.
Для запуска программы нажмите кнопку в виде зеленого флажка и попробуйте покрутить Sense HAT и Raspberry Pi. Будьте аккуратны, так как вы можете
случайно выдернуть кабели! При вращении платы вокруг различных ее осей
вы увидите, как меняются значения тангажа, крена и рыскания (рис. 7-26).
Рис. 7-26. Вывод на экран значений тангажа, крена и рыскания
Ощущаем окружающий мир 193
Инерциальная система отсчета в Python
Создайте новую программу, сохранив ее под названием Sense HAT
Movement. Как и раньше, укажите несколько базовых строк, не забывая использовать значение sense_emu, при работе с эмулятором Sense HAT:
from sense_hat import SenseHat
sense = SenseHat()
sense.clear()
Для получения информации ИИБ о текущих данных расположения Sense
HAT по трем осям введите следующее:
orientation = sense.get_orientation()
pitch = orientation["pitch"]
roll = orientation["roll"]
yaw = orientation["yaw"]
print("тангаж {0} крен {1} рыскание {2}".format(pitch, roll, yaw))
Выполнить (Run), и вы увидите данные о Sense HAT,
Нажмите кнопку
полученные с трех осей (рис. 7-27). Покрутив Sense HAT, вы заметите, что значения тангажа, крена и рыскания меняются, тем самым сообщая нам, что плата
изменила свою ориентацию в пространстве.
Рис. 7-27. Вывод на экран значений тангажа, крена и рыскания
ИИБ также может сообщать сведения о перемещении. Для получения точных
показаний о перемещении Sense HAT необходимо ввести циклы в программу.
В отличие от информации, касающейся ориентации в пространстве, где получения лишь одного показания будет вполне достаточно, информация, касающаяся перемещения, требует ввода некоторых дополнительных параметров.
Для этого удалите весь код после функции sense.clear() и введите следующее:
194
Глава 7. Физические вычисления с помощью Sense HAT
while True:
acceleration = sense.get_accelerometer_raw()
x = acceleration["x"]
y = acceleration["y"]
z = acceleration["z"]
Теперь ваш код содержит переменные, отвечающие за текущие показания
акселерометра и трех пространственных осей: x – по горизонтали, y – вперед
и назад, z – по вертикали. Полученные с датчика акселерометра данные могут
оказаться трудночитаемыми. Для того чтобы упростить прочтение, округлите
их до ближайшего целого числа. Введите следующее:
x = round(x)
y = round(y)
z = round(z)
Наконец, выведите на экран три значения, введя следующее:
print("x={0}, y={1}, z={2}".format(x, y, z))
Нажмите кнопку
Выполнить (Run), и вы получите данные акселеро
метра. Программа выведет их в область оболочки (рис. 7-28). В отличие от созданной вами ранее программы, данные будут постоянно изменяться. Для прекращения работы программы нажмите красную кнопку
Остановить (Stop).
Рис. 7-28. Округленные до целого числа показания акселерометра
Скорее всего, вы заметили, что хоть Raspberry Pi лежит на столе неподвижно, акселерометр сообщает о том, что значение по оси z равно 1,0 (ускорение,
обозначаемое переменной G). Причина в том, что акселерометр показывает
значение гравитационной постоянной (силы тяжести). Это сила, притягиваю-
Ощущаем окружающий мир 195
щая Sense HAT к центру Земли. Именно благодаря этой силе предметы упадут
на пол, если вы столкнете их со стола.
Запустите программу, возьмите в руки и начните осторожно крутить Sense
HAT и Raspberry Pi. Аккуратнее, не выдерните провода! Если вы повернете
Raspberry Pi сетевыми и USB-портами вниз, то заметите, что значения изменятся. Теперь по оси z – 0G, а по оси x – 1G. Снова поверните устройство, но
уже портами HDMI и портами электропитания вниз. Теперь значение по оси
y изменилось на 1G. Если же вы перевернете HDMI порты вверх, значение по
оси y изменится на –1G.
Используя полученные знания о пространственных осях и о том, что сила
тяжести равна примерно 1G, вы можете с помощью акселерометра определить,
повернуто устройство вверх или вниз. С его помощью вы также можете выявить
передвижения: осторожно потрясите Sense HAT и Raspberry Pi и наблюдайте за
данными. Чем сильнее вы трясете устройства, тем больше их ускорение.
Функция sense.get_accelerometer_raw() задает Sense HAT команду отключить два других датчика ИИБ (гироскоп и магнитометр) и выводить данные,
получаемые только акселерометром. Вы можете проделать то же самое и с другими датчиками.
Найдите строку acceleration = sense.get_accelerometer_raw() и замените
ее на
orientation = sense.get_gyroscope_raw()
Измените слово acceleration на orientation во всех трех строках. Нажмите
кнопку
Выполнить (Run), и вы увидите данные расположения Sense HAT
на трех осях, округленные до целого числа. Однако в отличие от предыдущей
программы эти данные поступают от одного датчика – гироскопа, исключая
акселерометр и магнитометр. Это необходимо в том случае, когда вам требуются данные расположения перемещающейся в пространстве платы Sense
HAT, исключая погрешность этого движения, или же в том случае, когда Sense
HAT расположена рядом с сильным магнитным полем.
Чтобы остановить программу, нажмите красную кнопку
Остановить
(Stop). Для получения данных, снятых магнитометром, удалите все функции,
кроме первых четырех строк, а затем введите под строкой while True: следующее:
north = sense.get_compass()
print(north)
Запустив программу, вы увидите данные, указывающие направление Северного магнитного полюса, напечатанные несколько раз в области оболочки
Python. Плавно поверните Sense HAT, и вы заметите, что направление меняется по мере того, как меняется ориентация платы относительно Северного
магнитного полюса. Вы создали компас! Если у вас есть магнит (магнит для
холодильника подойдет), попробуйте покрутить его вокруг Sense HAT. Вы увидите, как меняются показания магнитометра.
196
Глава 7. Физические вычисления с помощью Sense HAT
Задача: автоматическое вращение
Используя полученные о светодиодной матрице и датчиках ИИБ знания,
сможете ли вы написать программу, которая будет вращать изображение
в зависимости от расположения Sense HAT?
Управление джойстиком
Джойстик Sense HAT, расположенный в правом нижнем углу, несмотря на небольшой размер, удивительно мощный. Во-первых, с его помощью вы можете перемещать выбранные элементы по четырем направлениям: вверх, вниз,
влево и вправо. А во-вторых, он обладает пятым способом ввода. При нажатии
на него (не смещая рукоять в стороны) он будет выполнять функцию кнопки.
Внимание!
Рекомендуем использовать джойстик Sense HAT только в том случае, если
вы установили распорки, следуя инструкциям, указанным в начале этой
главы. Если распорки отсутствуют, то нажатиями на джойстик вы можете
погнуть Sense HAT, тем самым повредив как саму Sense HAT, так и вилку
GPIO платы Raspberry Pi.
Управление джойстиком с помощью Scratch
Создайте новую программу в Scratch, убедившись, что у вас уже загружено расширение Raspberry Pi Sense HAT. Как всегда, начнем написание программы с добавления в область сценариев блока когда
нажат из раздела
События (Events). Перетащите под него блок clear display , а под него блоки
и set colour to
, при необходимости настроив их.
В программе Scratch направление нажатия на рукоять джойстика Sense HAT
сопоставляется с клавишами на клавиатуре соответственно: сдвиг рукояти
джойстика вверх эквивалентен нажатию на клавишу ↑, сдвиг вниз – клавишу ↓,
сдвиг влево – клавишу ←, сдвиг вправо – клавишу →. Простое же нажатие на
рукоять джойстика эквивалентно нажатию клавиши Enter.
set background
Перетащите блок when joystick pushed up в область сценариев. А теперь задайте программе действие, перетащив блок говорить Привет! 2 секунд под
предыдущий блок.
Сдвиньте рукоять джойстика вперед, и спрайт котика радостно поприветствует вас: «Привет!» Управлять джойстиком вы сможете только при наличии
оригинальной платы Sense HAT. При работе с эмулятором Sense HAT вам придется использовать соответствующие клавиши на клавиатуре, тем самым имитируя рукоять джойстика.
Управление джойстиком 197
когда
нажат
clear display
set background to
set colour to
when joystick pushed up
говорить Привет!
2 секунд
Теперь отредактируйте информацию в блоке говорить Привет! 2 секунд так,
чтобы получилось говорить Вверх! 2 секунд . Повторите данное действие еще несколько раз, перетаскивая блоки из разделов События (Events) и Внешний вид
(Looks) до тех пор, пока у вас не получится по паре блоков на каждое возможное
направление нажатия джойстика (всего их пять). Двигайте рукоять джойстика в
разные направления, наблюдая за тем, как появляются новые сообщения!
когда
нажат
clear display
when joystick pushed up
говорить
Вверх!
2 секунд
set background to
set colour to
when joystick pushed down
говорить
Вниз!
2 секунд
when joystick pushed left
говорить
Влево!
2 секунд
when joystick pushed right
говорить
Вправо!
2 секунд
when joystick pushed centre
говорить
Центр!
2 секунд
Итоговая задача
Можете ли вы управлять спрайтом в программе Scratch, используя джойстик Sense HAT? Сможете ли вы сделать так, чтобы на матрице Sense HAT
загоралось какое-нибудь радостное сообщение, каждый раз, когда ваш
спрайт соберет какой-нибудь предмет (еще один спрайт)?
198
Глава 7. Физические вычисления с помощью Sense HAT
Управление джойстиком с помощью Python
Создайте новую программу в Thonny и сохраните ее под названием Sense
HAT Joystick. Начнем со ввода стандартных трех строк, подключающих плату
Sense HAT и сбрасывающих предыдущие параметры, заданные светодиодной
матрицей (не забывайте, что нужно использовать функцию sense_emu (вместо
sense_hat), если вы работаете с эмулятором):
from sense_hat import SenseHat
sense = SenseHat()
sense.clear()
Далее создаем бесконечный цикл:
while True:
Следующей строкой кода укажем Python выполнять команды, заданные
джойстиком Sense HAT. Обратите внимание, что Thonny автоматически сделает отступ для этой строки:
for event in sense.stick.get_events():
Следующей строкой зададим действие, которое является ответом на движение джойстика. Обратите внимание, что здесь Thonny также автоматически
сделает отступ:
print(event.direction, event.action)
Запустите программу, нажав кнопку
Выполнить (Run), и попробуйте
подвигать рукоять джойстика в разные направления. На экране, в области оболочки, будут отображаться в зависимости от направления следующие слова: up
(вверх), down (вниз), left (влево), right (вправо) и middle (посередине). Последнее – при нажатии на рычаг джойстика, как на кнопку.
Вы также можете заметить, что кроме сообщения, указывающего направление рукояти, на экране высвечиваются следующие два слова: pressed – появляется после первого сдвига рукояти в сторону – и released – появляется в тот момент, когда рукоять джойстика возвращается в центр, на исходную позицию.
Вы можете использовать перечисленные команды для создания своих программ. Например: игра, в которой персонаж начинает двигаться в тот момент,
когда джойстик «нажат» (pressed), а останавливается тогда, когда джойстик
«отпущен» (released).
Вы также можете использовать джойстик для запуска функций, вместо того
чтобы ограничиваться применением цикла for. Удалите код ниже функции
sense.clear() и введите следующее:
def red():
sense.clear(255, 0, 0)
def blue():
sense.clear(0, 0, 255)
Управление джойстиком 199
def green():
sense.clear(0, 255, 0)
def yellow():
sense.clear(255, 255, 0)
Эти функции задают светодиодам матрицы Sense HAT единый цвет (красный, синий, зеленый или желтый). Это значительно упрощает вашу программу! Для их реализации вам необходимо задать Python команды, в которых цвета и движения джойстика будут взаимосвязаны. Введите следующее:
sense.stick.direction_up = red
sense.stick.direction_down = blue
sense.stick.direction_left = green
sense.stick.direction_right = yellow
sense.stick.direction_middle = sense.clear
Для нормального функционирования программы добавим бесконечный
цикл, имеющий название главного цикла. Это необходимо для того, чтобы
программа выполняла команды при каждом движении рукоятью джойстика.
Иначе она выполнит написанный вами код лишь один раз, после чего завершит свою работу. Для этого введите следующее:
while True:
pass
Полный код выглядит таким образом:
from sense_hat import SenseHat
sense = SenseHat()
sense.clear()
def red():
sense.clear(255, 0, 0)
def blue():
sense.clear(0, 0, 255)
def green():
sense.clear(0, 255, 0)
def yellow():
sense.clear(255, 255, 0)
sense.stick.direction_up = red
sense.stick.direction_down = blue
sense.stick.direction_left = green
sense.stick.direction_right = yellow
sense.stick.direction_middle = sense.clear
while True:
pass
200
Глава 7. Физические вычисления с помощью Sense HAT
Нажмите кнопку
Выполнить (Run) и попробуйте подвигать рукоять
джойстика. Вы увидите, как загорелись светодиоды! Для их выключения используйте ту самую пятую функцию джойстика (кнопку). Пятое направление
middle выполняет ту же функцию, что и функция sense.clear() (выключает все
светодиоды). Поздравляем, вы научились передавать программам входные
данные джойстика!
Итоговая задача
Способны ли вы на основе полученных знаний вывести изображение на
экран, а затем повернуть его в любом направлении с помощью джойстика? Можете ли вы посредством нажатия на джойстик (middle) перейти от
одного изображения к другому?
Проект в Scratch: бенгальский огонек
Теперь, когда вы обладаете достаточными навыками работы с Sense HAT, пришло время использовать собранные знания воедино и создать теплочувствительный бенгальский огонек – устройство, которое работает должным образом
только тогда, когда оно холодное, ведь при нагревании его работа замедляется.
Создайте новый проект в Scratch, и если вы еще не загрузили расширение
Raspberry Pi Sense HAT, сделайте это. Как и раньше, добавьте первые четыре
нажат , clear display , set background
и set colour to
. При
блока: когда
необходимости внесите изменения в последние два блока.
Для начала создадим простенький, но достаточно выразительный бенгальский огонек. Перетащите в область сценариев блок повторять всегда, а затем
внутрь него поместите блок set pixel x 0 y 0 to colour . Замените заданные автоматически значения 0, 0, а также слово colour блоками выдать случайное от 0 до 10
из раздела Операторы (Operators).
Здесь нам понадобятся значения, отличные от тех, что уже заданы (1–10).
Изменим их. Числа в блоках set pixel означают координаты пикселя на светодиодной матрице: первое – для оси х, второе – для y. Из этого следует, что числа
должны находиться в диапазоне от 0 до 7. Поэтому отредактируем первые два
блока следующим образом: выдать случайное от 0 до 7 . Далее займемся изменением переменной colour. Указанным в этом поле цветом и загорятся пиксели. После того как вы выбрали цвет с помощью палитры, он отобразится в
области сценариев. Однако в блоке он будет записан числом. Отредактируйте
последнюю часть блока следующим образом: выдать случайное от 0 до 16777215 .
Проект в Scratch: бенгальский огонек 201
Нажмите кнопку в виде зеленого флажка, и вы увидите, что светодиоды на
матрице Sense HAT загораются случайными цветами (рис. 7-29). Поздравляем,
вы создали электронный бенгальский огонек!
Рис. 7-29. Светодиоды загораются случайными цветами
Бенгальский огонек пока не интерактивен. Исправим это. Добавим блок
ждать 1 секунд под блок set pixel , но так, чтобы он оказался внутри блока
/
повторять всегда. Из раздела Операторы (Operators) перетащите блок
внутрь блока ждать 1 секунд и во второй кружок этого блока впишите число
10. А теперь перетащите блок temperature в первый кружок блока из раздела
Операторы (Operators).
202
Глава 7. Физические вычисления с помощью Sense HAT
Нажмите кнопку в виде зеленого флажка. Обратите внимание, что работа
бенгальского огонька замедлилась (если только в вашей комнате не слишком
холодно). Причина этого заключается в том, что вы задали программе задержку, зависящую от температуры. Эта задержка может составлять некое коли
чество секунд в диапазоне от 0 до 10 перед началом следующего цикла. Если же
температура в вашей комнате составляет 20 °C, программа активирует задержку в 2 секунды перед началом следующего цикла. Если температура составляет
10 °C – 1 секунду. Если же она ниже 10 °C, задержка программы составит меньше одной секунды.
Если же температура окажется ниже 0 °C (температура замерзания воды),
Sense HAT попытается осуществить задержку, составляющую меньше 0 секунд.
Однако это невозможно (если, конечно, путешествия во времени еще не придумали). Поэтому вы увидите такой же результат, как если бы Sense HAT выполнила задержку в 0 секунд. Поздравляем, теперь вы можете еще раз опробовать интегрированные в ваши программы функции Sense HAT!
Проект в Python: трикордер
Теперь, когда вы обладаете достаточными навыками работы с Sense HAT, пришло время использовать собранные воедино знания и создать трикордер, знакомый поклонникам научной фантастики как устройство, считывающее данные встроенных в него датчиков.
Создайте новый проект в Thonny и сохраните его под названием Tricorder.
По традиции начнем программу со строк, подключающих Sense HAT (если вы
работаете с эмулятором, не забудьте изменить sense_hat на sense_emu).
from sense_hat import SenseHat
sense = SenseHat()
sense.clear()
Теперь необходимо определять функции каждого из датчиков Sense HAT.
Начнем с инерциального измерительного блока (ИИБ). Введите следующее:
def orientation():
orientation = sense.get_orientation()
pitch = orientation["pitch"]
roll = orientation["roll"]
yaw = orientation["yaw"]
Проект в Python: трикордер 203
Поскольку результаты, полученные с датчиков, выводятся на матрицу Sense
HAT, будет удобнее округлить их до целых чисел, чтобы не ждать, пока появятся десятичные части. Однако округлим их не до целой части, а до одного знака
после запятой. Для этого введите следующее:
pitch = round(pitch, 1)
roll = round(roll, 1)
yaw = round(yaw, 1)
Теперь зададим Python команду вывести результаты на светодиодную мат
рицу, поскольку трикодер функционирует как портативное устройство без необходимости его дополнительного подключения к монитору или телевизору.
sense.show_message("Pitch {0}, Roll {1}, Yaw {2}".
format(pitch, roll, yaw))
Теперь у вас готова функция для считывания и отображения показаний ИИБ.
Создадим аналогичные функции для каждого из оставшихся датчиков. Начнем
с датчика температуры:
def temperature():
temp = sense.get_temperature()
temp = round(temp, 1)
sense.show_message("Temperature: %s degrees Celsius" % temp)
Обратите внимание на последнюю строку, которая выводит данные на мат
рицу: знаки %s носят название заполнителя, поскольку строка «заполняется»
данными переменной temp. Используя эту функцию, вы можете красиво оформить данные, полученные на выходе, подписав «Temperature», а также единицы измерения «degrees Celsius». От этого ваша программа становится намного
интереснее.
Теперь напишите код для датчика влажности:
def humidity():
humidity = sense.get_humidity()
humidity = round(humidity, 1)
sense.show_message("Humidity: %s percent" % humidity)
Теперь для датчика давления:
def pressure():
pressure = sense.get_pressure()
pressure = round(pressure, 1)
sense.show_message("Pressure: %s millibars" % pressure)
А сейчас показания компаса/магнитометра:
def compass():
for i in range(0, 10):
north = sense.get_compass()
north = round(north, 1)
sense.show_message("North: %s degrees" % north)
Короткий цикл, задаваемый кодом for, считывает десять показаний с магнитометра, чтобы выдать вам более точный результат. Если же вы замечаете,
204
Глава 7. Физические вычисления с помощью Sense HAT
что итоговое значение продолжает меняться, увеличьте количество циклов до
20, 30 или даже до 100, чтобы получить более точные данные.
В созданной вами программе сейчас задано пять команд, цель каждой – выводить на матрицу данные, полученные одним из датчиков Sense HAT. Как раз
здесь идеально подойдет джойстик, благодаря которому вы сможете указывать, с какого именно датчика вы хотите получить показания.
Введите следующее:
sense.stick.direction_up = orientation
sense.stick.direction_right = temperature
sense.stick.direction_down = compass
sense.stick.direction_left = humidity
sense.stick.direction_middle = pressure
Введенные строки кода сопоставляют работу определенного датчика с направлением движения рукояти джойстика: при сдвиге рукояти вверх считываются данные с датчика ориентации, вниз – с магнитометра, влево – с датчика
влажности, вправо – с датчика температуры, нажатие на рукоять – с датчика
давления.
Теперь необходимо ввести код главного цикла. Необходимо это для того,
чтобы после первого движения джойстика программа продолжала работать, а
не выключилась. В конце программы введите следующее:
while True:
pass
Полный код выглядит таким образом:
from sense_hat import SenseHat
sense = SenseHat()
sense.clear()
def orientation():
orientation = sense.get_orientation()
pitch = orientation["pitch"]
roll = orientation["roll"]
yaw = orientation["yaw"]
pitch = round(pitch, 1)
roll = round(roll, 1)
yaw = round(yaw, 1)
sense.show_message("Pitch {0}, Roll {1}, Yaw {2}".
format(pitch, roll, yaw))
def temperature():
temp = sense.get_temperature()
temp = round(temp, 1)
sense.show_message("Temperature: %s degrees Celsius" % temp)
def humidity():
humidity = sense.get_humidity()
Проект в Python: трикордер 205
humidity = round(humidity, 1)
sense.show_message("Humidity: %s percent" % humidity)
def pressure():
pressure = sense.get_pressure()
pressure = round(pressure, 1)
sense.show_message("Pressure: %s millibars" % pressure)
def compass():
for i in range(0, 10):
north = sense.get_compass()
north = round(north, 1)
sense.show_message("North: %s degrees" % north)
sense.stick.direction_up = orientation
sense.stick.direction_right = temperature
sense.stick.direction_down = compass
sense.stick.direction_left = humidity
sense.stick.direction_middle = pressure
while True:
pass
Нажмите кнопку
Выполнить (Run) и подвигайте рукоять джойстика,
тем самым снимая показания с определенного датчика (рис. 7-30). Как только
число пропадет с матрицы, сдвиньте рукоять в другое направление. Поздравляем, вы создали собственный трикодер, которым гордилась бы даже Объединенная Федерация планет!
Рис. 7-30. Каждое значение выводится на матрицу
Если вы хотите узнать больше информации о проектах, которые можно создать, используя Sense HAT, советуем перейти к приложению Г.
Глава
8
Модуль камеры
для Raspberry Pi
Подключив модуль камеры (обычный или High Quality) к Raspberry Pi,
можно снимать фотографии и видео с высоким разрешением, а также
создавать удивительные проекты посредством компьютерного зрения.
Если у вас когда-либо появлялось желание создать проект, связанный с тем,
что вы видите, – процесс, известный в области робототехники как компьютерное зрение, – то вам придется по душе дополнительный модуль камеры для
Raspberry Pi – Camera Module 3 (рис. 8-1), High Quality Camera (HQ Camera) или
модель с глобальным затвором Global Shutter Camera. Модуль камеры – небольшая квадратная печатная плата, имеющая плоский кабель (шлейф), которая
подключается к порту последовательного интерфейса камеры (CSI) Raspberry
Pi и позволяет снимать фотографии и видеозаписи с высоким разрешением.
В дальнейшем они могут быть использованы как независимо, так и интегрированы в создаваемые вами программы.
Рис. 8-1. Raspberry Pi Camera Module 3
208
Глава 8. Модуль камеры для Raspberry Pi
Raspberry Pi 400
Модули камер Raspberry Pi несовместимы с моделью Raspberry Pi 400.
Как вариант можно использовать веб-камеры с интерфейсом USB, но с
Raspberry Pi 400 вы не сможете использовать ПО, описываемое в этой
главе.
Типы камер
Существует несколько типов модулей камеры для Raspberry Pi, выбор которых зависит от желаемого вида съемки: стандартный модуль Camera Module 3,
версия NoIR, камера высокого качества High Quality Camera (HQ Camera) и камера с глобальным затвором Global Shutter Camera. Если вы планируете снимать обычные фотографии и видеоролики в хорошо освещенном помещении,
подойдет стандартная модель Camera Module 3 или широкоугольная модель
Camera Module 3 Wide.
Если вы планируете менять объективы и стремитесь к наилучшему качеству
изображения, используйте модуль High Quality Camera. Модуль NoIR Camera
Module 3, названный так из-за отсутствия фильтра, пропускающего излучение
в инфракрасной (ИК) области спектра, предназначен для съемки фото и видео
в полной темноте с использованием инфракрасных источников света, а также
доступен в версии с широкоугольным объективом. Если вы хотите установить
в скворечник камеру слежения за птицами, использовать камеру безопасности
или собрать иной проект с ночным зрением, ваш выбор падет именно на ту
самую версию NoIR. Однако не забудьте дополнительно приобрести источник
инфракрасного света! Наконец, в камере с глобальным затвором Global Shutter
Camera считывание данных с каждого пикселя матрицы происходит в один и
тот же момент времени, поэтому эта модель подойдет для высокоскоростной
съемки и проектов с компьютерным зрением.
Raspberry Pi Camera Module 3
Модуль камеры Raspberry Pi Camera Module 3 как в стандартной, так и в
NoIR-версии основан на матрице Sony IMX708 с разрешением в 12 мегапикселей. Это означает, что девайс позволяет делать снимки с разрешением до
12 миллионов пикселей. В этом случае захватывается изображение шириной
до 4608 пикселей и высотой до 2592. Модуль Raspberry Pi Camera Module 3
может быть оборудован одним из двух вариантов объектива: стандартный,
с углом обзора 75 градусов, и широкоугольный, с углом обзора 120 градусов.
Помимо фотографий, Raspberry Pi Camera Module 3 может захватывать видеоматериалы в разрешении Full HD (1080p) с частотой 50 кадров в секунду
(50 fps). Для более плавного движения или создания так называемого эффекта замедленной съемки вы можете увеличить скорость смены кадров, снизив
разрешение следующим образом: 100 кадров в секунду для видеоматериалов с
разрешением 720p и 120 кадров в секунду для видеоматериалов с разрешением 480p (VGA). По сравнению с предыдущими версиями, данный модуль обза-
Типы камер 209
велся еще одним новшеством – автофокусом – и теперь умеет автоматически
фокусировать объектив для съемки близких/удаленных объектов.
Raspberry Pi High Quality Camera
В модели High Quality Camera установлена 12,3-мегапиксельная матрица
Sony IMX477. Она крупнее, чем в стандартной и NoIR-версиях Camera Module,
а значит, захватывает больше света, тем самым формируя более качественные изображения. В отличие от модулей Camera Module, модель High Quality
Camera не оборудована встроенным объективом, поэтому самостоятельно неспособна снимать фотографии и видео. Вы можете использовать любой объектив с креплением (байонентом) C или CS, либо иным креплением с помощью
подходящего адаптера на C/CS. Кроме того, выпускается вариант модуля High
Quality Camera с байонетом M12.
Raspberry Pi Global Shutter Camera
В модуле Global Shutter Camera с глобальным затвором используется 1,6-мега
пиксельная матрица Sony IMX296. Хотя у нее и меньше разрешение, чем у моделей Camera Module и High Quality Camera, модель Global Shutter Camera способна
захватывать изображение со всех пикселей матрицы одновременно. Благодаря
этому модуль Global Shutter Camera отлично подходит для съемки быстро движущихся объектов без искажений, которые непременно возникают при записи
изображения камеры со скользящим затвором. Как и High Quality Camera, модель
Global Shutter Camera поставляется без объектива и поддерживает внешние объективы с байонетом C/CS и M12 (в зависимости от модели).
Raspberry Pi Camera Module 2
Предыдущая модель, Raspberry Pi Camera Module 2 и ее вариация с NoIR оборудованы 8-мегапиксельной матрицей Sony IMX219. В этом случае захватывается изображение шириной до 3280 пикселей и высотой до 2464. Помимо
фотографий, Raspberry Pi Camera Module 2 может захватывать видеоматериалы в разрешении Full HD (1080p) с частотой 30 кадров в секунду (30 fps). Также
вы можете увеличить скорость смены кадров, снизив разрешение: 60 кадров в
секунду для видеоматериалов с разрешением 720p и 90 кадров в секунду для
видеоматериалов с разрешением 480p (VGA).
Raspberry Pi Zero И Raspberry Pi 5
Все модули Raspberry Pi Camera Module совместимы с микрокомпьютером Raspberry Pi Zero 2 W, потомком оригинальных моделей Raspberry
Pi Zero и Zero W, а также с Raspberry Pi 5. Если вы пользуетесь моделью
Raspberry Pi 5, вам понадобится специальный шлейф, отличный от использовавшегося с Raspberry Pi 4 и более ранними моделями.
Обратитесь в специализированный магазин электроники за подходящим
шлейфом: широкий разъем подключается к модулю камеры, а более узкий – к Raspberry Pi.
210
Глава 8. Модуль камеры для Raspberry Pi
Установка модуля камеры
Модуль Camera Module или HQ Camera, как и любое дополнительное оборудование, необходимо подключать к Raspberry Pi или отключать от него только
при выключенном питании устройства и отсоединенном от него кабеле питания. Если компьютер Raspberry Pi включен, нажмите на панели задач кнопку
в виде малины, выберите пункт Завершить сеанс (Shutdown) и подтвердите
действие, нажав кнопку Shutdown (Завершение работы). Дождитесь выключения устройства, а затем отсоедините его от сети.
Распакуйте модуль камеры: в коробке вы найдете небольшую печатную
плату, которая представляет собой модуль камеры, и плоский кабель – шлейф.
В большинстве случаев этот кабель уже подключен к модулю камеры. Если же
нет, переверните модуль так, чтобы объектив камеры находился внизу, и найдите плоский пластиковый разъем. Осторожно пальцами подцепите торчащие
края и потяните наружу, пока разъем не выдвинется наполовину. Поверните
шлейф так, чтобы серебряные края оказались внизу, а часть пластика, окрашенная в синий цвет, – вверху. Вставьте его в разъем, который вы только что
вытащили, а затем аккуратно нажмите на него. Должен прозвучать щелчок
(рис. 8-2). В данном случае не имеет значения, какой именно конец кабеля вы
используете. Если шлейф установлен правильно, он будет расположен ровно и
не выскочит, если вы слегка потянете за него. В противном случае повторите
попытку, проделав предыдущие манипуляции еще раз.
Рис. 8-2. Подключение шлейфа к модулю камеры
Установка модуля камеры 211
Теперь установите другой конец шлейфа таким же образом. Найдите нижний из двух портов камеры/дисплея с меткой «CAM/DISP 0» на Raspberry Pi 5,
или разъем камеры на Raspberry Pi 4, Raspberry Pi Zero 2W и более ранних моделях, и осторожно потяните защелку вверх. Если вы поместили Raspberry Pi в
корпус, возможно, вам будет удобнее сначала снять его.
Разместив Raspberry Pi 5 так, чтобы разъем GPIO находился справа, а разъ
емы HDMI – слева, подключите шлейф так, чтобы серебристые/золотистые
контакты находились справа, а синий пластик – слева (рис. 8-3). Затем осторожно верните защелку в ее исходное положение.
В случае с Raspberry Pi 4 и более ранними моделями шлейф должен быть расположен наоборот: серебристые/золотистые контакты – слева, а синий плас
тик – справа. При подключении к моделям Raspberry Pi Zero и Raspberry Pi Zero
2 W серебристые/золотистые контакты должны быть направлены вниз (к столу), а синий пластик – вверх (к потолку). Если кабель установлен правильно,
он будет расположен ровно и не выскочит, если вы слегка потянете за него.
В противном случае повторите попытку, проделав предыдущие манипуляции
еще раз.
Рис. 8-3. Подключение шлейфа к порту камеры/CSI на плате Raspberry Pi
Производители заклеивают объектив модуля камеры небольшим кусочком
пленки синего цвета. Это позволяет предотвратить появление на нем царапин в ходе производства, транспортировки и установки. Найдите эту пленку и
осторожно отсоедините ее от объектива, тем самым подготовив камеру к использованию.
Подключите Raspberry Pi к источнику питания и дождитесь загрузки
Raspberry Pi OS.
212
Глава 8. Модуль камеры для Raspberry Pi
Настраиваем фокус
Модуль камеры для Raspberry Pi оборудован небольшим пластиковым
колесиком. Оно предназначено для настройки фокуса объектива. Заводские настройки обычно идеальны, однако если вы пользуетесь камерой
для съемки объектов очень крупным планом, то можете осторожно повернуть расположенное над объективом колесо, тем самым настраивая
фокус вручную.
Тестируем модуль камеры
Чтобы убедиться в том, что вы правильно установили модуль Camera Module
или HQ Camera, предлагаем воспользоваться утилитой libcamera. Она предназначена для получения изображений, сделанных камерой, посредством интерфейса командной строки Raspberry Pi (CLI).
В отличие от используемых нами ранее программ, libcamera нельзя найти в меню. Чтобы открыть программу, нажмите на панели задач кнопку в виде
малины, после чего перед вами откроется меню. Выберите категорию Стандартные (Accessories) и пункт Terminal (Терминал). Перед вами откроется
черное окно, надписи в котором будут отображены зеленым и синим цветами
(рис. 8-4). Это так называемый терминал, позволяющий получать доступ к интерфейсу командной строки.
Рис. 8-4. Запустите приложение Terminal для ввода команд
Чтобы захватить изображение с камеры, введите в строке приглашения программы Terminal следующую команду:
libcamera-still -o test.jpg
Установка модуля камеры 213
После нажатия клавиши Enter на экране крупным планом появится изображение с камеры (рис. 8-5). Такая опция носит название режима предварительного просмотра. Стандартное время задержки перед съемкой фотографии – 5 секунд, однако при необходимости вы можете настроить ее продолжительность.
По истечении заданного времени, т. е. 5 секунд, камера сделает один неподвижный снимок и сохранит его в вашей домашней папке под названием test.
jpg. Если вы хотите сделать еще один снимок, введите ту же команду еще раз,
но обязательно измените имя итогового файла после параметра -o, иначе камера перезапишет предыдущий снимок!
Рис. 8-5. Режим предварительного просмотра камеры
Если в режиме предварительного просмотра вы понимаете, что изображение перевернуто, то необходимо информировать libcamera о положении камеры. Шлейф модуля камеры предназначен для подключения к разъему, находящемуся в нижнем углу девайса. Если же шлейф располагается сбоку или
сверху, как в случае с некоторыми дополнительными аксессуарами, предназначенными для крепления камеры, необходимо поворачивать изображение
на 90, 180 или 270 градусов при помощи параметра -rotation. Таким образом,
при использовании камеры со шлейфом, расположенным в верхней части девайса, введите следующую команду:
libcamera-still --rotation 180 -o test.jpg
Если шлейф подключен справа, замените значение поворота на 90 градусов,
если же слева – замените значение на 270 градусов. Если первое фото было
снято под неправильным углом, исправьте проблему, воспользовавшись параметром –rotation.
214
Глава 8. Модуль камеры для Raspberry Pi
Чтобы просмотреть сделанную фотографию, запустите программу Файловый менеджер (File manager), нажав на панели задач кнопку в виде малины и
выбрав соответствующий пункт в меню Стандартные (Accessories). Захваченное изображение сохранено в файл test.jpg и находится в папке home/ваше_
имя. Найдите его в списке файлов и дважды щелкните по нему мышью, тем
самым загрузив программу для просмотра изображений (рис. 8-6). Вы также
можете прикрепить изображение к сообщению электронной почты, загрузить
его на различные веб-сайты через браузер или переместить на внешнее запоминающее устройство.
Рис. 8-6. Просмотр полученного изображения
Модуль Raspberry Pi Camera Module 3 поддерживает возможность настройки
фокуса изображения с помощью системы автофокусировки с электроприводом. Эта функция включена по умолчанию: когда вы делаете снимок, модуль
камеры автоматически настраивает фокус, чтобы полученное изображение
было как можно более четким, используя так называемую непрерывную автофокусировку.
Как следует из названия, непрерывная автофокусировка постоянно настраивает точку фокусировки вплоть до момента съемки. Если вы делаете несколько снимков или снимаете видео, система будет продолжать настраивать фокус
в процессе съемки. Если между камерой и объектом съемки появится движущийся объект, камера автоматически перефокусируется.
Существуют и другие режимы автофокусировки, которые можно использовать, если непрерывная автофокусировка не дает нужных результатов. О них
вы можете прочитать в справочном разделе «Дополнительные настройки камеры» в конце этой главы.
Установка модуля камеры 215
Съемка видео
Возможности модуля камеры не исчерпываются съемкой неподвижных изображений: вы также можете записывать видеоролики с помощью инструмента
libcamera-vid.
Если не хватает памяти…
Записанные видеоролики могут занимать много пространства в памяти
устройства. Если вы планируете снимать много видеороликов, установите емкую microSD-карту. Вы также можете приобрести USB-флешку или
иной внешний накопитель.
По умолчанию инструменты группы libcamera сохраняют файлы в той
же папке, где находятся их исполняемые файлы. Поэтому не забудьте
сменить каталог, чтобы сохранять файлы на выбранном вами устройстве
хранения. О смене каталогов с помощью терминала речь пойдет в приложении В.
Чтобы записать короткий видеоролик, введите в терминале следующую команду:
libcamera-vid -t 10000 -o test.h264
Как и прежде, перед вами откроется окно с предварительным просмотром
изображения, захватываемого камерой. Однако в этот раз вместо обратного
отсчета и захвата одного снимка камера запишет в файл десять секунд видео.
По окончании записи окно предварительного просмотра автоматически закроется.
Если вы хотите снять более длительный видеоролик, измените значение параметра -t на желаемое, указав длительность записи в миллисекундах. Например, чтобы сделать десятиминутную запись, введите:
libcamera-vid -t 600000 -o test2.h264
Чтобы воспроизвести видео, найдите его в файловом менеджере и дважды
щелкните по видеофайлу для загрузки его в видеоплеер VLC (рис. 8-7). Программа начнет воспроизведение видео, но не так плавно, как хотелось бы. Это
можно исправить, добавив в запись информацию о времени.
Видео, захватываемое командой libcamera-vid, записывается в формате,
называемом битовым потоком. Его принцип работы немного отличается от
привычных видеофайлов. Обычно файлы содержат несколько компонентов: видеоряд, звук, захваченный вместе с видеоизображением, временные
метки, указывающие, когда каждый кадр должен быть отображен, и дополнительную информацию, называемую метаданными. Битовый поток совершенной иной. В этом формате нет ничего из перечисленного: это сырые видеоданные.
216
Глава 8. Модуль камеры для Raspberry Pi
Рис. 8-7. Открытие захваченного видеоролика
Чтобы видеоданные воспроизводились на максимально возможном количестве программных платформ, включая программы, разработанные не под
Raspberry Pi, вам нужно обработать их в контейнер. Для этого вам понадобится
недостающая информация: синхронизация кадров.
С помощью команды в терминале запишите новое видео, но на этот раз
передайте команде libcamera-vid параметр записи временных меток в файл
timestamps.txt:
libcamera-vid -t 10000 --save-pts timestamps.txt -o test-time.h264
Открыв папку video в файловом менеджере, вы увидите два файла: видеопоток test-time.h264 и файл timestamps.txt (рис. 8-8).
Чтобы объединить эти два файла в единый контейнер, пригодный для воспроизведения на других устройствах, воспользуйтесь инструментом mkvmerge.
Он объединяет видеоряд с информацией о временных метках и экспортирует
файл-видеоконтейнер формата Matroska Video (MKV).
В командной строке введите следующий код (\ – специальный символ, позволяющий разбить команду на две строки):
mkvmerge --timecodes 0:timestamps.txt test-time.h264 \
-o test-time.mkv
Замедленная видеосъемка 217
Рис. 8-8. Видеофайл с отдельным файлом с временными метками
В папке в файловом менеджере появится третий файл, test-time.mkv. Дважды
щелкните по нему мышью, чтобы загрузить в VLC, и вы увидите, что записанное вами видео воспроизводится плавно, без задержек и выпадения кадров.
Если вы хотите скопировать видеозапись на съемный накопитель для воспроизведения на другом компьютере, вам понадобится только файл MKV, а файлы
H264 и TXT можно удалить.
Не забывайте о добавлении временных меток в видео, чтобы создать файл,
который будет правильно воспроизводиться на большинстве компьютеров. Не
так-то просто создать временные метки к уже записанному видео!
Замедленная видеосъемка
Есть еще один трюк, на который способен модуль камеры Raspberry Pi: съемка в замедленном режиме (таймлапс). В этом режиме фотографии делаются
в течение определенного периода времени через равные промежутки времени, позволяя запечатлеть изменения, которые происходят слишком медленно,
чтобы их можно было заметить невооруженным глазом. Это отличный инструмент для наблюдения за сменой положения Солнца в течение дня или роста и
распускания цветка в течение нескольких дней либо недель. Вы даже можете
использовать этот прием для создания анимации!
Чтобы начать сеанс замедленной съемки, с помощью терминала создайте
новый каталог и перейдите в него. Так вы сохраните все отснятые файлы в
одном месте:
218
Глава 8. Модуль камеры для Raspberry Pi
mkdir timelapse
cd timelapse
Затем начните захват кадров, выполнив команду
libcamera-still --width 1920 --height 1080 -t 100000 \
--timelapse 10000 -o %05d.jpg
На этот раз имя выходного файла указано иначе: с помощью заполнителя
%05d команда libcamerastill будет использовать в качестве имени файла порядковые числа, начиная с 00000 и далее по возрастающей. Если указать конкретное имя файла, программа будет автоматически перезаписывать старые
снимки, и в итоге у вас получится только один снимок.
Параметры --width и --height позволяют указать разрешение получаемых
изображений. В данном случае мы установили ширину равной 1920 пикселей
и высоту 1080 пикселей – такое же разрешение, что и у видеофайла формата
Full HD.
Параметр -t работает по-прежнему, ограничивая время работы камеры.
В данном случае это 100000 миллисекунд (100 секунд).
Наконец, параметр --timelapse команды libcamera-still определяет задержку между снимками. В данном примере она равна 10 000 миллисекунд
(десяти секундам). Так как первый снимок будет записан через десять секунд
после выполнения команды, вы получите в общей сложности девять фотографий.
Запустите команду libcamera-still на 100 секунд, затем откройте каталог
timelapse в файловом менеджере. Вы увидите девять отдельных изображений,
имя файла каждого из которых содержит число, начиная с 00000 (рис. 8-9).
Рис. 8-9. Фотографии, сделанные во время сеанса замедленной съемки
Замедленная видеосъемка 219
Чтобы объединить полученные фотографии в видеозапись, воспользуемся
инструментом ffmpeg. Введите следующую команду:
ffmpeg -r 0.5 -i %05d.jpg -r 15 animation.mp4
Согласно ей, инструмент ffmpeg будет интерпретировать отснятые вами изображения как видео с частотой 0,5 кадра в секунду и объединит их в анимированное видео с частотой 15 кадров в секунду.
Дважды щелкните мышью по файлу animation.mp4, чтобы воспроизвести его
в VLC. Вы увидите, как сменяются сделанные вами фотографии (рис. 8-10).
Рис. 8-10. Воспроизведение замедленной анимации
Чтобы ускорить анимацию, попробуйте изменить частоту кадров с 0,5 до 1
или выше; чтобы замедлить, уменьшите ее до 0,2 или ниже.
Почему бы не попробовать снять собственное замедленное видео? Расположите игрушки перед камерой и начните сеанс замедленной съемки, меняя положение игрушек после каждого снимка. Не забывайте убирать руки из кадра
перед каждым снимком!
220
Глава 8. Модуль камеры для Raspberry Pi
Дополнительные настройки камеры
И libcamera-still, и libcamera-vid поддерживают ряд дополнительных настроек, позволяющих более тонко управлять такими параметрами, как разрешение – размер получаемого фотографического или видеоизображения.
Изображения и видео с более высоким разрешением имеют более высокое качество, но и занимают больше места в памяти, так что будьте внимательны во
время экспериментов!
Команды libcamera-still и libcamera-vid
Приведенные ниже параметры поддерживаются как libcamera-still, так и
libcamera-vid и добавляются при вводе команды в терминале.
--autofocus-mode
Определяет режим работы автоматической фокусировки модуля Raspberry
Pi Camera Module 3. Допустимые значения: continuous – используется по умолчанию; manual, который полностью отключает автофокус; auto, который однократно автоматически фокусирует объектив при начале работы с камерой. Эта
настройка не влияет на другие вариации модуля камеры.
--autofocus-range
Определяет диапазон автоматической фокусировки модуля Raspberry Pi
Camera Module 3. Если система автоматической фокусировки с трудом фокусируется на объекте, изменение данного параметра может помочь. Допустимые
значения: normal – используется по умолчанию; macro, при котором приоритет
фокусировки отдается близким объектам; full, при котором можно фокусироваться как очень близко, так и до самого горизонта.
--lens-position
Ручное управление точкой фокусировки объектива в режиме --autofocusmode manual. Позволяет установить точку фокусировки объектива путем указания значения в диоптриях. 1 диоптрия равна оптической силе линзы или
сферического зеркала с фокусным расстоянием, равным 1 метру. Например,
чтобы настроить камеру на фокусировку на расстоянии 0,5 м (50 см), используйте параметр --lens-position 2; чтобы настроить фокусировку на расстоянии 10 м, используйте параметр --lens-position 0.1. Значение 0.0 означает,
что фокусная точка равна бесконечности – самому дальнему расстоянию, на
которое может сфокусироваться камера.
--width --height
Определяет разрешение фотографического или видеоизображения. Например, чтобы захватить видео в формате Full HD (1920×1080), используйте следующие параметры в команде libcamera-vid:
-t 10000 --width 1920 --height 1080 -o bigtest.h264
Дополнительные настройки камеры 221
--rotation
Поворачивает изображение, начиная с 0 градусов (по умолчанию), на 90,
180 и 270 градусов. Если ваша камера установлена так, что шлейф выходит не
снизу, эта настройка позволит вам снимать фотографии и видео в правильной
ориентации.
--hflip --vflip
Переворачивает (отражает) фотографии или видео по горизонтальной и/или
вертикальной оси.
--sharpness
Усиливает/уменьшает резкость захватываемого фотографического или
видеоизображения, применяя фильтр повышения резкости. Значения
выше 1.0 (по умолчанию) усиливают резкость; значения ниже 1.0 уменьшают резкость.
--contrast
Усиливает/уменьшает контрастность захватываемого фотографического
или видеоизображения. Значения выше 1.0 (по умолчанию) усиливают конт
растность; значения ниже 1.0 уменьшают контрастность.
--brightness
Усиливает/уменьшает яркость захватываемого фотографического или
видеоизображения. Уменьшение значения, начиная с 0.0 (по умолчанию), затемняет изображение, пока не будет достигнуто минимальное значение -1.0 –
полностью черное изображение. Увеличение значения осветляет изображение,
пока не будет достигнуто максимальное значение 1.0 – полностью белое изображение.
--saturation
Усиливает/уменьшает насыщенность захватываемого фотографического
или видеоизображения. Значения ниже 1.0 (по умолчанию) приглушают цвета; значения ниже 1.0 повышают яркость оттенков.
--ev
Определяет значение компенсации экспозиции от -10 до 10, управляя работой регулятора усиления камеры. Обычно наилучшие результаты дает значение по умолчанию 0. Если камера создает слишком темные снимки, значение
можно увеличить; если слишком светлые – уменьшить.
--metering
Определяет режим замера для автоматической экспозиции и автоматической регулировки усиления. Значение по умолчанию, centre, обычно обеспечивает наилучшие результаты; при желании его можно изменить, выбрав вариант spot (точечный) или average (усредненный).
222
Глава 8. Модуль камеры для Raspberry Pi
--exposure
Допускает переключение между стандартным режимом экспозиции –
normal – и спортивным, sport, предназначенным для съемки быстро движущихся объектов.
--awb
Позволяет изменить алгоритм автоматического баланса белого с автоматического режима по умолчанию на подходящий согласно источнику освещения:
incandescent (лампа накаливания), tungsten (теплые лампы дневного света),
fluorescent (холодные лампы дневного света), indoor (в помещении), daylight
(солнечный свет) или cloudy (облачно).
Команда libcamera-still
Команда libcamera-still поддерживает следующие параметры:
-q
Устанавливает качество захваченного JPEG-изображения в диапазоне от 0
до 100, где 0 – минимальное качество и наименьший размер файла, а 100 – максимальное качество и наибольший размер файла. По умолчанию используется
качество 93.
--datetime
Использует текущие дату и время – в формате две буквы месяца, число месяца, минуты, часы, секунды – в качестве имени выходного файла. Используется
вместо параметра -o.
--timestamp
Работает аналогично --datetime, но устанавливает в качестве имени выходного файла количество секунд, прошедших с начала 1970 года – так называемой эпохи UNIX.
-k
Допускает захват неподвижного изображения нажатием клавиши Enter,
а не в автоматическом режиме после задержки. Если вы хотите отменить
захват, введите x, а затем нажмите клавишу Enter. Лучше всего работает с
тайм-аутом -t, равным 0. У команды libcamera-vid есть похожий параметр,
-k, но он работает немного по-другому: клавиша Enter используется для переключения между записью и паузой, начиная с режима записи. Завершив
запись, введите x, а затем нажмите клавишу Enter, чтобы выйти из программы.
Дополнительные настройки камеры 223
Дополнительные параметры
В этой главе рассмотрены наиболее распространенные параметры команд серии libcamera, всего их существенно больше. Полное техническое описание команд серии libcamera, в том числе их отличия от старых
инструментов, raspivid и raspistill, опубликованы на сайте rptl.io/
camera-software.
Глава
9
Модели Raspberry Pi
Pico и Pico W
Модели Raspberry Pi Pico и Pico W привносят совершенно новое измерение в ваши проекты с физическими вычислениями.
Raspberry Pi Pico и Pico W – это программируемые контроллеры. Они предназначены для экспериментов с физическими вычислениями с помощью особых
процессоров – микроконтроллеров. Несмотря на размер с пластинку жевательной резинки, Raspberry Pi Pico и Pico W обладают удивительной мощностью
благодаря микросхеме в центре платы – микроконтроллеру RP2040.
Устройства Raspberry Pi Pico и Pico W не способны заменить полноформатные модели Raspberry Pi, которые представляют собой устройства совершенно
другого класса – одноплатные микрокомпьютеры. Вы можете использовать
Raspberry Pi для игр, запуска программ или просмотра веб-страниц, как уже
видели ранее в этой книге. Контроллеры Raspberry Pi Pico предназначены для
подготовки проектов физических вычислений, где используются для управления различными компонентами – от светодиодов и кнопок до датчиков, моторов и даже других микроконтроллеров.
С помощью Raspberry Pi также можно заниматься физическими вычислениями благодаря интерфейсу ввода/вывода общего назначения (GPIO), но
у программируемых контроллеров есть свои преимущества использования
вместо одноплатных микрокомпьютеров. Raspberry Pi Pico меньше, дешевле
и поддерживает некоторые функции, специфичные для физических вычислений, такие как высокоточные таймеры и программируемые системы ввода/
вывода.
Эта глава – не исчерпывающее руководство по возможностям Raspberry Pi
Pico и Pico W, и вам не нужно покупать их, чтобы извлечь максимум от своего
микрокомпьютера Raspberry Pi. Если у вас уже есть Raspberry Pi Pico или Pico
W либо вы просто хотите узнать о них больше, эта глава послужит введением в
их основные возможности.
Чтобы получить полное представление о возможностях Raspberry Pi Pico и
Pico W, прочитайте книгу «Get started with MicroPython on Raspberry Pi Pico».
226
Глава 9. Модели Raspberry Pi Pico и Pico W
Краткий экскурс по Raspberry Pi Pico
Raspberry Pi Pico – сокращенно «Pico» – намного меньше, чем даже Raspberry
Pi Zero, самая компактная модель семейства одноплатных микрокомпьютеров
Raspberry Pi. Несмотря на это, Pico поддерживает множество функций – все
они доступны благодаря контактам по краям платы. Контроллер выпускается
в двух версиях – Raspberry Pi Pico и Raspberry Pi Pico W; разницу между ними
вы увидите позже.
На рис. 9-1 показан вид Raspberry Pi Pico сверху. На длинных краях расположены вкрапления золотого цвета с маленькими отверстиями. Это контакты,
которые обеспечивают микроконтроллеру RP2040 связь с внешним миром –
так называемый ввод/вывод (I/O).
Рис. 9-1. Вид Raspberry Pi Pico сверху
Такими же контактами, что и Pico, оборудована плата Raspberry Pi в области
интерфейса ввода/вывода общего назначения (GPIO), но если большинство одноплатных микрокомпьютеров Raspberry Pi поставляются с уже подключенными вилками с металлическими штырьками, то Raspberry Pi Pico и Pico W – нет.
Если вы хотите приобрести модель Pico с установленными вилками, обратите внимание на вариации Raspberry Pi Pico H и Pico WH. Модели без установленных колодок продаются по одной веской причине: взгляните на край
печатной платы, и вы увидите, что он неровный, с небольшими круглыми вырезами (рис. 9-2).
Благодаря этим отверстиям вы можете припаивать Pico и иные монтажные
платы между собой без металлических контактов. Это очень полезно при сборке компактных проектов, когда нужно свести их высоту к минимуму и уменьшить размеры готового проекта. Если вы покупаете готовый гаджет, работающий под управлением Raspberry Pi Pico или Pico W, он почти наверняка будет
собран таким образом.
Отверстия, расположенные напротив вырезов по краям, предназначены для
припаивания 2,54-миллиметровых штырьковых разъемов. Такие же штырьки
используются в штыревых вилках GPIO микрокомпьютеров Raspberry Pi. Припаяв их направленными вниз, вы сможете установить Pico на беспаечную макетную плату, чтобы максимально упростить подключение/отключение компонентов – отличный вариант для экспериментов и быстрой сборки прототипов!
Микросхема в центре платы Pico (рис. 9-3) – это микроконтроллер RP2040.
Это заказная интегральная схема (ИС), разработанная и созданная Raspberry
Краткий экскурс по Raspberry Pi Pico 227
Pi Foundation для работы в качестве «мозга» Pico и других устройств на основе микроконтроллеров. Если вы внимательно посмотрите на нее, то увидите
логотип Raspberry Pi, выгравированный в верхней части микросхемы, а также
ряд букв и цифр, которые позволяют инженерам определить, когда и где была
изготовлена микросхема.
Рис. 9-2. Монтажные отверстия
по краям платы
Рис. 9-3. Микросхема
RP2040
В верхней части Pico расположен порт micro-USB (рис. 9-4). Он служит для
передачи электропитания для работы Pico, а также передачи данных в целях
взаимодействия Pico с Raspberry Pi или другим компьютером через USB-интерфейс. Именно так вы будете загружать программы на Pico.
Взяв Pico в руки и взглянув на порт micro-USB, вы увидите, что он сужается
снизу и расширяется сверху. Рассмотрите кабель micro-USB: его разъем имеет
такую же форму.
Кабель micro-USB вставляется в порт micro-USB платы Pico только в одном
положении. При подключении убедитесь, что узкая и широкая стороны разъема и штекера стыкуются правильно – вы можете повредить разъем на плате
Pico, если попытаетесь вставить кабель micro-USB не той стороной!
Чуть ниже порта micro-USB находится маленькая кнопка с надписью BOOTSEL
(рис. 9-5). Это сокращение от «boot selection»: кнопка позволяет выбрать один из
двух режимов загрузки микроконтроллера Pico при первом его включении. Она
нам понадобится позже, при подготовке Pico к программированию.
Рис. 9-4. Разъем
micro-USB
Рис. 9-5. Кнопка выбора режима
загрузки
228
Глава 9. Модели Raspberry Pi Pico и Pico W
В нижней части Pico расположены три маленьких золотистых контакта с
меткой DEBUG (рис. 9-6). Они предназначены для отладки или поиска ошибок
в программах, запущенных на Pico, с помощью специального инструмента –
отладчика. С первыми проектами вам не понадобится интерфейс отладки, но
он может пригодиться при разработке больших и более сложных программ. На
некоторых моделях Raspberry Pi Pico для отладки вместо контактов установлен
маленький трехконтактный разъем.
Рис. 9-6. Интерфейс для отладки
Переверните Pico другой стороной, и вы увидите на ней метки (рис. 9-7).
Таким образом напечатанный текст называется шелкографией и информирует
о предназначении каждого контакта. Вы увидите метки GP0, GP1, GND, RUN,
3V3 и другие. Если вы вдруг забудете, какой контакт за что отвечает, эти метки
помогут. К сожалению, вы не сможете увидеть их, установив Pico в макетную
плату, поэтому мы опубликовали полные схемы распиновки в этой книге для
вашего удобства.
Обратите внимание, что не все метки совпадают с контактами.
Рис. 9-7. Метки на оборотной стороне платы
Крупные монтажные отверстия в углах платы предназначены для прочного
крепления Pico в проектах с помощью винтов или болтов с гайками. Эти монтажные отверстия в углах мешают маркировке, поэтому метки смещены в сторону от отверстий влево или вправо. К примеру, взгляните на верхний правый
Штыревые вилки 229
угол. VBUS – это метка первого контакта по порядку слева, VSYS – второго, а
GND – третьего.
На плате есть несколько плоских золотистых площадок с метками TP и номером. Это тестовые контакты: они предназначены для инженеров и позволяют быстро проверить работоспособность Raspberry Pi Pico после фабричной
сборки – вам они не понадобятся. С помощью таких тестовых контактов и
мультиметра или осциллографа инженер проверяет работоспособность Pico
перед упаковкой для продажи.
На платах Raspberry Pi Pico W и Pico WH установлен дополнительный чип с
серебристым металлическим покрытием (рис. 9-8). Это беспроводной модуль,
аналогичный установленным в микрокомпьютерах Raspberry Pi 4 и Raspberry
Pi 5, который можно использовать для подключения Pico к сети Wi-Fi или к
Bluetooth-устройствам. Этот модуль подключен к небольшой антенне, расположенной в самом низу платы, – именно поэтому на Raspberry Pi Pico W и Pico
WH отладочные контакты размещены ближе к центру платы.
Рис. 9-8. Беспроводной модуль и антенна (слева) Raspberry Pi Pico W
Штыревые вилки
Только что купленный Raspberry Pi Pico/Pico W абсолютно плоский. По бокам
не торчат металлические контакты, как на разъеме GPIO микрокомпьютера
Raspberry Pi или платы Raspberry Pi Pico H/Pico WH. С помощью монтажных
отверстий по краям можете прикрепить Pico к другой печатной плате или припаять к контактам GPIO перемычки в проекте, который не подразумевает переустановку Pico.
Но проще всего подключить Pico к макетной плате, а для этого вам понадобятся штыревые вилки. Для их установки на Raspberry Pi Pico потребуется
паяльник, с помощью которого нужно нагреть штырьки и контакты, а затем
крепко соединить с помощью мягкого металлического сплава – припоя.
Для ознакомительных проектов, описанных в этой главе, вам не нужно припаивать какие-либо вилки к Pico. Если же вы захотите собирать более сложные
проекты, обратитесь к главе 1, чтобы узнать, как правильно припаивать контакты. Вы также можете приобрести в магазине электроники модель Raspberry
Pi Pico с уже припаянными штыревыми вилками. К таким моделям относятся
версии Raspberry Pi Pico H и Raspberry Pi Pico WH, обычная и с модулем беспроводной сети соответственно.
230
Глава 9. Модели Raspberry Pi Pico и Pico W
Установка MicroPython
Как и Raspberry Pi, модель Raspberry Pi Pico тоже программируется с помощью
сценариев на языке Python. Однако поскольку это микроконтроллер, а не одноплатный компьютер, для него нужна специальная версия языка программирования – MicroPython.
Язык MicroPython аналогичен обычному Python, и вы даже можете использовать ту же среду разработки Thonny, что и при программировании Raspberry
Pi. Но в MicroPython отсутствуют одни возможности обычного Python и присутствуют другие, например специальные библиотеки для программирования
микроконтроллеров и их периферийных устройств.
Прежде чем программировать Pico с помощью MicroPython, необходимо загрузить и установить прошивку. Сначала подключите кабель micro-USB к порту
micro-USB платы Pico – убедитесь, что подсоединяете его правильной стороной, а затем аккуратно вставьте до упора.
Внимание!
Чтобы установить MicroPython на Pico, нужно сначала загрузить его из
интернета. Это нужно сделать однократно: после установки MicroPython
останется в памяти Pico, пока вы не перезапишете его.
Нажав и удерживая кнопку BOOTSEL на плате Pico, подключите свободный
конец кабеля micro-USB к одному из портов USB на компьютере. Досчитайте до
трех, а затем отпустите кнопку.
Примечание
В операционной системе macOS при подключении Pico к компьютеру может появиться запрос Allow accessory to connect (Разрешить подключение
аксессуаров). Вам нужно нажать кнопку Allow (Разрешить), чтобы разрешить операцию. После установки MicroPython на Pico в операционной
системе macOS такой запрос может появиться во второй раз, поскольку
микроконтроллер будет определен как другое устройство.
Через несколько секунд Pico определится на компьютере как съемный диск,
как если бы вы подключили USB-флешку или внешний жесткий диск. В операционной системе Raspberry Pi OS появится диалоговое окно с запросом, хотите ли вы открыть диск в файловом менеджере. Выберите пункт Open in File
Manager (Открыть в файловом менеджере) и нажмите кнопку OK.
В окне файлового менеджера вы увидите два файла в памяти Pico (рис. 9-9):
INDEX.HTM и INFO_UF2.TXT. Второй файл содержит информацию о вашем
экземпляре Pico, в частности версию загрузчика, с которым плата запущена
в данный момент. Первый файл, INDEX.HTM, содержит ссылку на веб-сайт
Raspberry Pi Pico. Дважды щелкните по этому файлу или откройте веб-браузер
и введите в адресную строку адрес rptl.io/microcontroller-docs.
Установка MicroPython 231
Рис. 9-9. Вы увидите два файла в памяти Raspberry Pi Pico
На открывшейся странице вы увидите информацию о микроконтроллерах и
программируемых контроллерах Raspberry Pi, в т. ч. Raspberry Pi Pico и Pico W.
Выберите пункт MicroPython, чтобы перейти на страницу загрузки прошивки.
Прокрутите страницу вниз до раздела с надписью Drag-and-Drop MicroPython,
как показано на рис. 9-10, и найдите ссылку на версию прошивки MicroPython
для вашей платы. Доступны прошивки для моделей Raspberry Pi Pico/Pico H и
Raspberry Pi Pico W/Pico WH. Выберите нужную, щелкнув мышью по соответствующей ссылке, и загрузите файл формата UF2. Если вы случайно загрузили
неправильный файл, не волнуйтесь: вы можете вернуться на эту страницу в
любой момент и прошить устройство с помощью корректной прошивки.
Рис. 9-10. Щелкните мышью по нужной ссылке
для загрузки прошивки MicroPython
232
Глава 9. Модели Raspberry Pi Pico и Pico W
Откройте новое окно файлового менеджера, перейдите в папку с загруженными файлами и найдите среди них только что скачанный. Его имя будет
начинаться с символов rp2-pico или rp2-pico-w, после чего будет указана дата,
буквы/цифры, идентифицирующие разные сборки прошивки, а также расширение uf2.
Примечание
Чтобы найти папку с загруженными файлами в операционной системе
Raspberry Pi OS, запустите программу Файловый менеджер (File manager),
нажав на панели задач кнопку в виде малины и выбрав соответствующий
пункт в меню Стандартные (Accessories). Затем выберите пункт Downloads
в списке папок в левой части окна файлового менеджера. Возможно, вам
придется прокрутить список вниз, чтобы найти нужную папку, в зависимости от количества каталогов в вашей версии операционной системы
Raspberry Pi OS.
Нажав и удерживая кнопку мыши на файле UF2, перетащите его в окно другой открытой папки, расположенной на съемном накопителе вашего Pico. Перетащите указатель мыши на это окно и отпустите кнопку мыши, чтобы файл
был скопирован в память Pico, как показано на рис. 9-11.
Через несколько секунд значок накопителя Pico исчезнет из файлового менеджера, программы Проводник (Explorer) или Finder, а также может появиться предупреждение о том, что диск был извлечен. Не волнуйтесь, так и должно
быть!
Рис. 9-11. Перетащите файл прошивки MicroPython
в память Raspberry Pi Pico
Контакты на плате Pico 233
Перетащив файл прошивки MicroPython в память Pico, вы инициировали
запись прошивки в его внутреннюю память. Для выполнения этой операции
контроллер Pico выходит из специального режима, задействованного вами
нажатием кнопки BOOTSEL, записывает новую прошивку, а затем загружает
ее – таким образом, на вашем экземпляре Pico теперь поддерживается код
MicroPython.
Поздравляем: вы готовы приступить к программированию своего устройства Raspberry Pi Pico на языке MicroPython!
Дополнительные источники информации
Веб-страница, на которую ведет ссылка в файле INDEX.HTM, – это не
просто источник прошивок с MicroPython. На ней размещено множество
дополнительных ресурсов. Переходите по вкладкам и прокручивайте
страницу, чтобы получить доступ к руководствам, проектам и коллекции
databook – подборке подробной технической документации, охватывающей все: от внутреннего устройства микроконтроллера RP2040, на котором собран Pico, до его программирования на языках Python и C/C++.
Контакты на плате Pico
Контроллер Pico взаимодействует с аппаратным обеспечением через ряд контактов, расположенных по обеим его сторонам. Большинство из них задействуются как программируемые вводы/выводы (PIO), то есть их можно настроить
на работу в качестве ввода или вывода, и по умолчанию они не сконфигурированы, пока вы не делегируете им задачу. Некоторые контакты имеют дополнительные функции и альтернативные режимы работы с более сложным оборудованием; другие имеют конкретное назначение, обеспечивая, к примеру,
подачу электропитания.
40 контактов платы Raspberry Pi Pico промаркированы на оборотной стороне, а три из них также обозначены номерами на лицевой стороне платы:
контакты 1, 2 и 39. Благодаря этим трем меткам проще запомнить нумерацию
контактов: если на плату смотреть сверху (порт micro-USB при этом расположен вверху), контакт 1 расположен в левом верхнем углу. Контакт 19 находится
слева внизу, контакт 20 – справа внизу, а контакт 39 – второй в правом верхнем углу, выше него расположен немаркированный контакт 40. Маркировка на
оборотной стороне подробная, но вы не сможете ее увидеть, когда Pico будет
подключен к макетной плате!
На Raspberry Pi Pico контакты, как правило, маркируются согласно их функциям (рис. 9-12), а не по номерам. Контакты распределены по нескольким категориям, каждая из которых выполняет определенную функцию:
• 3V3 – источник питания 3,3 В, получаемый от входа VSYS. Этот источник
питания можно включать/выключать с помощью расположенного над
ним контакта 3V3_EN, который также выключает контроллер Pico;
234
Глава 9. Модели Raspberry Pi Pico и Pico W
Рис. 9-12. Контакты на плате Raspberry Pi Pico, лицевая сторона
• VSYS – источник питания ~2–5 В – контакт, напрямую подключенный
к внутреннему источнику питания Pico, который нельзя выключить, не
обесточив при этом Pico;
• VBUS – источник питания 5 В, получаемого от порта micro-USB платы
Pico, используемый для питания оборудования, которому требуется напряжение свыше 3,3 В;
• GND – заземление 0 В – контакт, используемый для замыкания цепи,
подключенной к источнику питания. Для удобства на плате Pico доступно несколько контактов GND в разных позициях;
• GPxx – контакты 'xx' интерфейса ввода/вывода общего назначения (GPIO), доступные для ваших проектов, обозначенные метками
GP0–GP28;
• GPxx_ADCx – контакты 'xx' интерфейса ввода/вывода общего назначения
(GPIO) с аналоговым входом 'x' – могут использоваться как аналоговые
входы, а также (каждый контакт) как цифровой вход или выход – но не
одновременно как вход/выход;
Подключение Thonny к Pico 235
• ADC_VREF – опорное напряжение аналого-цифрового преобразователя
(АЦП) – специальный входной контакт, определяющий опорное напряжение для всех аналоговых входов;
• AGND – заземление 0 В аналого-цифрового преобразователя (АЦП) –
специальный заземляющий контакт для использования с выводом
ADC_VREF;
• RUN – включение/выключение Pico – контакт RUN используется для
включения/отключения Pico с помощью другого микроконтроллера или
иного управляющего устройства.
Подключение Thonny к Pico
Начните с запуска программы Thonny: нажмите на панели задач кнопку в виде
малины, установите указатель мыши на пункт меню Программирование
(Programming) и щелкните мышью по значку Thonny Python IDE.
Подключив Pico к Raspberry Pi, щелкните мышью по надписи Local Python 3
в правом нижнем углу окна программы Thonny. В этом списке выбирается интерпретатор, отвечающий за обработку инструкций, которые вы вводите, и
превращающий их в код, поддерживаемый и запускаемый компьютером или
микроконтроллером. Обычно в качестве интерпретатора выступает среда
Python, запущенная на Raspberry Pi, но для запуска программ MicroPython на
Pico интерпретатор нужно сменить.
Найдите в открытом списке пункт MicroPython (Raspberry Pi Pico)
(рис. 9-13) и выберите его. Если такого пункта в списке нет, проверьте, правильно ли подключен кабель micro-USB к вашему контроллеру Pico и к Raspberry Pi
или другому компьютеру.
Требуемые знания в области программирования на Python
Для решения задач из этой главы предполагается, что вы знакомы со средой разработки Thonny и написанием простых программ на Python. Если
вы еще не сделали этого, проработайте проекты из главы 5, прежде чем
продолжить чтение.
Выбор интерпретатора
Выбранный интерпретатор определяет, где и как будет выполняться ваша
программа: в случае варианта MicroPython (Raspberry Pi Pico) программы
будут запускаться на Pico; вариант Local Python 3 означает, что программы будут выполняться на Raspberry Pi. Если вы обнаружили, что программы запускаются на ненадлежащем устройстве, первым делом проверьте,
какой интерпретатор выбран в программе Thonny!
236
Глава 9. Модели Raspberry Pi Pico и Pico W
Рис. 9-13. Выбор интерпретатора Python
Первая программа на MicroPython: Hello, World!
Вы можете проверить работу программы тем же способом, которым учились писать программы на Python на Raspberry Pi: запустив простую программу с приветствием. Сначала щелкните мышью в оболочке командной строки
Python в нижней части окна Thonny, чуть правее символов >>>, введите показанную ниже команду и нажмите клавишу Enter:
print("Hello, World!")
После нажатия клавиши Enter указанная программа будет мгновенно выполнена: интерпретатор Python выведет в той же оболочке сообщение «Hello, World!»
(рис. 9-14), как вы и просили. Так происходит потому, что оболочка напрямую
связана с интерпретатором MicroPython, запущенным на Pico, выводит вводимые вами инструкции и интерпретирует их содержимое. Данный интерактивный
режим аналогичен программированию Raspberry Pi: инструкции, введенные в
оболочку, выполняются немедленно, без задержек. Единственное отличие: они
передаются на Pico для выполнения, а полученный результат – в данном случае
сообщение «Hello, World!» – возвращается на Raspberry Pi для отображения.
Вам не обязательно программировать Pico (или Raspberry Pi) в интерактивном режиме. Щелкните мышью в области сценариев в центре окна Thonny и
снова напечатайте свою программу:
print("Hello, World!")
Когда вы нажмете клавишу Enter в этот раз, ничего не произойдет – только в области сценария курсор переместится на новую строку. Чтобы запустить
программу, нажмите кнопку
Thonny.
Выполнить (Run) на панели инструментов
Подключение Thonny к Pico 237
Рис. 9-14. Интерпретатор MicroPython выводит
в оболочке сообщение «Hello, World!»
Несмотря на то что это простая программа, рекомендуется завести привычку сохранять любые проекты. Перед запуском программы нажмите кнопку
Сохранить (Save) на панели инструментов Thonny. Вам будет предложено сохранить программу на «этот компьютер», то есть на Raspberry Pi или другой
компьютер, на котором запущена программа Thonny, либо на Raspberry Pi Pico
(рис. 9-15). Выберите пункт Raspberry Pi Pico, затем введите информативное
имя, например Hello World.py, и нажмите кнопку OK.
Рис. 9-15. Сохранение программы на Pico
238
Глава 9. Модели Raspberry Pi Pico и Pico W
Теперь нажмите кнопку
Выполнить (Run) на панели инструментов
Thonny. Программа автоматически запустится на Pico. Вы увидите два сообщения, появившихся в оболочке в нижней части окна Thonny:
>>> %Run -c $EDITOR_CONTENT
Hello, World!
Первая из этих строк – инструкция из программы Thonny, указывающая интерпретатору MicroPython в памяти Pico запустить код, находящийся в области
сценария (EDITOR_CONTENT). Вторая – вывод программы – сообщение, которое
вы хотите вывести с помощью MicroPython. Поздравляем: вы только что написали две программы на MicroPython, в интерактивном и сценарном режимах,
и успешно запустили их на своем Pico!
Остался еще один кусочек пазла: загрузить ранее сохраненную программу.
Закройте окно программы Thonny, нажав кнопку × в правом верхнем углу окна
в операционной системе Windows или Linux (в macOS кнопка × расположена в
левом верхнем углу окна), а затем снова запустите Thonny. На этот раз, вместо
Загрузить (Load).
того чтобы писать новую программу, нажмите кнопку
Появится запрос, где сохранена ваша программа – на «этом компьютере» либо
на Raspberry Pi Pico. Выберите пункт Raspberry Pi Pico, и вы увидите список
всех программ, которые вы сохранили в память Pico.
Программы в памяти Pico
Программы, сохраненные в память Pico с помощью Thonny, останутся там
до перезаписи. Таким образом, если вы отключите Pico от питания и подключите к другому компьютеру, ваши программы будут доступны на нем
для запуска или копирования/изменения.
Найдите в списке файл Hello_World.py – если вы только начали работать с
Pico, он будет один в списке. Щелкните по файлу мышью, чтобы выбрать его, а
затем нажмите кнопку OK. Выбранная программа загрузится в Thonny и будет
готова к редактированию или повторному запуску.
Задача: новое сообщение
Можете ли вы изменить сообщение, которое программа Python выводит
на экран? Чтобы добавить новое сообщение, вы будете использовать
интерактивный режим или сценарный? Что произойдет, если вы удалите
из кода программы скобки либо кавычки, а затем попытаетесь запус
тить ее?
Подключение Thonny к Pico 239
Первая программа для физических вычислений:
Hello, LED!
По аналогии, как вывод на экран слов «Hello, World» – обычная практика
при изучении языка программирования, включение/отключение светодиода – традиционный ритуал при освоении физических вычислений на новой
платформе. Это решаемо без дополнительных компонентов: на самой плате
Raspberry Pi Pico есть маленький светодиод поверхностного монтажа (SMD).
Сначала найдите светодиод: это небольшой прямоугольный компонент с
меткой LED слева от порта micro-USB в верхней части платы (рис. 9-16).
Рис. 9-16. Встроенный светодиод расположен
слева от разъема micro-USB
Встроенный светодиод подключен к контакту GP25 ввода/вывода общего
назначения RP2040. Это один из «пропущенных» контактов GPIO, предусмот
ренных микроконтроллером RP2040, но не выведенных физически на плате
Pico. Хотя вы не можете подключить к нему иные компоненты (кроме встроенного светодиода), им можно программно управлять так же, как и любым другим контактом GPIO. Это простой способ поэкспериментировать с выводом
программ без дополнительных компонентов.
Нажмите кнопку
Новое (New) на панели инструментов Thonny и начните программу со следующей строки:
import machine
Эта короткая строка кода – одна из важнейших при работе с MicroPython
на Pico. Данная команда загружает, точнее импортирует, подборку кода на
MicroPython, известную как библиотека, – в нашем случае библиотека machine.
Она содержит все инструкции, необходимые MicroPython для взаимодействия
240
Глава 9. Модели Raspberry Pi Pico и Pico W
с Pico и другими MicroPython-совместимыми устройствами, открывая доступ к
командам для физических вычислений. Без этой строки вы не сможете управлять контактами GPIO контроллера Pico и, соответственно, подать питание на
встроенный светодиод.
Библиотека machine предоставляет так называемый интерфейс программирования приложений (API). Непонятное на первый взгляд название описывает
предназначение библиотеки: она предоставляет вашей программе (приложению) способ взаимодействия с Pico через интерфейс.
В следующей строке программы приведен пример кода API библиотеки
machine:
led_onboard = machine.Pin("LED", machine.Pin.OUT)
В строке определяется объект led_onboard с подходящим именем, по которому вы можете обращаться к встроенному светодиоду в вашей программе. Вы
можете указать любое имя, но лучше, если оно будет описывать предназначение переменной, чтобы код программы было проще понять.
Во второй части строки вызывается функция Pin библиотеки machine. Эта
функция, как можно догадаться по ее имени, предназначена для работы с контактами GPIO Pico. На данный момент ни один из контактов GPIO – в том числе
GP25 со встроенным светодиодом – не настроен. Первый аргумент, LED, – это
имя, присваиваемое встроенному светодиоду, которое вы можете использовать вместо номера соответствующего контакта. Второй аргумент, machine.
Pin.OUT, настраивает данный контакт Pico как вывод, а не ввод.
Этой строки достаточно для настройки контакта в качестве вывода, но при
этом светодиод не загорится. Для этого вам нужно указать контроллеру Pico,
чтобы он подал электропитание на вывод. Поэтому введите показанный ниже
код в следующей строке:
led_onboard.value(1)
Эта строка также задействует API библиотеки machine. В предыдущей строке
был создан объект led_onboard с именем LED, используемый в качестве вывода
на контакте GP25. В следующей строке кода объекту присваивается значение
в 1 в качестве «включенного» состояния. Вы также можете присвоить значение 0, означающее «выключенное» состояние.
Номера контактов
Для обозначения контактов GPIO контроллера Pico обычно используются их полные имена: GP25, скажем, для контакта, к которому подключен
встроенный светодиод. При этом важно отметить, что в MicroPython буквы G и P опускаются – поэтому если вы обращаетесь к контакту светодиода по номеру, а не имени, пишите в своей программе 25, а не GP25, иначе
код не будет работать!
Подключение Thonny к Pico 241
Нажмите кнопку
Выполнить (Run) и сохраните программу на Pico под
именем Blink.py. Вы увидите, как загорится светодиод. Поздравляем: вы написали свою первую программу для физических вычислений!
Но светодиод продолжает гореть. Так происходит потому, что программа
инструктирует Pico только включить его и не просит выключить. Вы можете
добавить следующую строку в конец кода программы:
led_onboard.value(0)
Запустите программу. Хм, на этот раз светодиод, похоже, так и не загорелся. Такой эффект возник потому, что Pico переключает подачу электропитания
очень и очень быстро – гораздо быстрее, чем вы можете увидеть невооруженным глазом. Светодиод загорается, но на столь короткое время, что кажется,
что он остается погасшим. Чтобы это исправить, нужно замедлить работу программы, добавив задержку.
Вернитесь в начало программы: щелкните мышью, чтобы установить текстовый курсор в конец первой строки, затем нажмите клавишу Enter для перехода на новую (вторую) строку. В этой строке введите:
import utime
Как и import machine, эта строка импортирует новую библиотеку в
MicroPython: библиотеку utime. Эта библиотека управляет временем, от его измерения до добавления задержек в программы.
Щелкните мышью в конце строки led_onboard.value(1), затем нажмите клавишу Enter, чтобы добавить новую строку. Введите на ней:
utime.sleep(5)
Данная инструкция вызывает функцию sleep из библиотеки utime, приостанавливающую работу программы на указанное количество секунд: в данном
случае пять.
Выполнить (Run). На этот раз вы увидите, как
Снова нажмите кнопку
встроенный светодиод на вашем Pico загорелся на пять секунд, а затем погас.
Utime или time?
Если вы уже программировали на Python, то привыкли использовать
библиотеку time. Библиотека utime – это ее версия, разработанная для
микроконтроллеров типа Pico. Буква «u» означает «μ», греческую букву, используемую для краткой записи слова «micro». Если вы по ошибке
укажете команду import time, не волнуйтесь: MicroPython автоматически
импортирует библиотеку utime вместо time.
Наконец, пришло время настроить мигание светодиода. Для этого нужно создать цикл. Перепишите код программы так, как показано ниже:
242
Глава 9. Модели Raspberry Pi Pico и Pico W
import machine
import utime
led_onboard = machine.Pin(LED, machine.Pin.OUT)
while True:
led_onboard.value(1)
utime.sleep(5)
led_onboard.value(0)
utime.sleep(5)
Помните, что строки внутри цикла должны иметь отступ в четыре пробела, чтобы MicroPython определил их как цикл. Снова нажмите кнопку
Выполнить (Run), и вы увидите, как светодиод включается на пять секунд, затем
выключается на пять секунд – и так по кругу в бесконечном цикле. Светодиод
будет мигать до тех пор, пока вы не нажмете кнопку
Остановить (Stop),
чтобы завершить программу и перезагрузить Pico.
Есть и другой способ справиться с той же задачей: использовать переключатель, а не настраивать контакт светодиода как 0 или 1 явно. Удалите последние
четыре строки кода из программы и замените их следующими:
import machine
import utime
led_onboard = machine.Pin(LED, machine.Pin.OUT)
while True:
led_onboard.toggle()
utime.sleep(5)
Запустите программу. Вы увидите то же поведение, что и раньше: встроенный светодиод загорается на пять секунд, затем гаснет на пять секунд, потом
снова загорается и так далее в бесконечном цикле. Однако на этот раз код программы стал на две строки короче: вы его оптимизировали. Функция toggle(),
поддерживающая все цифровые выводы, просто переключает их состояния:
если вывод включен, функция toggle() выключает его; и наоборот.
Задача: изменение длительности свечения
Как изменить программу, чтобы светодиод горел дольше? А как сделать
так, чтобы он дольше оставался погасшим? Какую наименьшую задержку
вы сможете указать в программе мигания светодиода?
Поздравляем: вы узнали, что такое микроконтроллер, как подключить
Raspberry Pi Pico к Raspberry Pi, как писать программы на MicroPython и как
мигать встроенным светодиодом Pico, управляя соответствующим контактом!
Подключение Thonny к Pico 243
Вы сможете узнать о Raspberry Pi Pico гораздо больше: использовать его с
макетной платой, подключать дополнительное оборудование, такое как светодиоды, кнопки, датчики движения и дисплеи, и даже использовать такие
расширенные возможности, как аналого-цифровые преобразователи (АЦП) и
программируемые вводы/выводы (PIO). И это без учета подключения к сети,
открывающей возможности интернета вещей (IoT).
Чтобы узнать больше, обратите внимание на книгу «Get started with
MicroPython on Raspberry Pi Pico».
Приложение
А
Установка операционной
системы на microSD-карту
MicroSD-карты с предустановленной ОС Raspberry Pi можно приобрести в магазинах электроники, поэтому вы сможете быстро и легко начать работу с
Raspberry Pi. Кроме того, такие microSD-карты также входят в комплект наборов Raspberry Pi Desktop Kit и Raspberry Pi 400.
Если вы хотите самостоятельно установить операционную систему на
microSD-карту, вам понадобится программа Raspberry Pi Imager. Если вы пользуетесь моделью Raspberry Pi 4, Raspberry Pi 400 или Raspberry Pi 5, дополнительно можете загрузить и установить операционную систему непосредственно на свое устройство.
Внимание!
Если вы приобрели microSD-карту с уже предустановленной операционной системой Raspberry Pi OS, вам просто нужно подключить карту
к Raspberry Pi. Наши инструкции предназначены для тех, кто приобрел
новую microSD-карту, или тех, кто хочет заново развернуть операционную систему на имеющуюся карту памяти. Если следовать инструкциям,
указанным в этой главе, а карта microSD содержит какие-либо файлы, это
приведет к потере всех данных. Поэтому для начала сделайте резервную
копию!
Загрузка Raspberry Pi Imager
Raspberry Pi OS – официальная операционная система для Raspberry Pi, основанная на дистрибутиве Debian. Самый простой способ установить Raspberry Pi
OS на microSD-карту – использовать приложение Raspberry Pi Imager, опубликованное на сайте rptl.io/imager.
Приложение Raspberry Pi Imager доступно для компьютеров под управлением операционной системы Windows, macOS и Ubuntu Linux, поэтому при
загрузке выберите соответствующую версию для вашей операционной систе-
246
Приложение А. Установка операционной системы на microSD-карту
мы. Если у вас нет компьютера кроме Raspberry Pi, посетите страницу документации «Install over the network» по адресу clck.ru/39hKHx, чтобы узнать,
можно ли развернуть операционную систему непосредственно на Raspberry Pi.
Если такой возможности нет, вам следует приобрести в магазине электроники
microSD-карту с уже установленной операционной системой или попросить
друга установить систему на вашу microSD-карту.
В операционной системе macOS дважды щелкните мышью по загруженному
DMG-файлу. Возможно, вам потребуется изменить настройки конфиденциальности и безопасности, чтобы разрешить запуск приложений, загруженных из
App Store и идентифицированных разработчиков. Затем можно перетащить
значок Raspberry Pi Imager в папку Applications.
На компьютере под управлением операционной системы Windows дважды
щелкните мышью по загруженному EXE-файлу. При появлении запроса системы безопасности нажмите кнопку Да (Yes), чтобы разрешить открытие файла.
Затем нажмите кнопку Установить (Install), чтобы начать установку.
В операционной системе Ubuntu Linux дважды щелкните мышью по загруженному DEB-файлу, чтобы открыть центр программного обеспечения с выбранным пакетом, а затем следуйте инструкциям на экране для установки
Raspberry Pi Imager.
Теперь вы можете подключить microSD-карту к компьютеру. Вам понадобится USB-адаптер, если в вашем компьютере нет встроенного кардридера – во
многих ноутбуках он есть, чего не скажешь о настольных компьютерах. Обратите внимание, что microSD-карту не требуется предварительно форматировать.
Запустите приложение Raspberry Pi Imager, а затем перейдите к разделу
«Запись ОС на microSD-карту».
Запуск Raspberry Pi Imager по сети
На моделях Raspberry Pi 4 и Raspberry Pi 400 реализована возможность запус
кать Raspberry Pi Imager независимо, загрузив его по сети, без необходимости
использовать отдельный настольный или портативный компьютер.
Внимание!
На момент написания книги функция установки операционной системы
через сеть была недоступна на модели Raspberry Pi 5. Внедрение поддержки планируется в будущем обновлении загрузчика.
Чтобы запустить Raspberry Pi Imager через сеть, вам понадобится плата Raspberry Pi, пустая microSD-карта, клавиатура (за исключением модели
Raspberry Pi 400), телевизор или монитор, а также кабель Ethernet, подключенный к модему или маршрутизатору. Обратите внимание, что установка через
беспроводное Wi-Fi-соединение не поддерживается.
Вставьте пустую microSD-карту в слот microSD платы Raspberry Pi, подключите клавиатуру, кабель Ethernet и адаптер питания к разъему USB. Если вы
Запись ОС на microSD-карту
247
вставили ранее использовавшуюся microSD-карту, удерживайте клавишу Shift
на клавиатуре во время загрузки Raspberry Pi, чтобы загрузить программу
установки; если microSD-карта изначально пуста, программа установки загрузится автоматически.
Когда появится экран программы установки, нажмите и удерживайте клавишу Shift, чтобы начать процесс установки. Программа установки автоматически загрузит подходящую версию Raspberry Pi Imager и установит ее на
Raspberry Pi, как показано на рис. A-1. После загрузки вы увидите экран, аналогичный автономной версии Raspberry Pi Imager, с элементами выбора операционной системы и накопителя для установки.
Рис. A-1. Установка Raspberry Pi OS через сеть
Запись ОС на microSD-карту
Нажмите кнопку Устройство Raspberry Pi (Choose Device), чтобы выбрать
модель Raspberry Pi. Появится экран, показанный на рис. A-2. Найдите свою
модель Raspberry Pi в списке и выберите ее. Далее нажмите кнопку Операционная система (Choose OS), чтобы выбрать операционную систему, которую
следует установить, и появится экран, показанный на рис. A-3.
В верхней части списка указана стандартная версия Raspberry Pi OS с рабочим столом – она нам и нужна. Если вы предпочитаете урезанную версию Lite
или расширенную версию (Raspberry Pi OS с рабочим столом и рекомендуемым
программным обеспечением), выберите вариант Raspberry Pi OS (other).
Вы также можете прокрутить список вниз, чтобы просмотреть операционные системы сторонних производителей, совместимые с Raspberry Pi. В зависимости от модели Raspberry Pi содержимое списка может быть различно, от
универсальных операционных систем, таких как Ubuntu Linux и RISC OS Pi, до
мультимедийных, предназначенных для домашних развлечений, игр, эмуляции устройств, 3D-печати, цифровой подписи документов и т. д.
В нижней части списка вы увидите пункт Очистить (Erase); он отформатирует вашу microSD-карту и уничтожит все данные на ней.
248
Приложение А. Установка операционной системы на microSD-карту
Рис. A-2. Выбор модели Raspberry Pi
Рис. A-3. Выбор операционной системы
32- или 64-битная операционная система?
После выбора модели Raspberry Pi вам будут предложены дистрибутивы, совместимые с вашей моделью. Если среди вариантов доступен пункт
Raspberry Pi OS (64-bit), как в случае с Raspberry Pi 4, так и Raspberry Pi
5, выбирайте именно его, если только у вас нет острой необходимости в
установке 32-битной версии операционной системы.
Запись ОС на microSD-карту
249
Если вам нужна операционная система, которой нет в списке, вы также можете установить ее с помощью Raspberry Pi Imager. Предварительно перейдите
на сайт нужной операционной системы, загрузите дистрибутив, а затем выберите вариант Пользовательский (Use custom) в нижней части списка Операционная система (Choose OS).
Выбрав операционную систему, нажмите кнопку Запоминающее устройство (Choose Storage) и выберите свою microSD-карту. Обычно она представлена единственным устройством хранения данных в списке. Если в списке
перечислено несколько устройств – часто так происходит, если к компьютеру
подключено несколько microSD-карт или USB-флешек, – будьте крайне внимательны и выберите правильное устройство, иначе вы можете отформатировать не тот диск и потерять все свои данные. Если вы сомневаетесь, закройте Raspberry Pi Imager, отсоедините все съемные накопители, кроме целевой
microSD-карты, и снова запустите Raspberry Pi Imager.
Наконец, нажмите кнопку Далее (Next), и вам будет предложено настроить
операционную систему. Если вы используете версию Lite, вам нужно выполнить настройку, чтобы указать имя пользователя, пароль, выбрать беспровод
ное сетевое соединение и многое другое без необходимости подключения клавиатуры, мыши и монитора.
Далее в окне Raspberry Pi Imager появится запрос на подтверждение, нужно
ли записывать данные на SD-карту, и после нажатия кнопки Да (Yes) начнется
процедура записи. Дождитесь окончания процесса записи и верификации выбранного дистрибутива операционной системы на карту. По завершении извлеките microSD-карту из разъема настольного или портативного компьютера
и вставьте ее в Raspberry Pi для загрузки записанной операционной системы.
Если вы развернули новую ОС непосредственно в память Raspberry Pi через
сеть, выключите и вновь включите Raspberry Pi, чтобы загрузить новую операционную систему.
Прежде чем извлекать microSD-карту или выключать Raspberry Pi, обязательно убедитесь, что процесс записи завершен. Если процесс записи будет
прерван, новая операционная система не будет работать должным образом.
Если это все же произошло, запустите процесс записи снова, чтобы заменить
поврежденную ОС рабочей копией.
Приложение
Б
Установка и удаление
программного обеспечения
Вместе с Raspberry Pi OS для Raspberry Pi устанавливается несколько популярных программ, тщательно отобранных организацией Raspberry Pi Foundation.
Это не единственная подборка программ, которая доступна на Raspberry Pi.
Выполняя указанные в данном приложении инструкции, вы можете просмотреть дополнительное программное обеспечение, установить его и при необходимости удалить, тем самым изменяя и расширяя возможности Raspber
ry Pi.
Указанные здесь инструкции дополняют инструкции из главы 3, где объясняется, как правильно использовать программу Recommended Software.
Просмотр доступного программного
обеспечения
Чтобы просмотреть список доступных для Raspberry Pi OS пакетов программного обеспечения, воспользуйтесь так называемым репозиторием ПО. Для
этого нажмите на панели задач кнопку в виде малины и в разделе Парамет
ры (Preferences) меню выберите пункт Add/Remove Software. Через несколько секунд перед вами откроется окно программы Add/Remove Software
(рис. Б-1).
В левой части окна программы Add/Remove Software расположен перечень
категорий, схожих с теми, что доступны в главном меню, открывающемся при
нажатии на панели задач кнопки в виде малины.
Выбрав одну из категорий, вы увидите список приложений программного
обеспечения, доступного в этой категории. Вы также можете воспользоваться
поиском, введя, например, «text editor» или «game» в поле, расположенном в
левом верхнем углу окна. Тогда вы увидите список соответствующих определенной категории программ. При нажатии на любую программу внизу окна
появляется дополнительная информация (рис. Б-2).
252
Приложение Б. Установка и удаление программного обеспечения
Рис. Б-1. Окно программы Add/Remove Software
Рис. Б-2. Дополнительная информация о выбранном пакете
Установка программ 253
Если выбранная вами категория содержит большое количество доступных
приложений, то для завершения операции приложению Add/Remove Software
может потребоваться некоторое время.
Установка программ
Чтобы выбрать желаемый программный пакет, который вы хотите установить,
поставьте рядом с ним флажок, щелкнув по названию пакета. Вы можете установить сразу несколько пакетов. Для этого отмечайте их флажками, тем самым
добавляя их в очередь загрузки. Значок рядом с пакетом изменится – он примет вид открытой коробки со знаком «+» (рис. Б-3). Это означает, что пакет
готов к загрузке.
Рис. Б-3. Выбор пакета для установки
После того как вы выбрали все необходимые вам программы, нажмите
кнопку OK или Apply (Применить). Единственная разница между ними заключается в том, что нажатие кнопки OK закрывает окно приложения Add/Remove
Software, после того как выбранное программное обеспечение установлено, в
то время как нажатие кнопки Apply (Применить) оставляет окно программы
открытым. Вам будет предложено ввести пароль для подтверждения учетной
записи (рис. Б-4). Вы ведь не хотите, чтобы посторонний человек мог скачивать или удалять программы на вашем Raspberry Pi!
254
Приложение Б. Установка и удаление программного обеспечения
Рис. Б-4. Ввод пароля для аутентификации
Вы, возможно, заметили, что при установке одного пакета также устанавливаются еще несколько. Это – зависимости, т. е. программы и компоненты,
необходимые для работы выбранного и скачанного вами пакета. Например:
набор звуковых эффектов для скачанной игры или базы данных для веб-сервера и т. д.
После того как вы скачали приложение, вы можете запустить его. Откройте
меню, нажав на панели задач кнопку в виде малины, и найдите категорию, к
которой относится установленное ПО (рис. Б-5). Учтите, что категории в меню
не всегда совпадают с категориями в окне программы Add/Remove Software.
Некоторые программы вообще недоступны из меню операционной системы.
Такие приложения носят название консольных. Запускаются они обычно с
помощью оболочки командной строки, программы Терминал. Для получения
дополнительной информации о работе с командной строкой и программой
Терминал перейдите к приложению В.
Удаление программ 255
Рис. Б-5. Выбор установленного программного обеспечения
Удаление программ
Чтобы выбрать пакет для удаления, или деинсталляции, найдите его в списке
программ (удобнее всего здесь воспользоваться функцией поиска) и сбросьте
флажок рядом с ним нажатием кнопки мыши. Вы можете удалить сразу несколько пакетов, для этого сбросьте соответствующие флажки. Значок, расположенный рядом с пакетом, изменится и станет похож на открытую коробку,
рядом с которой находится небольшая корзина. Такой значок указывает на то,
что программа будет удалена (рис. Б-6).
Нажмите кнопку OK или Apply (Применить) для запуска процесса удаления
выбранных программ. Вам потребуется ввести пароль, если вы не вводили его
в течение последних нескольких минут, а также подтвердить, что вы действительно хотите удалить все зависимости, относящиеся к выбранному для удаления пакету (рис. Б-7). После завершения деинсталляции значки удаленных
программ исчезнут из меню операционной системы. При этом файлы, созданные посредством этих программ (например, изображения для графического
пакета или сохранения игр), останутся.
256
Приложение Б. Установка и удаление программного обеспечения
Рис. Б-6. Выбор пакета для удаления
Рис. Б-7. Окно с подтверждением удаления зависимостей
Удаление программ 257
Внимание!
Любое программное обеспечение, установленное на Raspberry Pi OS, отображается в окне программы Add/Remove Software, включая ПО, необходимое для запуска самой операционной системы Raspberry Pi OS. Вы можете случайно удалить системные программы, необходимые для работы
Raspberry Pi OS. Поэтому не удаляйте программы, если вы сомневаетесь
в их предназначении. Если же вы все-таки ошибочно удалили системную
программу, переустановите операционную систему Raspberry Pi OS, воспользовавшись инструкциями из приложения A.
Приложение
В
Интерфейс
командной строки
Как вы уже знаете, большинство программ доступны в операционной системе
Raspberry Pi OS в графическом интерфейсе. Но некоторые поддерживают лишь
текстовый интерфейс, известный как интерфейс командной строки (CLI), и доступны для запуска в приложении под названием Terminal (Терминал). В большинстве случаев пользователям редко приходится обращаться за помощью к
интерфейсу командной строки. Однако для тех, кто хочет узнать больше, мы
подготовили это приложение, являющееся небольшим введением.
Загрузка программы Терминал
Доступ к интерфейсу командной строки осуществляется через терминал, программу, которая загружает инструмент, получивший название виртуального
терминала (VTY – virtual teletype). Название произошло еще на раннем этапе
появления компьютеров, когда пользователи задавали команды посредством
их ввода на большой электромеханической печатной машинке, а не клавиатуре и мониторе. Чтобы загрузить терминал, нажмите на панели задач кнопку
в виде малины, откройте меню Стандартные (Accessories) и выберите пункт
Terminal (Терминал). Окно терминала показано на рис. В-1.
Окно терминала можно перемещать по рабочему столу, изменять его размер, разворачивать и уменьшать так же, как и любое другое окно. Если вам
плохо видно текст, вы можете увеличить шрифт, если же вы хотите уместить
больше информации в окне, то наоборот – уменьшить. Для этого в меню Правка (Edit) выберите пункт Приблизить (Zoom In) или Отдалить (Zoom Out) соответственно. Также вы можете нажать на клавиатуре клавиши Ctrl и Shift и,
удерживая их, нажать клавишу + или –.
260
Приложение В. Интерфейс командной строки
Рис. В-1. Окно программы Terminal
Приглашение
Первая строка, которая отображается в окне терминала, – это приглашение.
После него вы можете вводить желаемые команды. На Raspberry Pi под управлением операционной системы Raspberry Pi OS эта строка выглядит следующим образом:
username@raspberrypi:~ $
Первая часть строки – username – это ваше имя пользователя. Вторая часть,
после @, – имя хоста/узла, используемого компьютером, которое по умолчанию
обозначается как raspberrypi. После : указан символ «тильда» ~, который представляет собой сокращение для ссылки на ваш домашний каталог и указывает
на текущий каталог. Наконец, символ $ указывает на то, что вы являетесь непривилегированным пользователем. Это означает, что для выполнения таких
задач, как добавление или удаление программ, вам необходимо ввести пароль
к учетной записи администратора или root-пользователя.
Навигация по каталогам
Введите следующую команду, а затем нажмите клавишу Enter:
cd Desktop
Вы увидите, что строка приглашения изменилась следующим образом:
username@raspberrypi:~/Desktop $
Навигация по каталогам 261
Она указывает нам на то, что текущий каталог изменился. Раньше вы находились в своем домашнем каталоге, обозначенном символом ~, а теперь находитесь в подкаталоге Desktop (Рабочий стол) вашего домашнего каталога. Для
смены каталога мы использовали команду cd (change directory), позволяющую
сменить каталог.
Правильный регистр
Интерфейс командной строки Raspberry Pi OS учитывает регистр. Это означает, что для программы очень важно, какими буквами (прописными
или строчными) записаны команды или имена. Если вы получили сообщение об ошибке «no such file or directory» при попытке сменить каталог,
проверьте, указана ли прописная буква D в начале слова Desktop.
Есть четыре команды, введя которые, вы сможете вернуться в свой домашний каталог. Попробуйте ввести по очереди каждую из них, после чего каждый
раз возвращайтесь обратно в подкаталог Desktop. Первая команда – это:
cd ..
Символы .. – еще одно сокращение. Оно обозначает «каталог уровнем
выше». Такой каталог получил название родительского каталога. Поскольку
каталог Desktop является домашним каталогом, эта команда вернет вас именно туда. Вернитесь в подкаталог Desktop и попробуйте вторую команду:
cd ~
В данном случае использование символа ~ означает «переход в домашний
каталог». В отличие от команды cd .., которая переносит вас в родительский
каталог, уровнем выше, из того каталога, в котором вы сейчас находитесь, эта
команда переносит вас из любого каталога в домашний. Однако есть еще более
простой способ:
cd
При вводе команды cd вам необязательно указывать имя каталога, в который
вам необходимо вернуться. Программа по умолчанию вернет вас в домашний
каталог. И последний способ вернуться в домашний каталог – ввести команду
(замените username на свое имя пользователя):
cd /home/username
В этой команде используется так называемый абсолютный путь, который
будет работать независимо от вашего текущего каталога. Как и команды cd или
cd ~, она вернет вас в ваш домашний каталог из любого каталога, в котором
бы вы ни находились. Однако, в отличие от других команд, при вводе этой вам
потребуется ввести имя пользователя.
262
Приложение В. Интерфейс командной строки
Работа с файлами
Потренируемся работать с файлами. Для этого перейдите в каталог Desktop и
введите следующее:
touch Test
На рабочем столе появится файл с именем Test. Команда touch обычно используется для обновления информации о дате и времени файла. Если, как в
нашем случае, файл отсутствует, то программа сначала создаст его. Введите
следующее:
cp Test Test2
Вы увидите, что на рабочем столе появится еще один файл – Test2. Это идентичная исходному файлу копия. Удалите его, введя
rm Test2
Вы заметите, что файл исчез. Файл удален.
Внимание!
В отличие от удаления файлов с помощью графического файлового менеджера, который переносит их в корзину для последующей очистки,
файлы, удаленные с помощью команды rm, исчезают безвозвратно. По
этому используйте данную команду с осторожностью!
Теперь введите следующее:
mv Test Test2
Эта команда задает команду переместить файл. Вы увидите, что исходный
файл Test исчез и его сменил файл Test2. Команду mv также можно использовать для переименования файлов.
Однако когда вы находитесь не на рабочем столе, вам все равно необходимо
иметь доступ к файлам, находящимся в каталоге. Введите следующее:
ls
Эта инструкция позволяет вывести на экран список содержимого текущего
каталога или любого другого каталога, который вы укажете. Для получения более подробной информации, например о выводе скрытых файлов или размеров файлов, добавим несколько параметров:
ls -larth
Эти параметры управляют командой ls: l представляет вывод в виде длинного вертикального списка; a отображает все файлы и каталоги, включая
Использование TTY-абстракции 263
скрытые; r обращает стандартный порядок сортировки; t сортирует файлы в
зависимости от даты/времени изменения, что в сочетании с r позволяет переносить наиболее старые файлы в верхнюю часть списка, а наиболее новые – в
нижнюю. Наконец, h изменяет формат отображения списка файлов так, чтобы
он был удобнее для прочтения человеком.
Запуск программ
Одни программы могут быть запущены только с помощью командной строки,
другие же – как через графический интерфейс, так через интерфейс командной строки. Примером последних является конфигуратор Raspberry Pi, который обычно запускается из меню операционной системы.
Чтобы запустить программу Software Configuration Tool, в командной строке
введите следующее:
raspi-config
Перед вами откроется окно с сообщением об ошибке, в котором говорится о том, что данное программное обеспечение может быть запущено только
от имени администратора, т. е. с помощью учетной записи суперпользователя
Raspberry Pi, поскольку вы отправили запрос от имени учетной записи непривилегированного пользователя. В окне также будет рассказано, как запустить
программу от имени администратора. Наберите следующее:
sudo raspi-config
Слово sudo расшифровывается как «switch-user do» и задает Raspberry Pi OS
команду повысить привилегии пользователя и запустить программу от имени
администратора. Появится окно программы Software Configuration Tool, как
показано на рис. В-2.
Необходимо использовать sudo только тогда, когда для выполнения команды требуются определенные привилегии пользователя, например когда вам
необходимо установить или удалить программное обеспечение либо внести
изменения в настройки системы. Игры, например, не следует запускать, используя sudo.
Дважды нажмите клавишу Tab, тем самым выбрав пункт Finish. Для закрытия окна конфигуратора Raspberry Pi нажмите клавишу Enter. Так вы вернетесь к интерфейсу командной строки. Теперь введите
exit
Эта команда завершит сеанс работы с интерфейсом командной строки, а
также закроет окно терминала.
Использование TTY-абстракции
Для того чтобы воспользоваться интерфейсом командной строки, вам необязательно работать в приложении терминала. Вы можете также подключиться
264
Приложение В. Интерфейс командной строки
к одному из уже работающих терминалов, получивших название телетайпов,
или TTY-абстракций. Нажав и удерживая клавиши Ctrl и Alt на клавиатуре,
нажмите клавишу F2, тем самым подключившись к «tty2» (рис. В-3).
Рис. В-2. Окно программы Software Configuration Tool
Рис. В-3. Пример TTY-абстракции
Сейчас вам нужно будет снова авторизоваться в системе, введя ваше имя
пользователя и пароль, после чего вы сможете воспользоваться интерфейсом
командной строки здесь точно так же, как и при использовании терминала.
Если по какой-либо причине вы не можете воспользоваться основным интерфейсом рабочего стола, работа с TTY окажется очень кстати.
Чтобы закрыть TTY, нажав и удерживая клавиши Ctrl+Alt, нажмите клавишу F7, и на экране снова появится рабочий стол. Снова нажмите сочетание
клавиш Ctrl+Alt+F2, тем самым переключившись обратно на «tty2». Обращаем
ваше внимание на то, что все ранее внесенные туда данные сохранятся.
Перед тем как повторно переключиться на рабочий стол, введите
exit
Чтобы вернуться на рабочий стол, нажмите сочетание клавиш Ctrl+Alt+F7.
Причина, что перед переключением с TTY на рабочий стол мы вводим exit,
Использование TTY-абстракции 265
заключается в том, что любой человек, имеющий доступ к клавиатуре, может
переключиться обратно на TTY. И если вы не вышли из системы, посторонний
пользователь сможет получить доступ к вашей учетной записи, и для этого ему
будет необязательно знать ваш пароль!
Поздравляем: вы начали постепенное освоение интерфейса командной
строки Raspberry Pi OS!
Приложение
Г
Дополнительные материалы
Данная книга вводит вас в процесс работы на Raspberry Pi. Естественно, это не
углубленный курс, и все, что мы с вами здесь разбирали, – лишь малая часть.
Пользователи Raspberry Pi проживают на всей территории земного шара, и
цели, для которых этот девайс предназначен, очень разнообразны. Воспользоваться Raspberry Pi можно как для игр и разработки различных устройств с
датчиками, так и для создания проектов, связанных с робототехникой и искусственным интеллектом. Главное – это ваше вдохновение.
В этом приложении вы познакомитесь с другими источниками идей для создания проектов или планов уроков, а также со множеством иных материалов,
которые окажутся следующей ступенью вашего обучения после ознакомления
с нашим руководством для начинающих.
Приложение Bookshelf
➯ Help ➯ Bookshelf
Рис. Г-1. Приложение Bookshelf
Приложение Bookshelf (рис. Г-1) в составе Raspberry Pi OS позволяет просматривать, загружать и читать цифровые материалы издательства Raspberry
268
Приложение Г. Дополнительные материалы
Pi Press. Загрузите это приложение, открыв меню Raspberry Pi, выбрав раздел
Help (Справка) и далее пункт Bookshelf. Изучите цифровые копии книг и журналов издательства, которые можно бесплатно загрузить и читать в свое удовольствие.
Новости Raspberry Pi
raspberrypi.com/news
Рис. Г-2. Раздел новостей сайта Raspberry Pi
На этом сайте по будням публикуются новые статьи, в том числе обзоры
новых микрокомпьютеров и компонентов Raspberry Pi, новости из мира программного обеспечения и проекты сообщества, а также издания Raspberry Pi
Press, включая журналы The MagPi и HackSpace Magazine (рис. Г-2).
Проекты Raspberry Pi
rpf.io/projects
Официальный сайт Raspberry Pi Projects содержит пошаговые руководства
для создания проектов различных типов (рис. Г-3). Это может быть как создание игр и музыки, так и разработка собственного веб-сайта или робота,
управляемого с помощью Raspberry Pi. Большинство проектов доступны на
нескольких языках и имеют различные уровни сложности. Именно поэтому
они подходят как для новичков, так и для опытных пользователей.
Образовательный ресурс Raspberry Pi 269
Рис. Г-3. Раздел проектов сайта Raspberry Pi
Образовательный ресурс Raspberry Pi
rpf.io/education
Рис. Г-4. Образовательный раздел сайта Raspberry Pi
Официальный образовательный сайт Raspberry Pi Education публикует новостные рассылки, онлайн-тренинги и различные проекты под руководством
преподавателей (рис. Г-4). Сайт также содержит ссылки на дополнительные
ресурсы, включая учебную программу Picademy, бесплатные программы кодирования Code Club и CoderDojo, а также международные мероприятия, проводимые группой Raspberry Jam.
270
Приложение Г. Дополнительные материалы
Форумы Raspberry Pi
rptl.io/forums
Рис. Г-5. Форумы на сайте Raspberry Pi
Raspberry Pi Forums – это то место, где поклонники Raspberry Pi могут поболтать обо всем (рис. Г-5). Это может быть как обсуждение проблем, с которыми
сталкиваются начинающие пользователи, так и обсуждение глубоко технических тем. Здесь даже существует специальная зона под названием «оффтоп»,
где пользователи могут отклониться от темы и просто поболтать!
Журнал MagPi
magpi.cc
Рис. Г-6. Сайт журнала MagPi
Журнал HackSpace 271
Официальный журнал MagPi – это ежемесячное издание, статьи которого
охватывают практически все темы (рис. Г-6). Это могут быть как обзоры на
учебники и руководства, так и статьи на различные темы и новости, поддерживаемые мировым сообществом Raspberry Pi. Найти этот журнал вы сможете в электронном формате бесплатно благодаря лицензионному соглашению
Creative Commons. Создатели журнала MagPi также опубликовали серию «буказинов», в которых рассматриваются темы узкой направленности, например
использование командной строки, самостоятельное создание электронных
проектов и др. – в приятном, удобном формате. Скачать вы их можете также
бесплатно благодаря лицензионному соглашению Creative Commons.
Журнал HackSpace
hsmag.cc
Рис. Г-7. Сайт журнала HackSpace
Журнал HackSpace ориентирован на более широкую аудиторию, чем MagPi
(рис. Г-7). Именно поэтому в его статьях создатели поднимают такие темы,
как обзоры аппаратного и программного обеспечения, учебных пособий и интервью. Если вы заинтересованы в расширении своих знаний, не касающихся
только лишь Raspberry Pi, то журнал Hackspace Magazine придется вам по душе.
Вы сможете скачать его бесплатно в цифровом виде.
Приложение
Д
Инструмент настройки
Raspberry Pi
Инструмент Raspberry Pi Configuration – это мощная программа для настройки
многочисленных параметров Raspberry Pi. Благодаря ему вы можете выбрать
доступные интерфейсы, сконфигурировать сетевые программы и настроить
многие другие параметры. Возможно, начинающих пользователей напугает
то количество информации, которое преподносит это приложение. Вы будете
ознакомлены с каждой из настроек и их предназначением по очереди.
Внимание!
Если вы не уверены в том, следует ли изменять ту или иную настройку, советуем оставить ее без изменений. Если вы подключаете новое
оборудование к Raspberry Pi, например аудиомодуль HAT или модуль
камеры, рекомендуем следовать инструкциям, которые подскажут вам,
какие именно настройки нужно изменить. В любом другом случае настройки, заданные по умолчанию, обычно следует оставлять без изменений.
Вы можете запустить инструмент Raspberry Pi Configuration, нажав на панели
задач кнопку в виде малины, перейдя в категорию Параметры (Preferences),
а затем щелкнув по значку приложения Raspberry Pi Configuration. Также
для его запуска вы можете воспользоваться интерфейсом командной строки
(терминалом), введя команду raspi-config. Внешний вид консольной версии
существенно отличается от интерфейса графической. Параметры отображаются в разных категориях, в зависимости от используемой вами версии. В данном
приложении мы поговорим о графической версии инструмента.
Вкладка System
Вкладка System (Система) содержит параметры, которые позволяют управлять
различными настройками Raspberry Pi OS (рис. Д-1).
274
Приложение Д. Инструмент настройки Raspberry Pi
Рис. Д-1. Вкладка System (Система)
• Password (Пароль): нажмите кнопку Change Password (Сменить пароль), чтобы сменить текущий пароль вашей учетной записи на новый.
• Hostname (Имя хоста): имя Raspberry Pi в сетевом окружении. Если вы
обладатель нескольких плат Raspberry Pi, подключенных к одной сети,
у каждой платы должно быть собственное имя хоста. Нажмите кнопку
Change Hostname (Изменить имя хоста), чтобы указать новое имя.
• Boot (Загрузка): установка этого переключателя в положение To Desktop
(В рабочий стол) (по умолчанию) загружает уже знакомый нам рабочий
стол Raspberry Pi OS. Установка этого переключателя в положение To CLI
(В CLI) загружает интерфейс командной строки, как описано в приложении В.
• Auto Login (Автоматический вход): если переключатель установлен в
активное положение (по умолчанию), рабочий стол Raspberry Pi OS загружается без необходимости ввода имени пользователя и пароля.
• Splash Screen (Заставка): если переключатель установлен в активное
положение (по умолчанию), сообщения о загрузке Raspberry Pi OS будут
скрыты за графической заставкой.
• Browser (Браузер): вы можете переключаться между браузерами Google
Chromium (по умолчанию) и Mozilla Firefox.
Вкладка System 275
Вкладка System
Вкладка System (Система) содержит параметры, которые позволяют управлять
различными настройками Raspberry Pi OS (рис. Д-2).
Рис. Д-2. Вкладка System (Система)
• Screen Blanking (Блокировка экрана) – этот переключатель позволяет
включать/отключать блокировку экрана. Если опция активна, Raspberry
Pi отключает экран через несколько минут после начала простоя мик
рокомпьютера. Данный параметр защитит телевизор/монитор от вероятных повреждений, вызываемых отображением статичного изображения в течение длительного времени.
• Headless Resolution (Разрешение без головного устройства) – параметр
определяет разрешение виртуального рабочего стола, когда вы используете Raspberry Pi без монитора или телевизора – так называемая работа
без головного устройства.
276
Приложение Д. Инструмент настройки Raspberry Pi
Вкладка Interfaces
Вкладка Interfaces (Интерфейсы) содержит настройки, изменяя которые, вы
сможете управлять доступными на Raspberry Pi аппаратными интерфейсами
(рис. Д-3).
Рис. Д-3. Вкладка Interfaces (Интерфейсы)
• SSH: включает/отключает интерфейс сетевого протокола Secure Shell
(SSH). С помощью клиента SSH вы сможете открыть интерфейс командной строки Raspberry Pi с другого компьютера, подключенного к вашей
сети.
• VNC: включает/отключает интерфейс Virtual Network Computing (VNC).
С помощью клиента VNC вы сможете просматривать рабочий стол
Raspberry Pi с другого компьютера, подключенного к вашей сети.
• SPI: включает/отключает последовательный периферийный интерфейс
(SPI, Serial Peripheral Interface), используемый для управления некоторыми аппаратными средствами, которые подключены к разъему GPIO.
• I2C: включает/отключает интерфейс последовательной шины данных
Inter-Integrated Circuit (I2C), используемой для управления некоторыми
аппаратными средствами, которые подключены к разъему GPIO.
• Serial Port (Последовательный порт): включает/отключает последовательный порт Raspberry Pi. Подключается к разъему GPIO.
• Serial Console (Консоль на последовательном порту): включает/отключает консоль на последовательном порту – интерфейс командной строки, доступный на последовательном порту. Эта опция доступна только в
Вкладка Performance
277
том случае, если для предыдущего параметра настроек задано значение
Enabled (Включено).
• 1-Wire: включает/отключает интерфейс 1-Wire, используемый для
управления некоторыми аппаратными средствами, которые подключены к разъему GPIO.
• Remote GPIO: включает/отключает сетевую службу, позволяющую
управлять разъемом GPIO Raspberry Pi с другого компьютера, подключенного к вашей сети, с помощью модуля GPIO Zero. Больше информации об удаленном управлении интерфейсом GPIO вы сможете найти,
перейдя по ссылке gpiozero.readthedocs.io.
Вкладка Performance
Вкладка Performance (Производительность) содержит настройки производительностью Raspberry Pi (рис. Д-4).
Рис. Д-4. Вкладка Performance (Производительность)
• Overlay File System (Виртуальная файловая система) – позволяет заблокировать файловую систему Raspberry Pi от изменений (только для
чтения), чтобы изменения вносились лишь на виртуальный диск в оперативной памяти, а не записывались на microSD-карту.
Модели Raspberry Pi, предшествующие Raspberry Pi 5, также могут допускать
следующие настройки:
• Case Fan (Корпусной вентилятор) – включает/отключает дополнительный охлаждающий вентилятор, подключенный к разъему GPIO
Raspberry Pi и предназначенный для охлаждения процессора в жаркой
среде или при экстремальной нагрузке. Совместимый вентилятор для
278
Приложение Д. Инструмент настройки Raspberry Pi
оригинального корпуса Raspberry Pi 4 можно приобрести на сайте rptl.
io/casefan.
• Fan GPIO (Вентилятор GPIO) – охлаждающий вентилятор обычно подключен к контакту 14 GPIO. Если к нему подключено другое устройство,
вы можете сменить контакт GPIO.
• Fan Temperature (Температура охлаждения) – минимальное значение
температуры в градусах Цельсия, при которой охлаждающий вентилятор должен включаться. Пока процессор Raspberry Pi не достигнет указанной температуры, вентилятор останется выключенным, обеспечивая тихую работу устройства.
Вкладка Localisation
Вкладка Localisation (Локализация) содержит настройки, отвечающие за установку региона, в котором используется Raspberry Pi (рис. Д-5). Сюда также
включена настройка раскладки клавиатуры.
Рис. Д-5. Вкладка Localisation (Локализация)
• Locale (Региональные настройки): позволяют установить ваши регио
нальные настройки – системные параметры, которые включают в себя
язык, страну и раскладку клавиатуры. Обратите внимание на то, что
изменение языка распространяется только на приложения, содержащие другие языки интерфейса. Кроме того, некоторые приложения дополнительно требуют изменения языка интерфейса в собственных настройках.
• Timezone (Часовой пояс): позволяет выбрать региональный часовой
пояс, выбрав город пользователя. Если ваш Raspberry Pi подключен к
сети, но часы показывают неправильное время, то обычно это связано с
неправильным выбором часового пояса.
Вкладка Localisation 279
• Keyboard (Клавиатура): позволяет выбрать тип клавиатуры, язык и раскладку. Если вы обнаружите, что при наборе текста на клавиатуре на
экран выводятся неверные буквы или символы, вы можете исправить
это в данном разделе настроек.
• Wireless LAN Country (Страна (беспроводная сеть)): позволяет определить параметры беспроводной сети в соответствии с законодательством
выбранной страны. Обязательно выберите именно ту страну, в которой
находится ваш компьютер Raspberry Pi, поскольку при выборе другой
страны подключение к близлежащим точкам доступа Wi-Fi может оказаться невозможным. Обращаем ваше внимание на то, что это может
стать нарушением закона «О средствах массовой информации». Прежде
чем воспользоваться беспроводной сетью Wi-Fi, выберите страну в данном разделе настроек.
Приложение
Е
Технические характеристики
Raspberry Pi
Различные компоненты и функциональные возможности компьютера сов
местно носят название технических характеристик. Получив информацию о
технических характеристиках компьютера, вы сможете сравнить между собой
два компьютера. На первый взгляд, вам может показаться, что эти характерис
тики очень трудны для понимания, ведь описаны они техническим языком и
абсолютно не нужны для простого использования Raspberry Pi. Однако для любознательных пользователей мы включили их в это приложение.
Raspberry Pi 5
Система на кристалле (SoC) Raspberry Pi 5 – это процессор Broadcom BCM2712.
Если вы присмотритесь, то сможете разглядеть эту надпись на металлической
крышке. Система на кристалле состоит из четырех 64-битных ядер центрального процессора (ЦП) ARM Cortex-A76, каждое из которых работает с частотой 2,4 ГГц, и графического процессора Broadcom VideoCore VII, работающего
с частотой 800 МГц, для выполнения задач, связанных с обработкой видео и
3D-графики (сюда относятся, например, игры).
Система на кристалле подключена к модулям оперативной памяти 4 ГБ или
8 ГБ типа LPDDR4X (Low-Power Double-Data-Rate – маломощная, с удвоением частоты следования данных). Ее частота составляет 4267 МГц. Эта память
используется как центральным, так и графическим процессором. Слот для
microSD-карт поддерживает накопители емкостью до 512 ГБ.
Порт Ethernet поддерживает скорость подключения до одного гигабита
(1000 Мбит/с, 1000-Base-T), а беспроводной модуль Wi-Fi поддерживает стандарт 802.11ac и работает в частотных диапазонах 2,4 ГГц и 5 ГГц. Также он поддерживает стандарты Bluetooth 5.0 и Bluetooth Low Energy (Bluetooth с низким
энергопотреблением) (BLE).
Плата Raspberry Pi 5 оснащена двумя портами USB 2.0 и двумя портами
USB 3.0 для подключения периферийных устройств. Еще имеется один высокоскоростной разъем PCI Express (PCIe) 3.0. С помощью дополнительного
HAT-адаптера этот разъем можно использовать для подключения высокоскоростных твердотельных накопителей M.2, ускорителей для машинного обучения (ML) и компьютерного зрения (CV) и прочего оборудования.
282
Приложение Е. Технические характеристики Raspberry Pi
Raspberry Pi 4 и 400
• Процессор: 64-битный четырехъядерный ARM Cortex-A72 (Broadcom
BCM2711) с частотой 1,5 ГГц или 1,8 ГГц (Raspberry Pi 400).
• Графический процессор: VideoCore VI с частотой 500 МГц.
• Оперативная память: 1 ГБ, 2 ГБ, 4 ГБ (Raspberry Pi 400) или 8 ГБ типа
LPDDR4.
• Сеть: 1 порт Gigabit Ethernet, двухдиапазонный 802.11ac, Bluetooth 5.0,
BLE.
• Аудио/видеовыходы: 1 аналоговый AV-разъем 3,5 мм (только Raspberry
Pi 4), 2 разъема micro-HDMI 2.0.
• Периферийные устройства: 2 разъема USB 2.0, 2 разъема USB 3.0,
1 разъем CSI (только Raspberry Pi 4), 1 разъем DSI (только Raspberry Pi 4).
• Хранилище: 1 microSD-карта емкостью до 512 ГБ (в набор с Raspberry
Pi 400 входит microSD-карта объемом 15 Гб).
• Питание: 5 В 3 А через разъем USB Type-C, PoE (с HAT-адаптером, только Raspberry Pi 4).
• Дополнения: 40-контактная штыревая вилка GPIO.
Raspberry Pi Zero 2 W
• Процессор: 64-битный четырехъядерный ARM Cortex-A53 (Broadcom
BCM2710) с частотой 1 ГГц.
• Графический процессор: VideoCore IV с частотой 400 МГц.
• Оперативная память: 512 МБ типа LPDDR2.
• Сеть: однодиапазонный 802.11b/g/n, Bluetooth 4.2, BLE.
• Аудио/видеовыходы: 1 mini-HDMI.
• Периферийные устройства: 1 разъем micro-USB OTG 2.0, 1 разъем CSI.
• Хранилище: 1 microSD-карта емкостью до 512 ГБ.
• Питание: 5 В 2,5 А через разъем micro-USB.
• Дополнения: 40-контактный разъем GPIO (без штыревой вилки).
Предметный указатель
диапазон выполнения команды 103
запуск программы 104
игра на реакцию 157
инерциальная система отсчета 193
интерфейс IDE Thonny 99
история 99
операторы 108
отступы 103
переменные 106
светоживопись 179
создание программы 100
трикордер 202
управление джойстиком 198
управление излучателем звука 149
управление кнопкой 146
управление светодиодом 140
условные конструкции 106
циклы 103
экологический мониторинг 187
A
Add/Remove Software 53, 251, 252,
253, 254, 255, 256, 257
Apple macOS 39, 55
Astro Pi 163
B
Bluetooth 16, 43, 281, 282
C
Chromium 46, 47, 48, 77, 117, 122
скачивание изображений 117
D
Debian Linux 39
DisplayPort 33
DVI-D 33
E
Ethernet-порт 18
G
GPIO 20
использование 129
описание 129
H
HDMI 19, 25, 26, 32, 33, 35, 195, 282
L
LibreOffice Base 55
LibreOffice Calc 55, 176
LibreOffice Draw 55
LibreOffice Impress 55
LibreOffice Math 55
LibreOffice Writer 53, 55
LXTerminal 212, 259, 260
M
MicroSD-карта 26
Microsoft Windows 39, 55
N
NOOBS 245
загрузка 245
P
Python
Sense HAT 172
R
Raspberry Pi 15
Ethernet-порт 18
HDMI 19
MicroSD-карта 26
Raspberry Pi OS 39
USB 17
выключение 58
графический процессор 16
зарядное USB-устройство 25
интегральная схема управления
питанием 16
история 13
клавиатура и мышь 26
композитный разъем 18
конфигурация 55
модуль беспроводной сети 16
модуль камеры 207
настройка 273
оперативная память 16
описание 13
подключение microSD-карты 30
подключение дисплея 32, 35
подключение к источнику
питания 33, 36
подключение сетевого кабеля 33, 36
разъем для наушников 18
ресурсы в интернете 267
сборка корпуса 27, 28
система на кристалле 16
технические характеристики 281
284
Предметный указатель
универсальная последовательная
шина 17
центральный процессор 16
Raspberry Pi 4 3
Raspberry Pi Foundation 39
Raspberry Pi OS
Raspberry Pi Configuration 55
выбор языка 39
выключение 58
инструмент Recommended Software 51
меню 46
навигация 42
окно приветствия 39
офисный пакет LibreOffice 54, 62
подключение к сети 44
получение справки 55
проверка обновлений 41
просмотр доступного программного
обеспечения 251
рабочий стол 42
удаление программ 257
установка и удаление программного
обеспечения 251
установка программ 253
файловый менеджер 48
Raspberry Pi Starter Kit 25, 27
Raspberry Pi Zero 13
raspistill 212
S
Scratch
Sense HAT 168
бенгальский огонек 200
версии 62
загрузка спрайтов 79
запуск программы 64
изменение фона 78
инерциальная система отсчета 192
использование костюмов 87
наложение музыки 90
операторы 73
переменные 70
перетаскивание блоков 64
светоживопись 176
светофор 150
события 89
создание программы 63
сохранение программы 64
управление джойстиком 196
управление излучателем звука 148
управление кнопкой 143
управление светодиодом 138
условные конструкции 70
циклы 68
экологический мониторинг 185
Scratch 3 61
знакомство с интерфейсом 61
Sense HAT 163
анимация 182
подключение 166
программирование 168
прокрутка сообщений 169
светоживопись 175
управление джойстиком 196
эмуляторы датчиков 184
T
TTY-абстракции 263
U
USB Type-C 16, 20, 25, 32, 33, 34,
35, 36, 282
W
Wi-Fi 16, 27, 40, 41, 57, 279, 281
А
акселерометр 165, 191
Б
бесконечный цикл 106
Г
гироскоп 165, 191, 195
графический процессор 16
Д
датчик влажности 165, 186
датчик давления 186
датчик измерения атмосферного
давления 165
датчик положения 165
датчик температуры 165, 187
З
запуск программ
в терминале 263
И
игра
скорость реакции космонавта 77
поиск страшных отличий 117
ролевой лабиринт 122
синхронное плавание 85
стрельба из лука 93
черепашьи подсолнухи 110
извлечение устройств 50
инерциальная система отсчета 191
инерциальный измерительный
блок 191
Предметный указатель 285
пространственные оси 191
интегральная схема управления
питанием 16
интернет-магазины 134
интерфейс командной строки 212, 259,
265
К
кнопка 133
комбинации клавиш 50
композитный разъем 18
крен 191
М
магнитометр 165 , 191
макетная плата 132, 133, 134, 141,
142, 148, 150, 157
использование 141
МКС 163
модуль беспроводной сети 16
модуль камеры
подключение 211
режим предварительного
просмотра 213
тестирование 212
установка 210
фокусировка 212
мультимедийный интерфейс высокой
четкости 19
Н
навигация по каталогам 260
низкоуровневый интерфейс
ввода/вывода общего
назначения 20
О
оперативная память 16
офисный пакет LibreOffice 53
П
переменная
присвоение имени в Scratch 71
перемычки 133, 134, 137, 142, 143, 148
тип 133
приглашение 260
пьезоэлектрический излучатель 133
Р
работа с файлами
в терминале 262
разрешение 208
разъем
GPIO 129, 132
microSD-карты 20
резистор
определение сопротивления 134
резисторы 133
репозиторий 251
рыскание 191
С
светодиод 133, 136, 137, 139, 140,
145, 146, 147, 148, 151, 152,
155, 157, 158, 159, 160, 175
сетевой порт 18
синтаксическая ошибка 102
система координат
светодиодной матрицы 175
система на кристалле 15
съемка видео 215
Т
тангаж 191
терминал
запуск 259
У
универсальная последовательная
шина 17
устройства ввода 32, 134, 142
устройства вывода 32, 133
Ф
Файловый менеджер 214, 232
Физические вычисления 129, 163
Ц
центральный процессор 16
цепь
создание 137
циклы 68, 74, 91, 104, 171, 175, 204
бесконечные 69
Ч
черепашка
рисование графики в Python 113
Э
эмулятор
Sense HAT 164
Книги издательства «ДМК ПРЕСС» можно купить оптом
в книготорговой компании «Галактика»
(представляет интересы издательств
«ДМК ПРЕСС», «СОЛОН ПРЕСС», «КТК Галактика»).
Адрес: г. Москва, пр. Андропова, 38;
Тел.: +7(499) 782-38-89.
Электронная почта: books@alians-kniga.ru.
Гарет Халфакри
Raspberry Pi.
Официальное руководство для начинающих
Главный редактор
Мовчан Д. А.
dmkpress@gmail.com
Перевод
Корректор
Верстка
Дизайн обложки
Черников С. В.
Синяева Г. И.
Паранская Н. В.
Мовчан А. Г.
Формат 70×100 1/16
Печать цифровая. Усл. печ. л. 23.24.
Тираж 100 экз.
Веб-сайт издательства: www.dmkpress.com