Текст
                    Гарет Халфакри
RASPBERRY PI 4
ОФИЦИАЛЬНОЕ РУКОВОДСТВО
ДЛЯ НАЧИНАЮЩИХ
Raspberry Pi - это миниатюрный и умный компьютер, который обладает
огромным потенциалом. Созданный для использования в тех же целях, что
и смартфон, Raspberry Pi предназначен для того, чтобы быть вашим помощ-
ником в обучении программированию. Он поможет вам узнать, как работа-
ют компьютеры, а также создать ваши собственные удивительные проекты.
Это руководство было написано для того, чтобы показать вам, что работать
на Raspberry Pi очень легко.
Вы научитесь:
•	настраивать Raspberry Pi, устанавливать операционную систему Raspberry
Pi OS и использовать этот крошечный, полностью функциональный ком-
пьютер;
•	программировать с помощью пошаговых инструкций с использованием
таких языков, как Scratch 3 и Python;
•	подключать дополнительные электронные девайсы и получать удоволь-
ствие от создания удивительных проектов.
Интернет-магазин:
www.dmkpress.com
Оптовая продажа:
КТК «Галактика»
books@alians-kniga.ru
Raspberry Pi
PRESS
— _
м/иш.дмк.рф
ISBN 978-5-97060-902-6

Гарет Халфакри Гарет Халфакри RASPBERRY PI 4. ОФИЦИАЛЬНОЕ РУКОВОДСТВО ДЛЯ НАЧИНАЮЩИХ RASPBERRY PI 4 ОФИЦИАЛЬНОЕ РУКОВОДСТВО ДЛЯ НАЧИНАЮЩИХ
Полностью адаптировано под версию Raspberry Pi 4 Raspberry Pi. Официальное руководство для начинающих Как использовать ваш новый Raspberry Pi 4 Гарет Халфакри
THE OFFICIAL Raspberry Pi Beginner's Guide How to use your new computer by Gareth Halfacree
Полностью адаптировано под версию Raspberry Pi 4 Гарет Халфакри Raspberry Pi. Официальное руководство для начинающих Как использовать ваш новый Raspberry Pi 4 Москва, 2021
УДК 004.738, 004.62, 519.6 ББК 32.973 Х17 Х17 Гарет Халфакри Raspberry Pi. Официальное руководство для начинающих / пер. с англ. С. В. Черникова - М.: ДМК Пресс, 2021. - 262 с.: ил. ISBN 978-5-97060-902-6 Raspberry Pi - точная миниатюрная копия полноценного компью- тера, наделенная аналогичными функциями. Вместе с тем Raspberry Pi представляет собой нечто большее, чем современный компьютер: с его помощью вы можете создать собственную операционную систему и со- единить провода, цепи и контакты на плате. Эта книга предназначена для тех, кто приступает к освоению Raspberry Pi. Показано, как настроить оборудование; описываются интерфейс устройства, его операционная система и базовые навыки работы. Изучив примеры программирования на Scratch 3 и Python, вы сможете расши- рить функционал Raspberry Pi, написав собственные программы и игры. Цветные иллюстрации и удобные пошаговые инструкции упрощают обучение. First published in 2019 by Raspberry Pi Trading Ltd. Copyright © 2019 Raspberry Pi Trading Ltd. All rights reserved. Russian-language edition copyright © 2021 by DMK Press. All rights reserved. Все права защищены. Любая часть этой книги не может быть воспроиз- ведена в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Материал, изложенный в данной книге, многократно проверен. Но, поскольку вероятность технических ошибок все равно существует, издательство не может гарантировать абсолютную точность и правильность приводимых сведений. В связи с этим издательство не несет ответственности за возможные ошибки, свя- занные с использованием книги. ISBN 978-1-912047-58-1 (англ.) ISBN 978-5-97060-902-6 (рус.) © Raspberry Pi Trading Ltd, 2019 © Перевод на русский язык, оформление, издание, ДМК Пресс, 2021
Оглавление Добро пожаловать в официальное руководство по использованию Raspberry Pi.......................................8 Об авторе...........................................................9 Глава 1. Знакомство с Raspberry Pi.................................10 Экскурсия по Raspberry Pi........................................11 Глава 2. Начинаем работу с Raspberry Pi............................21 Настройка оборудования...........................................23 Глава 3. Использование Raspberry Pi................................31 Окно приветствия.................................................32 Навигация по рабочему столу......................................36 Браузер Chromium.................................................38 Файловый менеджер................................................40 Офисный пакет LibreOffice........................................43 Инструмент Recommended Software..................................45 Инструмент Raspberry Pi Configuration............................47 Выключение.......................................................49 Глава 4. Программируем на Scratch 3................................51 Знакомство с интерфейсом Scratch 3...............................52 Твоя первая программа, созданная с помощью Scratch: Привет, мир!.53 Следующий шаг - последовательность действий......................55 Проект 1: Скорость реакции космонавта............................67 Проект 2: Синхронное плавание....................................75 Проект 3: Стрельба из лука.......................................86 Глава 5. Программируем на Python...................................93 Thonny- интегрированная среда разработки для Python..............94 Ваша первая программа на Python: Привет, мир!....................95 Проект 1: Черепашьи подсолнухи..................................105 Проект 2: Поиск страшных отличий................................113 Проект 3: Ролевой лабиринт......................................119 Глава 6. Физические вычисления на базе Scratch и Python...........125 Интерфейс GPIO..................................................126 Проект на Scratch: Светофор.....................................147 Проект на Python: Игра на реакцию...............................152 Глава 7. Физические вычисления с помощью Sense HAT................157 Изучаем плату Sense HAT.........................................158 Следующий шаг: светоживопись....................................169 5
Оглавление Ощущаем окружающий мир........................................178 Инерциальная система отсчета..................................185 Управление джойстиком.........................................190 Проект в Scratch: Бенгальский огонек..........................194 Проект в Python: Трикордер....................................197 Глава 8. Модуль камеры для Raspberry Pi.........................200 Установка модуля камеры.......................................201 Стоп-кадровая анимация с помощью кнопки.......................210 Приложение А.Установка NOOBS на карту microSD...................220 Загрузка NOOBS................................................220 Форматирование карты microSD..................................222 Установка NOOBS...............................................223 Приложение В.Установка и удаление программного обеспечения......227 Просмотр доступного программного обеспечения..................228 Установка программ............................................229 Удаление программ.............................................231 Приложение С. Интерфейс командной строки........................233 Загрузка программы Терминал...................................234 Приглашение...................................................234 Навигация по каталогам........................................235 Работа с файлами..............................................236 Запуск программ...............................................237 Использование ТТУ-абстракции..................................239 Приложение D. Дополнительные материалы..........................240 Приложение Е. Инструмент настройки Raspberry Pi.................246 Вкладка System................................................247 Вкладка Interfaces............................................248 Вкладка Performance...........................................249 Вкладка Localisation..........................................250 Приложение F.Технические характеристики Raspberry Pi............252 Приложение G. Руководство по безопасности и эксплуатации Raspberry Pi 4 Model В...........................255 Предметный указатель............................................257 6
Вступление от издательства Отзывы и пожелания Мы всегда рады отзывам наших читателей. Расскажите нам, что вы думаете об этой книге - что понравилось или, может быть, не понравилось. Отзывы важны для нас, чтобы выпускать книги, которые будут для вас максимально полезны. Вы можете написать отзыв на нашем сайте www.dmkpress.com, зайдя на страницу книги и оставив комментарий в разделе «Отзывы и рецензии».Также можно по- слать письмо главному редактору по адресу dmkpress@gmail.com; при этом укажите название книги в теме письма. Если вы являетесь экспертом в какой-либо области и заинтересованы в напи- сании новой книги, заполните форму на нашем сайте по адресу http://dmkpress. com/authors/publish_book/ или напишите в издательство по адресу dmkpress@gmaiLcom. Скачивание исходного кода примеров Скачать файлы с дополнительной информацией для книг издательства «ДМК Пресс» можно на сайте www.dmkpress.com на странице с описанием соответствующей книги. Список опечаток Хотя мы приняли все возможные меры для того, чтобы обеспечить высокое ка- чество наших текстов, ошибки все равно случаются. Если вы найдете ошибку в одной из наших книг - возможно, ошибку в основном тексте или программном коде, - мы будем очень благодарны, если вы сообщите нам о ней. Сделав это, вы избавите других читателей от недопонимания и поможете нам улучшить последу- ющие издания этой книги. Если вы найдете какие-либо ошибки в коде, пожалуйста, сообщите о них глав- ному редактору по адресу dmkpress@gmail.com, и мы исправим это в следующих тиражах. Нарушение авторских прав Пиратство в интернете по-прежнему остается насущной проблемой. Издатель- ства «ДМК Пресс» и Raspberry Pi Trading Ltd. очень серьезно относятся к вопро- сам защиты авторских прав и лицензирования. Если вы столкнетесь в интернете с незаконной публикацией какой-либо из наших книг, пожалуйста, пришлите нам ссылку на интернет-ресурс, чтобы мы могли применить санкции. Ссылку на подозрительные материалы можно прислать по адресу электронной почты dmkpress@gmail.com. Мы высоко ценим любую помощь по защите наших авторов, благодаря кото- рой мы можем предоставлять вам качественные материалы. 7
Добро пожаловать в официальное руководство по использованию Raspberry Pi Мы уверены, что вам понравится доступный и компактный компьютер Raspberry Pi, цена которого меньше стоимости большинства видеоигр. При этом Raspberry Pi может выступать в качестве помощника в обуче- нии программированию, созданию роботов и других странных, но очень ориги- нальных и интересных проектах. Raspberry Pi собрал в себе все те функции, которыми обладают обычные ком- пьютеры, начиная от поддержки интернета и всевозможных игр и заканчивая возможностью воспроизведения музыки и фильмов. Однако Raspberry Pi - это что-то большее, чем просто современный компью- тер. С его помощью вы можете изучить компьютер изнутри, а именно создать собственную операционную систему и соединить провода, цепи и контакты на плате воедино. Целью создания Raspberry Pi является обучение подростков про- граммированию с помощью Scratch, Python и других популярных языков про- граммирования, которые встроены в систему нашего компьютера. На данном этапе профессия программиста очень востребована, a Raspberry Pi помог пробудить интерес в молодом поколении к этой сфере. Raspberry Pi востребован среди людей абсолютно разных возрастов. С его помощью можно создать все, что угодно, как старомодные игровые консоли,так и метеорологические станции с выходом в интернет. Советуем ознакомиться с этим руководством, если у вас есть желание научиться создавать игры, строить ро- ботов или даже взламывать некоторые программы как настоящие хакеры. 8
Об авторе Гарет Халфакри - внештатный технологический журналист, пи- сатель и бывший системный ад- министратор в сфере образования. Молодой человек, страстно интере- сующийся бесплатным программ- ным обеспечением и техническим оснащением, считается одним из первых последователей Raspberry Pi. Гарет даже опубликовал несколь- ко статей о возможностях данного компьютера и о том, как он удобен в использовании. Познакомиться с ними можно в Twitter, перейдя в его профиль @ghalfacree, либо на сайте www.freelance.halfacree.co.uk. 9
Глава 1 Знакомство с Raspberry Pi Давайте изучим ваш новый крошечный компьютер Raspberry Pi. Откройте для себя безграничный мир возможностей этого девайса Raspberry Pi - замечательное устройство. Это точная, бюджетная, миниа- тюрная копия полноценного компьютера. Вне зависимости от ваших це- лей, будь то поиск информации в интернете, игры, написание собствен- ных программ, конструирование цепей или подключение физических устройств, Raspberry Pi, оснащенный замечательным дополнительным оборудованием, не- сомненно поддержит вас во всех начинаниях. Raspberry Pi известен как одноплатный компьютер. Из определения мы пони- маем, что данное устройство состоит из одной печатной платы, при этом схоже со стационарным компьютером, ноутбуком или смартфоном. Как и большинство одноплатных компьютеров, Raspberry Pi имеет небольшой размер (с банковс- кую карту), при этом это не означает, что он абсолютно не мощный. Напротив, Raspberry Pi обладает теми же функциями, которыми обладают более мощные компьютеры. Отличие заключается лишь в производительности. Серия компьютеров Raspberry Pi появилась благодаря желанию распростра- нить рациональное обучение программированию по всему миру. Поначалу осно- ватели некоммерческого фонда не ожидали, что устройство окажется настолько популярным. В 2012 году несколько тысяч устройств были мгновенно скуплены из-за необходимости проверки качества водных ресурсов,а в последующие годы миллионы девайсов были распространены уже по всему миру. Вскоре устройства Raspberry Pi стали неотъемлемой частью в большинстве школ, домов, офисов, информационных центров, фабрик и даже беспилотных лодок и космических аэростатов. Все началось с модели В. В дальнейшем она была модифицирована под раз- личные конкретные случаи использования. Отсюда и появилась серия компьюте- 10
Экскурсия по Raspberry Pi ров Raspberry Pi, где каждая последующая модель является улучшенной версией предыдущей. Возьмем, к примеру, модель Raspberry Pi Zero, которая представ- ляет собой мини-версию полноразмерного компьютера Raspberry Pi. У модели Zero в силу своего размера и низкого энергопотребления отсутствуют некоторые функции: несколько USB-разъемов и интерфейс проводной сети. Несмотря на отличительные черты каждой модели, в целом они совместимы. Поэтому программное обеспечение (ПО), созданное для одной модели, подойдет и для всех других. Если хотите убедиться сами, то просто установите на прототип модели В последнюю версию операционной системы Raspberry Pi. Конечно, ра- ботать она будет гораздо медленней, чем должна, но все же. В этом руководстве речь пойдет о новейшем и самом мощном миниатюрном одноплатном компьютере Raspberry Pi 4 Model В. Однако если вы используете другую модель семейства Raspberry Pi, не волнуйтесь, вся информация, найден- ная вами здесь, легко применима и к иным моделям. Экскурсия по Raspberry Pi В отличие от обычного компьютера, внутренние компоненты которого спрятаны под крышкой, все составляющие Raspberry Pi находятся на поверхности. Если же вы хотите дополнительно защитить устройство снаружи, то можете приобрести специальный корпус. Однако в отсутствии корпуса есть свои плюсы: вы можете с легкостью изучить все его составляющие и процесс подключения дополнитель- ных периферийных устройств. 11
Глава 1. Знакомство с Raspberry Pi Рис. 1.1: Raspberry Pi 4 Model В На рис. 1.1 изображен вид сверху модели Raspberry Pi 4 В. Чтобы не запутаться, рекоменду- ем вам при изучении повернуть ваш мини-компьютер так же, как показано на картинке, особенно когда речь идет об интерфейсе GPIO (подробно поговорим о нем в главе 6). Вам может показаться, что кро- шечная плата Raspberry Pi состоит из огромного количества слож- ных для понимания деталей. На самом деле составляющие и ме- ханизм работы устройства доста- точно просты. Для начала изучим компоненты, приводящие в ра- боту внутренние компоненты устройства. Компоненты Raspberry Pi Как и любой компьютер, Raspberry Pi состоит из определенного набора ком- понентов, каждый из которых выполняет определенную функцию в дальнейшей его работе. В данном компьютере используется система но кристалле (system- on-chip, SoC). Найти этот бесспорно важный компонент вы можете на верхней части платы чуть выше середины. Он защищен металлической крышкой (рис. 1.2). Рис. 1.2: Система на кристалле на плате Raspberry Pi 12
Экскурсия по Raspberry Pi Название «система на кристалле» говорит само за себя. Если вы решите по- смотреть, что находится под крышкой,то увидите кремниевый кристалл, который носит название интегральной схемы. Она и составляет основную часть меха- низма Raspberry Pi. Сюда также входят: центральный процессор (central proces- sing unit, CPU), часто известный как «мозг» компьютера и графический процессор (graphics processing unit, GPU), отвечающий за воспроизведение изображения. Однако работа процессора не имеет смысла без наличия памяти. Сбоку от системы на кристалле вы можете заметить маленький черный пластиковый квад- рат (рис. 1.3). Это чип, отвечающий за память, - оперативная память (random access memory, RAM) Raspberry Pi. При работе на Raspberry Pi все данные хра- нятся именно в оперативной памяти. И только после того, как вы сохраните свою работу, они будут записаны на карту microSD. В совокупности эти элементы со- ставляют два вида памяти Raspberry Pi, энергозависимую и энергонезависимую: энергозависимая оперативная память теряет все свои данные при отключении Raspberry Pi от питания, в то время как энергонезависимая карта microSD, напро- тив, сохраняет свое содержимое. Рис. 1.3: Оперативная память Raspberry Pi Обратите внимание на правый верхний угол платы. Здесь находится еще одна металлическая крышка (рис. 1.4), защищающая модуль беспроводной сети, по- зволяющий Raspberry Pi соединяться с другими устройствами по воздуху. Этот модуль имеет две основные функции: во-первых, это связь по Wi-Fi, которая по- зволяет подключаться к сети другого компьютера, а во-вторых, связь по Bluetooth, дающая возможность подключать различные периферийные устройства (на- пример, компьютерную мышь) и передавать или получать данные от «умных устройств» (например, смартфонов и датчиков), находящихся вблизи. 13
Глава 1. Знакомство с Raspberry Pi Рис. 1.4: Модуль беспроводной сети Raspberry Pi Еще один черный,защищенный пластиковым коробом чип вы можете заметить внизу ближе к краю платы, рядом с USB-разъемами. Это USB-контроллер, отве- чающий за работу четырех USB-портов. Рядом с ним расположен чип меньшего размера - сетевой контроллер, отвечающий за работу сети Ethernet Raspber- ry Pi. И последний, самый маленький чип находится чуть выше разъема питания USB Туре-С, а именно в левом верхнем углу платы (рис. 1.5). Он получил название интегральной схемы управления питанием (power management integrated cir- cuit, PMIC), поскольку преобразует энергию, поступившую из порта micro USB, в энергию, необходимую для питания и дальнейшего запуска Raspberry Pi. Рис. 1.5: Интегральная схема управления питанием Raspberry Pi Если вам показалось все вышепрочитанное слишком сложным, не стоит пере- живать! Для использования Raspberry Pi вы не обязательно должны запоминать каждый компонент и его местоположение на плате. 14
Экскурсия по Raspberry Pi Порты Raspberry Pi В Raspberry Pi вы можете обнаружить целый ряд различных портов, это че- тыре порто универсальной последовательной шины (Universal Serial Bus, USB) (рис. 1.6), а также другие порты, размещенные в центре и внизу справа. Эти разъемы позволяют подключить к компьютеру Raspberry Pi любые периферий- ные USB-устройства, начиная от клавиатур и компьютерных мышей заканчивая цифровыми камерами и Flash-накопителями. Если уточнить технические дета- ли, существуют два типа USB-портов: компоненты первых окрашены в черный цвет - это порты, основанные на старой версии универсальной последователь- ной шины, USB 2.0; компоненты вторых окрашены в синий цвет - эти порты под- держивают гораздо более высокую скорость передачи данных, чем предыдущие, поскольку основаны на более новой версии: USB 3.0. Рис. 1.6: USB-порты платы Raspberry Pi Справа от USB-портов находится Ethernet-nopm, известный также как сетевой порт (рис. 1.7). Используйте этот разъем для подключения Raspberry Pi к про- водной компьютерной сети с помощью кабеля со штекером RJ45. Если вы вни- мательно посмотрите на порт Ethernet, то заметите снизу два светоизлучающих диода (светодиода). Это светодиоды состояния, по которым мы с вами можем определить, осуществлено соединение или нет. Рис. 1.7: Ethernet-разъем платы Raspberry Pi 15
Глава 1. Знакомство с Raspberry Pi Чуть выше порта Ethernet, в левой части Raspberry Pi, находится композит- ный разъем (AV-разъем) с диаметром 3,5 мм (рис. 1.8). Вы также можете его на- звать разъемом для наушников, ведь его можно использовать и для этой цели. Однако звук будет гораздо лучше при подключении активной акустики, нежели наушников. У данного разъема есть дополнительная скрытая функция: помимо аудиосигнала, 3,5-мм AV-разъем способен передавать и видеосигнал. Поэтому вы также можете подключить телевизор, проектор и прочие видеоустройства, поддерживающие композитный видеосигнал и имеющие разъем для подключе- ния специального кабеля TRRS. Рис. 1.8: 3,5-мм AV-разъем платы Raspberry Pi Непосредственно над 3,5-мм AV-разъемом находится разъем необычной фор- мы с пластиковой заслонкой, которую можно сдвинуть вверх. Это разъем для модуля камеры, именуемый также как последовательный интерфейс камеры (Camera Serial Interface, CSI) (рис. 1.9). Благодаря этому порту вы можете подклю- чать модуль камеры, специально разработанный для Raspberry Pi (подробней о котором мы поговорим в главе 8). Рис. 1.9: Разъем для модуля камеры платы Raspberry Pi 16
Экскурсия по Raspberry Pi Чуть выше в той же левой части платы находятся микропорты мультиме- дийного интерфейса высокой четкости (High Definition Multimedia Interface, HDMI) - уменьшенная версия разъемов, которые вы можете найти в игровых консолях, видеотехнике и телевизорах (рис. 1.10). Слово «мультимедиа» в на- звании данного разъема говорит нам о том, что здесь передаются как аудио-, так и видеосигналы. Фраза же «высокая четкость» уверяет нас в их отличном качестве. Благодаря этому разъему вы можете подключать Raspberry Pi к одно- му-двум устройствам воспроизведения: к монитору компьютера, к телевизору или к проектору. Рис. 1.10: Разъемы microHDMI платы Raspberry Pi Над портами HDMI находится USB-nopm типа Туре-С (рис. 1.11), предназна- ченный для подключения Raspberry Pi к источнику питания. Данный разъем час- то используется в смартфонах, планшетах и других портативных устройствах. Конечно, для подзарядки вашего устройства вы можете использовать любое за- рядное устройство, однако лучше будет, если вы выберете именно оригинальный USB Туре-С адаптер для Raspberry Pi. Рис. 1.11: Разъем USB Туре-С платы Raspberry Pi 17
Глава 1. Знакомство с Raspberry Pi В верхней части платы расположен еще один разъем странной формы (рис. 1.12). На первый взгляд он напоминает разъем для камеры. На самом же деле это разъем дисплея, который в английском также носит название Display Serial Interface (DSI) и предназначен для совместного использования с сенсорным дисплеем Raspberry Pi (рис. 1.13). Рис. 1.12: Разъем дисплея платы Raspberry Pi Рис. 1.13: Сенсорный дисплей для Raspberry Pi В правой части платы вы можете заметить 40 металлических пинов, разбитых на два ряда по 20 штук (рис. 1.14). Это низкоуровневый интерфейс ввода/выво- да общего назначения (general-purpose input/output, GPIO). Он необходим для 18
Экскурсия по Raspberry Pi взаимодействия с дополнительным оборудованием: светодиодами, различными кнопками, датчиками температуры, джойстиками, пульсометрами и т. д. Более детальная информация о GPIO приведена в главе 6. Чуть ниже и левее колодки GPIO находится разъем поменьше, и состоящий уже из 4 пинов. Он служит для подключения плоты расширения Raspberry PI РОЕ HAT - компонента, позволяю- щего компьютеру Raspberry Pi получать питание через сетевое подключение, а не через разъем USB Туре-С. Рис. 1.14: Колодка интерфейса GPIO платы Raspberry Pi и порт для подключения РОЕ HAT Наконец, мы добрались до финального порта Raspberry Pi, расположенно- го далеко не на самом видном месте. Переверните плату, и вы увидите разъем microSD-карты, находящийся в том же месте, что и разъем дисплея, только на другой стороне платы (рис. 1.15). Это так называемый «репозиторий» Raspberry Pi: microSD-карта, вставленная сюда, хранит все загруженные файлы, установ- ленное программное обеспечение и операционную систему, под управлением которой работает Raspberry Pi. Рис. 1.15: Разъем для microSD-карты на плате Raspberry Pi 19
Глава 1. Знакомство с Raspberry Pi Периферийные устройства Raspberry Pi Без дополнительных девайсов функции Raspberry Pi ограничены точно так же, как и функции любого другого стационарного компьютера. Ведь без вспомога- тельной гарнитуры им можно разве что подпирать входную дверь. Для полно- ценной работы Raspberry Pi необходимо подключить некоторые периферийные устройства: как минимум это microSD-карта для хранения данных, монитор или телевизор для воспроизведения изображения, клавиатура и мышь для управле- ния Raspberry Pi и 5-вольтовый USB-адаптер с силой тока 3 А с разъемом Туре-С для питания платы. В совокупности эти устройства составляют полностью функци- ональный компьютер. Подробнее об их подключении вы узнаете в главе 2. Однако существует множество других периферийных устройств для Raspberry Pi. Следующие оригинальные компоненты произведены компанией Raspberry Pi Foundation: корпус для Raspberry Pi, защищающий компьютер во время использо- вания, не блокируя при этом доступа к различным разъемам; модуль камеры для Raspberry Pi (подробно описанный в главе 9); сенсорный дисплей для Raspberry Pi, который подключается к разъему дисплея и обеспечивает как воспроизведение видеосигнала,так и использование экрана компьютера в сенсорном режиме, напо- добие планшета; а также дополнительная интеллектуальная многофункциональная плата расширения Sense HAT (рис. 1.16), подробнее о которой пойдет речь в главе 7. Еще доступен широкий спектр сторонних аксессуаров, например: комплекты, трансформирующие Raspberry Pi в ноутбук или планшет, дополнительные мо- дули, позволяющие Raspberry Pi распознавать вашу речь и даже предоставлять обратную связь. Звучит заманчиво, не так ли? Однако не торопитесь скупать все перечисленные девайсы, начните изучение постепенно. Прежде чем «бежать марафон» с аналогичными устройствами, сначала нужно «научиться ходить» с вашим Raspberry Pi. Рис. 1.16: Плата расширения Sense HAT 20
Глава 2 Начинаем работу с Raspberry Pi Изучаем подключение основных девайсов к Raspberry Pi, так чтобы обеспечить его нормальную работу Цель разработчиков Raspberry Pi заключалась в создании максималь- но простого и быстрого в сборке и использовании компьютера. Однако функционирование Raspberry Pi, как и любого другого компьютера, не- возможно без подключения дополнительных аксессуаров, называемых перифе- рийными устройствами. Взгляните на ничем не защищенную печатную плату Raspberry Pi. Она выглядит иначе, чем привычные вам стационарные компьюте- ры, содержимое которых скрыто корпусом. Возможно, вы начали переживать, что вам будет нелегко разобраться с Raspberry Pi. На самом деле это не так. С нашим руководством, выполняя все шаги поэтапно, вы сможете подготовить устройство к работе всего за 10 минут. Если вы приобрели набор Raspberry Pi Starter Kit,то у вас в наличии уже име- ются все необходимые для работы компоненты. Единственное, что от вас потре- 21
Глава 2. Начинаем работу с Raspberry Pi буется, - монитор или телевизор с интерфейсом HDMI - стандартным разъемом для подключения аудио/видеотехники и игровых консолей. Монитор необходим для того, чтобы вы видели результат вашей работы. Если же у вас нет комплекта Raspberry Pi Starter Kit,то в дополнение к Raspberry Pi 4 Model В вам необходимо приобрести следующее: зарядное USB-устройство - это источник пи- тания с напряжением 5 В и силой тока 3 А, оборудованный штекером USB Туре-С. Мы ре- комендуем выбирать оригинальную версию за- рядного устройства Raspberry Pi, поскольку оно отлично справляется с быстро меняющимися потребностями в электропитании Raspberry Pi; microSD-карта с комплектом программ NOOBS является хранилищем информации в Raspberry Pi. Здесь находятся все созданные вами ранее файлы, а также программное обеспечение, установленное вместе с самой операционной системой. Для начала вам хватит карты объ- емом 8 ГБ, однако карта на 16 ГБ предоставит вам больше возможностей в будущем. Исполь- зование карты с комплектом уже загруженных программ NOOBS (the New Out-Of Box Software) значительно сэкономит вам время. При отсутствии этих программ на microSD-карте вы можете загрузить их самостоятельно, воспользовавшись инструкцией из приложения А; клавиатура и мышь с USB-интерфейсом позво- ляют вам управлять Raspberry Pi. Почти любая проводная или беспроводная клавиатура и мышь с разъемом USB будут функционировать с Raspberry Pi. Однако «игровые» клавиатуры с подсветкой клавиш могут не подойти к устрой- ству, поскольку потребляют слишком много энергии; кабель с разъемом microHDMI необходим для трансляции звука и изображения с Raspberry Pi на экран телевизора или монитора. На од- ном конце кабеля есть разъем microHDMI для Raspberry Pi, а на другом - полноразмерный разъем HDMI для видеоустройства. Вы также можете подключить адаптер microHDMI к стан- дартному штекеру HDMI. Если у вашего монито- ра отсутствует разъем HDMI, вы можете приобрести адаптеры microHDMI для разъемов DVI-D, DisplayPort или VGA. Для подключения к старому теле- 22
Настройка оборудования визору, имеющему композитный видеовход или разъем SCART, используйте 3,5-мм кабель типа TRRS (но не TRS!). Raspberry Pi вполне безопасно использовать без защитного корпуса, но только при условии, что не произойдет контакта с металлической поверхностью, хоро- шо проводящей электричество, что может вызвать короткое замыкание. Специ- альный защитный корпус, однако, может обеспечить дополнительную защиту для вашего компьютера. Комплект Raspberry Pi Starter Kit включает в себя ори- гинальный корпус для Raspberry Pi, а если у вас его нет, в любом специализиро- ванном магазине при желании вы также сможете подобрать себе подходящий. Если вы хотите подключить свой Raspberry Pi к проводной сети, а не к беспро- водной (Wi-Fi), вам понадобится сетевой кабель, который одним концом будет подключен непосредственно к плате, а другим - к сетевому коммутатору или маршрутизатору (роутеру). Если же вы хотите воспользоваться встроенным в Raspberry Pi модулем беспроводной сети, кабель вам не потребуется. Однако вам понадобится знать название и пароль вашей беспроводной сети. Настройка оборудования Для начала распакуйте Raspberry Pi. Плата достаточно прочная, однако это не значит, что она неуязвима. Не хватайтесь за компоненты платы, возьмите ее ак- куратно за края. Если погнуть какие-нибудь штырьки или жир с пальцев попадет на контакты, то в лучшем случае у вас будут проблемы с подключением обору- дования и передачей данных, а в худшем - это может привести к короткому за- мыканию, которое повредит Raspberry Pi. Если вы начали читать руководство не с самого начала,то рекомендуем вернуться к главе 1, чтобы узнать о размещении различных компонентов платы и их функциях. Сборка корпуса Вашим первым шагом на данном этапе будет установка Raspberry Pi в корпус. Если у вас оригинальный корпус для Raspberry Pi, то сначала разъедините две его части: красное основание корпуса и беле, крышечке. 1. Возьмите красное основание корпуса и поверните его так, чтобы сторона со стенкой находилась слева от вас, а сторона без стенки справа (см. рисунок). 2. Удерживая Raspberry Pi (без вставленной microSD-карты) за USB и Ethernet-разъемы 23
Глава 2. Начинаем работу с Raspberry Pi под небольшим углом, вставьте сначала сторону, на которой находятся разъемы USB Туре-С, microHDMI и 3,5-мм, так, чтобы они совпали с от- верстиями, расположенными на боковой стороне корпуса, а затем осто- рожно опустите другую сторону вниз так, чтобы компьютер Raspberry Pi плотно поместился в чехол. 3. Возьмите белую крышку и поместите два зажима, находящихся слева, в соответствующие отверстия, расположенные в левой части основания чехла, сверху от слота для microSD-карты. После их соединения при- жмите правую сторону (расположенную над USB-разъемами) до тех пор, пока не услышите щелчок. 24
Настройка оборудования Подключение microSD-карты Для установки microSD-карты - хранилища данных Raspberry Pi - переверните Raspberry Pi (на рисунке показана плата без корпуса; вставлять карту нужно в компьютер в корпусе) и вставьте в слот microSD-карту наклейкой, повернутой в противоположную от Raspberry Pi сторону. Вставляться она может только одной стороной, при этом проскальзывать внутрь она должна без чрезмерного давления. MicroSD карта плавно входит в разъем до упора и без щелчка. Если в дальнейшем вы захотите ее достать, то просто потяните за торчащий край и аккуратно вытащите. Если у вас более старая модель Raspberry Pi,то сна- чала вам нужно будет слегка нажать на карту, чтобы высвободить ее из разъема. В моделях Raspberry Pi 3 или 4 такую манипуляцию совершать не нужно. 25
Глава 2. Начинаем работу с Raspberry Pi Подключение клавиатуры и мыши Подключите USB-кабель, отходящий от клавиатуры к любому из четырех USB- портов (версии 2.0 или 3.0) Raspberry Pi. Если вы используете оригинальную кла- виатуру Raspberry Pi, то на ее задней панели есть USB-порт для подключения мыши. Если же такого разъема нет, то подключите USB-кабель, отходящий от мыши, к другому USB-порту Raspberry Pi. USB-штекеры клавиатуры и мыши должны легко входить в разъемы. Если при подключении вам приходится применять силу, значит, вы делаете что-то не так. Проверьте,той ли стороной вы вставляете USB-разъем в порт! Клавиатура и мышь Клавиатура и мышь выступают в качестве основных де- вайсов, управляющих работой Raspberry Pi. В програм- мировании они известны как устройства ввода, в отли- чие от дисплея, который является устройством вывода. Подключение дисплея Подключите конец HDMI-кабеля штекером microHDMI к разъему microHDMI, находящемуся ближе к порту USB Туре-С, а другой - конец к дисплею. Если ваш дисплей оборудован несколькими HDMI-разъемами, посмотрите номер, указан- ный рядом с разъемом; вам необходимо переключить телевизор на этот вход, 26
Настройка оборудования чтобы увидеть изображение с платы Raspberry Pi. Если вы не понимаете, какой именно порт вам необходим, не волнуйтесь: вы можете проверять каждый вход по очереди, пока не найдете нужный. Подключение к телевизору ь Если на вашем телевизоре или мониторе отсутствует разъем HDMI, это не значит, что у вас нет возможности подключить Raspberry Pi. На такой случай были созданы адаптеры, доступные сейчас в любом магазине элект- роники. Они позволят вам преобразовать интерфейс HDMI Pi в DVI-D, DisplayPort или VGA, что очень важно при работе со старыми мониторами. Вставьте один конец HDMI-кабеля в разъем microHDMI Raspberry Pi, а затем выберите подходящий адаптер, соедините его с другим концом HDMI-кабеля и подключите к монитору. Если у вашего монитора есть только композитный видео вход или разъем SCART, вы можете приобрести адаптер TRRS с диаметром 3,5 мм или межблочный кабель SCART для подключения к AV-разъему диаметром 3,5 мм. 27
Глава 2. Начинаем работу с Raspberry Pi Подключение сетевого кабеля (опционально) Чтобы подключить Raspberry Pi к проводной сети, возьмите сетевой кабель, известный как Ethernet-кабель, и вставьте его в порт Ethernet в Raspberry Pi до щелчка. Пластиковый зажим при этом должен быть повернут вниз. Если вам нуж- но извлечь кабель, надавите на пластиковый зажим по направлению к штекеру и осторожно потяните его на себя. Таким же образом необходимо подключить другой конец сетевого кабеля к любому свободному порту сетевого концентратора, коммутатора или маршрути- затора (роутера). Подключение Raspberry Pi к источнику питания Подключение Raspberry Pi к источнику питания - самый последний шаг в про- цессе настройки оборудования, и сделать это вы должны только тогда, когда бу- дете готовы настроить его программное обеспечение: у Raspberry Pi отсутствует кнопка включения и выключения, следовательно, устройство заработает сразу же после подключения к источнику питания. Для этого подключите конец USB-кабеля с разъемом Туре-С к порту USB Туре-С на плате Raspberry Pi. Он вставляется любой стороной без особых усилий. Если источник питания, к которому вы подключили Raspberry Pi, имеет съемный кабель, убедитесь, что другой его конец подключен к самому источнику питания. 28
Настройка оборудования Наконец, подключите источник питания к разъему электропитания и подайте его. Ваш компьютер Raspberry Pi сразу же заработает. Поздравляю: вы собрали Raspberry Pi! 29
Глава 2. Начинаем работу с Raspberry Pi На несколько секунд в левом верхнем углу черного экрана появятся четыре логотипа Raspberry Pi, затем экран загорится синим, и программное обеспече- ние будет установлено на microSD-карту. Если цвет экрана не меняется на си- ний, подождите несколько минут. При первой загрузке Raspberry Pi компьютер упорядочивает данные в фоновом режиме. Через некоторое время вы увидите рабочий стол Raspberry Pi OS и окно мастера первоначальной настройки, про- демонстрированные на рис. 2.1. Теперь вы можете перейти к настройке опера- ционной системы, прочитав об этом больше в главе 3. Рис. 2.1: Рабочий стол Raspberry Pi OS и мастер настройки 30
Глава Ъ Использование Raspberry Pi Узнаем больше об операционной системе Raspberry Pi OS При работе с Raspberry Pi вы можете запускать огромное количество про- грамм. Сюда также относятся различные операционные системы - ос- новное программное обеспечение, позволяющее устройству функциони- ровать. Самой популярной и официальной операционной системой Raspberry Pi Foundation является операционная система Raspberry Pi OS. Raspberry Pi OS основана на Debian Linux и специально разработана для устройств Raspberry Pi. Поставляется она уже готовая к работе с рядом встроенных дополнительных функций. Если ранее вы работали только в операционной системе Microsoft Windows или Apple macOS, не переживайте. Raspberry Pi OS основана на тех же прин- ципах: окна, ярлыки, меню и курсор, так что все это покажется вам знакомым. В следующей главе вы познакомитесь с некоторыми из программ и начнете с ними работать. 31
Глава 3. Использование Raspberry Pi Окно приветствия При первом запуске Raspberry Pi OS вы увидите окно приветствия (рис. 3.1). Это полезный инструмент, который поможет изменить некоторые настройки в Raspberry Pi OS, получившие название конфигурация. Это необходимо для того, чтобы упорядочить и облегчить использование Raspberry Pi. Рис. 3.1: Окно приветствия Закрытие окна Вы можете закрыть окно приветствия, нажав кнопку Cancel (Отмена), однако некоторые функции Raspberry Pi, например беспроводная сеть, не будут работать, пока вы не ответите хотя бы на первый набор вопросов. Нажмите кнопку Next (Далее), затем выберите вашу страну, язык и часовой пояс, щелкнув по очереди каждый открывшийся список и выбрав нужный вари- ант (рис. 3.2). Если обычно вы используете иную раскладку клавиатуры, нажмите кнопку переключения клавиатуры и убедитесь, что в данный момент использует- ся нужная вам раскладка. Если вы хотите, чтобы надписи на рабочем столе и раз- личные программы отображались на английском языке, независимо от выбран- ного вами родного языка,установите флажок Use English language (Использовать английский язык). После завершения настройки нажмите кнопку Next (Далее). 32
Окно приветствия Рис. 3.2: Среди различных настроек выбираем подходящий язык В следующем открывшемся окне вам будет предложено изменить пароль пользователя Pi (вместо стандартного «raspberry») - в целях безопасности реко- мендуем придумать новый. Введите его в пустые поля (рис. 3.3). Чтобы увидеть то, что вы вводите, сбросьте флажок Hide characters (Скрывать символы). Пароли в первом и втором полях должны совпадать. Как только вы окажетесь довольны результатом, нажмите кнопку Next (Далее). Рис. 3.3: Устанавливаем новый пароль 33
Глава 3. Использование Raspberry Pi В следующем окне компьютер предложит вам выбрать из списка сеть Wi-Fi (рис. 3.4). С помощью мыши или клавиш f и на клавиатуре пролистайте список и выберите название вашей интернет сети. Нажмите кнопку Next (Далее). Пред- полагается, что ваша беспроводная сеть защищена (это действительно должно быть так). Поэтому перед вами откроется окошко, в которое будет необходимо ввести пароль (ключ сети). Обычно он записан в документации маршрутизатора или на наклейке, расположенной на нижней части самого маршрутизатора (если вы не сменили пароль на устройстве). Для подключения к сети нажмите кнопку Next (Далее). Если же вы не хотите подключать Raspberry Pi к интернету, нажмите кнопку Skip (Пропустить). Рис. 3.4: Выбор беспроводной сети Беспроводная сеть Подключиться к беспроводной сети интернет без до- полнительных девайсов вам удастся только на моделях Raspberry Pi 3, Pi 4 и Pi Zero W. Если же вы являетесь об- ладателем другой модели Raspberry Pi, вам необходимо приобрести Wi-Fi-модуль с интерфейсом USB. Теперь перед вами появится окно, в котором предлагается проверить наличие обновлений для Raspberry Pi OS или другого ПО и при необходимости устано- вить их (рис. 3.5). Программное обеспечение Raspberry Pi OS регулярно обновля- ется для исправления ошибок, добавления новых функций и повышения произ- водительности. Чтобы установить эти обновления, нажмите кнопку Next (Далее). Если же вы не хотите, нажмите кнопку Skip (Пропустить). Загрузка обновлений может занять несколько минут,так что будьте терпеливы. Когда обновления будут 34
Окно приветствия установлены, появится окно с надписью System is up to date (Система обновлена до актуальной версии). Нажмите кнопку ОК. Рис. 3.5: Проверка обновлений Последнее окно, которое откроется перед вами (рис. 3.6), сообщит, что внесен- ные изменения сработают только после перезапуска устройства. Этот процесс в Raspberry Pi носит название перезагрузки. В таком случае нажимаем на кнопку перезагрузки Restart, после чего компьютер автоматически перезапустит свою работу. На этот раз окно приветствия не откроется, поскольку его миссия уже выполнена, a Raspberry Pi OS готова к работе. Рис. 3.6: Перезагрузка Raspberry Pi OS 35
Глава 3. Использование Raspberry Pi Навигация по рабочему столу Операционная система Raspberry Pi OS установлена на большинстве моделей Raspberry Pi и содержит инструмент «рабочий стол Raspberry Pi OS». Это основ- ной графический интерфейс пользователя (рис. 3.7). Основная часть рабочего стола демонстрирует изображение и носит название «обои» (А). Здесь будут отображаться ярлыки установленных программ. В верхней части рабочего стола находится панель задач (В), которая позволяет открыть любую из установлен- ных программ. Запущенные программы обозначаются кнопками (С) на панели задач. Рис. 3.7: Рабочий стол Raspberry Pi OS А Обои рабочего стола В Панель задач С Кнопка задачи D Системный лоток Е Кнопка извлечения накопителя F Значок Bluetooth G Значок сетевого соединения Н Значок регулятора громкости I Часы J Лаунчер К Значок меню (или Raspberry) L Значок корзины М Значок съемного устройства N Заголовок окна О Кнопка сворачивания окна Р Кнопка разворачивания окна О Кнопка закрытия окна В правой части строки меню находится системный лоток (D). Если к Raspberry Pi подключены какие-либо съемные накопители, например USB-накопители, вы увидите значок извлечения (Е). Щелкнув по нему мышью, вы сможете безопасно извлечь подключенные ранее устройства. Справа находятся часы (I). Щелкните по часам мышью, и перед вами откроется электронный календарь (рис. 3.8). 36
Навигация по рабочему столу Рис. 3.8: Электронный календарь Рядом с часами находится динамик (Н). Щелкните по нему мышью для на- стройки громкости звука Raspberry Pi. Также для настройки дополнительных па- раметров вы можете щелкнуть по нему правой кнопкой мыши. Левее располо- жен значок сети (G). Если устройство Raspberry Pi подключено к беспроводной сети, вы увидите значок мощности сигнала, отображаемый в виде нескольких полос. Однако если подключение проводное, вместо полос будут отображены две стрелочки. При щелчке мышью по значку сети открывается список доступных беспроводных сетей (рис. 3.9), а при щелчке по значку Bluetooth (крайний в этом ряду) (F) появляется список доступных для подключения по Bluetooth устройств. Рис. 3.9: Список доступных беспроводных сетей В левой части строки меню находится кнопка лаунчера (J), после щелчка по которой перед вами откроются программы, установленные на Raspberry Pi OS. Некоторые из них показаны на самой панели, другие же скрыты в меню, которое можно открыть, щелкнув мышью по значку в виде малины (К), расположенному в крайнем левом углу (рис. 3.10). 37
Глава 3. Использование Raspberry Pi Рис. 3.10: Меню Raspberry Pi OS Все программы в меню разбиты на категории, по названию которых вы мо- жете понять их предназначение: категория Программирование (Programming), например, содержит программное обеспечение, предназначенное для помощи в написании ваших собственных программ (подробней в главе 4). Программы, находящиеся в категории Игры (Games), скоротают вам время. В этом руковод- стве мы разберем не все программы, поэтому не бойтесь экспериментировать, тем самым получая дополнительные знания. Браузер Chromium Перейдем к практике. И первое, что мы сделаем, - загрузим браузер Chromium. Для этого щелкните мышью по значку в виде ягоды малины, расположенном в ле- вом верхнем углу. Перед вами откроется меню. Переместите указатель мыши на пункт Интернет (Internet) и для запуска выберите пункт Веб-браузер Chromium (Chromium web-browser) (рис. 3.11). Рис. 3.11: Браузер Chromium 38
Браузер Chromium Если раньше вы работали в браузере Google Chrome, то Chromium покажется вам очень знакомым. Браузер Chromium предоставляет доступ к веб-сайтам, вос- производит видео и игры и даже дает возможность общаться с людьми из разных точек мира на форумах и различных сайтах. При работе в Chromium рекомендуем вам развернуть окно на весь экран: найдите три кнопки в правом верхнем углу заголовка окна Chromium (О) и нажмите на расположенную посередине кноп- ку со стрелкой вверх (О). Эта кнопка разворачивает окно браузера. Слева от нее находится кнопка сворачивания (Р), после нажатия на которую окно свернется во вкладку, расположенную на панели задач в верхней части экрана. Крестик, распо- ложенный справа от кнопки разворачивания, - кнопка закрытия (С) - осуществля- ет именно то, что вы подумали, а именно закрывает окно. Закрыть нельзя сохранить Закрыть вкладку, не сохранив перед этим внесенные в нее изменения, - плохая идея. Многие программы, ко- нечно, предлагают вам сохранить данные перед закры- тием, однако некоторые - нет. Щелкните мышью по адресной строке в верхней части окна Chromium - боль- шой белой полосе с лупой слева. Затем введите www.raspberrypi.org, после чего нажмите клавишу Enter. Перед вами появится сайт Raspberry Pi (рис. 3.12). Вы также можете ввести в адресную строку любую искомую вами информацию: по- пробуйте найти информацию по запросам «Raspberry Pi», «Raspberry Pi OS» или «Обучение программированию». Teach, Leam, and Make with Raspberry Pi - Raspberry Pi - Chromiunr v A x < Teach, Learn, and Make x + <- -> 0 £ asp berry pi orc Рис. 3.12: Загрузка веб-сайта Raspberry Pi в Chromium 39
Глава 3. Использование Raspberry Pi При первой загрузке в Chromium могут открыться сразу несколько вкладок. Чтобы перейти на другую вкладку, просто щелкните по ней мышью. Чтобы за- крыть вкладку, при этом не закрывая сам Chromium, щелкните мышью по значку в виде крестика в правом углу этой вкладки. Чтобы открыть новую вкладку, удер- живайте клавишу Ctrl, а затем, не отпуская ее, нажмите клавишу Т. Это позволит вам пользоваться сразу несколькими вкладками одновременно, не путаясь в огромном количестве открытых окон Chromium. Когда вы решите завершить работу с браузером Chromium, нажмите кнопку «Закрыть» в правом верхнем углу окна. Файловый менеджер Файлы, которые вы сохраняете, - будь то написанные вами программы или стихи, снятые вами видео или скачанные из интернета изображения - все сохраняются в домашний каталог. Чтобы отобразить домашний каталог, нажмите на панели задач кнопку в виде малины. Перед вами откроется меню, в котором выберите пункт Стандартные (Accessories), а затем программу Файловый менеджер (File manager) (рис. 3.13). Рис. 3.13: Файловый менеджер Файловый менеджер позволяет просматривать файлы и папки, еще извест- ные как каталоги, находящиеся на microSD-карте Raspberry Pi, а также на лю- бых съемных носителях, например USB-накопителях, которые вы подключаете к USB-портам Raspberry Pi. Когда вы впервые открываете менеджер, он авто- матически переносит вас в ваш домашний каталог. Здесь находится множество других папок, известных как подкаталоги, которые также расположены по кате- гориям. Выделяют следующие основные подкатегории: 40
Файловый менеджер Desktop: его вы можете наблюдать при первой загрузке Raspberry Pi OS. Если вы сохраните файл сюда, он появится на рабочем столе Raspberry Pi OS, что облегчит вам его поиск при дальнейшем использовании; Documents: в этой папке находится большая часть созданных вами фай- лов (это могут быть как короткие рассказы, так и различные рецепты и т. д.); Downloads: при скачивании файла из интернета через веб-браузер Chromium он будет автоматически сохранен в этом разделе; MagPi: эта папка содержит электронную копию официальной версии журнала MagPi компании Raspberry Pi Foundation; Music: здесь хранится вся написанная вами или скачанная на Raspberry Pi музыка; Pictures: данная папка предназначена специально для картинок. В тех- нической сфере они получили название файлы изображений; Public: конечно, большинство ваших файлов являются частными, однако то, что вы загрузите в эту папку, будет доступно и другим пользовате- лям Raspberry Pi, даже если они зайдут через свой личный аккаунт; Videos: папка для хранения видео. Именно сюда в первую очередь бу- дут сохраняться ролики, проигрываемые различными программами для воспроизведения видео. Окно файлового менеджера состоит из двух панелей: левая панель пока- зывает доступные на вашем Raspberry Pi каталоги, а правая панель - файлы и подкаталоги выбранного вами на левой панели каталога. Если вы подключите съемный накопитель к USB-порту Raspberry Pi, появится окно с запросом открыть содержимое накопителя через файловый менеджер (рис. 3.14). Нажмите кноп- ку ОК, и перед вами появятся имеющиеся файлы и каталоги. pi Файл Правка Вид Sort Перейти Инструменты Подключён сменный носитель Подключён сменный носитель Тип носителя' сменный диск Выберите желаемое действие: bin boot dev etc e> Домашняя папка 11__i Корень файловой I _^Т131096600В home № Открыть в файловом менеджере MagPi Templates Desktop „ Отменить ОК = Documents ______ ±” Downloads__________________________________________________________________ 9 элементов (12 скрыто) Свободное место: 225,3 МиБ (Всего 5,8 ГиБ) Рис. 3.14: Запрос просмотра съемного накопителя 41
Глава 3. Использование Raspberry Pi Файлы со съемного устройства можно легко скопировать на microSD-карту вашего Raspberry Pi или наоборот (с microSD-карты на съемное устройство). Для этого в отдельных окнах файлового менеджера откройте домашний каталог и съемное устройство.Установите указатель мыши на файл, который вы хотите ско- пировать. Затем, нажав и удерживая левую кнопку мыши, переместите мышь из одного окна в другое и отпустите кнопку мыши (рис. 3.15). Данный процесс носит название перетаскивания. Переместить файл можно и другим способом: щелкните один раз по нужному вам файлу, затем в меню Правка (Edit) выберите команду Копировать (Сору). Теперь переходим в другое окно и выбираем в меню Правка (Edit) команду Вста- вить (Paste). Команда Вырезать (Cut), также доступная в меню Правка (Edit), схожа с пре- дыдущим способом манипулирования файлами, за исключением того, что при перемещении файл удаляется с исходного носителя. Осуществить оба варианта вы можете также с помощью клавиатуры. Для этого нажмите сочетание клавиш Ctrl+C (Копировать) или Ctrl+X (Вырезать), а затем Ctrl+V (Вставить). TI31096600F v а х Рис. 3.15: Перетаскивание файла Комбинации клавиш Когда вам нужно нажать сочетание клавиш, например Ctrl+C, вам необходимо удерживать первую клавишу (Ctrl), а затем нажать вторую клавишу (С), после чего нуж- но отпустить обе клавиши. 42
Офисный пакет LibreOffice После завершения экспериментов закройте файловый менеджер, нажав кнопку Закрыть, расположенную в левом верхнем углу окна. Если у вас откры- то сразу несколько окон, закройте их. Если к Raspberry Pi подключено съемное устройство, извлеките его, нажав на кнопку извлечения в правом верхнем углу экрана. Найдите устройство в списке и щелкните по нему мышью, прежде чем отсоединять от компьютера. * Извлечение устройств Прежде чем отсоединять съемное устройство, всегда на- жимайте на кнопку безопасного извлечения. В против- ном случае файлы могут повредиться или выйти из строя. Офисный пакет LibreOffice Узнаем, на что еще способен Raspberry Pi. Для этого снова нажмите на панели задач кнопку в виде малины и в меню Офис (Office) выберите пункт LibreOffice Writer. Перед вами откроется текстовый редактор Writer из популярного офисно- го пакета LibreOffice (рис. 3.16). Если ранее вы работали с Microsoft Office или Google Docs, вы понимаете, о чем идет речь. Примечание'. LibreOffice может быть не установлен по умолчанию в операци- онной системе Raspberry Pi OS. В таком случае для его установки используйте инструмент Recommended Software (см. следующий раздел). Рис. 3.16: Программа LibreOffice Writer 43
Глава 3. Использование Raspberry Pi При помощи текстового редактора вы можете не только самостоятельно пи- сать тексты, но и редактировать их различными путями: вы можете менять стиль шрифта, его цвет, размер, добавлять эффекты и даже вставлять изображения, диаграммы, таблицы и многое другое. К тому же текстовый редактор проверяет вашу работу на наличие ошибок, выделяя орфографические и грамматические ошибки красным и зеленым цветами соответственно. Начнем нашу работу в текстовом редакторе с написания абзаца о том, что вы узнали о Raspberry Pi и о его программном обеспечении. Испробуйте в работе различные значки, расположенные в верхней части окна, чтобы узнать, для чего они предназначены.Узнайте, как сделать шрифт крупней и как изменить его цвет. Если у вас не получается с ходу, наводите курсор мыши по очереди на каждый значок. «Всплывающая подсказка» поможет вам разобраться. Когда вы буде- те удовлетворены своей работой, выберите команду меню Файл Сохранить (File —> Save), чтобы сохранить внесенные изменения (рис. 3.17). Придумайте файлу имя и нажмите кнопку Сохранить (Save). Рис. 3.17: Сохранение документа Сохраните проделанную вами работу L Заведите привычку периодически сохранять проделан- ную вами работу, даже если вы ее еще не закончили. Это избавит вас от лишних проблем. Например: если элект- ричество внезапно отключат, вам не придется проделы- вать все заново. 44
Инструмент Recommended Software Текстовый редактор LibreOffice Writer - это всего лишь одна программа из числа офисных приложений LibreOffice. В той же категории, что и LibreOffice Writer, находятся следующие программы: LibreOffice Base: база данных, приложение для хранения информации, ее быстрого поиска и анализа; LibreOffice Calc: электронная таблица, приложение для работы с числа- ми и создания диаграмм и графиков; LibreOffice Draw: программа для создания иллюстраций. Помогает в создании изображений и диаграмм; LibreOffice Impress: программа, предназначенная для создания презен- таций (разработки слайдов и показа слайд-шоу; LibreOffice Math: редактор формул, программа, предназначенная для создания правильно сформированных математических формул, кото- рые в дальнейшем могут быть использованы в других документах. LibreOffice также доступен на других компьютерах и операционных системах. Если вам понравилось работать с ним в операционной системе Raspberry Pi, вы можете скачать его бесплатно с сайта http://libreoffice.org и установить на любой компьютер под управлением операционной системы MicrosoftWindows, Apple macOS или Linux. Если вы хотите узнать больше о возможностях LibreOffice, откройте меню Справка (Help). Если же нет, закройте LibreOffice Writer, нажав кнопку Закрыть в правом верхнем углу окна. Получение справки В большинстве программ есть специальное меню Справ- ка (Help), открыв которое, вы сможете получить больше информации об этой программе (что это за программа, руководство к ее использованию и т. д.). Если в какой-то момент вы запутаетесь и вам потребуется помощь, от- кройте меню Справка (Help), и оно поможет вам сориен- тироваться. Инструмент Recommended Software Хотя операционная система Raspberry Pi OS поставляется с широким спект- ром заранее установленных программ, вы можете дополнить их. Выбор нуж- ных вам программ можно осуществить с помощью специальной программы Recommended Software. 45
Глава 3. Использование Raspberry Pi Обратите внимание, что программа Recommended Software требует подключе- ния к интернету. Если операционная система Raspberry Pi подключена, нажмите на панели задач кнопку в виде малины, а затем в меню Параметры (Preferences) выберите пункт Recommended Software. Программа откроется, потом начнется загрузка информации о доступном программном обеспечении. Через несколько секунд появится список совместимых пакетов программного обеспечения (рис. 3.18). Все рекомендуемое программное обеспечение разбито в меню на различные категории. Выберите понравившуюся вам категорию, что- бы увидеть входящие в нее программы, либо выберите пункт All Programs (Все программы), чтобы просмотреть их все. Рис. 3.18: Программа Recommended Software Если рядом с понравившейся вам программой есть флажок, значит, она уста- новлена на Raspberry Pi. Если же нет, сами поставьте флажок для дальнейшей установки соответствующей программы. Вы можете отметить флажками столько программ, сколько захотите, а затем установить их все сразу, но если объем ва- шей microSD-карты мал, у вас может не хватить места. Таким же образом вы можете удалить ненужную вам программу: для этого выберите ранее установленную программу и сбросьте флажок напротив ее на- звания. Если вы ошиблись или передумали, вновь установите флажок. Когда вы будете удовлетворены выбором программ, нажмите кнопку ОК, и начнется процесс установки/удаления (рис. 3.19). После загрузки и установ- ки новых программ появится диалоговое окно. Для закрытия окна программы Recommended Software нажмите кнопку ОК. 46
Инструмент Raspberry Pi Configuration Рис. 3.19: Удаление программы из операционной системы Дополнительную программу для установки или удаления программ - Add/ Remove Software - можно найти в том же разделе в меню операционной системы. Здесь предоставляется более широкий спектр дополнительных программ,однако они не были проверены компанией Raspberry Pi Foundation. Инструмент Raspberry Pi Configuration Последняя программа,о которой мы с вами поговорим в этой главе, - инструмент настройки Raspberry Pi под названием Raspberry Pi Config и ratibn. Функции данной программы схожи с функциями мастера начальной настройки - они обе позво- ляют вносить изменения в различные настройки Raspberry Pi OS. Нажмите на па- нели задач кнопку в виде малины, откройте меню Параметры (Preferences) и вы- берите пункт Raspberry Pi Configuration (Конфигурация Raspberry Pi) (рис. 3.20). Окно программы разделено на четыре вкладки, каждая из которых отвечает за определенную категорию настройки Raspberry Pi OS. При открытии инстру- мента Raspberry Pi Configuration программа сначала показывает содержимое первой вкладки - System (Система), позволяющей менять пароль вашей учетной записи, присваивать локальной или беспроводной сети Raspberry Pi имя узла, а также подстраивать остальные настройки. Однако большинство из них не нужда- ются в изменениях. Немного деталей | Сейчас мы кратко знакомим вас со всеми программами, чтобы вы к ним привыкли. Если вы хотите узнать о них более подробно, предлагаем вам перейти в приложе- ние Е. 47
Глава 3. Использование Raspberry Pi Рис. 3.20: Инструмент Raspberry Pi Configuration Чтобы перейти к следующему разделу, щелкните мышью по вкладке Interfaces (Интерфейсы). Обратите внимание, большинство пунктов этой категории отклю- чены. Вносить изменения в настройки данного раздела следует только в слу- чае подключения дополнительного оборудования, например модуля камеры Raspberry Pi, и то опираясь на приложенную к нему инструкцию. Исключением из этого правила является протокол SSH, позволяющий удаленно управлять вашей учетной записью Raspberry Pi с другого компьютера в вашей сети с помощью клиента SSH. Ключевая особенность заключается в том, что SSH шифруеттрафик, делая подключения безопасными. А также система удаленного доступа к рабо- чему столу компьютера -VNC (Virtual Network Computer), управляемая клиентом VNC. Дистанционный низкоуровневый интерфейс ввода/вывода общего назна- чения (GPIO) позволяет управлять устройством с другого компьютера (больше информации о нем в главе 6). Откройте третью категорию, перейдя на вкладку Performance (Производи- тельность). Здесь вы можете выбрать объем памяти, используемой графическим процессором (GPU) Raspberry Pi, и для некоторых моделей путем разгона (овер- клокинга) доступно повышение производительности Raspberry Pi. Однако, как и в предыдущей вкладке, здесь также лучше не вносить изменения без необходи- мости. Откройте вторую категорию, перейдя на вкладку Display (Экран). Здесь вы мо- жете регулировать некоторые настройки, связанные с экраном, например дубли- рование пикселей или отключение угасания экрана. Однако, как и в предыдущей вкладке, здесь также лучше не вносить изменения без необходимости. И наконец, перейдите в последнюю вкладку Localisation (Локализация). Здесь вы можете управлять настройками локали, отвечающей за язык, отображение чисел, часовой пояс, раскладку клавиатуры и определение вашей страны, для 48
Выключение дальнейших действий, осуществляемых по сети Wi-Fi. А пока нажмите кнопку Cancel (Отмена) для закрытия окна инструмента, не внося каких-либо изменений. Внимание! Частотные каналы беспроводной сети Wi-Fi определяют- ся особыми правилами, разнящимися от страны к стране. Поэтому если в настройках вы укажете не ту страну, в которой вы на самом деле находитесь, то, скорее всего, работа сети Wi-Fi будет осложнена и даже может стать незаконной - см. закон «О средствах массовой инфор- мации». Именно поэтому мы не советуем вам этого де- лать. Выключение Теперь, когда вы владеете навыками работы с приложениями в операционной системе Raspberry Pi OS, пришло время обсудить очень важный вопрос: безопас- ное выключение устройства Raspberry Pi. Как и любой компьютер, Raspberry Pi хранит ваши файлы в энергозависимой памяти, которая удаляет все содержи- мое при выключении системы. Чтобы сохранить содержимое документа, до- статочно перенести файл из энергозависимой памяти в энергонезависимую (на microSD-карту), тогда у вас точно ничего не удалится. Однако созданные вами файлы - не единственное, что требует сохранения. Сама операционная система Raspberry Pi OS осуществляет работу ряда про- цессов в фоновом режиме. Таким образом, отключение кабеля, соединяющего компьютер с источником питания, может привести к сбоям в работе операцион- ной системы и необходимости ее переустановки. Чтобы этого не случилось, вам необходимо посредством нажатия специаль- ной кнопки сообщить системе о намерении ее отключения. Тогда компьютер со- хранит все необходимые файлы и будет готов к безопасному выключению. Этот процесс носит название завершение работы операционной системы. Внимание! Никогда не отключайте кабель от источника питания раньше выключения самого устройства Raspberry Pi. Это может привести к повреждению операционной системы, а также потере созданных или загруженных вами фай- лов. 49
Глава 3. Использование Raspberry Pi Нажмите на панели задач кнопку в виде малины, расположенной в левом верхнем углу рабочего стола, а затем выберите пункт Завершить сеанс (Shut- down). Появится окно с тремя вариантами: Shutdown (Завершение работы), Re- boot (Перезагрузка) и Logout (Выход из системы) (рис. 3.21). Shutdown (Заверше- ние работы) - действие, которое вы будете использовать чаще всего: выполняя его, Raspberry Pi OS закроет все открытые программы и файлы, а затем выключит Raspberry Pi. Как только монитор погаснет, подождите несколько секунд, пока зеленый огонек на Raspberry Pi не перестанет мигать. Только теперь можно безопасно отключить устройство от источника питания. Для включения Raspberry Pi просто отсоедините, а затем снова подключите кабель питания или включите питание в розетке. Рис. 3.21: Завершение работы Raspberry Pi При выборе варианта Reboot (Перезагрузка) происходит тот же процесс, что и при выключении. Все вкладки закрываются, но вместо того, чтобы выключить Raspberry Pi, система перезапускает его (словно вы сначала выбрали Shutdown (Завершение работы), а потом заново подключили кабель к источнику питания). Кнопка Reboot (Перезагрузка) может понадобиться в том случае, если были внесены определенные изменения, потребовавшие перезагрузки операционной системы. Например, когда вы устанавливаете обновления для вашего основного ПО, или что-то пошло не так (произошел сбой) и работа Raspberry Pi OS перестала осуществляться должным образом. И наконец, пункт Logout (Выход из системы) необходим только в том случае, если у вас имеется более одной учетной записи пользователя на Raspberry Pi. Тогда система закрывает все открытые в данный момент программы и переносит вас на экран входа, где вам будет предложено ввести имя и пароль другого поль- зователя. Если вы нажмете эту кнопку по ошибке, а затем захотите вернуться, просто введите выбранное вами ранее (в начале этой главы и введенное в окне приветствия) имя пользователя и пароль. 50
Глава 4 Программируем на Scratch 3 Учимся писать программы на Scratch, блочном языке программирования Raspberry Pi не ограничивается использованием приложений, написан- ных другими людьми. Пользователи могут создавать свое собственное программное обеспечение, основываясь на безграничных возможностях своего воображения. В данном случае не важно, есть ли у пользователя опыт создания программ - процесса, называемого программированием или кодиро- ванием, - или нет. Данная платформа является огромным полем для экспери- ментов. В основе Raspberry Pi лежит образовательный язык программирования с гра- фическим интерфейсом - Scratch. Он был разработан Массачусетским техноло- гическим институтом (MIT). Написание текстовых инструкций с использованием традиционных языков программирования можно сравнить с составлением ре- цепта для торта. Scratch же в игровой форме (в форме головоломок) предлагает создать программу, соединяя фрагменты кодов, написанных на кубиках, в еди- ную форму - сценарий. 51
Глава 4. Программируем на Scratch 3 Scratch - отличный помощник в освоении начинающими программистами этой сферы. Некоторые могут подумать, что это всего лишь игрушка. Не стоит торопиться с выводами. Scratch - очень мощная и многофункциональная сре- да программирования, позволяющая создать все, что угодно, начиная от самых простых игр и анимаций и заканчивая сложными интерактивными проектами по робототехнике. Знакомство с интерфейсом Scratch 3 А Сцена - сравнимо с актерами на сцене, ваши спрайты перемещаются по полю, при этом вы сами контролируете весь процесс. В Спрайт - персонаж или любой другой объект, которым вы управляете в программе Scratch, размещенный в области сцены. С Управление сценой - посредством определенных элементов управления сценой вы можете добавлять собственные изображения для дальнейшего их использования в качестве фона. D Список спрайтов - здесь вы найдете все спрайты, которые вы уже создали и загрузили в Scratch. Е Палитра блоков - все доступные вам блоки отображаются в так называемой палитре блоков и оформлены различными цветами. F Блоки - заранее написанные части программного кода, позволяющие самостоятельно шаг за шагом создавать программы. G Область сценариев - область, в которой вы выстраиваете свою программу путем перетаскивания отдельных блоков из палитры блоков. 52
Твоя первая программа, созданная с помощью Scratch: Привет, мир! Версии Scratch На момент написания книги Raspberry Pi OS поддерживает одну из трех версий Scratch: 1, 2 и 3. Каждая из них включена в программу и находится в разделе программирования в меню. Данная глава написана для третьей версии Scratch, которая поддерживается только Raspberry Pi 4. Scratch 1 работает на всех мо- делях; Scratch 2 - на Raspberry 2 и т. д. Проекты, представленные в этой главе, под версию Scratch 2 вы можете найти, перейдя по предоставленным ссылкам. Твоя первая программа, созданная с помощью Scratch: Привет, мир! Загрузка Scratch 3 происходит так же, как загрузка любой другой программы, предназначенной для операционной системы Raspberry Pi. Сначала нажмите на панели задач кнопку в виде малины. Перед вами появится меню операционной системы Raspberry Pi OS. Откройте меню Программирование (Programming) и выберите пункт Scratch 3. Через несколько секунд вы увидите пользовательский интерфейс Scratch 3. В большинстве языков программирования вам самим приходится задавать команды посредством написания различных инструкций. В этом-то и отличие программы Scratch. Для начала выберите раздел Внешний вид (Looks), чтобы увидеть группу блоков фиолетового цвета. Нажав и удерживая кнопку мыши на блоке [ПриветД, перетащите его в область сценариев (рис. 4.1). сказать Рис. 4.1: Перетащите блок в область сценариев 53
Глава 4. Программируем на Scratch 3 Обратите внимание на форму только что выбранного вами блока. Заметили выемку сверху и выпуклость снизу? Похоже на фрагмент пазла и подразумевает то, что сверху и снизу к этому блоку должны быть в дальнейшем присоединены какие-то детали. В данной программе часть, которую мы будем присоединять сверху, носит название триггера. Теперь перейдем в раздел События (Events), выделенный золотым цветом. На- жав и удерживая кнопку мыши на блоке (так называемая шапка блока), перетащите его в область сценариев. При этом располагаем этот блоктак, чтобы он соединился с уже имеющимся блоком сказать ^риветД как пазл. Необя- зательно располагать блоки с максимальной точностью друг к друг. Если вы под- несли один блок достаточно близко к другому, они соединятся самостоятельно. Если же не удастся с первого раза, пробуйте регулировать положение блока до тех пор, пока кусочек не встанет на нужное место. Вот мы и завершили создание нашей первой с вами программы. Для ее запус- ка нажмите кнопку в виде зеленого флажка в левом верхнем углу сцены. Если вы сделали все верно, то ваш спрайт котика радостно вас поприветствует! - ваша первая программа удалась (рис. 4.2)! Рис. 4.2: Нажмите кнопку в виде зеленого флажка, расположенную в левом верхнем углу сцены, и котик скажет: «Привет!» 54
Следующий шаг - последовательность действий Прежде чем двигаться дальше, назовите и сохраните вашу программу. Для этого в меню Файл (File) выберите пункт Сохранить на свой компьютер (Save to your computer). Придумайте имя и нажмите кнопку Сохранить (Save) (рис. 4.3). Рис. 4.3: Придумайте название программы и сохраните ее На что способен спрайт? Некоторые блоки в Scratch можно изменить. Попробуйте написать что-то другое вместо слова «Привет!». Затем на- жмите кнопку в виде зеленого флажка. Что поменялось? Следующий шаг - последовательность действий Хотя в основе созданной вами программы лежат два блока, при запуске вы- полняется лишь одна команда: сказать [ПриветД. Для достижения большего резуль- тэта вам необходимо ознакомиться с алгоритмом создания последовательно- сти действий. Ранее мы уже сравнивали коды к самым простым компьютерным программам с рецептом для пирога. Здесь каждая новая инструкция логически вытекает из предыдущей. Такая последовательность называется линейной. Теперь, нажав и удерживая кнопку мыши на блоке сказать Привет1 перетащим его обратно в палитру блоков (рис. 4.4). Тем самым мы удаляем его из нашей программы и оставляем лишь триггерный блок 55
Глава 4. Программируем на Scratch 3 Рис. 4.4: Чтобы удалить блок, просто перетащите его из области сценариев в палитру блоков Перейдите в категорию Движение (Motion), а затем перетащите блок в область сценариев так, чтобы он прикрепился к триггерному бло- ку снизу. Уже по названию блока мы понимаем, что он задает команду нашему спрайту котика двигаться на несколько шагов вперед. Теперь немного усложним задачу, а именно создадим последовательность действий. Перейдите в раздел Звук (Sound), выделенный сиреневым цветом, и перетащите блок снова вернитесь к разделу Движение (Motion) и перетащите еще один блок ДюД 3 под блок чение в нем с 10 на -10. Таким образом у вас получится блок играть звук Мяу ▼ до конца под блок 10 . Теперь играть звук Мяу ▼ до конца но на этот раз измените зна- Г-1 идти шагов 56
Следующий шаг - последовательность действий Нажмите кнопку в виде зеленого флажка, расположенную над областью сцены, чтобы запустить программу. Ваш котик будет мяукать и двигаться вправо, а затем вернется обратно на свое место. Убедитесь, что у вас работают динамики или подключены наушники. Если хотите повторить, просто нажмите кнопку в виде зеленого флажка еще раз, и котик снова выполнит указанные команды. Поздравляем! Вы создали последовательность действий, которую спрайт выполняет по порядку, сверху вниз.Хотя ваш спрайт и выполняет каждое действие по отдельности, вы этого не замечаете, поскольку происходит это достаточно быстро. Теперь удалите блок блоков, предварительно отсоединив от него нижний блок заменим звуковой блок более простым: обратно в конец программы. играть звук Мяу ▼ до конца включить звук Мяу перетащив в палитру Далее И перетащите блок Г-1 идти шагов Г-1' идти вЭ шагов Нажмите кнопку в виде зеленого флажка. Однако сейчас при запуске програм- мы ваш котик почему-то не двигается. На самом деле это не так. Спрайт движется, но делает это так быстро, что вам кажется, что он стоит на месте. Связано это с тем, что при выполнении команды блока включить звук Мяу ▼ программе не нужно ждать ее окончания перед переходом к следующему действию. Raspber- ry Pi «думает» очень быстро, настолько, что человеческим глазом невозможно уловить выполнение данной команды. Для того чтобы все-таки увидеть движе- ние нашего героя, воспользуемся блоком играть звук Мяу ▼ до конца Перейди- те в раздел Управление (Control), выделенный оранжевым цветом на палит- разместив его между блоками 57
Глава 4. Программируем на Scratch 3 При запуске программы происходит следующее: котик перемещается вправо, ждет секунду и перемещается обратно влево. В данном случае можно говорить о задержке - команде, позволяющей контролировать время выполнения действий блоков последовательности. Задача: еще больше шагов! Попробуйте увеличить количество шагов, изменив зна- чения в соответствующих блоках. Что произойдет, если количество шагов в одном синем блоке не совпадет с количеством шагов в другом синем блоке? А что прои- зойдет, если вы попробуете воспроизвести несколько звуков одновременно? Цикличность Последовательность действий, которую мы только что задали спрайту, вы- полняется лишь один раз после нажатия кнопки в виде зеленого флажка: ко- тик передвигается в сторону, мяучит, а затем возвращается обратно. Программа Scratch также предоставляет нам возможность сделать так, чтобы спрайт выпол- нял данную последовательность циклично, посредством использования циклов, расположенных в разделе Управление (Control). Для этого вам нужно щелкнуть по разделу Управление (Control), расположенному на палитре блоков, выбрать блок повторять всегда и переместить его в область сценариев между блоками когда нажат 58
Следующий шаг - последовательность действий Обращаем ваше внимание на то, как С-образный блок чил в себе остальные блоки последовательности. После нажатия кнопки в виде повторять всегда заклю- зеленого флажка ваш спрайт будет выполнять данную цепочку команд по кругу - и так до бесконечности, пока вы сами не решите прервать ее. В программиро- вании данное явление получило название бесконечного цикла - проще говоря, цикла, который никогда не завершится. Если же мяуканье вашего спрайта усиливается, нажмите кнопку в виде крас- ного восьмиугольника рядом с зеленым флажком, расположенным над областью сцены. Это остановит программу. Для изменения типа цикла перетащите блок ШДЦГхйДШЬ! и все расположенные под ним блоки из цикла повторять всегда ПОД блок когда нажат После чего перетащите блок повторять всегда на палитру бло- ков, для того чтобы его удалить. А затем перетащите блок в то место, где ранее находился блок повторять всегда 59
Глава 4. Программируем на Scratch 3 Для запуска новой программы нажмите кнопку в виде зеленого флажка. Вам может показаться, что ничего не изменилось: котик так же повторяет последо- вательность. Однако на этот раз цикл завершится после 10 повторений (итера- ций цикла). Данное явление носит название определенного цикло. Здесь вы сами определяете, когда он должен закончиться. В большинстве программ, особенно в игровых и работающих с датчиками, часто применяются как бесконечные, так и определенные циклы. А что произойдет сейчас? Что произойдет, если вы измените число в блоке, отве- чающем за цикличность, в большую сторону? А если в меньшую? Что произойдет, если вы введете число 0? Переменные и условные конструкции Наконец, ознакомимся с заключительными понятиями, которыми необхо- димо овладеть перед началом работы со Scratch, - переменными и условными конструкциями. Переменная - значение, которое может варьироваться (другими словами, изменяться) с течением времени или под воздействием программы. Два основных свойства переменной - имя и значение. Значение не обязательно передается посредством чисел. Оно может быть передано также текстом, являть- ся истинным или ложным и иногда даже пустым (т. е. носить нулевое значение). Переменная играет очень важную роль. Представьте, что в игре вам необхо- димо постоянно отслеживать уровень здоровья персонажа, перемещение како- го-либо объекта, уровень, которого вы достигли к настоящему моменту, счет и прочее. Каждая из них представляет собой переменную. Для начала сохраним нашу программу: откройте меню Файл (File), а затем выберите пункт Сохранить на свой компьютер (Save to your computer). Если вы ранее уже сохраняли изменения, то программа предложит вам заменить старую копию новой актуальной версией. После этого в меню Файл (File) выбе- рите пункт Новый (New). Если появится диалоговое окно с запросом «Заменить содержимое текущего проекта?», нажмите кнопку ОК. Теперь в палитре бло- ков перейдите в темно-оранжевый раздел Переменные (Variables) и нажмите кнопку Создать переменную (Make a Variable). В появившемся окне введите слово цикл (рис. 4.5), после чего нажмите кнопку ОК, и в палитре блоков по- явится новый блок. 60
Следующий шаг - последовательность действий Рис. 4.5: Присваиваем имя новой переменной в область сценариев. Данная ко- Перетащите блок манда задает переменной значение 0. Затем из категории Внешний вид (Looks) перетащите блок задать цикл ▼ значение (ц говорить так, чтобы он оказался под блоком задать цикл ▼ значение {у 1ривет1д 2 секунд сказать ^Привет!' Как вы могли заметить, блок задает спрайту котика команду го- ворить то, что написано в данном блоке. При этом вы можете не только вручную написать фразу, но и задать ее с помощью переменной. Снова перейдите к па- литре блоков в раздел Переменные (Variables) и перетащите блок слова «Привет!» в блоке вается репортером и находится в самом начале списка (рядом с такими блока- сказать поверх по-другому назы- цикл ми есть пространство для установки флажка). Таким образом вы создали новый 61
Глава 4. Программируем на Scratch 3 Перейдите в раздел События (Events) на палитре блоков, а затем перетащи- в самое начало нашей последовательности. При нажатии когда нажат те блок кнопки в виде зеленого флажка, расположенной в области сцены, мы видим, что котик говорит «О» (рис. 4.6) - значение, которое вы задали переменной цикл. Рис. 4.6: Котик произносит значение переменной Как вы уже поняли, мы можем задать любое значение переменной. Для этого перейдите к палитре блоков и загляните в раздел Переменные (Variables). Затем перетащите блок изменить цикл ▼ на о в нижнюю часть последовательности. Далее перейдите в раздел Управление (Control), а затем перетащите блок ЯроТ^так.чтобы он располагался подблоком задать цикл ▼ значение и заключал в себе два последних блока последовательности. 62
Следующий шаг - последовательность действий Снова нажмите кнопку в виде зеленого флажка. Ваш спрайт произносит числа по порядку от 0 до 9. Происходит это потому, что заданная вами команда из- меняет, или, другими словами, модифицирует саму переменную. Теперь каждый раз при запуске цикла программа прибавляет единицу к значению переменной цикл (рис. 4.7). Рис. 4.7: Благодаря переменной котик теперь может считать Считаем с нуля Цикл, который вы создали, выполняется 10 раз. Так по- чему же котик считает до 9? Дело в том, что программа также учитывает и 0. Поэтому если вы хотите, чтобы котик досчитал до «10», вам следует изменить начальное зна- чение переменной с 0 на 1. Существуют и другие способы изменения значения переменной. Перетащи- те блок говорить цикл о секунд из блока 1ШШ . Теперь удалите сам блок перетащив его на палитру блоков. А сейчас воспользуемся блоком повторять пока не В результате блок повторять пока не будет за- 63
Глава 4. Программируем на Scratch 3 ключать в себе два блока, соединенных между собой: говорить цикл секунд изменить цикл ▼ на о Далее на палитре блоков перейдите в раздел Опера- торы (Operators). Найдите ромбовидный блок <£ и перетащите его на соответствующее ему ромбовидное отверстие блока повторять пока не Зеленый блок из раздела Операторы (Operators) позволяет нам приравнять два значения, включая переменные. Перейдите в раздел Переменные (Variables) и перетащите блок ЦИКЛ в пустое окошко зеленого блока а затем в ж этом же блоке замените число 50 на число 10. Нажмите кнопку в виде зеленого флажка, расположенную над областью сце- ны. Программа запустится, и вы обнаружите, что ничего не поменялось и ваш спрайт так же, как и раньше, считает от 0 до 9 (рис. 4.8), после чего программа завершает свою работу. Это происходит потому, что действия блоков (10Щ схожи. Разница состоит в том, что первый блок вместо подсчета повторять пока не 64
Следующий шаг - последовательность действий циклов сравнивает значение переменной цикл со значением, введенным после знака =. Когда значение переменной достигает 10, программа завершает работу. цикл Рис. 4.8: Пример совместного использования блока «Повторять пока не» и оператора сравнения Исходя из названия, оператор сравнения сравнивает два значения. Щелкнув по разделу Операторы (Operators), расположенному на палитре блоков, вы мо- жете найти два других таких блока. Все они имеют ромбовидную форму. Также здесь вы можете найти блок, содержащий знак =. Блок со значком < сравнивает два значения и запускает программу тогда, когда значение слева меньше зна- чения справа. С точностью до наоборот происходит с блоком, включающим зна- чок >: программа сравнивает два значения и запускает программу тогда, когда значение слева больше значения справа. Перейдите в раздел Управление (Control) на палитре блоков и пере- тащите блок QBK в область сценариев. Далее поместите его под блок тем самым автоматически заключив блок Далее перетащите блок чтобы он соединился с нижней частью блока по категории Внешний вид (Looks), расположенной на палитре блоков, а за- тем перетащите блок перь щелкните мышью по категории Операторы (Operators), расположенной на палитре блоков, и выберите блок 50 Перетащите его в ромбовидное пространство блока говорить цикл изменить цикл 1Т секунд говорить 1риветЦ Г 2 секунд изменить цикл ▼ на если , то Щелкните мышью внутрь блока если , то Те- если , то 65
Глава 4. Программируем на Scratch 3 говорить если когда нажат задать цикл повторять пока не цикл изменить цикл Блок только при соблюдении условия, указанного внутри этого блока. Перейдите в раздел Переменные (Variables) на палитре блоков и перетащите блок в незаполненное пространство в блоке Ц 50 .а затем введите число 5 вмес- замените слово «Привет!» на если , то задает условие. Это означает, что программа заработает ^ЦИКЛ то 50. Теперь в блоке «Это число больше!». говорить 1ривет!д 2 секунд , то когда говорить если цикл говорить изменить цикл задать цикл повторять пока не цикл 66
Проект 1: Скорость реакции космонавта Нажмите кнопку в виде зеленого флажка. Сначала программа будет работать, как раньше: котик будет считать от нуля и дальше. Когда цифра будет больше 5 (например, 6), блок если ,то сработает и спрайт скажет вам: «Это число боль- ше!» (рис. 4.9). Поздравляем! Теперь вы владеете навыками работы с перемен- ными и условными конструкциями! Рис. 4.9: Котик говорит, что число больше заданного, когда оно достигает б Задача: больше или меньше Что нужно изменить в последовательности для того, что- бы котик сообщил о том, что число меньше 5? А что для того, чтобы он говорил и про большие, и про меньшие числа? Для облегчения задачи поэкспериментируйте с блоком если , то Проект 1: Скорость реакции космонавта Теперь, когда вы уже достаточно хорошо знакомы с принципами работы Scratch, пора создать что-то более масштабное. А именно игру «Скорость реакции космо- навта», разработанную в честь астронавта Тимоти Пика и его продолжительного полета на МКС. 67
Глава 4. Программируем на Scratch 3 Онлайн-проект Версия данной игры в интернете доступна по адресу http://mbitech.ru/rpi001. При желании вы можете сохранить созданную вами ранее программу. Те- перь создадим новый проект: в меню Файл (File) выберите пункт Новый (New). И прежде чем начать, сохраните файл под именем «Скорость реакции космо- навта»: в меню Файл (File) выберите пункт Сохранить на свой компьютер (Save to your computer). В этом проекте мы с вами будем уделять внимание двум вещам: фону сцены и спрайту. Данные компоненты не загружены в проект изначально, поэтому вам будет необходимо добавить их: нажмите на панели задач кнопку в виде мали- ны, чтобы открыть меню Raspberry Pi OS, затем в категории Интернет (Internet) щелкните мышью по значку браузера Chromium. После загрузки браузера вве- дите адрес ftp://rpf.io/astronaut-backdrop в адресную строку и нажмите клавишу Enter. Правой кнопкой мыши щелкните по изображению космоса,а затем выбе- рите пункт Save image as... (Сохранить изображение как...). Введите подходящее имя файла и нажмите кнопку Save (Сохранить) (рис. 4.10). Вернитесь к адресной строке и введите ftp://rpf.io/astronaut-sprite. Нажмите клавишу Enter. Рис. 4.10: Сохранение изображения для фона сцены Теперь щелкните правой кнопкой мыши по изображению Тима Пика, затем выберите пункт Save image as... (Сохранить изображение как...). Введите подхо- 68
Проект 1: Скорость реакции космонавта дящее имя файла и нажмите кнопку Save (Сохранить). Сохранив оба изображе- ния, закройте браузер и перейдите к программе Scratch 3. Пользовательский интерфейс Если вы следовали инструкциям, указанным в данной главе, от начала и до конца, то вы уже знакомы с интер- фейсом программы Scratch 3. Дальнейшие инструкции будут преподноситься с учетом того, что вы уже озна- комлены с расположением основных разделов. В случае если вы все-таки забыли, где найти тот или иной раздел, вернитесь в начало этой главы. Щелкните правой кнопкой мыши по изображению спрайта котика, а затем вы- берите пункт Удалить (0е1е1е).Установите указатель мыши на значок @ Выбрать фон (Choose a Backdrop) и нажмите кнопку Q Загрузить фон (Upload Backdrop). Найдите скачанное изображение космоса под названием Космос.рпд в папке с загруженными файлами, щелкните по нему мышью и нажмите клавишу ОК. Белый фон сцены будет заменен изображением космоса, а область сценариев сменится на раздел Фоны (Backdrops) (рис. 4.11). Здесь вы можете рисовать прямо поверх фона, но это чуточку позже. Сейчас вернитесь обратно в раздел Код (Code) с по- мощью вкладки, расположенной в верхней части окна приложения Scratch 3. Рис. 4.11: Белый фон сцены был заменен изображением космоса Теперь займемся загрузкой нового спрайта: установите указатель мыши на зна- чок Q Выбрать спрайт (Choose a Sprite) и щелкните мышью по кнопке Q За- грузить спрайт (Upload Sprite). Найдите файл Астронавт.рпд (или как вы его там 69
Глава 4. Программируем на Scratch 3 назвали) в папке с загруженными файлами, щелкните по нему мышью, а затем нажмите кнопку ОК. Спрайт автоматически появится на сцене, однако может ока- заться не по центру. Для изменения его положения, нажав и удерживая на нем левую кнопку мыши, перетащите его так, чтобы он оказался в центре (рис. 4.12). Рис. 4.12: Перетащите спрайт в виде астронавта в нижнюю центральную часть сцены Теперь, когда у вас готовы базовые элементы, такие как спрайт и фон, мож- но приступать к созданию программы. Начнем с создания новой переменной время, в настройках которой следует установить флажок Для всех спрайтов (For all sprites). Для того чтобы выбрать спрайт, щелкните мышью по нему либо на сцене, либо в списке спрайтов. Затем перетащите в область сцена- риев блок когда говорить 1риветТ^ нажат секунд из раздела События (Events). Далее добавьте блок из раздела Внешний вид (Looks). Щелкните мышью по последнему блоку и смените текст «Привет» на «Привет! Это британский астронавт Тим Пик! Вы готовы?». 1 ждать ^секунд Перетащите в область сценариев блок (Control) и блок ке замените текст «Привет!» на «Полетели!». Теперь добавим блок сказать из раздела Управление ^Привет!, из раздела Внешний вид (Looks). В последнем бло- сбросить таймер из категории Сенсоры (Sensing). Данный блок отвечает за отдельную переменную, позволяющую определить время, которое будет отведено на реакцию игрока. 70
Проект 1: Скорость реакции космонавта в пустой многоугольник предыдущего блока. Благодаря данному блоку про- грамма останавливается и запускается только после нажатия клавиши Про- бел. При этом таймер будет продолжать свою работу, подсчитывая время, ко- торое прошло с момента появления фразы «Полетели!» до нажатия клавиши Пробел. когда К нажат говорить секунд Привет! Это британский астронавт Тим Пик! Вы готовы? ждать секунд сказать Полетели!, сбросить таймер ждать до клавиша пробел * нажата? Сейчас необходимо сделать так, чтобы Тим сообщил вам то самое время в простой, понятной для вас форме. И в этом случае мы будем использовать блок ) из раздела Операторы (Operators). Переменная здесь принимает два значения и в дальнейшем сливается в одно. Такой процесс полу- чил название конкатенации. Поверх слова «Привет!» блока к Щелкните мышью по слову «яблоко» и вместо него на- сказать Привет! поместите блок объединить таймер пишите фразу «Время вашей реакции». Убедитесь, что вы поставили пробел в конце вписанной фразы. Далее подставляем тот же самый зеленый блок, но уже на место слова «банан». В этом блоке в первую ячейку поместите блок раздела Сенсоры (Sensing), а во вторую впишите слово « секунд». Не забудьте про пробел перед словом «секунд». 71
Глава 4. Программируем на Scratch 3 когда нажат говорить секунд Привет! Это британский астронавт Тим Пик! Вы готовы? 1 ждать секунд сказать Полетели! сбросить таймер ждать до клавиша пробел ▼ нажата? сказать объединить Время вашей реакции объединить таймер секунд Перетащите блок задать моя переменная ▼ значение ф из раздела Переменные (Variables) в конец заданной последовательности. Откройте в этом блоке раскры- вающийся список «моя переменная» и выберите пункт время, а вместо значения «О» подставьте блок вы можете запустить игру, нажав кнопку в виде зеленого флажка, расположен- ную над областью сцены. Будьте внимательны! Как только на экране появится фраза «Полетели!», нажмите клавишу Пробел настолько быстро, насколько смо- жете (рис. 4.13), - попробуйте побить наш рекорд! находящийся в разделе Сенсоры (Sensing). Теперь таймер Рис. 4.13: Время играть! 72
Проект 1: Скорость реакции космонавта Теперь можем усложнить задачу и попробовать рассчитать расстояние, кото- рое пролетел наш герой на МКС за то время, пока мы еще не нажали клавишу Пробел. Будем ссылаться на общедоступную информацию о скорости, а именно 7 км/с. Для этого создадим новую переменную с именем «дистанция». Обрати- те внимание на то, что блоки категории Переменные (Variables) автоматически обновляются, при этом блоки, содержащие переменную ДЯдГЬ остаются неиз- менны. Добавим блок время О и вместо 0 подставим блок ум- ножения из раздела Операторы (Operators). Далее перетащите блок в первый пустой кружок, а во втором укажите число 7. В результате у вас получится блок струкции программа рассчитывает расстояние, пройденное МКС в километрах, умножая скорость (7) на время, потребовавшееся вам для нажатия клавиши Про- бел. задать дистанция ▼ значение fjj время задать дистанция ▼ значение время Благодаря данной ин- когда нажат говорить ждать секунд Привет! Это британский астронавт Тим Пик! Вы готовы? секунд сказать Полетели. 1 сбросить таймер ждать до клавиша пробел ▼ нажата? сказать объединить Время вашей реакции объединить таймер секунд задать время ▼ значение таймер задать дистанция ▼ значение время Добавьте блок ждать® секунд и замените 1 на 4. Перетащите блок сказать Привет! в самый конец последовательности и вместо слова «Привет!» поставьте два бло- ка объединить СИЯЭ (ёШПВ )так, как мы делали с вами раньше. В первом кружке вместо слова «яблоко» введите: «Время, за которое МКС пролетит», а в послед- нем кружке вместо слова «банан» впишите «километров». Опять же не забывай- те про пробелы.
Глава 4. Программируем на Scratch 3 когда нажат говорить секунд Привет! Это британский астронавт Тим Пик! Вы готовы? ждать сказать сбросить таймер ждать до клавиша пробел ▼ нажата? сказать объединить Время вашей реакции объединить таймер секунд задать время ▼ значение таймер задать дистанция ▼ значение время * сказать объединить Время, за которое МКС пролетит Теперь перетащите блок J в средний пустой кружок. А сейчас вставьте блок в блок ). Зеленый блок округляет числа до целого. Преимущество здесь заключается в том, что хотя число и не сверхточное, зато оно легко воспринимается. дистанция когда нажат говорить 1 округлить округлить секунд Привет! Это британский астронавт Тим Пик! Вы готовы? ждать секунд сказать Полетели сбросить таймер ждать до клавиша пробел ▼ нажата? сказать объединить Время вашей реакции объединить таймер секунд задать время ▼ значение таймер задать дистанция ▼ значение время сказать объединить Время, за которое МКС пролетит объединить округлить дистанция километров 74
Проект 2: Синхронное плавание Нажмите кнопку в виде зеленого флажка. После запуска программы мы уз- наем, сколько километров пролетит МКС за время до нажатия клавиши Пробел. После того как вы закончите, не забудьте сохранить программу, чтобы потом не начинать все с самого начала! Рис. 4.14: Тим рассказывает нам, сколько километров пролетела МКС Вопрос: кто быстрее? В каких еще сферах, кроме космонавтики, важна быстрая реакция? Сможете продемонстрировать одну из них при помощи программы Scratch? Проект 2: Синхронное плавание В большинстве игр для управления персонажем используется несколько клавиш на клавиатуре. Мы тоже не будем отставать и попробуем создать игру, управлять пер- сонажем которой будет возможно при помощи клавиш, Т, | и —> на клавиатуре. 75
Глава 4. Программируем на Scratch 3 Онлайн-проект Этот проект также доступен по ссылке http://mbitech.ru/rpiOO2. Версия под Scratch 2 доступна по адресу https://rpf.io/synchro-swimming. Создайте и сохраните новый проект под названием «Синхронное плавание». Щелкните мышью по слову Сцена (Scene) в правой части окна программы, а затем перейдите на вкладку Фоны (Backdrops), расположенную в левом верх- нем углу. Нажмите кнопку Конвертировать в растровую графику (Convert to Bitmap). В раскрывающемся списке Заливка (Fill) выберите синий цвет, выбе- рите инструмент Заливка (Fill), а после щелкните мышью по клетчатому фону (рис. 4.15). Рис. 4.15: Залейте фон синим цветом Теперь удалите спрайт котика, щелкнув по нему правой кнопкой мыши, а за- тем выбрав пункт Удалить (Delete). Далее откройте список доступных спрайтов, щелкнув мышью по кнопке Q Выбрать спрайт (Choose a Sprite). В категории Животные (Animals) выберите спрайт Cat Flying (рис. 4.16) и нажмите кнопку ОК. Этот спрайт отлично впишется в наш проект. 76
Проект 2: Синхронное плавание Рис. 4.16: Выберите спрайт в библиотеке Щелкните мышью по новому спрайту. А теперь на вкладке Код (Code) пе- ретащите два блока в область сценариев. Нажмите на маленькую стрелочку рядом со словом «Пробел» и замените его на Стрелка влево. Далее из раздела Движение (Mo- tion) перетащите блок когда клавиша пробел ▼ нажата из раздела События (Events) 15 повернуть О на <0 градусов когда клавиша стрелка влево ▼ нажата когда клавиша пробел ▼ нажата Стрелка вправо и добавьте блок (Motion). и поместите его под блок Проделайте то же самое со вторым блоком но уже выберите в раскрывающемся списке пункт из раздела Движение 15 повернуть С* на градусов когда клавиша стрелка влево ▼ нажата когда клавиша стрелка вправо ▼ нажата повернуть С* на © градусов Чтобы протестировать нашу программу, нажмите на одну из клавиш, или Вы заметите, что ваш спрайт поворачивается в сторону в зависимости от кла- виши, которую вы нажали. Хочу обратить ваше внимание на то, что программа сработала даже без нажатия кнопки в виде зеленого флажка, поскольку команды используемых в проекте блоков из раздела События (Events) всегда активны в фоновом режиме. 77
Глава 4. Программируем на Scratch 3 Повторите шаги, но для клавиш f и J,. Используйте блоки и идти ДР> шагов из раздела Движение (Motion). Попробуйте нажимать клавиши и убедитесь в том, что теперь котик может разворачиваться и плыть вперед и назад. Чтобы спрайт был привлекательнее, вы можете изменить его внешний вид, известный в Scratch как костюм. Щелкните мышью по спрайту, а затем перей- дите на вкладку Костюмы (Costumes), расположенную в верхней части палитры блоков. Щелкните мышью по костюму «Cat Flying - а», а потом по значку ф , расположенному в правом верхнем углу спрайта. Теперь щелкните мышью по костюму «Cat Flying - Ь» и в поле Костюм (Costume) введите слово право. Рис. 4.17: Назовите костюм «право» 78
Проект 2:Синхронное плавание Щелкните правой кнопкой мыши по только что переименованному костюму «право», а затем выберите пункт Дублировать (Duplicate). Вы создали копию. Щелкните мышью по этой копии, выберите инструмент □ Выбрать (Select) и на- жмите кнопку ►: Отразить по горизонтали (Flip Horizontal). Присвойте костюму имя лево (рис.4.18).Таким образом мы получили два костюма: один с названием «право» - котик повернут направо, другой с названием «лево» - котик повернут налево. Рис. 4.18: Дублируем костюм, отражаем его зеркально и называем его «лево» На вкладке Код (Code) найдите и перетащите из раздела Внешний вид (Looks) палитры блоков два блока дела События (Events), отвечающие за действия по нажатию клавиш <— и В сценарии с блоком блок смены костюма следующим образом: изменить костюм на лево под оранжевые блоки раз- когда клавиша стрелка влево ▼ нажата изменить костюм на право внесите настройки в Попробуй- те нажимать клавиши - и увидите результат: котик плывет в нужном вам направ- лении, поворачиваясь в указанную сторону мордочкой. 79
Глава 4. Программируем на Scratch 3 Однако если мы претендуем на участие в Олимпийских играх по синх- ронному плаванию, нам нужна целая команда пловцов. Добавьте блок когда нажат находящийся в разделе События (Events), а под него перемес- тите О ВЯ 0 - блок, отвечающий за движение, в котором вы мо- жете изменить значения при необходимости. И добавим блок, также отвеча- ющий за движение, повернуться в направлении © Теперь при нажатии кнопки в виде зеленого флажка ваш спрайт переместится в центр сцены и повернется направо. 80
Проект 2: Синхронное плавание когда нажат перейти в х: повернуться в направлении 90 Для создания команды пловцов перетащите блок ffffiSTffiffioJiRl и измените значение с 10 на 6. Соедините его с блоком создать клон самого себя ▼ Для того чтобы задать пловцам разные направления, в нижней части последовательности 15 добавьте блок должен также оказаться внутри блока повернуть С* на <0 градусов и замените значение с 15 на 60. Блок После нажмите кнопку в повторить л раз 6 виде зеленого флажка и с помощью стрелок управляйте вашей командой плов- цов! 81
Глава 4. Программируем на Scratch 3 когда клавиша стрелка вверх ▼ нажата когда клавиша стрелка вниз ▼ нажата когда нажат перейти в х: в у: повернуться в направлении Ц повторить раз повернуть С1 на градусов создать клон самого себя ▼ 82
Проект 2: Синхронное плавание И для полного погружения в атмосферу Олимпийских игр можно добавить музыкальное сопровождение. Перейдите на вкладку Звуки (Sounds), располо- женную над палитрой блоков, а затем нажмите кнопку О Выбрать звук (Choose a Sound). Перейдите в категорию Циклы (Loops) (рис. 4.19). Прослушивайте ме- лодии до тех пор, пока не найдете то, что нужно. Мне больше по душе «Dance Around». Нажмите кнопку ОК, а затем перейдите на вкладку Код (Code), чтобы снова вернуться в область сценариев. Рис. 4.19: Выбор музыкальной композиции из списка когда нажат играть звук Dance Around ▼ до конца доступный в разделе События (Events), а внутрь Не забудьте проверить, повторять всегда Добавим еще один блок Далее добавьте из раздела Управление (Control) блок него поместите блок корректная ли композиция указана в последнем блоке. Нажмите кнопку в виде зеленого флажка и посмотрите, что же получилось. Если вы захотите остановить музыку или завершить программу, нажмите кнопку в виде красного восьмиуголь- ника, расположенную рядом с зеленым флажком. 83
Глава 4. Программируем на Scratch 3 84
Проект 2: Синхронное плавание 85
Глава 4. Программируем на Scratch 3 Посмотреть результат вы можете, нажав кнопку в виде зеленого флажка. Запустите программу и нажмите клавишу Пробел (рис. 4.20). Не забудьте сохра- нить вашу программу! Рис. 4.20: Готовая программа «Синхронное плавание» Задача: новые действия н Сможете ли вы самостоятельно создать подобную про- грамму с использованием циклов? Что вам нужно сде- лать, чтобы изменить количество пловцов? Способны ли вы добавить новые действия, управление которыми вы сможете осуществлять нажатиями клавиш на клавиатуре? Проект 3: Стрельба из лука Теперь, когда вы стали профи в работе с программой Scratch, настало время за- няться чем-то более серьезным. Создадим игру, в которой нужно будет стрелять по мишени из лука. Онлайн-проект Этот проект также доступен по ссылке http://mbitech.ru/rpiOO3. Версия под Scratch 2 доступна по адресу https://rpf.io/archery. 86
Проект 3: Стрельба из лука Откройте браузер Chromium и введите адрес https://rpf.io/p/en/archery-go. Нажмите клавишу Enter. Файлы скачиваются в формате Zip-архива, поэтому вам нужно будет их распаковать, щелкнув правой кнопкой мыши, а затем нажав кнопку Извлечь (Extract). Перейдите обратно в программу Scratch. В меню Файл (File) выберите пункт Загрузить с компьютера (Load from your computer). Выбе- рите файл ArcheryResources.sb3 и нажмите кнопку Открыть (Open). Появится запрос, хотите ли вы заменить прошлый проект на новый. При необходимости нажмите кнопку ОК. Если же вы еще не сохранили проект, нажмите кнопку От- мена (Cancel) и сохраните его. Рис. 4.21: Загрузка фона сцены и спрайта для дальнейшего создания программы Материалы, которые вы только что загрузили, содержат фон сцены и спрайт (рис.4.21). При этом не было загружено ни одного сценария, ведь их составление- нажат передать сообщение! В раскрывающемся списке этого блока выберите пункт Новое сообщение (New Message), а потом введите текст Новая стрелочка. Нажмите кнопку ОК. Таким образом мы получили блок передать новая стрелочка когда нажат передать новая стрелочка▼ 87
Глава 4. Программируем на Scratch 3 когда я получу сообщение! когда я получу новая стрелочка В этот раз когда я получу новая стрелочка У по- установить размер Передать в данном блоке означаетто, что данное сообщение воспринимает- ся любой частью программы. Теперь добавьте блок и смените значение в раскрывающемся списке с сообщение! на Новая стре- лочка. В результате получится блок вам не нужно снова самостоятельно вводить фразу, достаточно просто выбрать ее из списка. Под блок В данном случае необходимо изменить установленные по умолчанию значе- ния по осям х и у на -150. Ниже разместите блок следнего блока, как и у предыдущего, нужное значение не установлено по умолчанию, поэтому убедитесь, что вы все настроили правильно. Нажмите кнопку в виде зеленого флажка, и вы заметите, что мишень, в которую игрок пытается попасть стрелой, переместилась в левый угол и увеличилась в раз- мере. повторять всегда плыть ПШЕПЕИД Смените значе- Чтобы усложнить задачу игроку, заставим мишень двигаться тогда, ког- да лучник прицеливается и натягивает лук. Добавьте блок и вложите в него блок ние с 1 на 0.5, а затем из раздела Операторы (Operators) перетащите блоки вместо чисел, указанных для осей х и у. В зеленых блоках укажите значения -150 и 150 соответственно. Эта последовательность блоков позволяет мишени произвольно перемещаться по сцене, что значи- тельно усложняет задачу игроку. 88
Проект 3: Стрельба из лука Нажмите кнопку в виде зеленого флажка. Сейчас мишень движется в произ- вольных направлениях вдоль всей области сцены, однако вы все еще не можете 89
Глава 4. Программируем на Scratch 3 Если вы остановили программу перед добавлением новых блоков, нажмите кнопку в виде зеленого флажка, а затем нажмите клавишу Пробел. Мишень оста- навливается, однако не происходит эффекта попадания в цель. Исправим это: добавьте блок а под него блок изменить размер на снова нажмите кнопку в виде зеленого флажка, и вы увидите, что стрела летит в цель очень правдоподобно! Мы добились желаемого результата! Чтобы играть стало еще интереснее, введем счет. К уже имеющейся последо- вательности добавьте блок блок бовидное окошко первого блока поместите блок если ,то подблок 50.Убедитесь,что находится под блоком цикла, а не внутри него. В пустое ром- >. Этот блок если ,то касается цвета ? доступен в разделе Сенсоры (Sensing). Щелкните мышью по индикатору цвета в этом блоке и при помощи палитры и инструмента захватите цвет центра мишени, т. е. желтый. 90
Проект 3: Стрельба из лука Оповестим победителя, добавив блоки включить звук cheer ▼ а200очковГ2^ секунд если в самый низ последовательности переместите блок передать новая стрелочка ▼ Убедитесь, что блоки находятся вне блока если , то Данная команда будет выдавать игроку одну стрелу для выстрела. Запустите программу и попробуйте попасть «в яблочко». Когда вам все-таки это удастся, программа поддержит вас овациями и наградит 200 очками. 91
Глава 4. Программируем на Scratch 3 Вы создали достаточно сложную игру. Попробуйте на основе изученного ма- териала добавить баллы за попадание в другие части мишени: 100 баллов за красный сектор, 50 баллов за синий и т. д. Задача: внесем некоторые изменения? Как вы можете упростить игру? А усложнить? Какой блок нужно добавить, чтобы выдать игроку сразу несколько стрел? Как добавить таймер с обратным отсчетом для создания более напряженной обстановки? 92
Глава 5 Программируем на Python Теперь, когда вы освоили Scratch, мы научим вас программировать на языке Python Гвидо ван Россум создал известный язык программирования Python. Назва- ние было дано в честь комедийной труппы Монти Пайтон, и сам язык про- граммирования изначально было просто хобби-проектом и обнародован в 1991 г. Python отличается от визуальной объектно-ориентированной среды программирования Scratch, поскольку работа его основывается на текстовом коде: при написании программы, которая в дальнейшем будет выполняться компьютером, вы используете определенный формат и упрощенный язык. Python отлично подходит для развития новых навыков утех, кто уже знаком со Scratch, ведь программа предоставляет нам повышенную гибкость и более «традиционную» среду программирования. Работа с программой не составит огромного труда. К тому же с практикой каждому пол ьзователю удастся написать программу любого уровня сложности, начиная с простых вычислений и заканчи- вая невероятно сложными играми. 93
Глава 5. Программируем на Python Эта глава будет основываться на терминах и понятиях, введенных в главе 4. Если вы еще не ознакомились с 4 главой, советуем перед началом работы с Python вернуться к ней и проработать разобранные там упражнения. Thonny - интегрированная среда разработки для Python А Панель инструментов - по умолчанию интер- фейс Thonny представлен в «простом» ре- жиме: на панели отображаются понятные значки, позволяющие создавать, сохранять, загружать и запускать программы на языке Python, а также тестировать их всевозмож- ными способами. В Область сценария - в этой области отобра- жается код написанных вами программ на языке Python. Она поделена на основную область и небольшое боковое поле, где ото- бражаются номера строк кода. С Оболочка - в этой области вы можете выполнять отдельные команды, нажи- мая после их ввода клавишу Enter, а также выводить данные и результаты запуска сценариев программ. 94
Ваша первая программа на Python: Привет, мир! Версии интерфейса Thonny И Данная программа создана в двух версиях интерфейса: «обычном» и «прос- том»,- последний из которых больше подходит для начинающих. В этой главе мы рассмотрим простой режим, используемый по умолчанию. Он открывается автоматически после выбора ярлыка программы в меню Программирование (Programming) Raspberry Pi OS. Ваша первая программа на Python: Привет, мир! Как и другие предустановленные программы в Raspberry Pi OS, программа Thon- ny запускается из меню: нажмите на панели задач кнопку в виде малины,устано- вите указатель мыши на пункт меню Программирование (Programming) и щелк- ните мышью по значку Thonny Python IDE. Через несколько секунд загрузится пользовательский интерфейс Thonny (простой режим выбран по умолчанию). Thonny - программа, известная как интегрированная среда разработки (IDE). Само название кажется сложным, однако на деле все просто: программа ин- тегрирует (объединяет) различные средства, необходимые для написания или разработки ПО, в единую пользовательскую среду (интерфейс). Существует мно- жество доступных IDE, некоторые из которых поддерживают несколько различ- ных языков программирования, вто время как другие,такие как Thonny, способ- ны поддерживать лишь один язык. Python - более традиционный язык программирования, поскольку в основе создания сценариев лежат текстовые символы. В этом-то и отличие от Scratch (визуальной объектно-ориентированной среды), где основой для создания про- граммы являются блоки. Запустим нашу первую программу. Для этого в интер- фейсе Thonny перейдите на вкладку Shell (Оболочка), расположенную в левом нижнем углу окна, а затем введите код, указанный ниже, и нажмите клавишу Enter: printf Привет, мир! ) Программа мгновенно начинает работать после нажатия клавиши Enter. В от- вет Python выведет сообщение «Привет, мир!» в той же самой области (рис. 5.1). Происходит это потому, что оболочка и интерпретатор имеют прямую связь друг с другом. Задача последнего заключается в интерпретации инструкций. Такой процесс получил название интерактивного режима: создается атмосфера диалога - как только вы произносите фразу, программа вам отвечает, а затем ждет следующую вашу реплику. 95
Глава 5. Программируем на Python Рис. 5.1: Программа Python выводит сообщение «Привет, мир!» в области оболочки Синтаксическая ошибка № Если вам не удается запустить программу и на экран вы- водится сообщение «SYNTAX ERROR» («Синтаксическая ошибка»), значит, в вашем коде была допущена ошиб- ка. Инструкции на языке Python должны строго отвечать правилам. Если вы пропустили скобку или кавычку, на- писали слово «print» неправильно или сделали первую букву прописной, добавили дополнительные символы и т. д. программа не будет работать. В таком случае пе- репишите код заново, убедившись, что он соответствует правилам,указанным в этом руководстве, и только потом нажмите клавишу Enter! Конечно, вовсе необязательно использовать Python в интерактивном режиме. Перейдите в область сценария в левой части окна Thonny, а затем введите код снова: prin<( Привет, мир! ) В этот раз после нажатия клавиши Enter никаких изменений не произойдет, за исключением того, что теперь у вас появилась еще одна строка в области 96
Ваша первая программа на Python: Привет, мир! сценариев, но при этом пустая. Чтобы программа заработала, нажмите кнопку Q Выполнить (Run) на панели инструментов. После этого вам будет предложе- но сохранить программу: введите название (например: Hello World) и нажмите кнопку ОК. После сохранения программы в области оболочки появятся два со- общения (рис. 5.2): »> %Run 'Hello World.ру' Привет, мир! Рис. 5.2: Запуск простой программы Первая строка - команда для интерпретатора Python запустить только что со- храненную программу. Вторая - команда вывода сообщения на экран. Поздрав- ляем, вы только что написали и запустили вашу первую программу Python как в интерактивном режиме,так и из файла сценария! Задача: новое сообщение В Можете ли вы изменить текст сообщения, которое про- грамма Python в итоге выводит на экран? При желании добавить еще несколько сообщений какой режим сле- дует выбрать? Режим сценария или интерактивный? Что будет, если вы запустите программу, предварительно удалив скобки или кавычки? 97
Глава 5. Программируем на Python Следующий шаг: циклы и отступы в коде В программе Scratch для соединения блоков между собой на каждом из них есть специальные выступы и впадины. Точно так же и в Python, только вместо выступов в программе используется свой собственный способ управления: отс- туп. Создайте новую программу: нажмите кнопку ф Новое (New) на панели ин- струментов Thonny. Предыдущая программа при этом не будет потеряна,так как приложение создаст новую вкладку над областью сценария. Далее напечатайте следующее: print( Цикл начат!") for i in range (10): Первая строка, как и в предыдущей программе, Hello Word, выводит простое сообщение на экран. Вторая строка задает программе определенный цикл, рабо- тающий так же, как и в Scratch: циклу присваивается счетчик в виде перемен- ной i, а далее с помощью ключевого слова range вводится перечень чисел - диапазон выполнения команды. Числа начинаются с 0 и сортируются в порядке возрастания до 10, при этом не включая его. Символ двоеточия (:) инструктирует Python, что следующие строки кода являются частью цикла. Если сравнивать Python со Scratch,то во втором случае такая команда обозна- чается в сценарии С-образным блоком. В Python же применяется другой подход, а именно расстановка отступов. Следующая строка будет начинаться с 4 про- белов, которые должны автоматически появиться в 3-й строке, после нажатия клавиши Enter. print( Итерация", i) Таким образом, пробелы смещают код ближе к центру. Благодаря отступу Python распознает разницу между командами, относящимися к циклу, и коман- дами, к нему не относящимися. Такой код получил название вложенного. Обратите внимание, что при нажатии клавиши Enter программа автоматиче- ски делает отступ и в 4-й строке, предполагая, что она тоже является частью цикла. Чтобы удалить отступ, нажмите клавишу Backspace один раз, после чего можете работать с кодом для четвертой строки: print( Цикл закончен!") Ваша программа, состоящая из четырех строк, завершена. Первая команда на- ходится вне цикла, следовательно, выполняться будет 1 раз, код из второй стро- ки непосредственно задает сам цикл, третья - находится внутри цикла и будет выполняться один раз для каждого цикла, четвертая же, как и первая, находится вне цикла. 98
Ваша первая программа на Python: Привет, мир! print( Цикл начат! ) for i in range (10): print( Итерация", i) print( Цикл закончен!") Нажмите кнопку Выполнить (Run), а затем сохраните программу, озаглавив ее как Indentation, и полюбуйтесь на полученный результат, выведенный в области оболочки (рис. 5.3): Цикл начат! Итерация 0 Итерация 1 Итерация 2 Итерация 3 Итерация 4 Итерация 5 Итерация 6 Итерация 7 Итерация 8 Итерация 9 Цикл закончен! Рис. 5.3: Выполнение цикла 99
Глава 5. Программируем на Python Отсчет с нуля 18 Python - это язык с так называемой нулевой индексаци- ей, т. е. отсчет начинается с 0, а не с 1, поэтому в вашей программе счет идет от 0 до 9, а не от 1 до 10. При же- лании это можно исправить, изменив диапазон (10) на диапазон (1,11) или на диапазон с любыми другими чис- лами. Отступы - очень важная вещь в Python, поскольку их пропуск - одна из самых распространенных причин, по которым программа может не работать должным образом. При поиске неполадок в программе, процессе, известном как отладка, советуем дважды проверять отступы, особенно если в программе имеются цик- лы, вложенные внутри других циклов. В Python также поддерживаются бесконечные циклы, которые выполняются без остановки. Чтобы изменить определенные циклы на бесконечные, отредак- тируйте вторую строку следующим образом: while True: Если сейчас вы решите запустить программу,то на экране высветится сообще- ние об ошибке: name ' i' is not defined. Причина в том, что вы удалили строку, которая создавала и присваивала значения переменной i. Чтобы исправить это, просто отредактируйте третью строку так, чтобы в ней больше не фигурировала переменная: printf Цикл начат!") Нажмите кнопку Выполнить (Run), и если вы будете предельно быстры и внимательны,то заметите, что на экране высветится сообщение «Цикл начат!» и будет бесконечно повторяться (рис. 5.4). При этом сообщение «Цикл закон- чен!» никогда не появится на экране, поскольку у данного цикла нет конца: каждый раз, когда Python завершает вывод на экран сообщения «Цикл на- чат!», приложение возвращается к началу цикла,тем самым выводя сообщение вновь. Для остановки программы нажмите кнопку Q Остановить (Stop) на пане- ли инструментов Thonny. Эта функция называется прерыванием программы. Вы увидите сообщение, появившееся в области оболочки Python. Программа оста- новится, при этом не выполнив команду из последней строки. 100
Ваша первая программа на Python: Привет, мир! Рис. 5.4: Бесконечный цикл продолжается до тех пор, пока вы сами не остановите программу Задача: замкнуть цикл Сможете ли вы самостоятельно сменить бесконечный цикл на определенный? А сможете ли вы добавить в про- грамму второй определенный цикл? Что нужно сделать, чтобы поместить цикл в цикл? Каким образом он будет работать? Условные конструкции и переменные Во всех языках программирования переменные выполняют и другие функ- ции, помимо управления циклами. Создайте новую программу, нажав кнопку i Новое (New) на панели Thonny, а затем введите в область сценария следующее: userName = input ( Как тебя зовут? ) Нажмите кнопку Выполнить (Run), сохраните программу под названием Name Test и изучите вывод в оболочке. Вам будет предложено ввести свое имя. Введи- те его и нажмите клавишу Enter. Поскольку это единственная заданная програм- ме команда, никаких действий не произойдет (рис. 5.5). Однако если вы захотите, чтобы программа провела какие-либо манипуляции над этой переменной, вам будет необходимо ввести дополнительные строки кода. 101
Глава 5. Программируем на Python Рис. 5.5: Функция ввода позволяет пользователю вводить необходимые данные Чтобы программа совершила какие-либо действия с именем, добавьте усло- вие, введя следующее: if userName == "Кларк Кент": printf Гы - супермен! ) else: printf Гы не супермен!1 ) Помните о том, что при вводе кода программа автоматически добавляет от- ступы, так как не может определить, в какой момент отступы должны отсутство- вать, поэтому вам придется убирать их вручную. Нажмите кнопку Выполнить (Run) и присвойте имя новой программе. Про- грамма выведет на экран сообщение «Ты не супермен!» (если, конечно, ваше имя не Кларк Кент). Нажмите кнопку Выполнить (Run) еще раз и попробуйте ввести «Кларк Кент» (проверьте, чтобы имя было написано в точности как в коде, с прописных букв «К»).Теперь приложение сообщает вам о ваших супергеройских способностях (рис. 5.6)! 102
Ваша первая программа на Python: Привет, мир! Рис. 5.6: Разве вы не должны сейчас спасать мир? Символы == инструктируют Python произвести точное сравнение, чтобы по- нять, соответствует л и значение переменной userName тексту, называемому стро- кой, в вашей программе. При работе с числами вы можете также обратиться и к другим символам сравнения: > определяет, больше ли первое число, чем второе; < определяет, меньше ли первое число, чем второе; => определяет, больше оно или равно; и =< определяет, меньше оно или равно. А еще есть комбинация сим- волов !=, определяющая, что числа не равны - полная противоположность ==. Эти символы в данном контексте известны как операторы сравнения. Использование символов = и == Ключ к успеху в использовании этих символов заключа- ется в запоминании разницы между ними. Запомните: = означает присвоить переменной определенное значе- ние, == означает проверить, равна ли переменная опре- деленному значению. Проверка этих двух операторов - залог успеха в случае, когда программа по какой-либо причине не работает! Операторы сравнения также могут быть задействованы в циклах. Удалите строки со второй по пятую, а вместо них введите следующее: 103
Глава 5. Программируем на Python while userName != "Кларк Кент": printfTbi не супермен - попробуй еще раз' ) userName = input ("Как тебя зовут? ") print( Гы - супермен!") Снова нажмите кнопку Выполнить (Run). На этот раз программа не завершит работу, а будет продолжать спрашивать ваше имя до тех пор, пока вы не ока- жетесь суперменом (рис. 5.7). Напоминает ввод пароля. Чтобы завершить цикл, вам необходимо либо ввести Кларк Кент, либо нажать кнопку Остановить (Stop), расположенную на панели инструментов Thonny. Поздравляю: теперь вы знаете, как использовать условные конструкции и операторы сравнения! Рис. 5.7: Программа будет спрашивать ваше имя до тех пор, пока вы не признаетесь, что вы - «Кларк Кент» * Задача: добавить больше вопросов К Можете ли вы внести изменения в написанную програм- му так, чтобы при запуске было задано больше одного вопроса, при этом допустив различные ответы к каждому из них? Сумеете ли вы создать программу, в которой бу- дут использоваться условные конструкции и операторы сравнения для следующего условия: является ли число, введенное пользователем, больше или меньше 5? (Похо- же на программу, которую мы с вами создавали в главе 4.) 104
Проект 1: Черепашьи подсолнухи Проект 1: Черепашьи подсолнухи Теперь, когда вы знакомы с Python, пришло время поработать с графикой и создать снежинку с помощью инструмента, получившего название «черепаш- ка». Онлайн-проект Вы можете найти этот проект в интернете, перейдя по ссылке http://rpf.io/ turtle-snowflakes. Свое название этот инструмент получил благодаря схожей с черепашкой фор- ме, а предназначен он для перемещения ее по полю вперед и назад, для пово- ротов, а также для поднятия и опускания пера (в цифровой версии это означает, что программа начинает или прекращает рисовать линию). В отличие от дру- гих языков программирования, таких как Logo и некоторые другие, инструмент «черепашка» не встроен по умолчанию в Python, однако в библиотеке доступен специальный модуль, поддерживающий работу инструмента «черепашка» после импорта. Библиотека - набор модулей, хранящих в себе дополнительные сцена- рии, тем самым расширяя возможности Python. С помощью команды import вы можете самостоятельно добавлять модули в свои программы. Создайте новую программу, нажав кнопку i Ъ Новое (New), и введите следую- щее: import turtle При использовании модулей, импортированных из библиотеки, необходимо соблюдать правила написания инструкций: писать имя модуля, затем точку, а после - необходимую команду. Вам может не понравиться каждый раз печатать столько знаков, ведь можно было бы и сократить их количество, выбрав корот- кое имя переменной (состоящее, например, всего из одной буквы). Однако нам показалось, что будет здорово присвоить нашей черепашке имя pat. Введите следующее: pat = turtle .TurtleQ Чтобы проверить, работает ли программа, необходимо задать черепашке ко- манду. Напечатайте: pat.forward(100) 105
Глава 5. Программируем на Python Запустите программу, нажав кнопку Выполнить (Run), а затем сохраните свой сценарий под названием Turtle Snowflakes. После сохранения программы по- явится окно с надписью «Python Turtle Graphics», и вы увидите результат вашей работы: черепашка по имени Пэт переместится вперед на 100 шагов, оставляя за собой прямую линию (рис. 5.8). Рис. 5.8: Черепашка движется вперед, рисуя прямую линию Вернитесь в главное окно Thonny, скрытое за окном Python Turtle Graphics. Для этого нажмите кнопку Свернуть (Minimize) окна Python Turtle Graphics, либо щелкните мышью по вкладке программы Thonny, расположенной на панели за- дач в верхней части экрана, а затем нажмите кнопку Остановить (Stop) для за- крытия окна Python Turtle Graphics. Достаточно утомительно печатать отдельную инструкцию для каждого дейст- вия вручную, поэтому мы предлагаем вам удалить третью строку и создать цикл, который задаст черепашке команду нарисовать фигуру: for i in range(2): pat.forward(100) pat.right(60) pat.forward(100) pat.right(120) Запустите программу, и Пэт нарисует параллелограмм (рис. 5.9). 106
Проект 1: Черепашьи подсолнухи Рис. 5.9: Комбинируя повороты и перемещение, можно создавать фигуры Чтобы превратить параллелограмм в снежинку, нажмите кнопку Остановить (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) 107
Глава 5. Программируем на Python pat.forward(100) pat.right(120) pat.right(36) Нажмите кнопку Выполнить (Run) и понаблюдайте за черепашкой: сначала она, как и раньше, нарисует параллелограмм, но затем повернется на 36 граду- сов и нарисует еще один, потом еще один и так далее, пока на экране не появит- ся десять перекрещенных параллелограммов, похожих на снежинку (рис. 5.10). Рис. 5.10: Дублируем фигуру, создавая тем самым из простой более сложную В то время как в реальности робот-черепашка способен рисовать на ватмане фигуру лишь одним цветом, черепашка Python способна задействовать целую палитру цветов. Сдвиньте вниз имеющиеся строки кода, начиная с третьей, и добавьте новые 3-ю и 4-ю строки: turtle. Screen().bgcolo:<( blue") pat.color("cyar ) Снова запустите программу, и вы увидите результат: цвет фона стал синим, а снежинка - голубой (рис. 5.11). 108
Проект 1: Черепашьи подсолнухи Рис. 5.11: Изменение цвета фона и снежинки Вы также можете выбрать цвет случайным образом из списка, воспользовав- шись модулем random из библиотеки. Вернитесь в начало программы и вместо второй строки вставьте следующее: import random Измените цвет фона в четвертой строке с blue (синий) на grey (серый), а затем создайте новую переменную с именем colours (цвета), вставив новую, пятую строку: colours = ["cyan , "purple1 , "white , "blue ] Тонкости диалектов Во многих языках программирования используется аме- риканская орфография, и Python не исключение: коман- да для изменения цвета линий носит имя color, и если вы напишете ее в британском варианте colour, программа попросту не будет работать. Переменные, однако, могут быть определены с любым подходящим именем. Именно поэтому вы можете присвоить переменной имя colour. 109
Глава 5. Программируем на Python Такой тип значения переменной называется списком и указывается в квадрат- ных скобках. В подобном случае список заполняется допустимыми для рисова- ния сегментов снежинки цветами. Однако вам все равно будет необходимо ука- зывать один из них каждый раз при повторе цикла. В самый конец программы введите следующее (набрав в этой строке отступ из 4 пробелов, как и в строке сверху, поскольку они являются частью цикла): pat.color(random.choice(colours)) Нажмите кнопку Выполнить (Run), и программа снова нарисует снежинку, по- хожую на сюрикен. Однако на этот раз Python будет рандомно выбирать цвет из списка для каждого лепестка,тем самым рисуя многоцветную снежинку (рис. 5.12). Рис. 5.12: Использование случайно выбранных цветов для «лепестков» Чтобы фигура стала больше похожа на настоящую снежинку, а не на сюрикен, добавьте новую, шестую строку под строку со списком colour и введите следующее: pat.penup() pat.forward(90) pat.left(45) pat.pendown() Инструкции penup и pendown позволяют поднять и опустить кисть на бумагу (в случае когда мы говорим о реальном роботе-черепахе), в виртуальном мире эти команды позволят программе начать или закончить рисовать линии. На этот раз вместо цикла мы используем функцию - фрагмент кода, который вы сможете 110
Проект 1: Черепашьи подсолнухи применить в любое время, например для создания собственной инструкции в Python. В первую очередь удалите ту часть кода, которая задает программе коман- ду нарисовать снежинку из параллелограммов. Это строки, находящиеся между 10-й строкой pat. color ("cyan") и 17-й строкой pat.right(36), включая их са- мих. Оставьте CTp0Kypat.color(random.choice(colours)),H0 поставьте в начало хеш-символ (#). Таким образом мы закомментировали эту строку, чтобы игнори- ровать ее при запуске программы. Вы также можете использовать комментарии при желании добавить пояснения к определенному коду, что позволяет облег- чить понимание при прочтении его спустя долгое время, или при прочтении его другим человеком. Создайте собственную функцию с именем 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 111
Глава 5. Программируем на Python pat = turtle. Turtle() turtle. Screen( ).bgcolorrf grey") colours = [ cyan , "purple", "white", "blue ] pat.penupf) pat.forward(90) pat.left(45) pat.pendown(J def brane i(): for i in range(3): for i in range(3): pat.forwardf 30) pat.backwardf 30) pat.right(45) pat.lefr(90) pat.backwardf 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)! Новое Загрузи 8 16 12 13 14 15 16 17 18 19 26 21 22 23 24 pat.forwar pat.left(4 pat.pendow def branch for i fo "stack" module_nan KeyError: '___г »> %Run файл. »> %Run файл r Thonny - /home/pi/файл ру @ 23:5 pa pa pa pat.rl pat.fо for i in г branch pat.le # pat.co exception Приблизить Рис. 5.13: Дополнительные ответвления оживляют снежинку 112
Проект 2: Поиск страшных отличий Задача: что же дальше? Можете ли вы использовать закомментированную строку кода для окраски «лепестков» снежинки в разные цвета? Можете ли вы создать функцию с именем snowflake, для того чтобы программа создала сразу несколько снежи- нок? Способны ли вы задать программе команду произ- вольной смены размера и цвета снежинок? Проект 2: Поиск страшных отличий В программе Python можно также обрабатывать загруженные изображения и звуки с помощью уже известной вам черепашки. Вы можете вызвать бурю эмо- ций у своих друзей, подшутив над ними. Для этого отлично подойдет игра в духе поиска отличий на страшных картинках, особенно на Хэллоуин, ведь секрет ее заключается в испуге пользователя. Онлайн-проект Данный проект доступен также по ссылке http://rpf.io/scary-spot. Для создания проекта вам потребуются два изображения: первое - обыч- ное, а второе - пугающее, которое появится неожиданно. Также необходимо соответствующее звуковое сопровождение. Нажмите на панели задач кнопку в виде малины. Перед вами откроется меню Raspberry Pi OS. Переместите ука- затель мыши на пункт Интернет (Internet) и для запуска выберите пункт Веб- браузер Chromium (Chromium web-browser). После загрузки браузера введите в адресную строку ссылку http://rpf.io/spot-pic и нажмите клавишу Enter. Пра- вой кнопкой мыши щелкните по изображению, а затем выберите пункт Save image as... (Сохранить изображение как...). Выберите домашний каталог, вве- дите подходящее имя файла и нажмите кнопку Save (Сохранить). Вернитесь к адресной строке браузера и введите другой адрес - https://rpf.io/scary-pic. Нажмите клавишу Enter. Снова правой кнопкой мыши щелкните по изображе- нию, а затем выберите пункт Save image as... (Сохранить изображение как..). Выберите домашний каталог, введите подходящее имя файла и нажмите кноп- ку Save (Сохранить). Теперь скачаем подходящий звуковой файл. Вернитесь к адресной стро- ке браузера и введите другой адрес - https://rpf.io/scream. Нажмите клавишу Enter. Файл содержит аудиозапись крика, который заиграет автоматически и не- ожиданно. Но для использования его предварительно необходимо сохранить. 113
Глава 5. Программируем на Python Правой кнопкой мыши щелкните по маленькому значку аудиоплеера, а затем выберите пункт Save as... (Сохранить как...). Выберите домашний каталог, вве- дите подходящее имя файла и нажмите кнопку Save (Сохранить). Теперь можно закрыть браузер Chromium. Для создания нового проекта нажмите на панели инструментов кнопку Новое (New). Как и в прошлом проекте, для расширения возможностей Python вам нуж- но будет воспользоваться дополнительным модулем Рудате. Модуль Рудате создан для разработки игр. Введите следующее: import pygame Для работы вам потребуется как содержимое модуля Рудате,так и содержи- мое других модулей. Импортируйте их, введя следующее: from pygame.locals import * from time import sleep from random import randrange Команда from отличается от команды import, поскольку позволяет импорти- ровать только те части модуля, которые необходимые не весь модуль целиком. Теперь настроим Pygame (процесс называется инициализацией). 1\ля этого про- грамме 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.quit() Обратите внимание на промежуток между строками. В этом пространстве и будет создаваться ваша программа. А пока сохраним ее под названием Spot The Difference, нажав кнопку Выполнить (Run). Обратите внимание: Pygame создаст окно, фон которого будет полностью черным. Как только программа получит ко- манду выхода, окно сразу же исчезнет. Пока мы не создали сложную программу, и в оболочке выведено лишь одно сообщение (рис. 5.14). 114
Проект 2: Поиск страшных отличий Рис. 5.14: Ваша программа работает, но задач пока у нее немного Чтобы отобразить изображение с отличиями, введите следующую инструкцию над строкой pygame.quit(): difference = pygame.image.load( spot_the_diff.png ) Чтобы изображение заполняло экран целиком, масштабируйте его в соот- ветствии с разрешением вашего монитора или телевизора. Для этого введите следующее: difference = pygame.transform.scale(difference, (width, height)) Теперь изображение хранится в памяти, и нам необходимо дать команду Рудате отобразить его на экране (процесс, известный как блиттинг, или пере- дача битовых блоков). Введите следующее: screen.blit(difference, (0, 0)) pygame.display.update() Первая функция позволяет вывести изображение на экран, начиная с верхне- го левого угла, а вторая - отображает его. Без второй строки изображение будет находиться в нужном месте в памяти, однако видеть его вы не сможете! Нажмите кнопку Выполнить (Run), и изображение ненадолго появится на экране (рис. 5.15). 115
Глава 5. Программируем на Python Рис. 5.15: Ваше изображение с отличиями Для того чтобы изображение отображалось дольше, добавьте еще одну строку над функцией pygame.quit(): sleep(3) Нажмите кнопку Выполнить (Run) еще раз. Изображение будет отображаться на экране немного дольше. Добавьте сюрприз (пугающее изображение), введя под строкой pygame.display.update() следующее: zombie = pygame.image.load( scary_face.png') zombie = pygame.transform.scale(zombie, (width, height)) Добавьте строку, задающую небольшую паузу перед появлением изображе- ния зомби на экране. sleen(3) Затем выведите изображение на экран: screen.blit (zombie, (0,0)) pygame.display.update() Нажмите кнопку Выполнить (Run), и вы увидите следующее: сначала Pygame загрузит изображение с отличиями, но через три секунды заменит его изобра- жением страшного зомби (рис. 5.16)! 116
Проект 2: Поиск страшных отличий Рис. 5.16: Вы «страшно» удивите кого-то Однако,так как пауза каждый раз составляет 3 секунды, игра со второго запус- ка становится предсказуемой. Для этого изменим строку sleep(3), расположен- ную над строкой screen.blit(zombie, (0,0)), на: sleep(randrange(5, 15)) Благодаря измененной функции программа выберет случайное число в диа- пазоне от 5 до 15 (время в секундах отображения первого изображения на экра- не), прежде чем покажет зомби. Для загрузки звукового файла с криком добавь- те следующий код над строкой с функцией sleep(): scream = pygame.mixer.Sound( scream.wav') А теперь для того, чтобы воспроизвести звук при появлении изображения зом- би, введите под строкой с функцией sleep() следующий код: scream.play() Теперь зададим программе команду прекратить воспроизведение звука, для этого над строкой pygame.quit() введите следующее: scream.stop() Запустите программу, нажав кнопку Выполнить (Run), и насладитесь резуль- татом: спустя несколько секунд беззаботной игры в поиск отличий на экране появится ужасный зомби с леденящим кровь криком, что несомненно напуга- 117
Глава 5. Программируем на Python ет ваших друзей! Если вдруг изображение появляется раньше звука, исправьте это, добавив паузу в конце функции 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)) 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.g') zombie = pygame.transform.scale (zombie, (width, height)) scream = pygame.mixer.Sound( scream.wav') sleep(.candrange(5, 15)) scream.play() screen.blit(zombie, (0,0)) pygame.display.update() sleeu(3) scream.stop() pygame.quiX) Теперь вы смело можете приглашать друзей поиграть в поиск отличий. Глав- ное - убедитесь, что динамики включены! Задача: изменить внешний вид Удастся ли вам сменить изображения под какую-нибудь другую тематику, например новогоднюю? Способны ли вы самостоятельно нарисовать необычные пугающие картинки (используя какой-либо графический редактор, например GIMP)? Способны ли вы учесть наиболее час- тые действия, выполняемые пользователем, для усовер- шенствования программы? 118
Проект 3: Ролевой лабиринт Проект 3: Ролевой лабиринт Теперь, когда вы уже достаточно хорошо освоились в программировании на Python, пришло время создать что-то более сложное с помощью Pygame, а именно полнофункциональную текстовую ролевую игру. Цель этой игры - поиск выхода из лабиринта. Она будет создана на основе классических ролевых игр. Также подобные игры носят название текстовых квестов и берут свое начало со времен, когда компьютеры еще не поддерживали сложную графику. Однако у таких игр имеется огромное количество поклонников, считающих, что никакая компьютерная графика не сравнится с той, что может нарисовать ваше вообра- жение! Онлайн-проект Данный проект доступен также по ссылке http://rpf.io/python-rpg. Работа над созданием этой программы - нелегкая задача, поэтому, чтобы упростить ее решение, мы предлагаем совершать дальнейшие манипуляции над уже частично написанной программой. Откройте браузер Chromium и перейди- те по ссылке http://rpf.io/rpg-code. Браузер автоматически загрузит файл с кодом программы в каталог Downloads, однако перед этим предупредит вас, что загружаемый файл может нанести вред вашему компьютеру. Поскольку вы скачиваете файл из проверенного источника, а именно с официального сайта Raspberry Pi Foundation, нажмите кнопку Save (Сохранить), расположенную в нижней части открывшегося окна. Перейдите к окну Thonny и нажмите кнопку |Й| Загрузить (Load). Найдите файл грд-грд.ру в папке Downloads и нажмите кнопку ОК. Предлагаем начать знакомство с работой текстового квеста с запуска про- граммы. Нажмите кнопку Выполнить (Run). В нижней части окна Thonny, в обо- лочке, выводится текст игры. Разверните окно на весь экран. Это облегчит вам прочтение информации. На начальном этапе игра очень легкая: на экране рассказывается о двух ком- натах. Другие предметы отсутствуют. Сначала игрок оказывается в зале - пер- вой из двух комнат. Для перемещения на кухню необходимо написать команду идти юг и нажать клавишу Enter (рис. 5.17). А когда вы оказались на кухне, можно ввести идти север, и вы снова вернетесь в исходную позицию, в зал. Для движе- ния в две другие стороны вы можете ввести команды идти запад и идти восток, однако пока в этих направлениях комнаты не расположены и на экране высве- тится сообщение об ошибке. 119
Глава 5. Программируем на Python Рис. 5.17: Пока здесь только две комнаты Прокрутите содержимое программы в области сценария вниз до 29-й строки и найдите переменную rooms. Такой тип переменных носит название словарь и передает программе данные о количестве комнат и выходов из них, в какую именно комнату ведет определенный выход. Чтобы игра стала более интересной, добавим еще одну комнату. Это будет гостиная, расположенная восточнее зала. Найдите в области сценария пере- менную rooms и дополните ее, добавив символ запятой (,) после символа } в 38-й строке, а затем введите следующее (количество пробелов здесь не имеет значения): 'Гостиная' : { 1 запад1 : 1 Зал1 } Вам также придется самостоятельно создать выход в эту комнату, поскольку это не заложено изначально. Для этого в конце 33-й строки добавьте запятую, а затем введите под ней следующее: 1 восток1 : 1 Гостиная1 Нажмите кнопку Выполнить (Run) и попробуйте войти в новую комнату. Вве- дите идти восток,тем самым передвигаясь из зала в гостиную (рис. 5.18).Теперь 120
Проект 3: Ролевой лабиринт идти запад, чтобы перейти из гостиной в зал. Поздравляем, вам удалось создать комнату! Рис. 5.18: Вы добавили еще одну комнату Однако будет гораздо интересней, если мы заполним пустые комнаты. Для того чтобы добавить элемент в комнату, необходимо изменить словарь комна- ты. Остановите программу (нажмите кнопку Остановить (Stop)). В области сценария найдите словарь 'Зал' и добавьте запятую в конце строки 'восток' : 'Гостиная'. Нажмите клавишу Enter. А теперь введите следующее: 'предмет' : 'ключ' Снова нажмите кнопку Выполнить (Run). Высветится подсказка о том, что вам доступен новый предмет - ключ. Введите команду взять ключ (рис. 5.19). Забрать ключ вы сможете после добавления его в список предметов (inventory), которы- ми вы на данный момент обладаете, - ваш инвентарь. Инвентарь доступен вам в любой момент, даже при переходе из комнаты в комнату. Остановите программу, нажав кнопку Остановить (Stop). Сделаем игру интересней, добавив монстра, которого пользователь должен избегать. Найдите словарь 'Кухня' и добавьте в него монстра так же, как вы добавляли ключ. Не забудьте поставить запятую в конце предыдущей строки: 'предмет' : 'монстр' 121
Глава 5. Программируем на Python Рис. 5.19: Полученный ключ попадает в ваш инвентарь Добавим новую концепцию в игру: цель монстра - нападение на игрока. Для этого прокрутите программу вниз до конца и добавьте следующие строки, содер- жащие комментарий, сопровождающийся хеш-символом. Это поможет вам осве- жить память при прочтении программы в другой день. Не забудьте про отступы! # игрок проигрывает, если входит в комнату с монстром if ’предмет1 in rooms[currentRoom] and 'монстр' in rooms[currentRoom][ предмет ]: printf'Монстр схватил тебя... ИГРА ОКОНЧЕНА! ) break Нажмите кнопку Выполнить (Run) и попробуйте войти в кухню (рис. 5.20) - монстр будет не слишком рад вашему появлению! Превратим нашу программу в настоящую приключенческую игру. Для этого создадим еще несколько предметов, комнат и даже дадим игроку возможность победить. Победитель здесь тот, кто выберется из дома, собрав все находящиеся там предметы. Для этого добавим еще одну комнату, по той же схеме, которую вы проделывали во время создания гостиной.Теперь это комната под названием 'Сад'.Добавим выход из гостиной,не забывая про запятую в конце предыдущей строки: 'юг' : 'Сад' 122
Проект 3: Ролевой лабиринт Рис. 5.20: Вы явно не обратите внимания на крыс, потому что здесь есть кое-что пострашней - монстр! Затем добавьте новую комнату в словарь rooms, опять же проверив наличие запятой после символа } в строке выше: 'Сад' : { 'север' : 'Гостиная' } Добавим новый предмет - зелье - в словарь гостиной. Опять же не забываем про запятую выше: 'предмет' : 'зелье' Теперь прокрутите код в самый конец и добавьте условие, что если игрок соб- рал все предметы,то он выиграл игру, о чем программа сообщит ему: # игрок побеждает, если попадет в сад с ключом и зельем if currentRoom == 'Сад' and 'ключ' in inventory and зелье' in inventory: print('Tbi выбрался из дома... И ВЫИГРАЛ!') break Нажмите кнопку Выполнить (Run) и попробуйте пройти созданную игру: собе- рите ключ и зелье, а затем отправьтесь в сад. Помните об опасности на кухне,там 123
Глава 5. Программируем на Python вас поджидает страшный монстр! И заключительный штрих - подсказки игроку о том, как завершить игру. Прокрутите код программы к самому началу, к функции showInstructionsQ, и добавьте следующее: Найди ключ и доберись до сада с зельем Избегай монстров! В последний раз запустите игру и полюбуйтесь на результат: новые указания появляются перед началом игры (рис. 5.21). Поздравляем! Вы создали интерак- тивную текстовую игру, суть которой - выбраться из лабиринта! Рис. 5.21: Теперь игрок ознакомлен с правилами игры Задача: усложнить игру Знаете ли вы, как добавить еще несколько комнат, что- бы увеличить продолжительность игры? Способны ли вы добавить некий предмет, способный помочь вам защи- титься от монстра? Способны ли вы создать комнату, на- ходящуюся на другом этаже (верхнем или нижнем), зайти в которую можно, поднявшись по лестнице? 124
Глава 6 Физические вычисления на базе Scratch и Python Программирование - это нечто большее, чем просто выполнение действий на экране. С его помощью вы также можете управлять электронными девайсами, подключенными к интерфейсу GPIO компьютера Raspberry Pi Обычно, говоря о «программировании» или «кодировании», люди часто проводят параллель с программным обеспечением. Однако кодирова- ние связано не только с ПО. Оно может воздействовать на пользователя через техническое оснащение. Данный процесс получил название физической вычислительной техники. Уже из самого названия следует, что физическая вы- числительная техника - это управление дополнительно подключенными устрой- ствами, т. е. техническим оснащением, а не приложениями. Когда вы выбираете режим стиральной машины, регулируете программируемый термостат или нажи- маете кнопку на пешеходном светофоре, чтобы безопасно перейти дорогу, вы и пользуетесь той самой вычислительной техникой. 125
Глава 6. Физические вычисления на базе Scratch и Python Raspberry Pi отлично подходит для изучения физической вычислительной тех- ники благодаря его ключевой функции: интерфейсу ввода/вывода общего назна- чения (GPIO). Интерфейс GPIO Разъем GPIO расположен в верхнем углу печатной платы Raspberry Pi. Выглядит он как пара длинных рядов, заполненных металлическими пинами - контакта- ми. К этому разъему Raspberry Pi вы можете подключить доступное техническое оснащение, например светоизлучающие диоды (светодиоды) и кнопки-пере- ключатели, позволяющие управлять созданными вами программами. Конечно, название разъема может показаться вам трудным для понимания, однако оно отлично подходит под его функцию: контакты GPIO могут использоваться как для ввода,так и для вывода данных, поскольку они многофункциональны. И ког- да ряды контактов помещаются на печатную плату, образуется так называемая колодка GPIO. Разъем GPIO состоит из 40 пинов (контактов). Каждый из них выполняет свою функцию: часть участвует в проектах, связанных с физической вычислительной техникой, часть является источником электропитания, часть необходима для подключения к Raspberry Pi дополнительного оборудования, например допол- нительной платы Sense HAT (см. главу 7). Выделяют несколько категорий пинов в зависимости от присущей им функ- ции: 3V3 Напряжение 3.3 В Источник непрерывного питания напряже- нием 3,3 В; под таким напряжением работа- ет и сама плата Raspberry Pi 5V Напряжение 5 В Источник непрерывного питания напряже- нием 5 В; такое же напряжение подается на разъем microUSB-платы Raspberry Pi GND (заземление) Заземление, 0 В Заземляющее соединение, используемое для замыкания цепи, подключенной к источнику питания 126
Интерфейс GPIO GPIO XX Интерфейс ввода/вывода общего назначения, пин с номером XX Контакты GPIO, доступные вашему ПО и обо- значенные числами от 2 до Т1 ID EEPROM Пины,зарезервированные под специальные цели Пины, отведенные для подключения плат расширения Hardware Attached on Top (HAT), а также других устройств Внимание! Благодаря разъему GPIO платы Raspberry Pi вы можете безопасно экспери- ментировать с физической вычислительной техникой, однако вам следует быть осторожными, поскольку при подключении и отключении оборудования пины могут погнуться. Если в инструкции не указано обратное, то никогда не замы- кайте два пина, умышленно или случайно. В противном случае может прои- зойти короткое замыкание, в ходе которого плата Raspberry Pi может выйти из строя. Электронные компоненты Разъем GPIO - лишь малая часть того, что вам необходимо изучить перед на- чалом работы с физической вычислительной техникой. Также предлагаем вам ознакомиться с работой устройств, подключаемых к компьютеру через интер- фейс GPIO. Существует огромное количество доступных для подключения к компьютеру девайсов, однако чаще всего используются следующие. Беспаечная макетная плота, также известная как монтажная плата breadboard, может зна- чительно упростить работу. При ее наличии вы перестанете пу- таться в огромном количестве проводов, подключая различ- ные девайсы к компьютеру. Ма- кетная плата дает возможность подключать и соединять девай- сы между собой и компьютером через особые металлические контактные дорожки, скрытые внутри корпуса. Большинство макетных плат содержат секции для распределения контактов пи- тания, упрощая сборку цепей. Конечно, макетная плата не является неотъемле- мым атрибутом в проведении физических вычислений, однако она бесспорно принесет вам пользу. 127
Глава 6. Физические вычисления на базе Scratch и Python Соединительные провода, также известные как перемычки, соединяют дополнительные устрой- ства с вашим Raspberry Pi и, если у вас отсутству- ет макетная плата, друг с другом. Существуют три варианта перемычек: M2F (папа-мама), необходи- мые для подключения макетной платы к выводам GPIO; F2F (мама-мама), необходимые для соеди- нения дополнительных устройств при отсутствии макетной платы; и М2М (папа-папа), необходимые для соединения между собой контактов макетной платы. В зависимости от ваших целей вам могут понадобиться перемычки даже трех типов одно- временно. При наличии макетной платы вы можете обойтись без перемычек F2F. Кнопку, также известную как мгновенный кно- почный переключатель, можно сравнить с выклю- чателем освещения, который срабатывает после нажатия и остается активным, пока вы не выклю- чите его. Еще один известный тип переключателя - тактовая кнопка. В отличие от обычной кнопки, которая остается нажатой после включения,такто- вая прерывает цепь сразу после отпускания. Этот тип переключателя часто используется для управ- ления игровой консолью. Обычно кнопка выпуска- ется с двумя или четырьмя ножками (любая из них подходит для Raspberry Pi) и является устройством ввода, т. е. вы можете задать программе отслежи- вать нажатия кнопки, после чего выполнять необ- ходимые задачи. Светоизлучающий диод (LED) является устройством вывода, поскольку управляете вы им непосредственно через програм- му. При включении устройства светодиод загорается. В ва- шем доме расположено множество таких диодов, начиная с маленьких - индикаторов включения стиральной машины или телевизора - и заканчивая большими, лампами в люст- рах - такие диоды способны освещать вашу комнату целиком. Внешний вид подобных светоизлучающих диодов может быть абсолютно разным, они могут быть различных форм, цветов и размеров, однако не каждый из них подходит для использо- вания с Raspberry Pi. Не подойдут те диоды, которые предна- значены для источников питания напряжением 5 В или 12 В. 128
Интерфейс GPIO Резисторы - устройства, создающие сопротивле- ние протекающему току, которые различаются зна- чением сопротивления, измеряемого в омах (Q). Чем больше значение, указанное в омах, тем выше со- противление резистора. Чаще всего данное устрой- ство применяется в работе, связанной с физической вычислительной техникой, для защиты светодиодов и самого Raspberry Pi от воздействия слишком вы- сокого напряжения и дальнейшего их повреждения. Для этой цели отлично подходят резисторы с номи- нальным сопротивлением около 330 Q. Стоит доба- вить, что многие производители электротехники по- ставляют наборы, содержащие резисторы с наиболее востребованными значениями сопротивления. Пьезоэлектрический излучатель - чаще на- зываемый просто зуммером, или излучателем звука. Это еще одно устройство вывода. Свето- диоды излучают свет, пьезоизлучатель же вос- производит звук, похожий на жужжание. Внутри пластикового корпуса излучателя звука скры- вается пара металлических пластин. Во время работы устройства они вибрируют, тем самым воспроизводя жужжащий звук. Существует два типа излучателей звука: активные и пассивные. Убедитесь в том, что являетесь обладателем ак- тивного излучателя звука, поскольку в исполь- зовании он гораздо проще. К другим, наиболее распространенным электронным компонентам относятся моторы, которым потребуется специальная плата управления перед подключе- нием к Raspberry Pi, инфракрасные датчики, обнаруживающие движение, дат- чики температуры и влажности, необходимые для прогнозирования погоды, и фоторезисторы (LDR) - устройства ввода, работающие как светодиоды,только с точностью да наоборот, регистрируя свет. интернет-магазины по всему миру предлагают различные дополнительные компоненты для работы с физической вычислительной техникой на Raspberry Pi. Продаются они либо по отдельности, либо в виде комплекта, содержащего все необходимое для начала работы. Для завершения проектов, описанных в этой главе, у вас в наличии должны быть следующие компоненты: 3 светодиода: красный, зеленый, желтый или оранжевый; 3 резистора с сопротивлением 330 Q; 129
Глава 6. Физические вычисления на базе Scratch и Python 2 тактовые кнопк; 1 активный излучатель звука; перемычки: M2F (папа-мама) и F2F (мама-мама); опционально: макетная плата и перемычки М2М (папа-папа). Считываем цветовую маркировку резисторов Резисторам присущ широкий диапазон значений, начиная с моделей, сопро- тивление которых равно нулю и фактически являющихся просто куском прово- локи, и заканчивая моделями, сопротивление которых очень высоко, а сами они размером с вашу ногу. При этом существует очень мало резисторов, код на кото- рых указан в числовом виде. Вместо этого их маркируют специальным кодом в виде цветного кольца, нанесённого на корпус резистора. 1-я Полоса Ё Ё ’—Допустимое отклонение 2-я Полоса....•• 4.....Множитель Черный Коричневый Красный Оранжевый Желтый Зеленый Синий Фиолетовый Серый Белый Золотой Серебряный Отсутствие полосы 1-я и 2-я полосы Множитель Допустимое отклонение 0 й х10° 1 1 1)|[1 Х101 2 Х102 ±2% 3 Х103 - 4 Х104 - 5 *105 ±0.5% 6 Х106 ±0.25% 7 Х107 ±0.1% 8 Х108 ±0.05 % 9 Х109 - - Х10-1 ±5% - «10-= ±10% ±20% 130
Интерфейс GPIO Чтобы верно интерпретировать сопротивление резистора, расположите его так, чтобы полосы, расположенные близко друг к другу, находились слева, а оди- ночная полоса - справа. Начнем с первых полос: определите цвет и посмотрите соответствующее значение в таблице, в столбце «1-я и 2-я полосы», тем самым вы получите первую и вторую цифры кода. На рисунке выше первые две поло- сы - оранжевые. Этому цвету соответствует цифра «3», из чего в дальнейшем мы получим значение «33». Если в левой части резистора нанесены 4 полосы, а не 3, включите в полученное значение цифру, соответствующую цвету третьей полосы. Теперь посмотрите цвет последней полосы в левой группе (3-я или 4-я поло- са) и перейдите к таблице, к столбцу «Множитель». На указанное в этом столбце значение необходимо умножить полученное вами число.Тем самым вы получите фактическое значение сопротивления резистора. На нашем рисунке это корич- невая полоса, со значением «xlO1». Такое значение может напугать вас, однако не стоит беспокоиться, это всего лишь экспоненциальная запись: «xlO1» означает, что вам нужно «просто добавить один нолик к имеющемуся числу». Если же у нас «х106»,то нужно «добавить шесть ноликов к имеющемуся числу». Число 33, соответствующее первым двум оранжевым полосам, и ноль, соот- ветствующий коричневой полосе, вместе дают нам число 330 - значение сопро- тивления резистора, измеряемое в омах. Последняя полоса, расположенная от- дельно справа, - допустимое отклонение (также называется толерантностью, или допуском). Данное значение показывает, насколько точно номинальное со- противление резистора. Бюджетные резисторы маркированы серебристой поло- сой, указывающей на то, что итоговое значение может на 10 % быть больше или меньше номинального. Также такие модели могут вообще быть не промаркиро- ваны последней полосой.Тогда в этом случае процентное соотношение здесь со- ставит 20 % в большую или меньшую сторону. Если же речь идет о самых дорогих моделях, то обычно их маркируют серой полосой, значение которой составляет 0,05%. В рамках данного значения и будет варьироваться отклонение от номи- нального значения. При создании любительских проектов точность не так важна, любое отклонение здесь будет уместно. Если сопротивление вашего резистора превышает 1000 Ом (1000 О), значе- ние переводится в килоомы (кО), если же значение превышает 1000000 Ом,то переводится в мегаомы (МО). Резистор с сопротивлением в 2200 О необходимо обозначать как 2,2 к0, а резистор с сопротивлением в 2 200000 Ом - 2,2 МО. Сможете разобраться? Какими цветовыми полосами будет маркирован резис- тор с сопротивлением 100 Ом? А резистор с сопротивле- нием 2,2 МОм? Если бы вам было необходимо выбрать самый дешевый резистор, на какого цвета полосу допус- тимого отклонения вы бы ориентировались? 131
Глава 6. Физические вычисления на базе Scratch и Python Ваша первая электронная программа: Hello, LED! Создание своего собственного проекта со светодиодом - первый шаг в изуче- нии физической вычислительной техники, некое введение. Это то же самое, что при изучении языков программирования самостоятельно создать программу, которая будет выводить на экран надпись «Привет, мир!». Для того чтобы вы- полнить задачу, вам понадобится светодиод, резистор с сопротивлением 330 Ом (330 Q) (или резистор с сопротивлением, максимально близким к 330 Ом), а также перемычка типа мама-мама (F2F). Каждый резистор важен Резистор - жизненно важный элемент цепи. Его задача - предохранять светодиоды и сам компьютер Raspberry Pi от избыточного количества электрического тока. При отсутствии резистора светодиод может поглотить слиш- ком большое количество тока, после чего перегореть сам и, возможно, повредить Raspberry Pi. Такой тип ре- зисторов называют ограничивающим резистором. Точ- ное значение сопротивления необходимого резистора зависит от используемого вами светодиода. Резистор с сопротивлением 330 Ом универсален, поскольку под- ходит для большинства наиболее распространенных светодиодов. Чем выше значение сопротивления, тем тусклее светится светодиод; чем ниже значение сопро- тивления, тем ярче. Никогда не подключайте светодиоды к Raspberry Pi, если в вашей цепи отсутствует ограничивающий резис- тор. Исключением здесь является случай, когда свето- диод имеет встроенный резистор соответствующего сопротивления. Для начала проверим, работает ли светодиод. Поверните Raspberry Pi так, чтобы ряды пинов разъема GPIO располагались вертикально с правой сторо- ны. Подсоедините резистор с сопротивлением 330 Ом к первому пину с на- пряжением 3,3 В (обозначенному меткой 3V3 на рис. 6.1) с помощью пере- мычки провода типа мама-мама. Затем соедините конец перемычки (того же типа мама-мама), выходящей от светодиода, с длинной ножкой, положитель- ной, которая носит название онодо. Теперь соединим один конец перемычки типа мама-мама с короткой ножкой светодиода, отрицательной, которая носит название котодо, а другой - с первым заземляющим контактом (на рис. 6.1 обозначен как GND). 132
Интерфейс GPIO Рис. 6.1: Подключите светодиод и не забудьте про резистор! Светодиод должен гореть все время, пока компьютер включен. В противном случае проверьте, правильно ли вы все подключили: убедитесь, что сопротивле- ние резистора не слишком высокое, перемычки подключены верно, а контакты GPIO соответствуют схеме. Также проверьте, не перепутали ли вы ножки свето- диода, поскольку его работа осуществляется только в случае, когда к длинной ножке подключена перемычка с положительной полярностью, а к короткой - с отрицательной. Теперь, когда работа светодиода осуществляется должным образом, пришло время его запрограммировать (рис. 6.2). Отсоедините перемычку от пина 3V3 и подключите его к пину 25 разъема GPIO, обозначенному как GP25. Светодиод погаснет, но не волнуйтесь - все в порядке. Рис. 6.2: Отсоедините перемычку от пина 3V3 и подсоедините ее к GP25 133
Глава 6. Физические вычисления на базе Scratch и Python Теперь вы подготовили все для дальнейшего создания программы на языке Scratch или Python, суть которой - включение/выключение светодиода. Владение навыками кодирования Проекты, которые мы будем разбирать в этой главе, ос- нованы на базовом владении Scratch 3 и интегрирован- ной среде разработки Thonny Python (IDE). Если вы все еще не ознакомились с ними, обратитесь к главе 4, про- работав описываемые там программы. Управление светодиодом с помощью Scratch Загрузите программу Scratch 3 и нажмите кнопку ЕЗ Добавить расширение (Add Extension). Прокрутите список вниз и найдите расширение Raspberry Pi GPIO (рис. 6.3), а затем нажмите на него. Программа загрузит блоки, позволяю- щие управлять интерфейсом GPIO с помощью программы Scratch 3. Новые блоки автоматически появятся на палитре блоков, и в дальнейшем вы сможете их най- ти, перейдя в раздел Raspberry Pi GPIO. Рис. 6.3: Добавляем расширение Raspberry Pi GPIO в Scratch 3 когда Для начала щелчком мыши перетащите блок нажат из раздела События (Events) в область сценариев.Теперь под него поместите блок set gpio to output high 134
Интерфейс GPIO Выберите номер пина, нажав на маленькую стрелочку в блоке,тем самым открыв раскрывающийся список. Выберите число 25. Таким образом вы сообщите про- грамме Scratch, что номер необходимого пина GPIO - 25. когда нажат setgpio 25 ▼ to output high Запустите программу, нажав на кнопку в виде зеленого флажка. Вы увидите, что светодиод загорелся. Вам удалось запрограммировать ваш первый проект, используя физическую вычислительную технику! Остановите программу, нажав кнопку в виде красного восьмиугольника. Обратите внимание на то, что свето- диод продолжает гореть. Происходит это потому, что значение output high бло- II задает команду Raspberry Pi лишь включить светодиод. Для его отключения необходимо нажать на стрелку рядом со словом high и вы- брать в раскрывающемся списке пункт low. set gpio 25 to output high когда □ нажат setgpio 25 ▼ to output low Снова нажмите кнопку в виде зеленого флажка, и на этот раз вы увидите, что светодиод выключился. Сделаем программу более интересной. Добавим блок повторять всегда и пару блоков ждать ^секунд Эти блоки зададут программе команду включать и выключать светодиод с интервалом в одну секунду. когда Р повторять всегда setgpio 25 * to output high set gpio 25 ждать о секунд ждать о секунд to output low 135
Глава 6. Физические вычисления на базе Scratch и Python Нажмите кнопку в виде зеленого флажка и понаблюдайте за светодиодом. Он включается на секунду, после чего выключается также на секунду, после чего снова включается. И так будет продолжаться до тех пор, пока вы не остановите программу нажатием кнопки в виде красного восьмиугольника. Нажмите кнопку в виде красного восьмиугольника в момент свечения светодиода, а затем в тот момент, когда он погас, и сравните результаты. Задача: внесите изменения р Какие изменения необходимо внести в программу, чтобы длительность свечения светодиода увеличилась? А какие для того, чтобы увеличить длительность нахождения све- тодиода в выключенном состоянии? Каково минималь- ное время задержки, которое можно задать между вклю- чением и выключением светодиода? Управление светодиодом с помощью Python Откройте приложение Thonny, щелкнув по его ярлыку в разделе Программи- рование (Programming) в меню Raspberry. Теперь создадим новый проект, нажав кнопку Новое (New). Сохраним его под названием Hello LED. Для того чтобы использовать интерфейс GPIO в Python, вам необходимо импортировать модуль под названием GPIO Zero. Для работы над созданием этого проекта вам пона- добится только та группа инструкций этого модуля, которая предназначена для проведения манипуляций со светодиодами. Для этого введите следующее в об- ласть оболочки Python: from gpiozero import LED Теперь сообщим интерпретатору информацию о том, к какому пину GPIO под- ключен светодиод. Введите следующее: led = LED(25) Вместе эти две инструкции позволяют с помощью сценария Python управлять светодиодами, подключенными к пинам разъема GPIO Raspberry Pi, и указывать, какой пин или пины (если у вас подключено более одного светодиода) необхо- димо использовать. Для управления нашим светодиодом введите следующее: led.onO Для отключения светодиода введите: led.off() 136
Интерфейс GPIO Поздравляем, теперь вы можете управлять интерфейсом GPIO Raspberry Pi с помощью Python! Введите последние две функции еще раз. Если светодиод вы- ключен,то функция Led.offQ ничего не даст.Также произойдет и с включенным светодиодом и функцией led.onf). Создадим полноценную программу.Для этого в область сценария введите сле- дующее: from gpiozero import LED from time import sleep led = LED(25) while True: led.onf) sleep(l) led.offО sleep(l) Эта программа импортирует функцию LED() из модуля gpiozero (GPIO Zero) и функцию sleepQ из модуля time. После чего создает бесконечный цикл для повторения включения и выключения светодиода с задержкой в одну секунду. Нажмите кнопку Выполнить (Run), тем самым запустив программу. Светодиод начнет мигать. Как и в случае со Scratch, рекомендуем обратить внимание на изменения, происходящие после нажатия кнопки Остановить (Stop) (в случае с выключенным светодиодом и в случае со светящимся). Задача: увеличить время работы светодиода Какие изменения необходимо внести в программу,чтобы длительность свечения светодиода увеличилась? А ка- кие для того, чтобы увеличить длительность нахождения светодиода в выключенном состоянии? Каково мини- мальное время задержки, которое можно задать между включением и выключением светодиода? Использование макетной платы Создавать проекты, которые мы будем разбирать в этой главе в дальнейшем, будет намного проще, если у вас есть макетная плата, позволяющая подключать и удерживать различные электрические компоненты. 137
Глава 6. Физические вычисления на базе Scratch и Python Основание макетной платы покрыто множеством отверстий, расположенных обычно со стандартным шагом 2,54 мм. Под этими отверстиями помещены ме- таллические пластины, выполняющие роль перемычек (тех, что вы использовали ранее). Эти пластины расположены вдоль шин и рядов по всему основанию. У большинства плат имеется небольшая канавка посередине, изолирующая груп- пы рядов друг от друга. На большей части плат нанесены числа и буквы возле шин питания (горизонтальных последовательностей контактов) и рядов (верти- кальных последовательностей контактов). Это облегчает поиск необходимого отверстия: А1 - верхний левый угол, В1 - верхний правый угол, В2 - на одно отверстие ниже предыдущего. КонтактА1 соединен с В1 скрытой металлической пластиной. Однако не всегда нужные вам отверстия соединены друг с другом на макетной плате. Иногда вам будет необходимо соединять их перемычками. На макетных платах более крупных размеров также расположены отверстия по краям, и обычно они помечены линиями красного и черного или синего цвета. Это шины питания, предназначенные для упрощения подключения и избавле- ния от лишних перемычек. Вы можете подключить один конец перемычки к пину заземления Raspberry Pi, а второй - к одному из отверстий шины заземления (обычно отмеченной синей или черной линией и знаком минуса) макетной пла- ты.Так будет обеспечено общее заземление множества компонентов, подключен- ных к макетной плате. То же самое вы можете проделать тогда, когда для вашего проекта необходимы два разных источника питания: например, 3,3 В и 5 В. Подключать электронные компоненты к макетной плате очень просто: под- несите выступающие металлические контакты (ножки) к отверстиям и начните осторожно надавливать, пока они не защелкнутся клеммами в макетной плате. Для соединения разных отверстий макетной платы вам потребуется перемычка типа папа-папа (М2М), а для подключения макетной платы к Raspberry Pi - пе- ремычка типа папа-мама (M2F). 138
Интерфейс GPIO Никогда не подключайте более одного компонента или перемычки к одно- му отверстию платы. Запомните, что отверстия соединены между собой рядами, если не считать канавку посередине, поэтому устройство, которое вы подключи- те к контакту А1, будет соединено со всем, что вы подключите к Bl, Cl, D1 и Е1. Следующий шаг: работа с кнопкой Устройства вывода,такие как светодиоды, - это одна сторона. Другая - устрой- ства ввода, которые также можно подключать к разъему GPIO. Интерфейс GPIO способен работать как в режиме вывода,так и ввода. Для создания этого проекта вам потребуются: макетная плата, перемычки типа папа-папа (М2М) и папа-мама (M2F), а также тактовая кнопка. В случае если у вас нет макетной платы, вы може- те использовать перемычки, однако вам будет гораздо сложнее нажать кнопку, не прервав электрическую цепь. Для начала установим кнопку на макетную плату. Если у кнопки только две ножки, убедитесь в том, что вставлены в отверстия разных рядов платы с раз- ными номерами. Если же у кнопки четыре ножки, расположите кнопку так, что- бы стороны, на которых расположены ножки, находились параллельно канавке платы, а стороны без ножек - перпендикулярно им (см. рис. 6.4). С помощью перемычки типа папа-мама соедините шину заземления макетной платы с пином заземления Raspberry Pi (разъем с меткой GND на рис. 6.4). А теперь с помощью перемычки типа папа-папа соедините ножку кнопки с шиной за- земления. При работе с кнопкой с четырьмя ножками подсоедините вторую ножку, находящуюся на той же стороне, что и уже подключенная, с помощью перемычки типа папа-мама ко второму пину разъема GPIO Raspberry Pi (пин с меткой GP2 на рис. 6.4). Рис. 6.4: Подключение кнопки к разъему GPIO 139
Глава 6. Физические вычисления на базе Scratch и Python Управление кнопкой с помощью Scratch когда нажат set gpio to input pulled high в об- и в раскры- Создайте новую программу в Scratch и перетащите блок ласть сценариев. Затем вниз поместите блок вающемся списке выберите значение 2, соответствующее заданному кнопке но- меру пина разъема GPIO. После нажатия кнопки в виде зеленого флажка никаких изменений не после- дует.Причина заключается втом,что вы задали программе команду использовать пин с указанным номером в режиме ввода, но что делать с полученными дан- ными, вы не указали. Перетащите блок перетащите внутрь этого блока блок и перетащите его в белое ромбовидное пространство блока крывающемся списке выберите число 2, тем самым указывая программе номер повторять всегда ] если ,то иначе в конец сценариям затем . Найдите блок gpio is high? если , то в рас- пина разъема GPIO, с которого необходимо считывать данные. Поместите блок говорить 1ривет!д 2 секунд внутрь части иначе блока если то иначе Здесь вне- сем некоторые изменения: заменим надпись на Кнопка нажата!. Та часть, что находится в центре блока если ,то иначе пока останется пустой. когда нажат set gpio 2 * to input pulled high повторять всегда если gpio 2 < is high иначе говорить Кнопка нажата! е секунд Мы можем добавить еще много различных блоков, но пока протестируем то, что у нас получилось. Нажмите кнопку в виде зеленого флажка, а затем кнопку на макетной плате. На экране высветится сообщение от спрайта о том, что кнопка нажата. Програм- ме удалось прочитать входные данные, полученные через определенный пин GPIO! 140
Интерфейс GPIO Скорее всего, вы заметили, что пространство внутри блока если gpio 2 is high? , то пустует. Код, который запускается при нажатии кнопки, Сценарий кажется запутанным, ведь иначе находится в другой части блока, кнопка при нажатии подает напряжение (о чем говорит значение high). На са- мом деле в данном случае все происходит наоборот. Пин GPIO изначально нахо- дится в режиме high, а нажатие кнопки переводит его в режим low. Взгляните на схему еще раз: обратите внимание на то, как кнопка соединена с пином GP2, т. е. с положительным полюсом, и с пином GND. Когда кнопка нажата, напряжение в разъеме GPIO снижается, проходя через контакт заземления. Та- ким образом программа Scratch перестает выполнять команду, заданную блоком если gpio 2 is high? , то И ц иначе го блока. Если же вам все еще тяжело вникнуть в этот процесс, просто запомните: при нажатии кнопки пин переводится в режим low. Обращаем ваше внимание на то, что это применимо к конструкции конкретной цепи. Давайте развивать проект. Добавим в цепь светодиод и резистор. Не забудьте проверить, верно ли вы подключили резистор: он должен быть соединен с пи- ном 25 разъема GPIO и длинной ножкой светодиода, короткая же ножка должна быть соединена с шиной заземления макетной платы. Удалите блок щив его в палитрублоков.Замените удаленный блокблоком Не забудьте изменить номер пина GPIO, нажав на маленькую стрелочку, откры- вающую раскрывающийся список. В пустую часть блока добавьте блок говорить 4&EIВЕК» О секунд из области сценариев, перета- set gpio 25 to output high если gpio 2 is high? , to set gpio 25 to output low не забывая о том, что необходимо изменить значения. когда нажат повторять всегда gpio 2 • is high * ? , to set gpio 2 * to input pulled high есл иначе setgpio 25 ▼ to output low ▼ setgpio 25 ▼ to output high ▼ 141
Глава 6. Физические вычисления на базе Scratch и Python Нажмите кнопку в виде зеленого флажка в программе, после чего кнопку на макетной плате. Светодиод горит, пока вы удерживаете кнопку нажатой. Как только вы отпустите ее, он погаснет. Поздравляем! Вам удалось управлять одним пином GPIO, основываясь на вводе данных, поступающих с другого пина! Задача: пусть светодиод светится Какие изменения необходимо внести в программу для того, чтобы светодиод оставался включенным на протя- жении нескольких секунд после того, как вы отпустили кнопку? Какие изменения необходимо внести в про- грамму для того, чтобы светодиод выключался при на- жатии кнопки, и наоборот, включался тогда, когда вы ее отпускаете? Управление кнопкой с помощью Python Создайте в программе Thonny новый проект, нажав кнопку Новое (New). Те- перь сохраните программу под названием Button Input, нажав кнопку Сохранить (Save). Использование пина GPIO в режиме ввода для подключения кнопки схо- же с использованием пина в режиме вывода при подключении светодиода. Од- нако для использования кнопки вам необходимо импортировать другой набор инструкций модуля GPIO Zero. Введите в области сценария следующие строки: from gpiozero import Button button = Button(2) Для того чтобы код выполнялся при нажатии кнопки, необходимо использо- вать функцию wait_for_press(), содержащуюся в модуле GPIO Zero. Введите следующее: button.wait_forpressf) printfTbi нажал меня!") Нажмите кнопку Выполнить (Run), а затем кнопку на макетной плате. Ваше сообщение будет выведено в области оболочки Python, расположенной в ниж- ней части окна Thonny. Поздравляем! Вашей программе удалось считать вход- ные данные с указанного пина GPIO! Если вы хотите запустить программу еще раз, снова нажмите кнопку Выполнить (Run). После того как программа выводит данные в область оболочки, она выключается. Происходит это из-за отсутствия в программе цикла. Дополним проект. Подключим к цепи новые компоненты: светодиод и ре- зистор (если вы не сделали этого ранее). Не забудьте проверить, верно ли вы 142
Интерфейс GPIO подключили резистор: он должен быть соединен с пином GPIO 25 и длинной ножкой светодиода, короткая же ножка светодиода должна быть соединена с шиной заземления макетной платы. Для управления светодиодом и кнопкой вам, помимо функции Button, потре- буется импортировать функцию LED из модуля gpiozero. Вам также понадобится функция sleep из модуля time. Вернитесь в начало вашей программы и введите следующее в качестве первых двух строк: from gpiozero import LED from time import sleep Под строкой button = Button (2) введите: led = LED(25) Удалите функцию print("Tbi нажал меня!") и замените ее на: led.onf) 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.onf) sleep(3) led.offО Нажмите кнопку Выполнить (Run) в окне программы, а затем кнопку на макет- ной плате. Светодиод будет гореть в течение трех секунд, а затем выключится. Программа завершит работу. Поздравляем! Вы научились регулировать работу светодиода с помощью кнопки и Python! Задача: добавить цикл Как правильно добавить цикл, чтобы программа продол- жала работать после первого нажатия кнопки? Какие из- менения необходимо внести в программу для того, чтобы светодиод выключался при нажатии кнопки и, наоборот, включался, когда вы ее отпускаете? 143
Глава 6. Физические вычисления на базе Scratch и Python Пошумим: управление излучателем звука Светодиоды - отличное устройство вывода, однако неэффективное, если на- ходится вне поля зрения. Решение есть: излучатели звука (пьезоэлектрические излучатели или зуммеры), воспроизводящие звук, который вы можете услышать, находясь в любой части комнаты. Для работы над этим проектом вам потребу- ется: макетная плата, перемычки типа папа-мама (M2F) и активный излучатель звука. Если у вас нет макетной платы, вы можете подключить излучатель звука с помощью перемычек типа мама-мама (F2F). Цепь и программа проекта с излучателем звука схожи с предыдущим проек- том, со светодиодом. Возьмите цепь, которую вы собирали со светодиодом, но замените светодиод активным излучателем звука и оставьте резистор выклю- ченным, поскольку для работы излучателя звука требуется больше напряжения. С помощью макетной платы и перемычек типа папа-мама подсоедините одну ножку излучателя звука к контакту 15 разъема GPIO (обозначенному как GP15 на рис. 6.5), а другую - к контакту заземления (GND). Если у излучателя звука три ножки, убедитесь, что ножка, отмеченная знаком минус (-), подключена к контакту заземления, а ножка, отмеченная буквой S или словом SIGNAL, - к контакту 15 разъема GPIO, а затем подключите оставшуюся ножку (обычно это средняя ножка) к пину с напряжением 3,3 В (обозначенному как 3V3). Рис. 6.5: Подключение излучателя звука к разъему GPIO 144
Интерфейс GPIO Управление излучателем звука с помощью Scratch и выберите число 15, для того чтобы Scratch ориен- Воссоздайте программу, которую мы создавали для управления светодиодом, или загрузите ее, если она была сохранена. Откройте раскрывающийся список блока тировался на нужный нам пин разъема GPIO. set gpio 25 to output high когда нажат повторять всегда set gpio 15 * to output high » ждать ^^секунд set gpio 15 ” to output low * ждать ^^секунд Нажмите кнопку в виде зеленого флажка. Излучатель звука начнет гудеть: одну секунду он будет включен, а одну - выключен. Если излучатель звука только щелкает один раз в секунду,то перед вами пассивный, а не активный излучатель. В отличие от пассивного излучателя, нуждающегося в быстро меняющемся сиг- нале, активный излучатель сам направляет его на металлическую пластину, тем самым заставляя ее производить звук нужной частоты. Когда вы запускаете из- лучатель звука с помощью Scratch, пластины соприкасаются лишь один раз, тем самым издавая короткий звук «щелчка». Программа замолкает до следующего ее включения или выключения. Нажмите кнопку в виде красного восьмиугольника,тем самым остановив про- грамму. Но сделать это нужно обязательно тогда, когда излучатель не издает зву- ка, иначе он не перестанет шуметь до следующего запуска программы. Задача: изменить параметры издаваемого излучателем звука Какие изменения необходимо внести в программу для того, чтобы сократить время звучания излучателя? Мо- жете ли вы создать программу, позволяющую управлять излучателем с помощью кнопки? 145
Глава 6. Физические вычисления на базе Scratch и Python Управление излучателем звука с помощью Python Управление активным излучателем звука с помощью функций из модуля GPIO Zero практически идентично управлению светодиодом, поскольку оба этих устройства могут находиться в двух режимах: включенном и выключенном. Од- нако сейчас нам понадобится другая функция: buzzer. Создадим новый проект в Thonny и сохраним его под названием Buzzer.Теперь введите следующее: from gpiozero import Buzzer from time import sleep Как и при написании программы, управляющей светодиодом, для управле- ния излучателем звука интерпретатору необходима информация о том, к какому именно контакту излучатель подключен. Введите следующий код: buzzer = Buzzer(15) С этого момента программа будет практически идентична той, что вы создали для управления светодиодом. Единственное отличие (кроме подключения к дру- гому пину разъема GPIO) - использование иного устройства (излучателя звука, а не светодиода). Введите следующее: while True: buzzer.on() sleep(l) buzzer.off() sleep(l) После нажатия кнопки Выполнить (Run) излучатель начнет издавать звук: одна секунда - включен, одна секунда - выключен. При использовании пассивного, а не активного излучателя звука вы будете слышать вместо непрерывного гудения только короткий щелчок с паузой в одну секунду. Причина этого заключается в отсутствии у пассивного излучателя генератора, вырабатывающего быстро ме- няющийся сигнал, который заставляет пластины внутри излучателя вибрировать. Для завершения работы программы нажмите кнопку Остановить (Stop), но убедитесь в том, что излучатель не издает звуков, иначе он будет продолжать шуметь до следующего запуска программы! Задача: изменить параметры издаваемого излучателем звука Какие изменения необходимо внести в программу для того, чтобы сократить время звучания излучателя? Мо- жете ли вы создать программу, позволяющую управлять излучателем с помощью кнопки? 146
Проект на Scratch: Светофор Проект на Scratch: Светофор Теперь, когда вы научились пользоваться кнопками, излучателями звука и све- тодиодами - устройствами ввода/вывода, - пора обратить ваше внимание на действительно сложный пример из реальной жизни. Создадим светофоры, ре- гулируемый кнопкой, для безопасного пересечения дороги. Для работы над этим проектом вам понадобятся: макетная плата, желтый, зеленый и красный светодиоды,три резистора с сопротивлением 330 Ом, излучатель звука,тактовая кнопка, набор перемычек типа папа-папа (М2М) и папа-мама (M2F). Начнем с подключения компонентов (рис. 6.6). Подключите излучатель к пину 15 разъема GPIO (обозначен как GP15 на рис. 6.6), красный светодиод - к пину 25 разъема GPIO (обозначен как GP25), желтый светодиод - к пину 8 разъема GPIO (GP8), зеленый светодиод - к пину 7 разъема GPIO (GP7), а кноп- ку - к пину 2 разъема GPIO (GP2). Не забудьте подключить резисторы с сопро- тивлением 330 Ом к пинам разъема GPIO и длинным ножкам светодиодов так, чтобы резисторы оказались между ними. Также не забудьте подключить другие контакты всех компонентов к шине заземления макетной платы. Для заверше- ния цепи подключите шину заземления к контакту заземления (обозначенному как GND) на плате Raspberry Pi. Рис. 6.6: Схема подключения компонентов для дальнейшей работы над проектом светофора 147
Глава 6. Физические вычисления на базе Scratch и Python в об- Создайте новый проект в Scratch 3. Перетащите блок ласть сценариев. Теперь вам необходимо сообщить Scratch о том, что пин 2 разъема GPIO, к которому подключена кнопка, работает в режиме ввода, а не когда нажат а затем поместите в него блоки, как показано на рисунке повторять всегда Теперь зададим свою последовательность включения светодиодов. Добавьте блок ниже. Этими блоками вы задаете команду включения и выключения светодиодов светофора в определенном порядке. Помните о том, к какому именно пину GPIO был подключен тот или иной компонент: под номером 25 - красный светодиод, под номером 8 - желтый, а под номером 7 - зеленый. когда нажат повторять всегда set gpio 2 * to input pulled high set gpio 25* to output high ждать секунд set gpio 8 * to output high * ждать секунд set gpio 25 to output low set gpio 7 * to output low * set gpio 8» to output low* set gpio 7 * to output high * ждать секунд KJ set gpio 8 * to output high ждать© секунд set gpio 8 * to output low * 148
Проект на Scratch: Светофор Нажмите кнопку в виде зеленого флажка и понаблюдайте за светодиодами: сначала загорится красный, затем одновременно красный и желтый, потом зеле- ный, далее желтый, а затем последовательность повторится снова. По такой же схеме работают светофоры в Великобритании. При желании вы можете отредактировать схему включения светодиодов так, чтобы она совпада- ла со схемой работы светофоров любой другой страны. А теперь попробуем смоделировать пешеходный переход. Для этого необ- ходимо, чтобы программа отслеживала нажатия кнопки. Если ваша программа запущена, нажмите кнопку в виде красного восьмиугольника, тем самым оста- новив программу. Перетащите блок если ,то иначе в область сценариев и поместите его непосредственно под пустой ромбик блока. блок повторять всегда Пока не заполняйте когда P нажат set gpio 2* to input pulled high* повторять всегда если ,то set gpio 25 * to output low > set gpio 25 < to output high ждать секунд set gpio 8 to output high * ждать секунд set gpio set gpio 8 * to output low ® 7 * to output high * ждать секунд set gpio 7 * to output low * set gpio 8 - to output high « ждать секунд set gpio 8 * to output low * иначе 149
Глава 6. Физические вычисления на базе Scratch и Python В реальной жизни зеленый сигнал для пешеходов загорается не сразу после нажатия кнопки, а сначала ожидает включения красного сигнала для автомоби- лей. Используем этот принцип в нашей программе. Для этого перетащите блок ] в область сценариев и выберите значение 2 в раскрывающемся списке. А под него перетащите блок переменной на pushed (вместо моя переменная), а значение с 0 на 1. when gpio is low задать pushed ▼ значение when gpio 2 < is Low w задать pushed * значение О Эта группа блоков отвечает за нажа- тие кнопки, а затем присваивает пере- менной pushed значение 1. Это позво- лит вам сохранить факт нажатия кнопки, даже если действие не планируется вы- когда F нажат set gpio 2 ▼ to input pulled high » полнять сразу. Вернитесь к предыдущей груп- пе блоков и сосредоточьтесь на бло- повторять всегда если .то ке если ,то Перетащите блок из РазДела Операторы (Operators) в пустой ромбик блока если , то а затем перетащите блок pushed в первое пустое пространство set gpio 25 ▼ to output high « ждать ^^секунд Иset gpio 8 > to output high ▼ ждать ©секунд блока В правой части блока введите 0 вместо 50. Нажмите кнопку в виде зеленого флаж- ка, и вы увидите, как светофор (светодио- ды) выполняет заданную последователь- ность. Нажмите кнопку на макетной плате. Сначала вам покажется, что ничего не происходит, однако как только последо- вательность завершится (после включе- ния желтого сигнала), светофор прекратит свою работу, выключив все светодиоды. Происходит это благодаря команде, зада- ваемой переменной pushed. Теперь зададим кнопке немного другую команду,отличнуюотпростого выключения всех светодиодов светофора. В основной группе блоков найдите блок иначе setgpio setgpio 25 - 8 setgpio ждать ^^секунд 7 ’ to output low • to output low » to output high « setgpio 7 » to output low • setgpio ждать ^рсекунд 8 •' to output high ♦ иначе и пере- set gpio 8 ’ to output low * 150
Проект на Scratch: Светофор set gpio 25 to output high тащите в него блок Не забудьте изменить номер пина разъема GPIO, указав тот номер, к которому подклю- чен светодиод красного цвета. Создадим последовательность блоков, отвечающую за работу излучателя зву- ка. Работу продолжаем в том же самом блоке ipJJJ, разместив ниже блока блок блока поместите бло- ки Перетащите в него блок иначе а затем внутрь set gpio 25 to output high set gpio 15 to output high set gpio 15 to outputlow^M» редактируйте значения пинов в этих блоках согласно подключению излучателя звука к разъему GPIO. Теперь му блок добавьте в програм- и блок set gpio 25 to output low задать pushed ▼ значение (j| так, чтобы они оказались под блоком а» но внутри блока последовательности блок обнуляет перемен- ную, передающую программе информацию о том, что кнопка нажата. Тем самым заданная Последний в этой части иначе излучателю звука последовательность имеет конец, а не повторяется бесконечно. Нажмите кнопку в виде зеленого флаж- ка, а затем кнопку, расположенную на ма- кетной плате. После завершения заданной последовательности загорится красный светодиод и раздастся звуковой сигнал, со- общающий пешеходам о том, что сейчас до- рогу переходить безопасно. Через пару се- кунд звук, издаваемый излучателем звука, утихнет, а светофор продолжит выполнять заданную последовательность до тех пор, пока вы не нажмете кнопку. Поздравляем, вам удалось создать собст- венную программу, в которой режим рабо- ты светофора зависит от нажатия кнопки (для безопасного пересечения дороги)! жат set gpio 2 - to input pulled high- повторять всегда если pushed = © ,to set gpio 25 ” to output high - секунд set gpio 8 * to output high - кдатьф секунд set gpio 25- to output low - set gpio 8 - to output low * ждать^Эсекунд set gpio 7 - to output high ” set gpio 7 - to output low« □ when gpio 2 - is low - задать pushed - значение ol set gpio 8 - to output high * ждать^^секунд set gpio 8 * to output low * иначе <4^- set gpio 25- to output high - повторить Д^раз set gpio 15- to output high- set gpio 15 - to output low- ждать(Л^ секунд! set gpio 25- to output low- задать pushed - значение oB 151
Глава 6. Физические вычисления на базе Scratch и Python Задание: изменяем программу Какие изменения нужно внести в код, чтобы увеличить время, отведенное пешеходу для пересечения дороги? Поищите информацию о режиме работы светофоров других стран и перепрограммируйте ваши светофоры в соответствии с полученными данными. Как можно уменьшить яркость светодиодов? Проект на Python: Игра на реакцию Теперь, когда вы научились пользоваться кнопками, излучателями звука и све- тодиодами - устройствами ввода/вывода, - пора обратить ваше внимание на действительно сложный пример: игру на реакцию для двух игроков. Проверь- те, у кого из вас реакция быстрее! Для работы над проектом вам понадобится макетная плата, светодиод, резистор с сопротивлением 330 Ом, две тактовые кнопки, а также несколько перемычек типа папа-мама (M2F) и папа-папа (М2М). Начнем с подключения компонентов (рис. 6.7). Установите первую кнопку в левой части макетной платы и подключите к пину 14 разъема GPIO (обозначен как6Р14 на рис. 6.7), а вторую кнопку установите в правой части макетной платы и подключите к пину 15 разъема GPIO (обозначен как GP15 на рис. 6.7). Затем подключите длинную ножку светодиода к резистору с сопротивлением 330 Ом, а сам резистор соедините с контактом 4 разъема GPIO (обозначен как GP4) на плате Raspberry Pi. Также не забудьте подключить другие ножки всех компонен- тов к шине заземления макетной платы.Для завершения цепи подключите шину заземления к пину заземления (обозначенному как GND) платы Raspberry Pi. Создайте новый проект в Thonny и сохраните его под названием Reaction Game. Для работы вам потребуются функции LED и button, доступные в модуле GPIO Zero, а также функция sleep из модуля Time. Вы можете импортировать функции из модуля GPIO Zero с помощью двух строк кода. Однако, чтобы сэко- номить время, попробуйте импортировать сразу две функции одной строкой, используя знак запятой (,) для их разделения. Введите в область сценария сле- дующее: from gpiozero import LED, Button from time import sleep Как и раньше, сообщим интерпретатору информацию о том, к каким пинам подключены две кнопки и светодиод. Введите следующее: led = LED(4) right_button = Button(15) left_button = Buttori(14) 152
Проект на Python: Игра на реакцию Рис. 6.7: Подключение необходимых компонентов для дальнейшего создания игры на реакцию Теперь добавьте функции, задающие светодиоду команды включения и вы- ключения. Таким образом вы сможете проверить, корректно ли он работает: led.on() sleep(5) led.off() После нажатия кнопки Выполнить (Run) светодиод загорится и будет светить- ся в течение пяти секунд, после чего выключится, а программа завершит свою работу.Так как вы планируете использовать светодиод в игре на реакцию,то сей- час ее работа кажется слишком предсказуемой, поскольку установленное время всегда равно 5 секундам. Добавьте следующую строку кода ниже строки from time import sleep: from random import uniform 153
Глава 6. Физические вычисления на базе Scratch и Python Модуль Random позволяет генерировать случайные числа (здесь с непрерыв- ным равномерным распределением - см. http://bit.ly/33KFpYO). Найдите функ- цию sleep(5) и отредактируйте ее следующим образом: sleep(uniform(5, 10)) Снова нажмите кнопку Выполнить (Run). На этот раз светодиод будет гореть в течение случайного количества времени, в зависимости от случайно выбран- ного числа в диапазоне от 5 до 10. Засеките, сколько времени горит светодиод в первый раз, а затем, после того как он погаснет, нажмите кнопку Выполнить (Run) еще несколько раз, и вы заметите, что при каждом новом запуске время изменяется. Программа стала непредсказуемой. Для того чтобы превратить кнопки игроков в триггеры, введем следующий код. Перейдите в самый конец написанной вами программы и введите следующее: def pres: (button): print(str(button.pin.number) + " выиграл ) Помните, что 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 + " выиграл") 154
Проект на Python: Игра на реакцию Нажмите кнопку Выполнить (Run), а затем введите имена игроков в область оболочки Python. Постарайтесь, после того как светодиод погаснет, нажать кноп- ку как можно быстрее.Теперь на экране высветится не номер пина кнопки, а имя игрока. Сейчас программа выводит имена всех игроков, которые нажали кнопку, одна- ко нам необходимо имя победителя.Для решения проблемы нам нужна функция из системного модуля exit. Под последней строкой, содержащей инструкцию import, введите следующее: from os import _exit Теперь в конце вашей программы, над строкой, содержащей функцию print(right_name + " выиграл"), введите следующее: _exit(0) В данном случае отступ очень важен. Перед функцией _exit (0) должно быть указано четыре пробела. Тем самым функция будет выровнена по ключевым словам else и if, расположенным выше. Эта функция задает Python команду за- вершить программу после того, как кто-либо из игроков нажмет кнопку. Из этого следует, что игрок, нажавший кнопку позже, не выиграет, а значит, программа не поздравит его с победой! В итоге код программы должен выглядеть следующим образом: from gpiozero import LED, Button from time import sleep from random import uniform from 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 + " выиграл") 155
Глава 6. Физические вычисления на базе Scratch и Python _exit(0) right_button.when_pressed = pressed left-button.when_pressed = pressed Нажмите кнопку Выполнить (Run), введите имена игроков, подождите, пока светодиод погаснет, и вы увидите имя победителя. На экране также высветится сообщение: Backend terminated or disconnected. Use ' Stop/Restart' to restart.... Это сообщение означает, что Python получил команду _exit(0) и остановил программу, но для обнуления всех результатов и подготовки к новому раунду вам нужно будет нажать кнопку Остановить (Stop) (рис. 6.8). Рис. 6.8: После того как победитель определен, завершите программу Поздравляем, вы создали свою собственную игру! Задача: улучшить игру Можете ли вы добавить цикл для непрерывной работы программы? Не забудьте перед этим удалить функцию _exit(0)! Способны ли вы ввести счетчик очков для того, чтобы проследить за тем, кто чаще всего выигрыва- ет? А способны ли вы ввести таймер, с помощью которо- го сможете отследить время, которое потребовалось на реакцию игрока? 156
Глава 7 Физические вычисления с помощью Sense HAT Первоначально продукт был разработан для полета Astro Pi на Международную космическую станцию (МКС), после чего стал доступен в качестве дополнительного устройства для Raspberry Pi. Это многофункциональная дополнительная плата, оснащенная датчиками и RGB-светодиодной матрицей Raspberry Pi поддерживает подключение плат расширения под названием Hardware Attached on Top (HAT). Такие платы расширения можно использо- вать для подключения чего угодно: от микрофонов и лампочек до элект- ронных реле и матриц к Raspberry Pi. Однако один из видов HAT уникальный и носит название Sense HAT. Эта плата была разработана специально для космической миссии Astro Pi. В рамках совместного проекта Raspberry Pi Foundation, Космического агентства Великобритании и Европейского космического агентства, Astro Pi доставил пла- ты Raspberry Pi и Sense HAT на МКС на борту грузового корабля Orbital Science Cygnus. С тех пор, как устройства достигли орбиты, с помощью плат Sense HAT 157
Глава 7. Физические вычисления с помощью Sense HAT начали выполнять код и проводить различные эксперименты, предложенные школьниками из разных частей Европы. Астронавты даже дали девайсам имена: Эд и Иззи. Сами Эд и Иззи все еще находятся на МКС, но можно приобрести точно такую же плату Sense HAT в любом розничном магазине Raspberry Pi. Если же у вас нет возможности купить ее прямо сейчас, можно эмулировать ее с помощью про- граммного обеспечения! Реальное устройство и эмулятор Проекты, которые мы будем разбирать в этой главе, удобнее будет создавать при наличии настоящей платы Sense HAT, подключенной к разъему GPIO на Raspberry Pi. Однако любой пользователь, у которого нет этой платы в наличии, может попробовать создать проекты в эмуляторе Sense HAT, при этом пропус- тив раздел «Подключение Sense НАТ». Результат будет ничем не хуже! Изучаем плату Sense HAT Sense HAT - мощная многофункциональная дополнительная плата для Raspberry Pi. Помимо светодиодной матрицы 8*8, состоящей из 64 красных, зеленых и синих программируемых светодиодов (RGB), цвет которых можно настроить для получения абсолютно любого оттенка, Sense HAT включает в себя пятипозици- онный джойстик-контроллер и шесть бортовых датчиков. 158
Изучаем плату Sense HAT Датчик положения (гироскоп): устройство, которое используется для опре- деления изменения угла ориентации тела, получившего определение угло- вой скорости, отслеживающее направление гравитационного поля Земли - силы, которая притягивает вещи к земле, в центр планеты. Проще говоря, гироскопический датчик позволяет определить, что вы поворачиваете Sense HAT относительно поверхности Земли, и определяет скорость пово- рота. Акселерометр: схож с предыдущим датчиком, но измеряет он уже не угло- вую скорость относительно поверхности Земли, а ускорение (силы тяжести) в различных направлениях. Совместив показания (данные) обоих датчиков, вы сможете отследить, в какую сторону и как быстро перемещается Sense HAT. Магнитометр: прибор для измерения характеристик магнитного поля яв- ляется еще одним датчиком, который помогает отследить перемещение Sense HAT. Измеряя естественное магнитное поле Земли, магнитометр мо- жет определить направление северного магнитного полюса. Этот датчик также можно использовать для поиска металлических предметов и даже для обнаружения электрических полей. Все три перечисленных датчика встроены в один модуль под названием ACCEL/GYRO/MAG, расположенный на печатной плате Sense HAT. Датчик влажности: измеряет процент водяного пара в воздухе, известного как относительная влажность. Относительная влажность воздуха может колебаться от 0 %, если в нем отсутствует влага, и до 100 %, когда воздух полностью насыщен водяным паром. Полученные данные можно использо- вать для метеопрогноза. Датчик измерения атмосферного давления: также известен как барометр, служит для измерения давления воздуха. Хотя большинство людей знают, что такое атмосферное давление из прогноза погоды, у барометра есть еще одно секретное применение: он может определить, спускаетесь вы с горы или поднимаетесь на нее, поскольку чем дальше вы удаляетесь от поверх- ности Земли, тем ниже падает давление, а воздух становится разреженным. Датчик температуры: измеряет температуру окружающей среды, а также платы Sense HAT. Если вы используете чехол, то показания будут чуточку выше, чем вы могли бы ожидать. У платы Sense HAT отсутствует отдельный датчик температуры, поэтому в данном случае используются встроенные в датчики влажности и атмосферного давления. Программа способна ис- пользовать один или оба этих датчика сразу. Подключение Sense HAT Если вы приобрели плату Sense HAT, перед началом работы распакуйте ее и убедитесь, что у вас имеются все ее компоненты: сама плата Sense HAT, четыре металлические или пластиковые опоры (распорки) и восемь болтов. В наборе также может оказаться пластиковая колодка с несколькими металлическими пи- 159
Глава 7. Физические вычисления с помощью Sense HAT нами, схожая с разъемом GPIO. В таком случае поверните колодку пинами вверх и подсоедините ее к Sense HAT снизу. При этом вы должны услышать щелчок. Распорки предназначены для того, чтобы предотвратить деформацию Sence HAT во время использования джойстика. Конечно, плата будет работать и без распорок, но их наличие защитит от повреждений как Sense HAT,так и Raspberry Pi с разъемом GPIO. Внимание! Платы расширения HAT необходимо подключать к разъему GPIO и отключать от него,только когда компьютер Raspberry Pi выключен и отключен от источника питания. Будьте осторожны, когда держите плату Sense HAT горизонтально во время ее установки, и дважды проверьте, что она находится в одной линии с пинами колодки GPIO, прежде чем соединять их. Установим распорки. Для этого возьмите четыре болта и вкрутите их в четыре крепежных отверстия, расположенных на нижней части Raspberry Pi (по одному в каждом углу). Атеперь прикрутим распорки с помощью этих болтов. Соедините Sense HAT с разъемом GPIO плавным сжатием, убедившись в том, что вы пра- вильно расположили плату (пины смотрят вниз, а части конструкции расположе- ны параллельно). Атеперь закрепим конструкцию, вкрутив четыре болта через крепежные отверстия Sense HAT в распорки, подготовленные вами заранее. Если вы все соединили верно,то в итоге собранная конструкция должна быть плоской, ничего не должно выпирать. Также она не должна сгибаться или трястись при нажатиях на джойстик. Подключите Raspberry Pi к источнику питания и обратите внимание на то, что на Sense HAT загорелись различными цветами светодиоды (рис. 7.1), которые в дальнейшем погаснут. Поздравляем! Вы подключили Sense HAT. При желании вы можете отключить Sense HAT. Для этого вам будет нужно открутить верхние болты и осторожно снять плату (не погните контакты ко- лодки GPIO), поскольку соединены детали достаточно плотно (возможно, вам даже понадобится маленькая отвертка). А теперь отсоедините распорки от Raspberry Pi. Привет, Sense HAT! Во всех проектах, связанных с программированием, есть некая точка отче- та - то, с чего следует начать знакомство с программой. В случае с Sense HAT это сообщение приветствия, выведенного на светодиодном дисплее. Если же вы планируете пользоваться эмулятором Sense HAT, то загрузите его прямо сейчас, открыв меню Raspberry Pi OS, выбрав категорию Программирование (Program- ming) и выбрав пункт Sense HAT Emulator. 160
Изучаем плату Sense HAT Рис. 7.1: Как только вы подключите Raspberry Pi к источнику питания, светодиоды на Sense HAT загорятся всеми цветами радуги Опыт в программировании Информация, представленная в данной главе, основыва- ется на уже имеющемся опыте работы со Scratch 3 или с Python и интегрированной средой разработки Thonny (IDE). Важно, чтобы ранее вы имели опыт работы с бло- ками Scratch или с кодом на языке Python - или с тем и другим! Если вы пока не обладаете необходимыми навы- ками, советуем вам обратиться к главам 4 и 5 и прорабо- тать описанные там проекты. Приветствие с помощью Scratch Загрузите программу Scratch 3 из меню Raspberry Pi OS и нажмите кнопку До- бавить расширение (Add Extension) (в нижнем левом углу окна приложения). Вы- берите расширение Raspberry Pi Sense HAT (рис. 7.2). Программа загрузит блоки, позволяющие управлять различными функциями HAT, включая светодиодную матрицу. В дальнейшем вы сможете найти необходимые для работы блоки, пе- рейдя в раздел Raspberry Pi Sense HAT. 161
Глава 7. Физические вычисления с помощью Sense HAT Рис. 7.2: Загрузка расширения Raspberry Pi Sense HAT для Scratch 3 Начнем создание программы. Перетащите блок бытия (Events) в область сценариев, а затем перетащите блок под предыдущий. Отредактируйте надпись в блоке так, чтобы получилось когда нажат из раздела Со- display text Hello! display text Hello, World! нажат display text Hello, World! Нажмите кнопку в виде зеленого флажка, и вы увидите, что на светодиод- ной матрице Sense HAT или ее эмуляторе будет медленно двигаться сообщение, посредством включения светодиодных пикселей, для выведения каждой буквы (рис. 7.3). Поздравляем, вам удалось создать новую программу! Теперь вы способны создать программу, которая будет выводить на свето- диодную матрицу различные сообщения. Пришло время научиться управлять отображаемым сообщением, а именно изменять направление движения со- общения - то, как сообщение отображается на Sense HAT. Перетащите блок из палитры блоков и поместите его под блок Теперь выберите в раскрывающемся списке когда нажал set rotation to 0 degrees display text Hello, World! и над блоком угол поворота - 90. Нажмите кнопку в виде зеленого флажка, и вы увидите то 162
Изучаем плату Sense HAT же самое сообщение, но вместо того, чтобы двигаться слева направо, оно будет двигаться снизу вверх (рис. 7.4).Теперь для того, чтобы прочитать сообщение, вам нужно будет повернуть либо голову, либо саму плату Sense HAT. Рис. 7.3: Сообщение медленно движется по светодиодной матрице Рис. 7.4: На этот раз сообщение прокручивается снизу вверх Измените число в блоке set rotation to 0 degrees обратно на 0,а затем перетащи- те блок set colour между блоками set rotation to 0 degrees Q display text Hello, World! 163
Глава 7. Физические вычисления с помощью Sense HAT Щелкните мышью по индикатору цвета в конце блока set colour тем самым от- крыв палитру цветов. Выберите приятный ярко-желтый цвет, а затем нажмите кнопку в виде зеленого флажка, чтобы увидеть изменения, произошедшие в про- грамме (рис. 7.5). Рис. 7.5: Изменение цвета текста А теперь перетащите блок Щелкните мышью по индикатору цвета в конце блока для отображения палитры цветов. На этот раз мы с вами изменим цвёГне текста сообщения, а фона. Выберите красивый синий цвет и снова на- жмите кнопку в виде зеленого флажка. В данном случае цвет сообщения будет желтым, а цвет фона - синим. Поиграйте с цветовыми решениями и найдите сочетание цветов, которое вам больше всего понравится. Помните о том, что не все цвета хорошо сочетаются друг с другом. Вы можете выводить на экран как целые сообщения,так и единые буквы. Для этого перетащите блок А теперь перетащите блок что удаленного блока. Нажмите кнопку в виде зеленого флажка, и вы увидите разницу: теперь на Sense HAT выводится лишь одна буква за раз и отображается там до тех пор, пока вы не зададите программе команду сменить букву на другую или просто удалить имеющуюся. Блоки, отвечающие за смену цвета текста,также можно применять и с блоком на красный (рис. 7.6). display text Hello, World! set background set background display text между блоками set colour to из области сценариев,тем самым удалив его. в область сценариев на место только display character A display character A попробуйте изменить цвет буквы 164
Изучаем плату Sense HAT Рис. 7.6: Отображение на экране только одной буквы Задача: повторить сообщение н Можете ли вы, используя свои знания циклов, сделать так, чтобы выводимое на экран сообщение повторялось? Можете ли вы создать программу, которая будет выво- дить буквы друг за другом, при этом меняя цвет каждой? Приветствие с помощью Python Запустите приложение Thonny, открыв меню Raspberry Pi OS и выбрав соот- ветствующий пункт из раздела Программирование (Programming). Если вы рабо- таете с эмулятором Sense HAT, а окно Thonny скрыло его,то, нажав и удерживая кнопку мыши на одном из окон, перемещайте его по рабочему столу до тех пор, пока перед вами не будут видны оба окна. 165
Глава 7. Физические вычисления с помощью Sense HAT Реальное устройство и эмулятор Н Код на языке Python, написанный для настоящей платы Sense HAT, подходит и для эмулятора, и наоборот, одна- ко придется внести всего одну корректировку. Если вы пишете код в Python для эмулятора Sense HAT, то нуж- но внести изменения в строку from sensejiat import SenseHat для всех программ. Должно получиться следу- ющее: from sense_emu import SenseHat. Если же потом вы захотите запустить созданные вами программы на оригинальном Sense Hat, просто верните все, как было! Чтобы задействовать Sense HAT или эмулятор Sense HAT на Python, вам не- обходимо импортировать модуль Sense HAT. Для этого введите следующий код в область сценария (если вы работаете с эмулятором, не забудьте изменить sensejiat на sense_emu): from sense_hat import SenseHat sense = SenseHat(J С помощью кода, содержащегося в модуле Sense HAT, вы сможете создать простую программу, транслирующую сообщение. Ее задача - вывод бегущей строки на светодиодную матрицу. Для этого введите следующее: sense.show_message( "Hello, World! ) Сохраните созданную вами программу под названием Hello Sense HAT, а за- тем нажмите кнопку Выполнить (Run), и вы увидите результат: сообщение мед- ленно движется по светодиодной матрице Sense HAT, зажигая светодиодные пиксели, для формирования букв (рис. 7.7). Поздравляем, вы создали программу! Рис. 7.7: Движение сообщения на светодиодной матрице 166
Изучаем плату Sense HAT Однако функция show_message() скрывает еще несколько секретных возмож- ностей. Вернитесь к программе и отредактируйте последнюю строку так, чтобы получилось следующее: sense.show_messago( Hello, World!", text_colour=(255, 255, 0), back_colour=(0, 0, 255), scroll_speed=(0.05)) Эти дополнительные команды, разделенные запятыми, называются парамет- рами и управляют различными аспектами функции show_message(). Самый прос- той из них - scroll_speed=(), изменяющий скорость прокрутки сообщения. Зна- чение 0,05 означает, что сообщение будет прокручиваться примерно в два раза быстрее, чем обычно. Чем выше значение,тем меньше скорость. Параметры text_colour=() и back_colour=() задают цвет текста и фона соот- ветственно. Однако в коде используются не названия цветов, а их числовое зна- чение, состоящее из трех цифр по модели RGB. Первая цифра несет информацию о количестве красного в цвете (отО, когда красного в цвете совсем нет, и до 255, когда цвет максимально насыщен красным). Вторая цифра - количество зеле- ного в цвете, и третья - количество синего. Совместно эти цвета обозначаются аббревиатурой RGB: red - красный, green - зеленый, blue - синий. Нажмите кнопку Выполнить (Run) и обратите внимание на матрицу Sense HAT: в этот раз сообщение движется гораздо быстрее, цвет надписи - ярко-желтый, а цвет фона - синий (рис. 7.8). Экспериментируйте с параметрами, чтобы подо- брать скорость и цвет, которые вам придутся по душе. Рис. 7.8: Изменение цвета сообщения и цвета фона Если вы хотите использовать названия цветов в функции, придется создать переменные со значениями по модели RGB. Для этого над строкой sense.show_ messagef) введите следующее: 167
Глава 7. Физические вычисления с помощью Sense HAT 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(' Z") Запустите программу, нажав кнопку Выполнить (Run), и на матрице Sense HAT появится буква "Z". В данном случае эта отдельная буква не будет двигаться вдоль экрана, в отличие от целых предложений, движущихся автоматически. Вы можете задавать различные цвета для окрашивания буквы в функции sense. show_letter() с помощью тех же параметров, что и для sense.show_message(). Попробуйте окрасить букву в красный цвет (рис. 7.9). Рис. 7.9: Отображение на матрице отдельной буквы 168
Следующий шаг: светоживопись Задача: повторить сообщение Можете ли вы, используя свои знания циклов, сделать так, чтобы выводимое на экран сообщение повторялось? Можете ли вы создать программу, которая будет выво- дить буквы друг за другом, при этом меняя цвет каждой? Какова максимальная скорость движения сообщения, ко- торую вы способны задать в программе? Следующий шаг: светоживопись Светодиодная матрица Sense HAT предназначена для вывода не только сообще- ний, но и изображений. Каждый светодиод можно рассматривать как отдельный пиксель - отдельный элемент изображения - в выбранном вами изображении. Различные иллюстрации и даже анимации позволят оживить вашу программу. Однако, для того чтобы создать рисунок, необходимо научиться контролиро- вать свечение отдельных светодиодов. Для написания программы, с помощью которой вы сможете включать и выключать необходимые светодиоды, советуем изучить то, как устроена светодиодная матрица Sense HAT. Каждая строка, как и каждый столбец, состоит из восьми светодиодов (рис. 7.10). Однако когда вы пересчитываете светодиоды, отсчет следует вести с 0. Таким образом, последний светодиод будет седьмым. Первый светодиод находится в левом верхнем углу, а последний - в правом нижнем. Присваивая каждому светодиоду номер строки и номер столбца, вы определяете его коор- динаты в системе координат матрицы. Обратите внимание на синий светодиод, изображенный на рисунке матрицы. Он находится в точке с координатами 0, 2. Красный светодиод - в координатах 7,4. Первая координата - по оси х- читает- ся по горизонтали, за ней следует координата по оси у - читается по вертикали. Рис. 7.10: Система координат светодиодной матрицы 169
Глава 7. Физические вычисления с помощью Sense HAT Для создания рисунка, выводимого на матрицу Sense HAT, советуем для упро- щения задачи сначала нарисовать его на бумаге в клетку или набросать его в электронной таблице LibreOffice Calc. Рисование с помощью Scratch й в об- когда нажат set colour и set background Начните новый проект, при необходимости сохранив предыдущий. Если по- следним вашим проектом был тот, что мы разбирали ранее, то Scratch 3 сохра- нит блоки загруженного расширения Raspberry Pi Sense HAT. Если вы закрыли Scratch 3 после работы над последним проектом, а потом снова открыли про- грамму, загрузите расширение с помощью кнопки Добавить расширение (Add Extension). Из раздела События (Events) перетащите блок ласть сценариев. Затем перетащите под него блоки Настройте оба блока так, чтобы первый блок в итоге задавал черный цвет, а второй - белый. Для того чтобы задать черный цвет, переместите ползунковые регуляторы, отвечающие за яркость и насыщенность цвета, на 0. Для получения белого цвета сдвиньте ползунковый регулятор яркости на 100, а ползунковый регулятор насыщенности на 0. Повторяйте подобные манипуляции каждый раз перед началом работы с Sense HAT, поскольку Scratch будет использовать по- следние заданные вами цвета, даже если вы задавали цвета для другой про- граммы. А теперь перетащите блок 6ЕЕЯ1 в нижнюю часть программы. display К Нажмите кнопку в виде зеленого флажка, и вы увидите, что светодиоды Sense HAT светятся в виде логотипа Raspberry Pi (рис. 7.11). Очертания ягоды - л ишь малая часть того, что доступно вам для выведения на экран. Откройте раскрывающийся список с изображением логотипа Raspberry Pi на блок display К ▼ , тем самым активировав режим рисования. Теперь вы можете щелчком мыши по любому светодиоду на отобра- зившейся панели включить его или выключить. Если вы щелкнете по одной из крохотных кнопок в нижней части панели,то все светодиоды будут отключены или, наоборот, включены. А сейчас попробуйте нарисовать свой собственный рисунок. После чего нажмите кнопку в виде зеленого флажка для вывода изображения на мат- 170
Следующий шаг: светоживопись рицу Sense HAT. Используя уже имеющиеся блоки, попробуйте внести в них из- менения так, чтобы сменить цвета изображения и фона. Рис. 7.11: Не рекомендуется смотреть прямо на светодиоды, когда они светятся ярко-белым После завершения поставленной задачи удалите три блока, перетащив их в палитру блоков. А теперь перетащите блок clear display под блок |. Нажмите кнопку в виде зеленого флажка,тем самым погасив все светодиоды. Для создания собственного цветного рисунка необходимо научиться управлять отдельными пикселями и задавать им различные цвета. Сделать это вы можете, добавив блоки display Ш Щ set colour или же задавать данные для каждого пикселя отдельно. Для создания своей версии рисунка и вывода на светодиод- ную матрицу, наподобие примера на рис. 7.1, переместите блок самое начало программы, после чего переместите блок Измените цвет блока set pixel x 0 у О в под него, на черный, затем перетащите два блока в нижнюю часть сценария. Теперь отредактируйте блоки так, как | dear display set background set background показано на рисунке: когда нажат clear display I Р ’ set background to f_J set pixel x 0* у 2* to (3) * setpixelx 7* у 4* to(^) 171
Глава 7. Физические вычисления с помощью Sense HAT Нажав на кнопку в виде зеленого флажка, вы увидите, что светодиоды заго- раются в соответствии с координатами (рис. 7.10). Поздравляем! Вы научились управлять отдельными светодиодами! Добавьте необходимое количество блоков, отвечающих за отдельные пиксе- ли, и отредактируйте их таким образом, как показано на рисунке снизу. Вот что должно получиться в итоге: когда нажат clear display Дц 1 set background to c 1 -^Ч . set pixel x 2 . У 2 » to о Г.^Ч J set pixel x 4 - У 2 ’ too ^Ч. set pixel x 3 ’ У 4 ♦ to О ^ч. set pixel x 1 . У 5 * о О • • set pixel x 2 - У 6 - to О * set pixel x 3 ’ У 6 * to О _^Ч. set pixel x 4 ’ У 6 * to CD set pixel x 5 - У 5 ’ to О Прежде чем нажать кнопку в виде зеленого флажка, попробуйте угадать, ка- кое изображение появится на координатной плоскости светодиодной матрицы, а затем запустите свою программу и проверьте, были ли вы правы! Задача: создать новые рисунки Можете ли вы создать дополнительные изображения? Для начала сделайте набросок рисунка на миллиметров- ке или листе в клетку. Сможете ли вы вывести изображе- ние и изменить цвета? Рисование с помощью Python Создайте новую программу в приложении Thonny и сохраните ее под назва- нием Sense HAT Drawing, а затем введите следующее (не забудьте внести изме- нения в строку sensejiat, заменив ее на sense_emu при работе с эмулятором): 172
Следующий шаг: светоживопись from sense_hat import SenseHat sense = SenseHat(J He забывайте об этих строках, ведь без них Sense HAT попросту не будет ра- ботать. Введите следующее: sense.cleaz(255, 255, 255) Не смотрите пристально на светодиоды матрицы Sense HAT, ведь это может на- вредить вашему зрению! После нажатия кнопки Выполнить (Run) все светодио- ды должны загореться ярко-белым цветом (рис. 7.12). Именно поэтому мы и не рекомендуем смотреть на них во время запуска программы! Рис. 7.12: Не смотрите пристально на горящие ярко-белым светом светодиоды матрицы Функция sense.clearf) предназначена для сброса предыдущих настроек светодиодов, однако параметры RGB сохраняются, поэтому вы все так же мо- жете изменять цвет изображения на любой, который вам нравится. Измените функцию следующим образом: sense.clear(0, 255, 0) Нажмите кнопку Выполнить (Run), и вы увидите, как светодиоды матрицы Sense HAT загорятся ярко-зеленым цветом (рис. 7.13). Поэкспериментируйте, из- меняя цвета или добавляя переменные, содержащие имена цветов, для облег- чения чтения кода. 173
Глава 7. Физические вычисления с помощью Sense HAT Рис. 7.13: Светодиодная матрица загорелась ярко-зеленым цветом Для сброса настроек светодиодов необходимо ввести значения, равные 0, для следующих цветов: черного, красного, синего и зеленого. Но есть и более прос- той способ. Отредактируйте функцию следующим образом: sense.cleazf) После выполнения функции sense.clearQ светодиоды Sense HAT погаснут, поскольку в скобках не указано значение. Это эквивалентно тому, если бы вы задали команду зажечь светодиоды черным цветом (рис. 7.14). Запомните эту функцию, она понадобится, если вы решите выключить все светодиоды. Рис. 7.14: Использование функции sense. clear( ) для выключения всех светодиодов 174
Следующий шаг: светоживопись Чтобы создать собственную версию изображения для вывода на светодиод- ную матрицу (красного и синего цвета) на основе примера, изображенного ра- нее в этой главе, введите следующий код после функции sense.clear(): sense.set_pixel(0, 2, (0, 0, 255)) sense.set_pixel(7, 4, (255, 0, 0)) Первая пара чисел - координаты пикселя на системе координат матрицы, пер- вое число - по оси х (по горизонтали), второе - по оси у (по вертикали). Далее указаны числа, заключенные в скобки, которые являются значениями RGB цвета определенного пикселя. Нажмите кнопку Выполнить (Run), и на матрице Sense HAT загорятся два светодиода (рис. 7.10). Удалите имеющиеся две строки и введите следующее: sense.set_pixel(2, 2, (0, 0, 255)) sense.set_pixel(4, 2, (0, 0, 255)) sense.set_pixel(3, 4, (100, 0, 0)) sense.set_pixel(l, 5, (255, 0, 0)) sense.set_pixel(2, 6, (255, 0, 0)) sense.set_pixel(3, 6, (255, 0, 0)) sense.set_pixel(4, 6, (255, 0, 0)) sense.set_pixel(5, 5, (255, 0, 0)) Прежде чем запустить программу, посмотрите на координаты пикселей и срав- ните их с расположением светодиодов на матрице. Попробуйте угадать, какой рисунок будет выведен на экран. Нажмите кнопку Выполнить (Run) и проверьте свои предположения! Процесс вырисовывания изображения при помощи функции set_pixel() длится достаточно медленно. В целях ускорения вы можете включать несколько пикселей одновременно. Для этого удалите все строки, содержащие функцию set_pixel(), и введите следующее: g = (0, 255, 0) Ъ = (0, 0, 0) creeper_pixels = [ д, д, д, д, д, д, д, д, д, д, д, д, д, д, д, д, д, Ъ, Ъ, д, д, Ъ, Ъ, д, д, Ъ, Ъ, д, д, Ъ, Ъ, д, д, д, д, Ъ, Ъ, д, д, д, д, д, Ъ, Ъ, Ъ, Ъ, д, д, д, д, Ъ, Ъ, Ъ, Ъ, д, д, д, д, Ь, д, д, Ъ, д, д ] sense.set_pixels(creeper_pixels) 175
Глава 7. Физические вычисления с помощью Sense HAT Функция достаточно объемная. Нажмите кнопку Выполнить (Run). Узнали ли вы изображение, появляющееся на экране при запуске программы? Первые две строки кода задают переменные цветов светодиода: зеленый и черный. Для упрощения написания и прочтения кода, используемого для создания рисунка, переменные обозначены отдельными буквами: «д» - для зеленого и «Ь» - для черного. Следующий блок кода задает переменную, содержащую значения цвета для всех 64 пикселей, расположенных на светодиодной матрице. Все они разделены запятыми и заключены в квадратные скобки. Однако вместо чисел программа будет использовать заданные вами ранее переменные цвета. Запомните: «д» оз- начает зеленый цвет, а «Ь» - черный. Таким образом вы можете представить, какое же изображение окажется на выходе (рис. 7.15). В конце в скобки функции sense.set_pixels() помещается переменная. В ре- зультате мы получаем строку sense.set_pixels(creeper_pixels), позволяя про- грамме выводить рисунок сразу на всю матрицу. Это гораздо лучше, чем созда- вать рисунок пиксель за пикселем! Рис. 7.15: Выведение изображения крипера на матрицу Вы также можете повернуть или развернуть изображение. Необходимо это в том случае, если плата Sense HAT повернута и вам необходимо отобразить изображение должным образом. Или же если вы решите создать простую ани- мацию, состоящую лишь из одного асимметричного изображения. Закроем нашему криперу левый глаз. Для этого отредактируйте значение пе- ременной creeper_pixels следующим образом: замените четыре пикселя, запи- санных в функции переменной, «Ь» на «д»: первые два в третьей строке, а также первые два в четвертой строке. Вот что должно получиться: 176
Следующий шаг: светоживопись creeper_pixels = [ д, д, д, д, д, д, д, д, д, д, д, д, д, д, д, д, д, д, д, д, д, ь, ъ, д, д, д, д, д, д, ь, ъ, д, д, д, д, Ь, Ъ, д, д, д, д, д, Ъ, Ъ, Ъ, Ъ, д, д, д, д, Ъ, Ъ, Ъ, Ъ, д, д, д, д, Ь, д, д, Ъ, д, д ] Нажмите кнопку Выполнить (Run), и вы увидите, как крипер закрывает левый глаз (рис. 7.16). Чтобы создать анимацию, перейдите в начало программы и до- бавьте строку: from time import sleep А теперь пролистайте вниз и введите: while True: sleep(l) sense. flip_h() Нажмите кнопку Выполнить (Run) и понаблюдайте за тем, как наш крипер то открывает,то закрывает глаз по очереди! Рис. 7.16: Вывод на матрицу простой двухкадровой анимации Функция flip_h() поворачивает изображение по горизонтальной оси (попе- рек). Если же вы хотите перевернуть изображение по вертикальной оси, заме- ните функцию sense.flip_h() на sense.flip_v(). Вы можете также повернуть 177
Глава 7. Физические вычисления с помощью Sense HAT изображение на 0,90,180 или 270 градусов, используя функцию sense.set_ro- tation(90), изменяя число в скобках в зависимости оттого, на сколько градусов вы хотите повернуть изображение. Поэкспериментируйте с этой функцией, за- ставив нашего крипера не только подмигивать, но и вращаться! Задача: создать новые рисунки Можете ли вы создать другие изображения и анимации? Для начала сделайте набросок рисунка на миллиметров- ке или листе в клетку, который в дальнейшем облегчит вам написание кода. Сможете ли вы нарисовать картинку и изменить цвета? Совет: вы можете изменять значение переменных, даже если вы их уже использовали. Ощущаем окружающий мир Преимущество Sense HAT заключается в огромном количестве установленных на плате датчиков. Они позволяют получать разные показания, начиная с данных температуры и заканчивая ускорением. В дальнейшем вы можете использовать полученные данные для создания своих программ. Эмуляторы датчиков Если вы используете эмулятор Sense HAT, вам также нуж- но подключить эмуляторы датчиков окружающей среды и инерциального датчика. Для этого в меню Edit (Прав- ка) эмулятора выберите пункт Preferences (Параметры) и в открывшемся окне установите флажки напротив соответствующих датчиков. Далее в группе Orientation Scale (Шкала ориентации) установите переключатель в положение 180.360°|0°..180° и убедитесь, что за- данные значения соответствуют значениям, переданным Scratch и Python. Закройте окно, нажав кнопку Закрыть (Close). Экологический мониторинг Датчики атмосферного давления, влажности и температуры служат для оценки окружающей среды. Они измеряют показания окружающей среды. 178
Ощущаем окружающий мир Экологический мониторинг с помощью Scratch Создайте новую программу в Scratch, при желании сохранив старую. Добавьте расширение Raspberry Pi Sense HAT, если вы этого еще не сделали. Перетащи- те блок и под него блок изменив в нем цвет с помощью ползунковых регуляторов яркости и насыщен- когда нажат set background в область сценариев, а затем под него блок ф. Теперь перетащите блок clear display set colour to A ности на необходимый вам цвет. Мы всегда советуем настраивать цвета в самом начале программы, чтобы убедиться в том, что Sense HAT не использует данные из прошлой программы. Перетащите блок говорить 1ривет!д^ 2 секунд из категории Внешний вид (Looks) под уже имеющиеся блоки. Для получения показаний датчика давления найдите блок «Привет!», содержащегося в блоке pressure в разделе Raspberry Pi Sense HAT и поместите его поверх слова говорить Г1ривет!Д 2 секунд clear display set background to set colour to | говорить ’ pressure ДО секунд 2 Нажмите кнопку в виде зеленого флажка, и ваш спрайт котика сообщит теку- щее давление в миллибарах. Через пару секунд сообщение пропадет. Попробуй- те подуть на плату Sense HAT (или переместить ползунковый регулятор, отвечаю- щий за давление, на эмуляторе) и снова нажмите кнопку в виде зеленого флажка. Программа запустится, и вы увидите, что значение изменилось, а именно стало выше (рис. 7.17). Изменяем значение Если вы работаете с эмулятором Sense HAT, то можете изменить значения, полученные каждым датчиком, ис- пользуя ползунковые регуляторы и кнопки эмулятора. Сдвиньте ползунковый регулятор датчика давления вниз, а затем снова нажмите кнопку в виде зеленого флажка. 179
Глава 7. Физические вычисления с помощью Sense HAT Рис. ТЛПх Показания, полученные датчиком давления Чтобы получить показания с датчика влажности,удалите блок ните его блоком относительной влажности воздуха вашей комнаты. Как и в случае с давлением, humidity и заме- Запустите программой вы получите данные о текущей pressure вы можете подуть на Sense HAT (или переместить ползунковый регулятор влаж- ности на эмуляторе вверх),тем самым изменив показания (рис.7.18) - влажность вашего дыхания очень высокая! Рис. 7.18: Показания, полученные датчиком влажности Проведем те же самые манипуляции с датчиком температуры. Удалите блок Запустите программу. Вы увидите значение температуры в вашей комнате в градусах Цельсия (рис. 7.19). Однако эти данные могут быть неточными, поскольку во время работы Raspberry Pi на- humidity и замените его на блок temperature гревается, соответственно нагревая плату Sense HAT и ее датчики. 180
Ощущаем окружающий мир Рис. 7.19: Показания, полученные датчиком температуры Задача: вывести данные на матрицу и создать цикл Можете ли вы внести изменения в программу так, что- бы получать показания каждого из датчиков по очереди, после чего вывести их на светодиодную матрицу? Може- те ли вы ввести в программу циклы,тем самым задав ей команду постоянного мониторинга условий окружающей среды? Экологический мониторинг с помощью Python Чтобы получать показания датчиков, создайте новую программу в Thonny и сохраните ее под названием Sense HAT Sensors. Введите следующий код в об- ласть сценария (как и раньше, при работе с эмулятором Sense HAT, измените код на sense_emu): from sense_hat import SenseHat sense = SenseHatО sense.clear(J Как и прежде, рекомендуем включить в программу функцию sense.clearf), на случай, если Sense HAT все еще хранит данные предыдущих программ. Чтобы получать данные с датчика давления, введите следующее: pressure = sense.get_pressure() print(pressure) 181
Глава 7. Физические вычисления с помощью Sense HAT Нажмите кнопку Выполнить (Run), и вы увидите число, которое программа вывела в область оболочки, расположенной в нижней части окна Thonny. Это число - показания давления воздуха, определяемое барометром, в миллибарах (рис. 7.20). Подуйте на плату Sense HAT (или переместите ползунковый регулятор на эмуляторе вверх) и снова запустите программу. В этот раз число увеличится. Рис. 7.20: Вывод на матрицу Sense HAT показаний давления Изменяем значение Если вы пользуетесь эмулятором Sense HAT, то можете изменять значения, получаемые с эмулируемых датчи- ков, перетаскивая соответствующие ползунковые регу- ляторы и нажимая кнопки. Измените значение датчика давления, перетащив ползунковый регулятор вниз, а за- тем нажмите кнопку Выполнить (Run) снова. Чтобы получать показания с датчика влажности, удалите последние две стро- ки и замените их на следующее: humidity = sense.get_humidity() print(humidity) Запустите программу, и вы обнаружите в области оболочки Python уже другое значение. Это текущая влажность воздуха в вашей комнате, указанная в процен- тах. В данном случае вы также можете подуть на плату (или сдвинуть ползунковый регулятор на эмуляторе вверх) и отследить изменения значения в большую сторо- ну при запуске программы (рис. 7.21). Влажность вашего дыхания очень высокая! 182
Ощущаем окружающий мир Thonny - /home/pi/Desktop/RPG Maze/12 ру @ 5 :1 Загрузить Остановить Выйти Приблизить 12.РУХ |____________________________ from senseemu import SenseHat 2 sense = SenseHatQ 3 sense.clear() humidity = sense.get _humidity() 5 print(humidity) 1013.00/324210/5 Python 3.7.3 (/usr/bin/python3) »> %Run 12.py 45.125 Рис. 7.21: Вывод на матрицу Sense HAT показаний влажности Для получения показаний с датчика температуры удалите последние две строки и замените их на следующее: temp = sense.get_temperature() print(temp) Снова запустите программу. Вы увидите данные температуры в вашей ком- нате в градусах Цельсия (рис. 7.22). Однако эти данные могут быть неточными, поскольку во время работы Raspberry Pi нагревается, соответственно нагревая плату Sense HAT и ее датчики. Рис. 7.22: Вывод на матрицу Sense HAT данных о текущей температуре 183
Глава 7. Физические вычисления с помощью 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) После запуска программы на экране Python появится новое число (рис. 7.23). Оно основано на показаниях обоих датчиков, сложенных вместе и поделенных на два (количество датчиков). Тем самым мы получаем их среднее значение. Если же вы используете эмулятор,то все три значения (значение влажности, дав- ления и среднее значение) будут одинаковыми. Рис. 7.23: Данные о температуре, основанные на показаниях двух датчиков Задача: вывести данные на матрицу и создать цикл Можете ли вы внести изменения в программу так, чтобы получать показания каждого из датчиков по очереди, после чего вывести их на светодиодную матрицу? Можете ли вы ввести в программу циклы, тем самым задав ей команду постоянного мониторинга условий окружающей среды? 184
Инерциальная система отсчета Инерциальная система отсчета Гироскоп, акселерометр и магнитометр вместе формируют инерциальный изме- рительный блок (ИИБ).Хотя эти датчики технически измеряют показатели окру- жающей среды (например, магнитометр измеряет силу магнитного поля), обыч- но они используются для получения данных перемещения платы Sense HAT. ИИБ - совокупность нескольких датчиков. При работе с некоторыми языками программирования вы можете снимать показания каждого датчика отдельно, в то время как при работе с другими вам доступна лишь их совместная обработка данных. Однако прежде чем овладеть навыками работы с ИИБ, вам необходимо разо- браться, как же все-таки анализируется перемещение Sense HAT. Raspberry Pi и подсоединенная к ней плата Sense HAT имеют три направления движения (три оси). Ось х-движение по горизонтали, ось у-движение вперед и назад, и осьг- движение по вертикали (рис. 7.24).Устройства также могут вращаться вокруг всех трех пространственных осей, при этом каждая из них носит свое название: вра- щение вокруг оси х - крен, вокруг оси у - тангаж, а вокруг z - рыскание. Когда вы поворачиваете плату вокруг короткой оси, вы изменяете значение тангажа, если вокруг длинной оси, вы изменяете значение крена, а если вы кладете пла- ту на плоскую поверхность, вы изменяете значение рыскания. Сравните плату с самолетом: когда он взлетает, значение тангажа растет, когда он совершает бочку - трюк высшего пилотажа, буквально вращаясь вокруг оси крена, а когда самолет поворачивает, словно автомобиль, автоматически изменяется значение рыскания. Рыскание: Z Крен:Х Рис. 7.24: Пространственные оси ИИБ Sense HAT 185
Глава 7. Физические вычисления с помощью Sense HAT Инерциальная система отсчета в Scratch Создайте новую программу в Scratch 3 и загрузите расширение Raspberry Pi Sense HAT, если вы не сделали этого ранее. Начнем программу по старой схеме: перетащите блок риев, после поместите под него блок когда нажат set background set colour to из раздела События (Events) в область сцена- и под них поместите блоки при желании изменив на них цвета. ниже имеющихся блоков и дополните [Привет J. Для того чтобы снять показания каждой из трех осей clear display Затем перетащите блок все блоком ИИБ - тангажа, крена и рыскания, - добавьте блоки яблоко i банану с соответствующими блоками Sense HAT (измените дефолтные значения, как по- повторять всегда сказать казано на рисунке ниже). Не забудьте добавить пробелы и запятые, чтобы на выходе получить читабельные данные. Для запуска программы нажмите кнопку в виде зеленого флажка и попро- буйте покрутить Sense HAT и Raspberry Pi. Будьте аккуратны, так как вы можете случайно выдернуть кабели! При вращении платы вокруг различных ее осей вы увидите, как меняются значения тангажа, крена и рыскания (рис. 7.25). Рис. 7.25: Вывод на экран значений тангажа, крена и рыскания 186
Инерциальная система отсчета Инерциальная система отсчета в Python Создайте новую программу, сохранив ее под названием Sense HAT Movement. Как и раньше, укажите несколько базовых строк, не забывая использовать зна- чение sense_emu, при работе с эмулятором Sense HAT: from sense_hat import SenseHat sense = SenseHat() sense.clear(J Для получения информации ИИБ о текущих данных расположения Sense HAT введите следующее: orientation = sense.get_orientation() pitch = orientationf 'pitcl ] roll = orientation["roll ] yaw = orientation[ yaw ] printf pitch {0} roll {1} yaw {2}".formatfpitch, roll, yaw)) Нажмите кнопку Выполнить (Run), и вы увидите данные о Sense HAT, получен- ные с трех осей (рис. 7.26). Покрутив Sense HAT, вы заметите, что значения тан- гажа, крена и рыскания меняются, тем самым сообщая нам, что плата изменила свою ориентацию в пространстве. Рис. 7.26: Вывод на экран значений тангажа, крена и рыскания ИИБ также может сообщать сведения о перемещении. Для получения точных показаний о перемещении Sense HAT необходимо ввести циклы в программу. 187
Глава 7. Физические вычисления с помощью Sense HAT В отличие от информации, касающейся ориентации в пространстве, где получе- ния лишь одного показания будет вполне достаточно, информация, касающаяся перемещения, требует ввода некоторых дополнительных параметров. Для этого удалите весь код после функции sense.clear() и введите следующее: while True: acceleration = sense.get_accelerometer_raw() x = acceleration^ к"] у = acceleration^ у"] z = acceleration^ z"] Теперь ваш код содержит переменные, отвечающие за текущие показания акселерометра и трех пространственных осей: х - по горизонтали, у - вперед и назад, z - по вертикали. Полученные с датчика акселерометра данные могут оказаться трудночитаемыми. Для того чтобы упростить прочтение, округлите их до ближайшего целого числа. Введите следующее: х = round(x) у = round(y) z = round(z) Наконец, выведите на экран три значения, введя следующее: printf к={0}5 \ {!}, z: {2}".format(х, у, z)) Нажмите кнопку Выполнить (Run), и вы получите данные акселерометра. Про- грамма выведет их в область оболочки (рис. 7.27). В отличие от созданной вами ранее программы, данные будут постоянно изменяться. Для прекращения рабо- ты программы нажмите красную кнопку Остановить (Stop). Рис. 7.27: Округленные до целого числа показания акселерометра 188
Инерциальная система отсчета Скорее всего, вы заметили, что хоть Raspberry Pi лежит на столе неподвиж- но, акселерометр сообщает о том, что значение по оси z равно 1,0 (ускорение, обозначаемое переменной G). Причина в том, что акселерометр показывает значение гравитационной постоянной (силы тяжести). Это сила, притягивающая Sense HAT к центру Земли. Именно благодаря этой силе предметы упадут на пол, если вы столкнете их со стола. Запустите программу, возьмите в руки и начните осторожно крутить Sense HAT и Raspberry Pi. Аккуратнее, не выдерните провода! Если вы повернете Raspberry Pi сетевыми и USB-портами вниз,то заметите, что значения изменятся.Теперь по оси z - 0G, а по оси х - 1G. Снова поверните устройство, но уже портами HDMI и портами электропитания вниз. Теперь значение по оси у изменилось на 1G. Если же вы перевернете HDMI порты вверх, значение по оси у изменится на -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) Запустив программу, вы увидите данные, указывающие направление Север- ного магнитного полюса, напечатанные несколько раз в области оболочки 189
Глава 7. Физические вычисления с помощью Sense HAT Python. Плавно поверните Sense HAT, и вы заметите, что направление меняется по мере того, как меняется ориентация платы относительно Северного магнитно- го полюса. Вы создали компас! Если у вас есть магнит (магнит для холодильника подойдет), попробуйте покрутить его вокруг Sense HAT. Вы увидите, как меняются показания магнитометра. Задача: автоматическое вращение Используя полученные о светодиодной матрице и дат- чиках ИИБ знания, сможете ли вы написать программу, которая будет вращать изображение в зависимости от расположения Sense HAT? Управление джойстиком Джойстик Sense HAT, расположенный в правом нижнем углу, имея небольшой размер,удивительно мощный. Во-первых,с его помощью вы можете перемещать выбранные элементы по четырем направлениям: вверх, вниз, влево и вправо. А во-вторых, он обладает пятым способом ввода. При нажатии на него (не сме- щая рукоять в стороны) он будет выполнять функцию кнопки. Внимание! Рекомендуем использовать джойстик Sense HAT только в том случае, если вы установили распорки, следуя ин- струкциям, указанным в начале этой главы. Если распор- ки отсутствуют,то нажатиями на джойстик вы можете по- гнуть Sense HAT,тем самым повредив как саму Sense HAT, так и колодку GPIO платы Raspberry Pi. Управление джойстиком с помощью Scratch Создайте новую программу в Scratch,убедившись, что у вас уже загружено рас- ширение Raspberry Pi Sense HAT. Как всегда, начнем написание программы с до- бавления в область сценариев блока когда нажат из раздела События (Events). 190
Управление джойстиком Перетащите под него блок set colour to а под него блоки [ j, при необходимости настроив их. clear display set background И В программе Scratch направление нажатия на рукоять джойстика Sense HAT сопоставляется с клавишами на клавиатуре соответственно: сдвиг рукояти джой- стика вверх эквивалентен нажатию на клавишу сдвиг вниз - сдвиг влево эквивалентен нажатию на клавишу , сдвиг вправо—>. Простое же нажатие на рукоять джойстика эквивалентно нажатию клавиши Enter. Внимание! Управлять джойстиком вы сможете только при наличии оригинальной платы Sense HAT. При работе с эмулятором Sense HAT вам придется использовать соответствующие клавиши на клавиатуре, тем самым имитируя рукоять джойстика. Перетащите блок when joystick pushed up в область сценариев. А теперь задайте программе действие, перетащив блок щий блок. говорить 1риветГд 2 секунд под предыду- когда clear display set background to ( set colour to Щ when joystick pushed up- говорить секунд » Сдвиньте рукоять джойстика вперед, и спрайт котика радостно поприветствует вас: «Привет!» Теперь отредактируйте информацию в блоке чтобы получилось несколько раз, перетаскивая блоки из разделов События (Events) и Внешний вид говорить Вверх!д 2 секунд так, Повторите данное действие еще говорить 1риветд 2 секунд (Looks) до тех пор, пока у вас не получится по паре блоков на каждое возможное направление нажатия джойстика (всего их пять). 191
Глава 7. Физические вычисления с помощью Sense HAT Двигайте рукоять джойстика в разные направления, наблюдая за тем, как по- являются новые сообщения! Итоговая задача Можете ли вы управлять спрайтом в программе Scratch, используя джойстик Sense HAT? Сможете ли вы сделать так, чтобы на матрице Sense HAT загоралось какое-ни- будь радостное сообщение, каждый раз, когда ваш спрайт соберет какой-нибудь предмет (еще один спрайт)? Управление джойстиком с помощью Python Создайте новую программу в Thonny и сохраните ее под названием Sense HAT Joystick. Начнем с ввода стандартных трех строк, подключающих плату Sense HAT и сбрасывающих предыдущие параметры, заданные светодиодной матрице: 192
Управление джойстиком from sense_hat import SenseHat sense = SenseHat(J sense. cleaj?( ) Далее создаем бесконечный цикл: while True: Следующей строкой кода укажем Python выполнять команды, заданные джойстиком Sense HAT. Обратите внимание, что Thonny автоматически сделает отступ для этой строки: for event in sense.stick.get_events(): Следующей строкой зададим действие, которое является ответом на движе- ние джойстика. Обратите внимание, что здесь Thonny также автоматически сде- лает отступ: printfevent.direction, event.action) Запустите программу, нажав кнопку Выполнить (Run), и попробуйте подвигать рукоять джойстика в разные направления. На экране, в области оболочки, будут отображаться в зависимости от направления следующие слова: up (вверх), down (вниз), left (влево), right (вправо) и middle (посередине). Последнее - при на- жатии на рычаг джойстика, как на кнопку. Вы также можете заметить, что кроме сообщения, указывающего направление рукояти, на экране высвечиваются следующие два слова: pressed - появляется после первого сдвига рукояти в сторону, и released - появляется в тот момент, когда рукоять джойстика возвращается в центр, на исходную позицию. Вы можете использовать перечисленные команды для создания своих программ. Например: игра, в которой персонаж начинает двигаться в тот момент, когда джойстик «на- жат» (pressed), а останавливается тогда, когда джойстик «отпущен» (released). Вы также можете использовать джойстик для запуска функций, вместо того чтобы ограничиваться использованием цикла for. Удалите код ниже функции sense.clearf) и введите следующее: def red(): sense.clear(255, 0, 0) def blu< (): sense.clear(0, 0, 255) def greerf): sense.clear(0, 255, 0) 193
Глава 7. Физические вычисления с помощью Sense HAT def yellowf): 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.directionjniddle = sense.clear Для нормального функционирования программы добавим бесконечный цикл, имеющий название главного цикла. Это необходимо для того, чтобы программа выполняла команды при каждом движении рукоятью джойстика. Иначе она вы- полнит написанный вами код лишь один раз, после чего завершит свою работу. Для этого введите следующее: while True: pass Нажмите кнопку Выполнить (Run) и попробуйте подвигать рукоять джойсти- ка. Вы увидите, как загорелись светодиоды! Для их выключения используйте ту самую пятую функцию джойстика (кнопку). Пятое направление middle вы- полняет ту же функцию, что и функция sense.clearf) (выключает все свето- диоды). Поздравляем, вы научились передавать программам входные данные джойстика! Итоговая задача Способны ли вы на основе полученных знаний вывести изображение на экран, а затем повернуть его в любом направлении с помощью джойстика? Можете ли вы по- средством нажатия на джойстик (middle) перейти от од- ного изображения к другому? Проект в Scratch: Бенгальский огонек Теперь, когда вы обладаете достаточными навыками работы с Sense HAT, приш- ло время использовать собранные знания воедино и создать теплочувстви- 194
Проект в Scratch: Бенгальский огонек тельный бенгальский огонек - устройство, которое работает должным образом только тогда, когда оно холодное, ведь при нагревании его работа замедляется. Создайте новый проект в Scratch и, если вы еще не загрузили расширение Raspberry Pi Sense HAT, сделайте это. Как и раньше, добавьте первые четыре блока: ходимости внесите изменения в последние два блока. Для начала создадим простенький, но достаточно выразительный бенгальский огонек. Перетащите в область сценариев блок него поместите блок когда нажат I clear display set background и set colour to set pixel x 0 у 0 to colour а затем внутрь Замените заданные автоматически повторять всегда set pixel означают координаты пикселя на светодиод- выдать случайное от О до 2). Далее займемся изменением дела Операторы (Operators). Здесь нам понадобятся значения, отличные от тех, что уже заданы (1-10). Из- меним их. Числа в блоках ной матрице: первое - для оси х, второе - для у. Из этого следует, что числа долж- ны находиться в диапазоне от 0 до 7. Поэтому отредактируем первые два блока следующим образом: переменной colour. Указанным в этом поле цветом и загорятся пиксели. После того как вы выбрали цвет с помощью палитры, он отобразится в области сцена- риев. Однако в блоке он будет записан числом. Отредактируйте последнюю часть Нажмите кнопку в виде зеленого флажка, и вы увидите, что светодиоды на матрице Sense HAT загораются случайными цветами (рис. 7.28). Поздравляем, вы создали электронный бенгальский огонек! Бенгальский огонек пока не интерактивен. Исправим это. Добавим блок но так, чтобы он оказался внутри блока ждать ©секунд повторять всегда ждать ©секунд внутрь блока А теперь перетащите блок раторы (Operators). под блок Из раздела Операторы (Operators) перетащите блок и во второй кружок этого блока впишите число 10. в первый кружок блока из раздела One- set pixel 1 temperature 195
Глава 7. Физические вычисления с помощью Sense HAT Рис. 7.28: Пиксели загораются случайными цветами Нажмите кнопку в виде зеленого флажка. Обратите внимание, что работа бен- гальского огонька замедлилась (если только в вашей комнате не слишком холод- но). Причина этого заключается в том, что вы задали программе задержку, зави- сящую от температуры. Эта задержка может составлять некое количество секунд в диапазоне от 0 до 10 перед началом следующего цикла. Если же температура в вашей комнате составляет 20 °C, программа активирует задержку в 2 секунды перед началом следующего цикла. Если температура составляет 10 °C - 1 се- кунду. Если же она ниже 10 °C, задержка программы составит меньше одной секунды. Если же температура окажется ниже 0 °C (температура замерзания воды), Sense HAT попытается осуществить задержку, составляющую меньше 0 секунд. Однако это невозможно (если, конечно, путешествия во времени еще не приду- 196
Проект в Python: Трикордер мали). Поэтому вы увидите такой же результат, как если бы Sense HAT выполнила задержку в 0 секунд. Поздравляем,теперь вы можете еще раз опробовать интег- рированные в ваши программы функции Sense HAT! Проект в Python: Трикордер Теперь, когда вы обладаете достаточными навыками работы с Sense HAT, приш- ло время использовать собранные воедино знания и создать трикордер - устройство, знакомое поклонникам научной фантастики как приспособление, считывающее данные встроенных в него датчиков. Создайте новый проект в Thonny и сохраните его под названием Tricorder. По традиции начнем программу со строк, подключающих Sense HAT. from sense_hat import SenseHat sense = SenseHatО sense.clear(J Теперь необходимо определять функции каждого из датчиков Sense HAT. Нач- нем с инерциального измерительного блока (ИИБ). Введите следующее: def orientatioi (): orientation = sense.get_orientation() pitch = orientationf pitch"] roll = orientation["roll ] yaw = orientation[ yaw ] Поскольку результаты, полученные с датчиков, выводятся на матрицу 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)) Теперь у вас готова функция для считывания и отображения показаний ИИБ. Создадим аналогичные функции для каждого из оставшихся датчиков. Начнем с датчика температуры: 197
Глава 7. Физические вычисления с помощью Sense HAT def temperature(): temp = sense.get-temperatureО temp = round(temp, 1) sense.show_message("Temperature: %s degrees Celsius" % temp) Обратите внимание на последнюю строку, которая выводит данные на мат- рицу: знак % носит название заполнителя, поскольку «заполняется» данными переменной temp. Используя эту функцию, вы можете красиво оформить дан- ные, полученные на выходе, подписав Temperature, а также единицы измерения degrees Celsius. От этого ваша программа становится намного интересней. Теперь напишите код для датчика влажности: def humidity(): humidity = sense.get-humidity() humidity = rcund(humidity, 1) sense.show_message("Humidity: %s percent" % humidity) Теперь для датчика давления: def pressure^): pressure = sense.get_pressure() pressure = rourJ(pressure, 1) sense.show_message("Pressure: %s millibars" % pressure) А сейчас показания компаса/магнитометра: def compas (): for i in range(0, 10): north = sense.get_compass() north = round(north, 1) sense.show_message("North: %s degrees" % north) Короткий цикл, задаваемый кодом for, считывает десять показаний с магнито- метра, для того чтобы выдать вам более точный результат. Если же вы замечае- те, что итоговое значение продолжает меняться, увеличьте количество циклов до 20, 30 или даже до 100, чтобы получить более точные данные. В созданной вами программе сейчас задано пять команд, цель каждой - вы- водить на матрицу данные, полученные одним из датчиков Sense HAT. Как раз здесь идеально подойдет джойстик, благодаря которому вы сможете указывать, с какого именно датчика вы хотите получить показания. Введите следующее: sense.stick.direction_up = orientation sense.stick.direction_right = temperature sense.stick.direction_down = compass 198
Проект в Python: Трикордер sense.stick.direction_left = humidity sense.stick.directionjniddle = pressure Введенные строки кода сопоставляют работу определенного датчика с на- правлением движения рукояти джойстика: при сдвиге рукояти вверх считывают- ся данные с датчика ориентации, вниз - с магнитометра, влево - с датчика влаж- ности, вправо - с датчика температуры, нажатие на рукоять - с датчика давления. Теперь необходимо ввести код главного цикла. Необходимо это для того, что- бы после первого движения джойстика программа продолжала работать, а не выключилась. В конце программы введите следующее: while True: pass Нажмите кнопку Выполнить (Run) и подвигайте рукоять джойстика,тем самым снимая показания с определенного датчика (рис. 7.29). Как только число пропа- дет с матрицы, сдвиньте рукоять в другое направление. Поздравляем, вы создали собственный трикодер, которым гордилась бы даже Объединенная Федерация планет! Рис. 7.29: Каждое значение выводится на матрицу Если вы хотите узнать больше информации о проектах, которые можно со- здать, используя Sense HAT, советуем перейти к приложению D. 199
Глава 8 Модуль камеры для Raspberry Pi Подключив модуль камеры к Raspberry Pi, можно снимать фотографии и видео с высоким разрешением, а также создавать удивительные проекты при помощи компьютерного зрения Если у вас когда-либо появлялось желание создать проект, связанный с тем, что вы видите, - процесс, известный в области робототехники как компью- терное зрение,-то вам придется по душе дополнительный модуль камеры для Raspberry Pi. Модуль камеры - небольшая квадратная печатная плата, име- ющая плоский кабель (шлейф), подключается к порту последовательного интер- фейса камеры (CSI) Raspberry Pi и позволяет снимать фотографии и видеозаписи с высоким разрешением. В дальнейшем они могут быть использованы как неза- висимо, так и интегрированы в создаваемые вами программы. 200
Установка модуля камеры Типы камер Существует две версии модуля камеры для Raspberry Pi: стандартная и NolR. Визуальное отличие в том, что печатная плата модуля стан- дартной версии окрашена в зеленый цвет, а плата версии NolR - в черный. Для получения изображения лучшего качества в условиях с хо- рошим освещением рекомендуем использовать стандартную версию модуля. Версия NolR полу- чила свое название из-за отсутствия фильтра, пропускающего излучение в инфракрасной (ИК) области спектра, и предназначена для съемки в полной темноте с использованием инфракрас- ных источников света. Если вы хотите устано- вить в скворечник камеру слежения за птицами, использовать камеру безопасности или иной проект с ночным видением, ваш выбор падет именно на ту самую версию NolR. Однако не забудьте дополнительно приобрести источник инфракрасного света! На момент написания данного руководства текущая версия модуля камеры для Raspberry Pi, известного как модуль «v2» или «версия 2.1», основана на дат- чике Sony IMX219, обеспечивающем высококачественное изображение, - том же типе датчика, который встроен в заднюю панель вашего смартфона или план- шета. Это 8 мегапиксельный датчик. Это означает, что девайс позволяет делать снимки с разрешением до 8 млн пикселей. В этом случае захватывается изо- бражение шириной до 3280 пикселей и высотой до 2464. Теперь умножьте эти два числа друг на друга, и вы получите в общей сложности чуть больше 8 млн отдельных пикселей! Помимо фотографий, модуль камеры может захватывать видеоматериалы с разрешением Full HD (стандартное разрешение для большинства телевизоров) и частотой 30 кадров в секунду. Для более плавного движения или создания так называемого эффекта замедленной съемки вы можете увеличить скорость смены кадров, снизив разрешение следующим образом: 60 кадров в секунду для видеоматериалов 720р и 90 кадров в секунду для видеоматериалов с раз- решением 480р или VGA. Установка модуля камеры Модуль камеры, как и любое дополнительное оборудование, необходимо под- ключать к Raspberry Pi или отключать от него только при выключенном питании устройства и отсоединенном от него кабеле питания. Если компьютер Raspberry 201
Глава 8. Модуль камеры для Raspberry Pi Pi включен, нажмите на панели задач кнопку в виде малины, выберите пункт Завершить сеанс (Shutdown) и подтвердите действие, нажав кнопку Shutdown (Завершение работы). Дождитесь выключения устройства, а затем отсоедините его от сети. Распакуйте упаковку с модулем камеры: вы найдете небольшую печатную плату, которая представляет собой модуль камеры, и плоский кабель - шлейф. В большинстве случаев этот кабель уже подключен к модулю камеры. Если же нет, переверните модуль так, чтобы объектив камеры находился внизу, и найдите плоский пластиковый разъем. Осторожно пальцами подцепите торчащие края и потяните наружу, пока разъем не выдвинется наполовину. Поверните шлейф так, чтобы серебряные края оказались внизу, а часть пластика, окрашенная в синий цвет, - вверху. Вставьте его в разъем, который вы только что вытащили, а затем аккуратно нажмите на него. Должен прозвучать щелчок (рис. 8.1). В данном слу- чае не имеет значения, какой именно конец кабеля вы используете. Если шлейф установлен правильно, он будет расположен ровно и не выскочит, если вы слегка потянете за него. В противном случае повторите попытку, проделав предыдущие манипуляции еще раз. Рис. 8.1: Подключение шлейфа к модулю камеры Теперь установите другой конец шлейфа таким же образом. Найдите видео- вход (или порт CSI) на Raspberry Pi и осторожно потяните защелку вверх. Если вы используете Raspberry Pi в чехле, вам потребуется изначально снять его. Рас- положите Raspberry Pi портом HDMI в вашу сторону, вставьте шлейф серебряны- ми краями налево, а синей частью направо (рис. 8.2), затем осторожно верните защелку в ее исходное положение. Если кабель установлен правильно, он будет расположен ровно и не выскочит, если вы слегка потянете за него. В противном случае повторите попытку, проделав предыдущие манипуляции еще раз. Производители заклеивают объектив модуля камеры небольшим кусочком пленки синего цвета. Это позволяет предотвратить появление на нем царапин в ходе производства,транспортировки и установки. Найдите эту пленку и осторож- но отсоедините ее от объектива,тем самым подготовив камеру к использованию. 202
Установка модуля камеры Рис. 8.2: Подключение шлейфа к видеовходу/СБЬпорту Raspberry Pi Настраиваем фокус Модуль камеры для Raspberry Pi оборудован небольшим пластиковым колесиком. Оно предназначено для на- стройки фокуса объектива. Заводские настройки обыч- но идеальны, однако если вы пользуетесь камерой для съемки объектов очень крупным планом, вы можете осто- рожно повернуть расположенное над объективом коле- со, тем самым настраивая фокус вручную. Подключите Raspberry Pi к источнику питания и дождитесь загрузки Raspberry Pi OS. Перед использованием модуля камеры вам нужно будет указать Raspberry Pi, что он подключен. Для этого нажмите на панели задач кнопку в виде малины, загрузив меню, выберите категорию Preferences (Параметры) и пункт Raspberry Pi Configuration (Конфигурация Raspberry Pi). Когда программа загрузится, пере- йдите на вкладку Interfaces (Интерфейсы), найдите в списке пункт Camera (Ка- мера) и установите переключатель в положение Enabled (Включено) (рис. 8.3). 203
Глава 8. Модуль камеры для Raspberry Pi Нажмите кнопку ОК, и программа предложит вам перезагрузить систему Rasp- berry Pi OS. После перезагрузки модуль камеры будет готов к использованию! Рис. 8.3: Необходимо активировать модуль камеры в настройках Raspberry Pi Тестируем модуль камеры Чтобы убедиться в том, что вы правильно установили модуль камеры и вклю- чили интерфейс работы с камерой в настройках Raspberry Pi, предлагаем вос- пользоваться консольной утилитой raspistilL Наряду с raspivid, используемой при работе с видео, утилита raspistiLl предназначена для получения изображе- ний, сделанных камерой, посредством интерфейса командной строки Raspberry Pi (CLI). В отличие от используемых нами ранее программ, raspistilL нельзя найти в меню. Чтобы открыть программу, нажмите на панели задач кнопку в виде мали- ны, после чего перед вами откроется меню. Выберите категорию Стандартные (Accessories) и пункт LXTerminal (Терминал). Перед вами откроется черное окно, надписи в котором будут отображены зеленым и синим цветами (рис. 8.4). Это так называемый терминал, позволяющий получать доступ к интерфейсу команд- ной строки. 204
Установка модуля камеры Рис. 8.4: Запустите приложение LXTerminal для ввода команд Чтобы протестировать камеру, введите в строке приглашения программы LXTerminal следующую команду: raspistill -о test.jpg После нажатия клавиши Enter на экране крупным планом появится изображе- ние с камеры (рис. 8.5). Та кая опция носит название режима предварительного про- смотра. Стандартное время задержки перед съемкой фотографии 5 секунд, однако при необходимости вы можете настроить ее продолжительность. По истечении за- данного времени,т.е.5 секунд, камера сделает один неподвижный снимок и сохра- нит его в вашей домашней папке под названием testjpd. Если вы хотите сделать еще один снимок, введите ту же команду еще раз, но обязательно измените имя итогового файла после части -о, иначе камера перезапишет предыдущий снимок! Если в режиме предварительного просмотра вы понимаете, что изображение перевернуто,™ необходимо информировать raspistill о неправильном положе- нии камеры. Шлейф модуля камеры предназначен для подключения к разъему, находящемуся в нижнем углу девайса. Если же шлейф располагается сбоку или сверху, как в случае с некоторыми дополнительными аксессуарами, предназна- ченными для крепления камеры, необходимо поворачивать изображение на 90, 180 или 270 градусов при помощи параметра -rot. Таким образом, при исполь- зовании камеры со шлейфом, расположенным в верхней части девайса, введите следующую команду: raspistill -rot 180 -о test.jpg 205
Глава 8. Модуль камеры для Raspberry Pi Если шлейф подключен справа, замените значение поворота на 90 градусов, если же слева - замените значение на 270 градусов. Если первое фото было снято под неправильным углом, исправьте проблему, воспользовавшись параметром -rot. Рис. 8.5: Режим предварительного просмотра камеры Чтобы просмотреть сделанную фотографию, запустите Файловый менеджер (File manager), нажав на панели задач кнопку в виде малины и выбрав соответ- ствующий пункт в меню Стандартные (Accessories). Захваченное изображение сохранено в файл test.jpg и находится в папке home/pi. Найдите его в списке файлов и дважды щелкните по нему мышью, тем самым загрузив программу для просмотра изображений (рис. 8.6). Вы также можете прикрепить изображение к сообщению электронной почты, загрузить его на различные веб-сайты через бра- узер или переместить на внешнее запоминающее устройство. Рис. 8.6: Просмотр полученного изображения 206
Установка модуля камеры Знакомство с модулем picamera Самый удобный способ управления модулем камеры - совместное исполь- зование Python и модуля picamera. Эти инструменты предоставят вам полный контроль над возможностями режима предварительного просмотра, захвата фотографий и видео посредством модуля камеры, а также возможность интегри- рования полученных результатов в ваши собственные программы. Можно даже комбинировать их с программами, которые взаимодействуют с интерфейсом GPIO с помощью модуля GPIO Zero. Программируем на Python Работа с проектами, разбираемыми в этой главе, требу- ет навыков работы с языком программирования Python, программой IDE Thonny и интерфейсом GPIO Raspberry Pi. Если вы еще не усвоили данный материал, рекомен- дуем вам вернуться к главам 5 и 6 и проработать разби- раемые там проекты! Если у вас все еще открыто окно терминала, закройте его, нажав кнопку х (крестик) в правом верхнем углу окна, а затем загрузите приложение Thonny, открыв меню Raspberry Pi OS и выбрав соответствующий пункт из раздела Про- граммирование (Programming). Сохраните новый проект под названием Camera, а затем импортируйте необходимые для текущего проекта модули, введя в об- ласть сценария следующее: from picamera import PiCamera from time import sleep camera = PiCameraf) Последняя строка кода позволяет управлять модулем камеры с помощью функции camera.Теперь введите следующее: camera.start_preview() sleep(10) camera.stop_preview() Нажмите кнопку Выполнить (Run), и рабочий стол исчезнет, а на его месте в полноэкранном режиме откроется предварительный просмотр изображения, захватываемого с камеры (рис. 8.7). Попробуйте переместить объектив или по- махать рукой перед объективом, и вы увидите, что изображение на экране из- меняется. Спустя 10 секунд окно предварительного просмотра закроется, а про- грамма завершит свою работу. Однако, в отличие от функции предварительного просмотра raspistill, полученное изображение не будет сохранено. 207
Глава 8. Модуль камеры для Raspberry Pi Рис. 8.7: Функция предварительного просмотра изображения, получаемого с камеры, в полноэкранном режиме Если во время предварительного просмотра вы заметили, что полученное изображение расположено неправильно, исправьте это. Поверните изображе- ние. Для этого под строкой camera = PiCameraQ введите следующее: camera.rotation = 180 Если во время предварительного просмотра изображение было переверну- то, то эта строка кода развернет его в нужном направлении. Как и в raspistiLL, функция camera.rotation позволит вам повернуть изображение на 90,180 или 270 градусов в зависимости от того, с какой стороны модуля камеры подклю- чен кабель (слева, сверху или справа). Не забывайте об этой функции (camera, rotation) при написании программы,так вы избежите захвата изображения под неправильным углом! Съемка фотографий Чтобы сделать снимок, а не просто просмотреть полученное с камеры изо- бражение, вам необходимо внести изменения в программу. Для этого уменьшим время предварительного просмотра: найдите строку sleep(10) и измените ее следующим образом: sleep(5) Ниже введите следующее: camera.capture( /home/pi/Desktop/test.jpg ) 208
Установка модуля камеры Коррекция изображения Когда камера находится в режиме предварительного просмотра, она анализирует полученное изображение, тем самым определяя необходимость в дальнейших на- стройках, для получения снимка наилучшего качества. Вы легко отследите это поведение, если включите каме- ру в сумерках или на ярком свете. При этом на экране во время предварительного просмотра будет невозможно что-либо разглядеть, после чего внезапно проявится чет- кая картинка. Рекомендуем оставлять как минимум 2 се- кунды для предварительного просмотра, для того чтобы камера успела скорректировать изображение. Функция camera.captureQ позволяет сохранить неподвижное изображение, при этом необходимо указывать не только на то, что необходимо сделать это изображение, но и в какую папку оно должно быть сохранено. В нашем случае сохраним его на рабочий стол. Найдите его - оно расположено чуть ниже му- сорной корзины. Если при переходе к рабочему столу дорогу вам преградил интерфейс программы Thonny, просто переместите его мышью в сторону. Чтобы увидеть полученное изображение, дважды щелкните по нему мышью (рис. 8.8). Поздравляем, вам удалось запрограммировать камеру! Рис. 8.8: Просмотр захваченного изображения Съемка видео Помимо фотосъемки, вы также можете снимать видео. Удалите код, который находится между строками camera. start_preview() и camera. stop_preview(), а затем под строкой camera.start_preview() введите следующее: 209
Глава 8. Модуль камеры для Raspberry Pi camera.start_recording( /home/pi/Desktop/video.h264 ) sleep(10) camera.stop_recording() Как и прежде, перед вами откроется окно с предварительным просмотром изображения, захватываемого камерой. Однако в этот раз все, что снимает ка- мера, сохранится на рабочий стол. Во время того, как Python выжидает те самые 10 секунд, предлагаем вам немного потанцевать перед камерой. Этим вы разно- образите видео. После того как окно предварительного просмотра закроется, вы сможете просмотреть полученный файл, найдя его на рабочем столе. Для того чтобы воспроизвести видео, дважды щелкните мышью по файлу video.h264, находящемуся на рабочем столе. Программа начнет воспроизведе- ние видео, и если вы все-таки танцевали перед камерой,то на экране отобразит- ся ваш танец! По окончании видео программа воспроизведения видео сообщит вам о завершении работы дружелюбным сообщением, отображаемым в окне терминала. Поздравляем! Теперь вы владеете навыками работы с модулем ка- меры для Raspberry Pi! Стоп-кадровая анимация с помощью кнопки Теперь на основе полученных знаний о том, как правильно подключить допол- нительное оборудование к разъему Raspberry Pi GPIO (глава 6), создадим нечто особенное, а именно собственную киностудию стоп-кадровой анимации. Стоп-кадровая анимация - процесс съемки большого количества неподвиж- ных объектов, например моделей автомобилей или различных фигурок, а также незаметного перемещения объектов во время смены изображений. Несмотря на то что на самом деле объекты, изображенные на фотографии, не движутся, при быстрой смене картинок будет складываться впечатление, что герои и вправду способны перемещаться стой скоростью,с которой вы сами этого захотите! 210
Стоп-кадровая анимация с помощью кнопки Для создания следующего проекта вам потребуется: тактовая кнопка, макет- ная плата, перемычка типа папа-папа (М2М) и пара перемычек типа папа-мама (M2F). Если у вас нет макетной платы, можно подключить кнопку с помощью перемычек типа мама-мама (F2F), но работать с ней будет гораздо сложнее. При необходимости вы можете освежить в памяти информацию о любом из этих компонентов, прочитав главу 6. Вам также потребуется придумать, что же вы бу- дете снимать для анимации. Это может быть все, что угодно, начиная от простого комочка глины и заканчивая игрушечной машинкой или какой-либо фигуркой. Начнем с того, что подключим необходимые для работы компоненты: под- ключите кнопку к макетной плате, затем подключите шину заземления макетной платы к пину заземления Raspberry Pi (на рис. 8.9 обозначен как GND) с по- мощью перемычки типа папа-мама. С помощью перемычки типа папа-папа под- ключите одну из ножек кнопки к шине заземления макетной платы, а с помощью перемычки типа папа-мама подключите вторую ножку кнопки к пину 2 разъема GPIO (обозначен как GP2 на рис. 8.9). Рис. 8.9: Схема подключения кнопки к колодке GPIO Создайте новый проект в Thonny и сохраните его под названием Stop Motion. Для начала импортируем и настроим необходимые для использования камеры и разъема GPIO модули: from picamera import PiCamera from gpiozero import Button camera = PiCameraf) button = Button(2) Теперь введите следующее: 211
Глава 8. Модуль камеры для Raspberry Pi camera.start_preview() button.wait_forpressf) camera.capturef /home/pi/Desktop/test.jpg') camera.stop_preview() Нажмите кнопку Выполнить (Run), и перед вами откроется окно предвари- тельного просмотра с изображением, захватываемым модулем камеры. При этом окно не закроется до тех пор, пока вы не нажмете на подключенную вами кнопку. Нажмите ее сейчас, и окно предварительного просмотра закроется, а программа сохранит получившееся изображение на рабочий стол. На рабочем столе найдите файл test.jpg и дважды щелкните по нему мышью, чтобы открыть его и тем самым убедиться в том, что программа работает. Стоп-кадровая анимация позволяет создавать большое количество неподвиж- ных изображений, которые в дальнейшем будут сменять друг друга, тем самым создавая ощущение движения. Если сохранять все изображения на рабочий стол,то получится беспорядок, поэтому рекомендуем создать для них отдельную папку. Щелкните правой кнопкой мыши в любом месте рабочего стола, где нет файлов, папок или ярлыков, а затем в контекстном меню выберите пункт New Folder (Новая папка) (рис. 8.10). Присвойте папке имя animation (строчными бук- вами) и нажмите кнопку ОК. Рис. 8.10: Создайте новую папку для захватываемых изображений Естественно, не очень удобно перезапускать программу каждый раз после того, как будет сделан снимок для анимации. Именно поэтому сейчас мы внесем изменения, позволяющие программе работать в цикле. Однако, в отличие от ранее созданных нами циклов, этот необходимо тщательно замаскировать, иначе при остановке программы во время режима предварительного просмотра рабочий стол просто будет недоступен! Для этого предлагаем воспользоваться следующими двумя инструкциями: try и except. 212
Стоп-кадровая анимация с помощью кнопки Для начала удалите весь код после строки camera.start_preview(), а затем введите следующее: frame = 1 Таким образом мы вводим переменную frame, которая в дальнейшем будет использоваться программой для хранения кадра с присвоенным ему порядко- вым номером. Эта инструкция очень полезна, и вы убедитесь в этом сами. В от- сутствие ее при сохранении каждого нового изображения нажатием кнопки вы просто будете перезаписывать предыдущее! Теперь создадим цикл, введя следующее: while True: try: Новая инструкция try задает Python команду запуска кода, находящегося внутри, в данном случае - кода захвата изображений. Введите следующее: button.wait_for_press() camera. capturef' /home/pi/Desktop/animation/frame%03d. jpg' % frame) frame += 1 В этих трех строках кода есть пара хитростей. Первая хитрость - в имени файла захватываемого изображения: код %03d задает Python команду доба- вить перед числом столько нулей, сколько потребуется для того, чтобы число стало трехзначным. Таким образом, из «1» мы получаем «001», из «2» - «002», из «10» - «010». Необходимо это для того, чтобы сохранять файлы в правиль- ном порядке и убедиться в том, что вы случайно не сохранили новый файл поверх другого. Код % frame, расположенный в конце строки, задает Python команду исполь- зовать номер переменной frame в имени файла. Чтобы убедиться в том, что имя файла было присвоено единожды, мы добавили код frame += 1. Эта инструкция автоматически увеличивает значение переменной frame на единицу. Когда вы нажали кнопку в первый раз, значение переменной frame увеличилось с 1 до 2, во второй раз - с 2 до 3 и т. д. На данный момент программа не завершит свою работу автоматически, ког- да вы закончите делать снимки. Для этого вам понадобится добавить в код try завершающую часть - инструкцию except. Введите следующее, при этом не за- будьте удалить один из отступов (равный 4 пробелам) перед первой строкой (это необходимо для того, чтобы Python исключил эту часть кода из цикла try): except Keyboardinterrupt: camera.stop_preview() break В итоге ваша программа должна выглядеть следующим образом: 213
Глава 8. Модуль камеры для Raspberry Pi from picamera import PiCamera from time import sleep from gpiozero import Button camera = PiCameraf) button = Button(2) camera.start_preview() frame = 1 while True: try: button.wait_for_press() camera.capturef /home/pi/Desktop/animation/frame%03d.jpg' % frame) frame += 1 except Keyboardinterrupt: camera.stop_preview() break Запустите программу, нажав кнопку Выполнить (Run). Однако теперь нажмите не кнопку, а сочетание клавиш Ctrl+C на клавиатуре. Не обязательно нажимать одновременно эти клавиши, можно нажать клавишу Ctrl и, удерживая ее, нажать и отпустить клавишу С, а затем отпустить клавишу Ctrl. Комбинация этих клавиш останавливает программу, задав при этом команду Python прекратить ее работу. Если в написанной вами программе отсутствует код except Keyboardinterrupt:, Python немедленно выходит из программы и прекращает режим предваритель- ного просмотра камеры, автоматически блокируя экран компьютера. Если же вы добавили эту инструкцию, то Python начинает выполнять соответствующую команду, завершая режим предварительного просмотра камеры и выходя из программы. Теперь все готово для того, чтобы начать работу со стоп-кадровой анимацией! Расположите модуль камеры так, чтобы в его поле зрения оказались объекты, которые вы собираетесь анимировать, а также убедитесь, что конструкция не- подвижна, ведь если камера во время съемки трясется,то это испортит результат. Задайте объектам исходное положение и запустите программу, нажав кнопку Выполнить (Run). В режиме предварительного просмотра проверьте, все ли вас устраивает, и нажмите кнопку,тем самым сделав ваш первый кадр. Слегка измените расположение объектов: чем меньше перемещение,тем бо- лее плавной окажутся переходы между кадрами в готовой анимации. Теперь снова нажмите кнопку, делая новый кадр. Продолжайте до тех пор, пока не за- вершите съемку будущей анимации. Учтите, что чем больше кадров вы сделаете, тем дольше будет длиться ваша анимация. После того как вы закончите съемку, нажмите сочетание клавиш Ctrl+C, тем самым закрыв программна затем дважды щелкните мышью по папке animation, расположенной на рабочем столе. В ней вы сможете увидеть получившиеся снимки (рис. 8.11). Чтобы открыть одно из изображений и увидеть содержимое, дважды щелкните мышью по нему. 214
Стоп-кадровая анимация с помощью кнопки Рис. 8.11: Полученные изображения, помещенные в папку На данный момент все, что у вас есть, - папка, наполненная неподвижными изображениями. Для того чтобы создать анимацию, вам необходимо скомпоно- вать те самые изображения в видео. Нажмите на панели задач кнопку в виде малины, откройте меню Стандартные (Accessories) и выберите пункт LXTerminal (Терминал). Перед вами откроется интерфейс командной строки, более подроб- ную информацию о котором вы можете найти в приложении С. Этот интерфейс позволяет вводить команды для Raspberry Pi. В окне терминала перейдите в пап- ку, которую вы недавно создали, набрав следующее: cd Desktop/animation Обратите внимание на то, что первая буква «D» в слове «Desktop» должна быть прописной. Имена файлов и папок в Raspberry Pi OS обрабатываются с учетом регистра, другим словами, система не выполнит команду или не найдет папку, если вы введете имя не так, как оно было изначально записано. После того как вы перешли в папку, введите следующее: avconv -г 1 -i frame%03d.jpg -г 10 animation.h264 Данная команда запускает программу avconv. Функция этой программы - пре- образование неподвижных изображений в видеофайл animation.h264. В зави- симости оттого, как много кадров вы сделали, процесс создания видео может занять несколько минут. О его завершении вы узнаете по уведомлению в терми- нале. Для воспроизведения видео найдите файл animation.h264 в папке animation и дважды щелкните по нему мышью. Вы также можете воспроизвести видео, введя в окне терминала следующее: omxplayer animation.h264 215
Глава 8. Модуль камеры для Raspberry Pi Когда видео загрузится, вы увидите, как ваша стоп-кадровая анимация ожива- ет. Поздравляем, вы превратили Raspberry Pi в мощную киностудию! Если изображения в вашей анимации сменяются слишком быстро или слиш- ком медленно, внесите изменения в параметр -г 10 команды avconv, увеличив или уменьшив числовое значение. Это число - частота кадров в секунду, или количество сменяемых изображений за секунду. Изменение числа в меньшую сторону замедлит скорость получившегося видео, при этом смена картинок будет менее плавной. И наоборот: изменение числа в большую сторону ускорит полу- чившееся видео, сделав переход от снимка к снимку более плавным. При желании сохранить получившееся видео перетащите его в любой ката- лог, например Videos, в противном случае при следующем запуске программы avconv вы можете перезаписать видеофайл! Дополнительные настройки камеры Если у вас появилась необходимость в использовании дополнительных функ- ций модуля камеры для Raspberry Pi, предлагаем вам получить доступ к раз- личным настройкам, воспользовавшись модулем picamera. Ниже представле- ны команды, которые вы можете использовать в своих программах, а также их функции. camera.awbjnode = ’auto1 Эта команда автоматически устанавливает режим баланса белого. При необходимости вы можете установить любой из таких режимов, как off, auto, sunlight, cloudy, shade, tungsten, fluorescent, incandescent, flash или horizon. Если при смене режима вы поняли, что оттенок фото или видео слишком желтый или слишком синий, смените режим. camera.brightness = 50 Эта команда позволяет регулировать яркость изображения, начиная с само- го темного, равного 0, и заканчивая самым ярким, равным 100. camera.color_effects = None Эта команда позволяет вам корректировать цветовой баланс камеры. Мы рекомендуем не изменять эту настройку. Однако если ввести определенные числа, то можно изменить цвет захватываемого изображения: попробуйте ввести (128,128), тем самым создав черно-белое изображение. camera.contrast = 0 Эта команда отвечает за контраст изображения. Чем выше число, тем более драматично и резко будет выглядеть изображение; чем ниже число, тем бо- лее размытым оно окажется. Вы можете вводить любое число в диапазоне от -100 до 100 в зависимости оттого, насколько меньший или больший конт- раст вам необходим. 216
Стоп-кадровая анимация с помощью кнопки camera.crop = (0.0, 0.0, 1.0, 1.0) Эта команда позволяет обрезать часть изображения (сверху, снизу или по бо- кам), тем самым оставляя только ту часть, которая вам необходима. Числа здесь являются координатами по осям х и у, соответственно определяя ширину и вы- соту. По умолчанию захватывается изображение целиком. Попробуйте умень- шить последние два числа на -0,5 и 0,5, чтобы понять, как работает этот эффект. camera.exposure_compensation = 0 Эта команда отвечает за компенсацию экспозиции и позволяет вручную регу- лировать захватываемое количество света для отдельного изображения. В отличие от регулировки яркости изображения, данная команда фактиче- ски управляет настройками самой камеры. Допустимые значения варьиру- ются в диапазоне от -25 для получения очень темного изображения до 25 для получения очень яркого изображения. camera.exposure_mode = 'auto' Эта команда отвечает за режим экспозиции, или за логику, которой руководст- вуется модуль камеры, для того чтобы правильно экспонировать изображе- ние. Возможные режимы: off, auto, night, backlight, spotlight, sports, snow, beach, verylong, fixedfps, antishake и fireworks. camera.framerate = 30 Эта команда отвечает за количество изображений в секунду при записи видео, также называемое частотой кадров. Чем выше частота кадров, тем более плавным будет видео, однако и итоговый файл будет занимать боль- ше места на жестком диске. Более высокая частота кадров требует исполь- зования более низкого разрешения, которое можно установить с помощью команды camera.resolution. camera, hflip = False Эта команда перевернет изображение вдоль горизонтальной оси х в том случае, если в конце будет указано слово True. camera.image_effeet = ’none1 Благодаря этой команде вы сможете накладывать на видеоизображение эффекты, которые можно увидеть в режиме предварительного просмот- ра, как и сохраненные изображения и видео. Возможные эффекты: blur, cartoon, colorbalance, colorpoint, colorswap, deinterlacel, deinterlace2, denoise, emboss, film, gpen, hatch, negative, none, oilpaint, pastel, posterise, saturation, sketch, solarize, washedout и watercolor. camera.ISO = 0 Эта команда управляет настройками светочувствительности камеры (ISO). По умолчанию значение этого параметра задается автоматически, исходя 217
Глава 8. Модуль камеры для Raspberry Pi из текущего освещения. Однако вы можете изменять настройки ISO вруч- ную, воспользовавшись одним из следующих значений: 100, 200, 320, 400, 500, 640 или 800. Чем выше значение, тем лучше камера будет работать в условиях низкой освещенности, однако в этом случае изображение или видео может быть зернистым. camera.meter_mode = 'average' Эта команда, опираясь на количество доступного света, настраивает экспо- зицию. Значение, обозначающее количество света для изображения в це- лом, задано по умолчанию и является усредненным. Другие возможные ре- жимы: backlit, matrix и spot. camera.resolution = (1920, 1080) Эта команда определяет разрешение получаемого с помощью камеры фото- или видеоизображения. Два числа здесь - обозначения ширины и высоты изображения в пикселях. Изображения с более низким разрешением займут меньше места на жестком диске и позволят вам использовать более высо- кую частоту кадров. Изображения с более высоким разрешением обладают лучшем качеством, однако занимают больше места на жестком диске. camera.rotation = 0 Эта команда позволяет поворачивать изображение на угол от 0 до 90,180 и 270 градусов. Рекомендуется к использованию в том случае, когда у вас нет возможности повернуть камеру так, чтобы шлейф выходил из нижней части модуля камеры. camera.saturation = 0 Эта команда позволяет изменять насыщенность изображения/яркость цве- та. Возможные значения варьируются в диапазоне от -100 до 100. camera.sharpness = 0 Эта команда позволяет изменять резкость изображения. Возможные значе- ния варьируются в диапазоне от -100 до 100. camera.shutter_speed = 0 Эта команда позволяет управлять скоростью открытия и закрытия затвора при съемке изображений и видео. Вы можете вручную установить скорость затвора в микросекундах. Обращаем ваше внимание на то, что камера, у которой установлена высокая скорость затвора, эффективнее снимает при более слабом освещении, а камера, у которой установлена более низкая скорость затвора, - при более ярком освещении. Обычно настройки по умолчанию подойдут для большинства ситуаций. 218
Стоп-кадровая анимация с помощью кнопки camera, vflip = False Эта команда перевернет изображение вдоль вертикальной оси у в том слу- чае, если в конце будет указано значение True. camera.video_stabilization = False Эта команда при указании значения True задействует стабилизацию видео. Это необходимо, когда модуль камеры перемещается во время записи и вам требуется снизить размытие полученного изображения. Например, если ка- мера прикреплена к шагающему роботу или вы ее перемещаете. Более подробную информацию об этих, а также дополнительных настрой- ках, не описанных здесь, вы сможете найти, перейдя по ссылке http://picamera. readthedocs.io. 219
Приложение А Установка NOOBS на карту microSD Менеджер инсталяции NOOBS предназначен для того, чтобы максималь- но упростить установку и настройку операционных систем на Raspberry Pi. В магазинах электроники вы можете купить карту microSD с пред- установленным на нее менеджером NOOBS. Также вы можете воспользоваться следующими инструкциями и установить его самостоятельно на карту microSD. Внимание! Если вы приобрели карту microSD с предустановленным на нее менеджером NOOBS, вам просто нужно будет подключить карту к Raspberry Pi. Наши инст- рукции предназначены для тех, кто приобрел новую карту microSD, или для тех, кто хочет сбросить все настройки до заводского состояния. Если следовать инструкциям, указанным в этой главе, а карта microSD содержит какие-либо файлы, это приведет к потере всех данных. Поэтому для начала сделайте ре- зервную копию! Загрузка NOOBS Для установки NOOBS на пустую карту microSD вам сначала необходимо за- грузить соответствующее ПО с веб-сайта Raspberry Pi. На компьютере, оборудо- ванном кардридером с поддержкой карт microSD или SD (в последнем случае понадобится адаптер для карт памяти microSD), откройте веб-браузер и введите в адресную строку https://www.raspberrypi.org/downloads/noobs/. Перед вами по- явится страница NOOBS, на которой нажмите кнопку Download ZIP (Скачать ZIP), расположенную в разделе NOOBS Offline and network install (Сетевая и офлайн установка NOOBS). 220
Установка NOOBS на карту microSD Products Blog Downloads Community Help Forums Education Projects NOOBS We recommend that beginners start with Raspberry Pi Imager, an easy way to install Raspberry Pi OS and other operating systems to an SD card ready to use with your Raspberry Pi NOOBS - New Out Of the Box Software - is an alternative straightforward way to install an operating system. You can purchase a pre- installed NOOBS SD card from many retailers, such as Pimoroni. Adafruit and The Pi Hut, or download NOOBS below and follow our NOOBS setup guide. NOOBS is an easy operating system installer which contains Raspberry Pi OS and libreELEC. It also provides a selection of alternative operating systems which are then downloaded from the internet and installed NOOBS Lite contains the same operating system installer without Raspberry Pi OS pre-loaded. It provides the same operating system selection menu allowing Raspberry Pi OS and other images to be downloaded and installed. NOOBS Offline and network install Version: Re,ease date: Size 3.5.0 2020-09-15 2329 MB Ш Download Torrent I gj Download ZIP NOOBS Lite Network install only Version? 3.5 Release date. 2020-09-15 Size: 39 MB {p Download Torrent I Э Download ZIP Загрузка NOOBS - довольно длительный процесс, так как файл дистрибути- ва довольно велик. После завершения загрузки подключите карту microSD к компьютеру. Она должна будет отобразиться в формате съемного диска. В про- тивном случае ее придется сначала отформатировать. Два варианта Обращаем ваше внимание на то, что есть два варианта загрузки NOOBS: NOOBS и Noobs Lite. В первом случае при загрузке NOOBS также загружается и копия послед- ней версии Raspberry Pi OS. Во втором варианте - Noobs Lite - загружается только NOOBS. Большинство пользо- вателей предпочитают загружать лишь NOOBS. В случае, если вы планируете установить операционную систему, отличную от Raspberry Pi OS, скачайте Noobs Lite. Обе версии устанавливаются по одной и той же описанной далее схеме. 221
Приложение А Форматирование карты microSD Чтобы отформатировать ранее использовавшуюся карту microSD и подгото- вить ее для установки NOOBS, пользователям Windows и MacOS необходимо за- грузить программу для форматирования SD-карт- SD Card Formatter, перейдя по ссылке http://rpf.io/sdcard, а затем дважды щелкнуть по скачанному файлу, чтобы установить программу. Пользователи Linux должны обратиться за помощью к средству управления дисками, чтобы удалить все существующие на диске разде- лы. Затем создать один раздел и отформатировать его в режиме VFAT. После чего перейти к следующему разделу этого руководства. Если вы еще не вставили карту microSD в кардридер, сделайте это, а затем загрузите программу SD Card Formatter. Выберите вставленную вами карту microSD в списке Select card (Выбрать карту). В списке может быть представ- лено несколько накопителей, поэтому выберите подходящий и проверьте свой выбор. Для этого взгляните на раздел Card information (Информация о карте памяти). Там указываются данные о емкости и типе вставленной карты microSD. Если информация неверна, выберите другую карту в раскрывающемся списке Select card (Выбрать карту) и проверьте данные еще раз. Когда вы уверены в том, что выбрали правильную карту microSD, и создали ре- зервную копию всех файлов, которые необходимо сохранить (в случае если кар- та использовалась ранее), введите значение NOOBS в поле Volume label (Метка тома), затем нажмите кнопку Format (Отформатировать) и подтвердите, что вы 222
Установка NOOBS на карту microSD действительно хотите отформатировать карту. Режим быстрого форматирования займет всего несколько секунд, после чего вы можете закрыть окно программы SD Card Formatter. Установка NOOBS Установить программное обеспечение NOOBS очень просто. Для начала най- дите скачанный файл дистрибутива NOOBS, который по умолчанию должен находиться в папке Downloads (Загрузки). Тип этого файла известен как архив. Это единый файл, содержащий большое количестве отдельных файлов, которые были сжаты для экономии места и упрощения и ускорения загрузки. Дважды щелкните мышью по архиву, чтобы открыть его. Затем на клавиатуре нажмите сочетание клавиш Ctrl+A (3€+А в macOS). Тем самым вы выберете все файлы в архиве. Нажав и удерживая кнопку мыши на одном из файлов, пере- тащите его на съемный диск,т. е. на вашу карту microSD. Затем отпустите кнопку мыши и дождитесь, пока все файлы не будут извлечены на карту microSD. Этот процесс может занять несколько минут. v I E:\NOOBS_v3_5_0 Главная Поделиться Вид Х’ Ц J '*Е“Р'",Ь 4- -J X -1 1—1 К Скопировать путь Закрепить на панели Копировать Вставить Переместить Копировать Удалить Переименовать быстрого доступа Щ Вставить ярлык в’ в. Буфер обмена Упорядочить Новая папка Свойства |-| Открыть ’ d Изменить ^Журнал НЯ Выделить все Снять выделение Обратить выделение Создать Открыть Выделить Компьютер > iMedia (Е:) > NOOBSv3 5_O v О Р Поиск: NOOBS_v3_... Быстрый доступ Имя Дата изменения Тип Размер v I Компьютер > Видео > 0 Документы > -ф- Загрузки > SZ Изображения > Ji Музыка Объемные объекты > И Рабочий стол > 3- System (С:) defaults 05.02.202019:46 15.09.202014:53 Папка с файлами Папка с файлами iWork iMedia (E:J _ NOOBS (G:) overlays 0 bcm2708-rpi-b.dtb 0 bcm2708-rpi-b-plus.dtb 0 bcm2703-rpi-b-rev1.dtb bcm270S-rpi-cm.dtb П bcm270S-rpi-zero.dtb □ bcm2708-rp i-zero-w.dtb □ bcm2709-rpi-2-b.dtb □ bcm2710-rpi-2-b.dtb 0 bcm2710-rpi-3-b.dtb 0 bcm2710-rpi-3-b-plus.dtb 0 bcm2710-rpi-cm3.dtb П bcm2711-rpi-4-b.dtb 0 bcm2711-rpi-cm4.dtb bootcode □ BUILD-DATA config ] fixup_rc fixup4rc Гй INSTRUCTIONS-READ ME recover4.elf 0 recovery.cmdline 0 recovery, elf 15.09.2020 15:15 Папка с файлами 15.09.202012:43 Файл "DTB" 25 КБ 15.09.202012:43 Файл "DTB" 25 КБ 15.09.202012:43 Файл "DTB" 25 КБ 15.09.202012:43 Файл "DTB" 25 КБ 15.09.202012:43 Файл "DTB" 25 КБ 15.09.202012:43 Файл "DTB" 26 КБ 15.09.202012:43 Файл "DTB" 26 КБ 15.09.202012:43 Файл "DTB" 26 КБ 15.09.202012:43 Файл "DTB" 28 КБ 15.09.202012:43 Файл "DTB" 28 КБ 15.09.202012:43 Файл "DTB" 26 КБ 15.09.202012:43 Файл "DTB" 47 КБ 15.09.202012:43 Файл "DTB" 47 КБ 15.09.202012:43 Файл "BIN" 52 КБ 15.09.202012:43 Файл 1КБ 15.09.202012:43 Текстовый докум... 1КБ 15.09.202012:43 Видео 4 КБ 15.09.202012:43 Видео 4 КБ 15.09.202012:43 Текстовый докум... 3 КБ 15.09.202012:43 Файл "ELF" 301 КБ 15.09.202012:43 Файл "CMDLINE" 1КБ 15.09.202012:43 Файл "ELF" 801КБ Элементов: 31 Е!ыбрано 31 элем. Когда файлы будут успешно скопированы, извлеките карту microSD из компьютера и вставьте ее в свой Raspberry Pi. В следующий раз, когда вы вклю- чите Raspberry Pi, менеджер NOOBS загрузится и запросит выбрать операцион- ную систему (рис. А.1). 223
Приложение А Language (I)l | English tUKl [^ | Keyboard (9): [gb [yj Рис. A.1: Меню NOOBS без установленных операционных систем Нет изображения? Если при запуске на вашем устройстве не выводится изо- бражение, то это означает, что вы просматриваете не тот разъем. Если у экрана телевизора или монитора имеется более одного входа HDMI, переключайтесь между ними по очереди с помощью кнопки Source, Input или Источ- ник до тех пор, пока не увидите меню NOOBS. Перед вами откроется меню NOOBS, которое позволяет выбрать операцион- ную систему для дальнейшей работы с Raspberry Pi. В стандартную комплектацию NOOBS входят две операционные системы: Raspberry Pi OS - версия операци- онной системы, основанная на Debian Linux и адаптированная специально для Raspberry Pi, и LibreELEC — версия программного обеспечения Kodi Entertainment Centre. Если Raspberry Pi подключен к сети (через проводное или беспроводное соединение), то вы также можете загрузить и установить любую другую опера- ционную систему. Для установки операционной системы воспользуйтесь мышью, чтобы поста- вить крестик в пустом поле слева от строки Raspbian.Установите указатель мыши на пустое окошко и щелкните один раз левой кнопкой мыши. Обратите ваше внимание на то, что кнопка Install (i) (Установка) стала доступна. Таким образом вы узнаете о том, что операционная система готова к установке (рис. А.2). 224
Установка NOOBS на карту microSD Language (l)i | English tUKl |t1 Keyboard (9)1 gb ▼ Рис. A.2: Выбираем операционную систему для установки с помощью NOOBS Щелкните мышью по кнопке Install (i) (Установка), и перед вами откроется окно с сообщением, что в процессе установки операционной системы будут перезапи- саны все данные, хранящиеся в данный момент на карте microSD, кроме менед- жера NOOBS. Нажмите кнопку Yes (Да), и процесс установки начнется (рис.А.З). Рис. А.З: Установка операционной системы Raspberry Pi OS 225
Приложение А Процесс установки может занять от 10 до 30 минут, в зависимости от ско- рости вашей карты microSD. По мере установки операционной системы на ин- дикаторе, расположенном в нижней части окна, будет отображаться прогресс установки. Также вы увидите слайд-шоу с информацией о некоторых ключевых функциональных возможностях системы. Больше информации о Raspberry Pi OS вы найдете в главе 3. Внимание! Важно, чтобы процесс установки не прерывался, иначе высока вероятность повреждения программного обес- печения (процесс, известный как повреждение данных). Не извлекайте карту microSD и не отсоединяйте кабель питания во время установки операционной системы. Если установка по какой-либо причине будет прервана, отсоедините Raspberry Pi от источника питания, а затем нажмите на клавиатуре клавишу Shift и удерживайте ее в процессе подключения Raspberry Pi к источнику пита- ния.Так вы снова отобразите меню NOOBS. Этот процесс носит название режима восстановления. Это отличный способ возобновить работу Raspberry Pi в случае, если программное обеспечение было повреждено. После это- го вы сможете вернуться в меню NOOBS, переустановить операционную систему или установить одну из других операционных систем. После завершения установки перед вами откроется окно с кнопкой ОК. На- жмите ее. Raspberry Pi перезагрузится, и откроется установленная операционная система. Обратите внимание, что при первой загрузке Raspberry Pi OS может потребоваться пара минут, поскольку система настраивается для эффективного использования свободного места на карте microSD. Следующая загрузка будет выполняться гораздо быстрее. 226
Приложение В Установка и удаление программного обеспечения Вместе с Raspberry Pi OS для Raspberry Pi устанавливается несколько по- пулярных программ, тщательно отобранных организацией Raspberry Pi Foundation. Это не единственная подборка программ, которая дос- тупна на Raspberry Pi. Выполняя указанные в этой главе инструкции, вы мо- жете просмотреть дополнительное программное обеспечение, установить его и при необходимости удалить, тем самым изменяя и расширяя возможности Raspberry Pi. Указанные в данном приложении инструкции дополняют инструкции из гла- вы 3, где объясняется, как правильно использовать программу Recommended Software. Если вы еще не ознакомились с этим материалом, прочитайте его, пос- ле чего перейдите к чтению инструкций, разбираемых здесь. 227
Приложение В Емкость карты При установке большого количества программ на Raspberry Pi OS потребуется много места на карте microSD. Карта емкостью 16 Гб или больше позволит вам установить необходимое количество программ. Для того чтобы проверить, совместима ли карта, которую вы собираетесь использовать, с Raspberry Pi, перейдите по ссылке http://rpf.io/sdcardlist. Просмотр доступного программного обеспечения Чтобы найти и просмотреть список доступных для Raspberry Pi OS пакетов программного обеспечения, воспользуйтесь так называемым репозиторием ПО. Для этого нажмите на панели задач кнопку в виде малины и в разделе Парамет- ры (Preferences) меню выберите пункт Add/Remove Software. Через несколько секунд перед вами откроется окно программы Add/Remove Software. В левой части окна программы Add/Remove Software расположен перечень категорий, схожих с теми, что доступны в главном меню, открывающемся при нажатии на панели задач кнопки в виде малины. Выбрав одну из категорий, вы увидите список приложений программного обеспечения, доступного в этой кате- гории. Вы также можете воспользоваться поиском, введя, например, «text editor» или «дате» в поле, расположенном в левом верхнем углу окна.Тогда вы увидите список соответствующих определенной категории программ. При нажатии на любую программу внизу окна появляется дополнительная информация. 228
Установка и удаление программного обеспечения Если выбранная вами категория содержит большое количество доступных приложений, то для завершения операции приложению Add/Remove Software может потребоваться некоторое время. Установка программ Чтобы выбрать желаемый программный пакет, который вы хотите установить, установите рядом с ним флажок, щелкнув по названию пакета. Вы можете уста- новить сразу несколько пакетов. Для этого отмечайте их флажками, тем самым добавляя их в очередь загрузки. Значок рядом с пакетом изменится - он примет вид открытой коробки со знаком «+». Это означает, что пакет готов к загрузке. 229
Приложение В После того как вы выбрали все необходимые вам программы, нажмите кноп- ку ОК или Apply (Применить). Единственная разница между ними заключается в том, что нажатие кнопки ОК закрывает окно приложения Add/Remove Software, после того как выбранное программное обеспечение установлено, в то время как нажатие кнопки Apply (Применить) оставляет окно программы открытым. Вам будет предложено ввести пароль для подтверждения учетной записи. Вы ведь не хотите, чтобы посторонний человек мог скачивать или удалять програм- мы на вашем Raspberry Pi! 1 Стандартные ЬЯ Средства администрировани Й ра] Связь Рабочая среда GNOME Рабочая среда KDE Другие рабочие среды с* Шрифты М Игры Add 1 Remove Software Графика @ Интернет В Устаревшие РЗ Локализация ш Мультимедиа Сеть В Другое (j) Программирование Q Публикация Системные Q Debian Edu Spacefun (squeeze) themes and artwork debian-edu-artwork-spacefun-201 Bl 204-2 Q Image Viewer for Deepin Desktop Environment deepi n-i mage-viewer-1.3.8-1 (32-битный) Аутенфикация Для установки приложений требуется аутентификация Идентификация: pi Пароль' IL Отменить ОК dia-shapes-0.6.0-3 инстпумрнты л ля пбпаботки и ппрпбпазпвания мели шнских изпбпажений П1СОМ' Dia - редактор диаграмм, графиков, схем и т.д. Есть поддержка диаграмм статических структур UML (диаграммы классов), диаграмм отношений, сетевых диаграмм и многих других. Возможен экспорт в т postscript и многие другие форматы. Объём загрузки 994,6 кБ Лицензия unknown Источник debian-stable-main Cancel Apply OK Вы, возможно, заметили, что при установке одного пакета также устанав- ливается еще несколько. Это - зависимости, т. е. программы и компоненты, необходимые для работы выбранного и скачанного вами пакета. Например: набор звуковых эффектов для скачанной игры или базы данных для веб-сер- вера и т.д. После того как вы скачали приложение, вы можете запустить его. Откройте меню, нажав на панели задач кнопку в виде малины, и найдите категорию, к которой относится установленное ПО. Учтите, что категории в меню не всегда совпадают с категориями в окне программы Add/Remove Software. Некоторые программы вообще недоступны из меню операционной системы. Такие при- ложения носят название консольных. Запускаются они обычно с помощью обо- лочки командной строки, программы Терминал. Для получения дополнительной информации о работе с командной строкой и программой Терминал перейдите к приложению С. 230
Установка и удаление программного обеспечения Удаление программ Чтобы выбрать пакет для удаления или деинсталляции, найдите его в списке программ (удобнее всего здесь воспользоваться функцией поиска) и сбросьте флажок рядом с ним нажатием кнопки мыши. Вы можете удалить сразу несколь- ко пакетов, для этого сбросьте соответствующие флажки. Значок, расположен- ный рядом с пакетом, изменится и станет похож на открытую коробку, рядом с которой расположена небольшая корзина. Такой значок указывает на то, что программа будет удалена. я Options Стандартные Средства администрировали [Si] Связь Рабочая среда GNOME 53 Рабочая среда KDE |е" Другие рабочие среды сЬ Шрифты iT Игры - Графика е Интернет ы Устаревшие |В Локализация Мультимедиа jS Сеть В Другое ф Программирование Б Публикация pigfc Системные i^Pi ' Debian Edulines (jessie) themes and artwork i---1 debian-edu-artwork-lines-2.10.5-1 , Debian Edu Softwaves (stretch) themes and artwork - -1 debian-edu-artwork-softwaves-2.10.5-1 Debian Edu Spacefun (squeeze) themes and artwork >---1 debian-edu-artwork-spacefun-201 St 204-2 Image Viewer for Deepin Desktop Environment ----1 deepin-image-viewer-1.3.8-1 (32-битный) Color picker tool for deepin I---1 deepin-picker-1.6.4-1 (32-битный) unique image postprocessing application i---1 delaboratory-0.8-2-bb2 (32-битный) редактор диаграмм ПЗ dia-0.97.3-Hgit20160930-8.1 (32-битный) dia-common-0.97 3+git20160930-В.1 network icons scheme for Dia Dia is an editor for diagrams, graphs, charts etc. There is support for UML static structure diagrams (class diagrams), Entity-Relationship diagrams, network diagrams and much more. Diagrams can be exported to postscript and many other formats. Объём на диске 24,6 МБ Лицензия unknown Источник Cancel Apply 231
Приложение В Нажмите кнопку ОК или Apply (Применить) для запуска процесса удаления выбранных программ. Вам потребуется ввести пароль, если вы не вводили его в течение последних нескольких минут, а также подтвердить, что вы действитель- но хотите удалить все зависимости, относящиеся к выбранному для удаления пакету. После завершения деинсталляции значки удаленных программ исчезнут из меню операционной системы. При этом файлы, созданные посредством этих программ (например, изображения для графического пакета или сохранения игр), останутся. Внимание! Любое программное обеспечение, установленное на Raspberry Pi OS, отобра- жается в окне программы Add/Remove Software, включая ПО, необходимое для запуска самой операционной системы Raspberry Pi OS. Вы можете удалить до- полнительные программы, чтобы освободить пространство на жестком диске. Однако не удаляйте системные программы (что, как правило, невозможно), если вы сомневаетесь в их предназначении. Если же вы все-таки ошибочно удали- ли системную программу, переустановите операционную систему Raspberry Pi OS, воспользовавшись инструкциями из главы 2, или переустановите NOOBS, обратившись к приложению А. 232
Приложение С Интерфейс командной строки Как вы уже знаете, большинство программ доступны в операционной си- стеме Raspberry Pi OS в графическом интерфейсе. Но некоторые поддер- живают лишь текстовый интерфейс, известный как интерфейс командной строки (CLI), и доступны в приложении под названием LXTerminal (Терминал). В большинстве случаев пользователям редко приходится обращаться за по- мощью к интерфейсу командной строки. Однако для тех, кто хочет узнать боль- ше, мы подготовили это приложение, являющееся небольшим введением. Дополнительная информация Н Это приложение не является углубленным руководством к интерфейсу командной строки Linux. Для более де- тального изучения темы рекомендуем перейти по ссылке http://rpf.io/terminal. 233
Приложение С Загрузка программы Терминал Доступ к интерфейсу командной строки осуществляется через Терминол, про- грамму, которая загружает инструмент, получивший название виртуального терминола (VTY - virtual teletype). Название произошло еще на раннем этапе появления компьютеров, когда пользователи задавали команды посредством их ввода на большой электромеханической печатной машинке, а не клавиатуре и мониторе. Чтобы загрузить терминал, нажмите на панели задач кнопку в виде малины, откройте меню Стандартные (Accessories) и выберите пункт LXTerminal (Терминал). Окно терминала можно перемещать по рабочему столу, изменять его размер, разворачивать и уменьшать так же, как и любое другое окно. Если вам плохо видно текст, вы можете увеличить шрифт, если же вы хотите уместить больше информации в окне, то наоборот - уменьшить. Для этого в меню Правка (Edit) выберите пункт Приблизить (Zoom In) или Отдалить (Zoom Out) соответственно. Также вы можете нажать на клавиатуре клавиши Ctrl и Shift и, удерживая их, нажать клавишу + или _. Приглашение Первая строка, которая отображается в окне терминала, - это приглашение. После него вы можете вводить желаемые команды. На Raspberry Pi под управ- лением операционной системы Raspberry Pi OS эта строка выглядит следующим образом: pi@raspberrypi:- $ 234
Интерфейс командной строки Первая часть строки - pi - это ваше имя пользователя. Вторая часть, после @ - имя хоста/узла, используемого компьютером, которое по умолчанию обознача- ется как raspberrypi. После : указан символ «тильда», ~, который представляет собой сокращение для ссылки на ваш домашний каталог и указывает на теку- щий каталог. Наконец, символ $ указывает на то, что вы являетесь непривиле- гированным пользователем. Это означает, что для выполнения таких задач, как добавление или удаление программ, вам необходимо ввести пароль к учетной записи администратора или root-пользователя. Навигация по каталогам Введите следующую командна затем нажмите клавишу Enter: cd Desktop Вы увидите, что строка приглашения изменилась следующим образом: pi@raspberrypi:-/Desktop $ Она указывает нам на то, что текущий каталог изменился. Раньше вы находи- лись в своем домашнем каталоге, обозначенном символом *, а теперь вы нахо- дитесь в подкаталоге Desktop (Рабочий стол) вашего домашнего каталога. Для смены каталога мы использовали команду cd (change directory), позволяющую сменить каталог. Правильный регистр Интерфейс командной строки Raspberry Pi OS учитывает регистр. Это означает, что для программы очень важно, какими буквами (прописными или строчными) записаны команды или имена. Если вы получили сообщение об ошибке «по such file or directory» при попытке сменить каталог, проверьте, указана ли прописная буква D в на- чале слова Desktop. Есть четыре команды, введя которые, вы сможете вернуться в свой домашний каталог. Попробуйте ввести по очереди каждую из них, после чего каждый раз возвращайтесь обратно в подкаталог Desktop. Первая команда - это: cd .. Символы .. - еще одно сокращение. Оно обозначает «каталог уровнем выше». Такой каталог получил название родительского каталога. Поскольку каталог 235
Приложение С Desktop является домашним каталогом, эта команда вернет вас именно туда. Вернитесь в подкаталог Desktop и попробуйте вторую команду: cd ~ В данном случае использование символа - означает «переход в домашний каталог». В отличие от команды cd .которая переносит вас в родительский каталог, уровнем выше, из того каталога, в котором вы сейчас находитесь, эта команда переносит вас из любого каталога в домашний. Однако есть еще более простой способ: cd При вводе команды cd вам необязательно указывать имя каталога, в который вам необходимо вернуться. Программа по умолчанию вернет вас в домашний каталог. И последний способ вернуться в домашний каталог - ввести команду: cd /home/pi В этой команде используется так называемый абсолютный путь, который бу- дет работать независимо от вашего текущего каталога. Как и команды cd или cd *, она вернет вас в ваш домашний каталог из любого каталога, в каком бы вы ни находились. Однако, в отличие от других команд, при вводе этой вам потре- буется ввести имя пользователя (в данном случае pi). Работа с файлами Потренируемся работать с файлами. Для этого перейдите в каталог Desktop и введите следующее: touch Test На рабочем столе появится файл под названием Test. Команда touch обычно используется для обновления информации о дате и времени файла. Если, как в нашем случае, файл отсутствует, то программа сначала создаст его. Введите следующее: ср Test Test2 Вы увидите, что на рабочем столе появится еще один файл - Test2. Это иден- тичная исходному файлу копия. Удалите его, введя: rm Test2 Вы заметите, что файл исчез. Файл удален. 236
Интерфейс командной строки Внимание! В отличие от удаления файлов с помощью графического файлового менедже- ра, который переносит их в корзину для последующей очистки, файлы, уда- ленные с помощью команды rm, исчезают безвозвратно. Поэтому используйте данную команду с осторожностью! Теперь введите следующее: mv Test Test2 Эта команда задает команду переместить файл. Вы увидите, что исходный файл Test исчез, его сменил файл Test2. Команду mv также можно использовать для переименования файлов. Однако когда вы находитесь не на рабочем столе, вам все равно необходимо иметь доступ к файлам, находящимся в каталоге. Введите следующее: Is Эта инструкция позволяет вывести на экран список содержимого текущего каталога или любого другого каталога, который вы укажете. Для получения бо- лее подробной информации, например о выводе скрытых файлов или размеров файлов, добавим несколько параметров: Is -larth Эти параметры управляют командой Is: I представляет вывод в виде длин- ного вертикального списка; а отображает все файлы и каталоги, включая скры- тые; г обращает стандартный порядок сортировки; t сортирует файлы в зави- симости от даты/времени изменения, что в сочетании с г позволяет переносить наиболее старые файлы в верхнюю часть списка, а наиболее новые - в ниж- нюю. Наконец, h изменяет формат отображения списка файлов так, чтобы он был удобнее для прочтения человеком. Запуск программ Одни программы могут быть запущены только с помощью командной стро- ки, другие же как через графический интерфейс, так через интерфейс команд- ной строки. Примером последних является конфигуратор Raspberry Pi, который обычно запускается из меню операционной системы. Введите следующее: raspi-config 237
Приложение С Перед вами откроется окно с сообщением об ошибке, в котором говорится о том, что данное программное обеспечение может быть запущено только от име- ни администратора,т.е.с помощью учетной записи суперпользователя Raspber- ry Pi. Для получения подсказок введите следующее: sudo raspi-config Слово sudo задает Raspberry Pi OS команду повысить привилегии пользовате- ля и запустить программу от имени администратора. Рекомендуем использовать sudo только тогда, когда для выполнения коман- ды требуются определенные привилегии пользователя, например когда вам необходимо установить или удалить программное обеспечение либо внести изменения в настройки системы. Игры, например, не следует запускать, ис- пользуя sudo. Дважды нажмите клавишу Tab, тем самым выбрав пункт Finish. Для закрытия окна конфигуратора Raspberry Pi нажмите клавишу Enter, так вы вернетесь к интерфейсу командной строки. Теперь введите: exit Эта команда завершит сеанс работы с интерфейсом командной строки, а так- же закроет окно терминала. 238
Интерфейс командной строки Использование ТТУ-абстракции Для того чтобы воспользоваться интерфейсом командной строки, вам не обя- зательно работать в приложении терминала. Вы можете также подключиться к одному из уже работающих терминалов, получивших название телетайпов, или TTY-обстрокций. Нажав и удерживая клавиши Ctrl и Alt на клавиатуре, нажмите клавишу Р2,тем самым подключившись к «tty2». ebian GNU/Linux 10 raspberry ttyZ aspberry login: Сейчас вам нужно будет снова авторизоваться в системе, введя ваше имя пользователя и пароль, после чего вы сможете воспользоваться интерфейсом командной строки здесь точно так же, как и при использовании терминала. Если по какой-либо причине вы не можете воспользоваться основным интерфейсом рабочего стола, работа с TTY окажется очень кстати. Чтобы закрыть TTY, нажав и удерживая клавиши Ctrl+Alt, нажмите клави- шу F7, и на экране снова появится рабочий стол. Снова нажмите сочетание кла- виш Ctrl+Alt+F2,TeM самым переключившись обратно на «tty2». Обращаем ваше внимание на то, что все ранее внесенные туда данные сохранятся. Перед тем как повторно переключиться на рабочий стол, введите: exit Чтобы вернуться на рабочий стол, нажмите сочетание клавиш Ctrl+Alt+F7. Причина, что перед переключением с TTY на рабочий стол мы вводим exit, заключается в том, что любой человек, имеющий доступ к клавиатуре, может переключиться обратно на TTY. И если вы не вышли из системы, посторонний пользователь сможет получить доступ к вашей учетной записи, и для этого ему будет необязательно знать ваш пароль! Поздравляем: вы начали постепенное освоение интерфейса командной стро- ки Raspberry Pi OS! 239
Приложение D Дополнительные материалы Официальное руководство для начинающих по Raspberry Pi предназначено для того, чтобы ввести вас в процесс работы на Raspberry Pi. Естественно, это не углубленный курс, и все, что мы с вами здесь разбирали, - лишь малая часть. Пользователи Raspberry Pi проживают на всей территории земного шара, и цели, для которых этот девайс предназначен, очень разнообразны. Вос- пользоваться Raspberry Pi можно как для игр и разработки различных устройств с датчиками,так и для создания проектов, связанных с робототехникой и искус- ственным интеллектом. Главное - это ваше вдохновение. 240
Дополнительные материалы В этом приложении вы познакомитесь с другими источниками идей для созда- ния проектов или планов уроков, а также со множеством иных материалов, ко- торые окажутся следующей ступенью вашего обучения после ознакомления с нашим руководством для начинающих. Блог о Raspberry Pi https://rpf.io/blog Для того чтобы быть всегда в курсе последних новостей, касающихся Raspberry Pi, рекомендуем запомнить этот сайт. Это официальный блог, новости в котором охватывают буквально все, начиная с выпуска нового оборудования и появления новых образовательных материалов и заканчивая сводками новостей лучших общественных проектов, кампаний и мероприятий. Если вы хотите быть в курсе всех событий, связанных с Raspberry Pi,то это именно то, что вам нужно. Products Blog Downloads Community Help Forums Education Projects Raspberry Pi Blog ::: archive si rss Inis is the official Raspberry Pi blog - your first stop for dai у Raspberry Pi newsl Raspberry Pi High Quality Camera takes photos through thousands of straws Point, click... drink? 13 Raspberry Pis slosh-test space shuttle tanks in zero gravity Splish splash is only OK in the bath 17000ft | The MagPi 98 Don't look down ’BERRY PI RTABLEL* MPUTER Embedding computational thinking skills in our learning resources What young people learn while having fun with our online projects Ashley Whittaker - 28th Sep 2020 0 comments Ashley Whittaker - 25th Sep 2020 1 comment Rob Zwetsloot - 24th Sep 2020 Oliver Ou in Ian - 23rd Sep 2020 5 comments 2 comments Проекты Raspberry Pi https://rpf.io/projects Официальный сайт Raspberry Pi Projects содержит пошаговые руководства для создания проектов различных типов. Это может быть как создание игр и музыки, так и разработка собственного веб-сайта или робота, управляемого с помощью Raspberry Pi. Большинство проектов доступны на нескольких языках и имеют различные уровни сложности. Именно поэтому они подходят как для новичков, так и для опытных пользователей. 241
Приложение D Образовательный ресурс Raspberry Pi https://rpf.io/education Официальный образовательный сайт Raspberry Pi Education публикует но- востные рассылки, онлайн-тренинги и различные проекты под руководством преподавателей. Сайт также содержит ссылки на дополнительные ресурсы, включая учебную программу Picademy, бесплатные программы кодирования Code Club и СоЬегОо]‘о,атакже международные мероприятия, проводимые груп- пой Raspberry Jam. Products Вlog Downloads Comm unitv Help Forums Education Projects Education Newsletter Issue 60 - July 2020 LEARN: A space mission connecting through code, and more Raspberry Pi in Education Online learning HelloWorld Digital Making Curriculum SignupfortiieEducationnewsletter 242
Дополнительные материалы Форумы Raspberry Pi https://rpf.io/forums Raspberry Pi Forums - это то место, где поклонники Raspberry Pi могут побол- тать обо всем. Это может быть как обсуждение проблем, с которыми сталкивают- ся начинающие пользователи, так и обсуждение глубокотехнических тем. Здесь даже существует специальная зона под названием «оффтоп», где пользователи могут отклониться оттемы и просто поболтать! Журнал Mag Pi https://magpi.cc Официальный журнал MagPi - это ежемесячное глянцевое издание, статьи которого охватывают практически все темы. Это могут быть как обзоры на учеб- ники и руководства, так и статьи на различные темы и новости, поддерживае- мые мировым сообществом Raspberry Pi. Найти этот журнал вы сможете в элект- ронном формате бесплатно благодаря лицензионному соглашению Creative Commons. Создатели журнала MagPi также опубликовали серию «буказинов», в которых рассматриваются темы узкой направленности, например использова- ние командной строки, самостоятельное создание электронных проектов и др.- в приятном, удобном формате. Скачать вы их можете также бесплатно благодаря лицензионному соглашению Creative Commons. 243
Приложение D Articles Tutorials Reviews Issues Books Subscribe Buy now Advertise The MagPi issue 98 Discover Raspberry Pi portable computing in the Latest edition of The MagPi. Inside The MagPi magazine #g8 Build a portable comouter. Code on-the-go with the Raspberry Pi 2G0 portable workst. Buy now Subscribe Download on the- I I GET IT ON i App Store Google Play Download Free PDF Журнал Hello World https://helloworld.cc Журнал Hello World издается три раза в год и доступен бесплатно благодаря лицензионному соглашению Creative Commons. The computing and digital making magazine for educators Issues П * Hello World issue 14 From counting penguins in Antarctica to orienteering with a GPS twist, great things can happen when young people get creative with technology outdoors. SEE WHATS INSIDE An environ mentally-conscious game Reconnecting with nature in your Exploring the outdoors through the 244
Дополнительные материалы Журнал HackSpace https://hsmag.cc Журнал HackSpace ориентирован на более широкую аудиторию, чем MagPi. Именно поэтому в его статьях создатели поднимают такие темы, как обзоры аппаратного и программного обеспечения, учебных пособий и интервью. Если вы заинтересованы в расширении своих знаний, не касающихся только лишь Raspberry Pi, то журнал Hackspace Magazine придется вам по душе. Вы сможете скачать его бесплатно в цифровом виде. HackSpace TECHNOLOGY" III TOUR HANDS I Articles Issues Books Subscribe Buy now Projects П * Si HackSpace magazine issue 35 Forget the world of work for a while and build a full-sized arcade cabinet, complete with dicky buttons, joystick and even a coin machine to extort money from yourself We'll guide you through all the steps needed to make your own personal time wasting machine, from cutting the MDF to setting up your retro gaming platform. Download or the I GETITON • App Store F* Google Play Download Free PDF 245
Приложение Е Инструмент настройки Raspberry Pi Инструмент Raspberry Pi Configuration - это мощная программа для настрой- ки многочисленных параметров Raspberry Pi. Благодаря ему вы можете выбрать доступные интерфейсы, сконфигурировать сетевые программы и настроить многие другие параметры. Возможно, начинающих пользователей напугает то количество информации, которое преподносит это приложение. Вы будете ознакомлены с каждой из настроек и их предназначением по очереди. Вы можете запустить инструмент Raspberry Pi Configuration, нажав на панели задач кнопку в виде малины, перейдя в категорию Параметры (Preferences), а затем щелкнув по значку приложения Raspberry Pi Configuration. Также для его запуска вы можете воспользоваться интерфейсом командной строки (термина- лом), введя команду raspi-config. Внешний вид консольной версии существенно отличается от интерфейса графической. Параметры отображаются в разных ка- тегориях, в зависимости от используемой вами версии. В данном приложении мы поговорим о графической версии инструмента. 246
Инструмент настройки Raspberry Pi Внимание! п Если вы не уверены в том, следует ли изменять ту или иную настройку, сове- туем оставить ее без изменений. Если вы подключаете новое оборудование к Raspberry Pi, например аудиомодуль HAT или модуль камеры, рекоменду- ем следовать инструкциям, которые подскажут вам, какие именно настройки нужно изменить. В любом другом случае настройки, заданные по умолчанию, обычно следует оставлять без изменений. Вкладка System Вкладка System (Система) содержит параметры, которые позволяют управлять различными настройками Raspberry Pi OS. Password (Пароль): нажмите кнопку Change Password (Сменить пароль), чтобы сменить текущий пароль вашей учетной записи на новый. По умолчанию имя учетной записи - pi. Hostname (Имя хоста): имя Raspberry Pi в сетевом окружении. Если вы обладатель нескольких плат Raspberry Pi, подключенных к одной сети, у каждой платы должно быть собственное имя хоста. Boot (Загрузка): установка этого переключателя в положение То Desktop (В рабочий стол) (по умолчанию) загружает уже знакомый нам рабо- чий стол Raspberry Pi OS. Установка данного переключателя в положе- ние То CLI (В CLI) загружает интерфейс командной строки, как описано в приложении С. 247
Приложение Е Auto Login (Автоматический вход): когда установлен флажок As current user (Как текущий пользователь) (по умолчанию), рабочий стол Raspber- ry Pi OS загружается без необходимости ввода имени пользователя и пароля. Network at Boot (Загрузка по сети): когда установлен флажок Wait for network (Ожидание сети), Raspberry Pi OS не загрузится до тех пор, пока не будет установлено подключение к сети. Splash Screen (Заставка): если переключатель установлен в положение Enabled (Включено) (по умолчанию), сообщения о загрузке Raspberry Pi OS будут скрыты за графической заставкой. Underscan (Сжатая развертка): благодаря этому параметру настройки вы можете убрать или вернуть черные полосы, расположенные вдоль краев монитора. Это необходимо для того, чтобы задать необходимый данному монитору размер изображения. Если по краям появились чер- ные полосы, установите переключатель в положение Disabled (Отклю- чено), а если нет - оставьте значение Enabled (Включено). Composite Video (Композитное видео): этот параметр настройки позво- ляет управлять композитным видеовыходом, доступным на разъеме AV, при использовании его совместно с TRRS-адаптером. Если вы хотите использовать композитный видеовыход вместо разъема HDMI, устано- вите этот переключатель в положение Enabled (Включено), в противном же случае оставьте его в положении Disabled (Отключено). Вкладка Interfaces Вкладка Interfaces (Интерфейсы) содержит настройки, изменяя которые, вы сможете управлять доступными на Raspberry Pi аппаратными интерфейсами. 248
Инструмент настройки Raspberry Pi Camera (Камера): включает или отключает последовательный интер- фейс камеры (CSI). Используется для подключения модуля камеры Rasp- berry Pi. SSH: включает/отключает интерфейс сетевого протокола Secure Shell (SSH). С помощью клиента SSH вы сможете открыть интерфейс команд- ной строки Raspberry Pi с другого компьютера, подключенного к вашей сети. VNC: включает/отключает интерфейс Virtual Network Computing (VNC). С помощью клиента VNC вы сможете просматривать рабочий стол Rasp- berry Pi с другого компьютера, подключенного к вашей сети. SPI: включает/отключает последовательный периферийный интер- фейс (SPI, Serial Peripheral Interface), используемый для управления некоторыми аппаратными средствами, которые подключены к разъ- ему GPIO. I2C: включает/отключает интерфейс последовательной шины данных Inter-Integrated Circuit (I2C), используемой для управления некоторыми аппаратными средствами, которые подключены к разъему GPIO. Serial Port (Последовательный порт): включает/отключает последова- тельный порт Raspberry Pi. Подключается к разъему GPIO. Serial Console (Консоль на последовательном порту): включает/отклю- чает консоль на последовательном порту - интерфейс командной стро- ки, доступный на последовательном порту. Эта опция доступна только в том случае, если для предыдущего параметра настроек задано значе- ние Enabled (Включено). 1-Wire: включает/отключает интерфейс 1-Wire, используемый для управ- ления некоторыми аппаратными средствами, которые подключены к разъему GPIO. Remote GPIO: включает/отключает сетевую службу, позволяющую управ- лять разъемом GPIO Raspberry Pi с другого компьютера, подключенно- го к вашей сети, с помощью модуля GPIO Zero. Больше информации об удаленном управлении интерфейсом GPIO вы сможете найти, перейдя по ссылке http://gpiozero.readthedocs.io. Вкладка Performance Вкладка Performance (Производительность) содержит настройки, управляю- щие объемом доступной для работы памяти и скоростью работы процессора Raspberry Pi. 249
Приложение Е Overclock (Разгон): позволяет выбрать из целого ряда параметров, повы- шающих производительность вашего Raspberry Pi за счет увеличения энергопотребления, выработки тепла и возможного снижения общего срока службы. Доступно не на всех моделях Raspberry Pi. GPU Memory (Пропускная способность памяти): позволяет установить необходимый объем памяти, отведенной для использования графичес- ким процессором Raspberry Pi. Если вы зададите значения, которые превысят заданные по умолчанию, то это повысит эффективность вы- полнения таких сложных задач, как SD-рендеринг и технология ис- пользования для вычислений графического ускорителя (GPGPU), за счет сокращения объема доступной Raspberry Pi OS памяти. Если же вы зада- дите значения ниже заданных по умолчанию, то это повысит произво- дительность таких задач, как интенсивное использование памяти, за счет замедления выполнения процессов SD-рендеринга, съемки на ка- меру и функций воспроизведения видео. Работа вышеперечисленных приложений в данном случае может вовсе стать недоступной. Вкладка Localisation Вкладка Localisation (Локализация) содержит настройки, отвечающие за уста- новку региона, в котором используется Raspberry Pi. Сюда также включена на- стройка раскладки клавиатуры. 250
Инструмент настройки Raspberry Pi Locale (Региональные настройки): позволяют установить ваши ре- гиональные настройки - системные параметры, которые включают в себя язык, страну и раскладку клавиатуры. Обратите внимание на то, что изменение языка распространяется только на приложения, содер- жащие другие языки интерфейса. Кроме того, некоторые приложения дополнительно требуют изменения языка интерфейса в собственных настройках. Timezone (Часовой пояс): позволяет выбрать региональный часовой пояс, выбрав город пользователя. Если ваш Raspberry Pi подключен к сети, но часы показывают неправильное время, то обычно это связано с неправильным выбором часового пояса. Keyboard (Клавиатура): позволяет выбрать тип клавиатуры, язык и рас- кладку. Если вы обнаружите, что при наборе текста на клавиатуре на экран выводятся неверные буквы или символы, вы можете исправить это в данном разделе настроек. WiFi Country (Страна (беспроводная сеть)): позволяет определить па- раметры беспроводной сети в соответствии с законодательством вы- бранной страны. Обязательно выберите именно ту страну, в которой находится ваш компьютер Raspberry Pi, поскольку при выборе другой страны подключение к близлежащим точкам доступа Wi-Fi может ока- заться невозможным. Обращаем ваше внимание на то, что это может стать нарушением закона «О средствах массовой информации». Преж- де чем воспользоваться беспроводной сетью Wi-Fi, выберите страну в данном разделе настроек. 251
Приложение F Технические характеристики Raspberry Pi Различные компоненты и функциональные возможности компьютера носят название технических характеристик. Получив информацию о техничес- ких характеристиках компьютера, вы будете способны сравнить между собой два компьютера. На первый взгляд, вам может показаться, что эти харак- теристики очень трудны для понимания, ведь описаны они техническим языком и абсолютно не нужны для простого использования Raspberry Pi. Однако для любознательных пользователей мы включили некоторые из них в это прило- жение. Система на кристалле Raspberry Pi 4 Model В - это процессор Broadcom ВСМ2711В0. Если вы присмотритесь, то сможете разглядеть эту надпись на металлической крышке. Он состоит из четырех 64-битных ядер центрального процессорного устройства (ЦПУ) ARM Cortex-A72, каждое из которых работает с частотой 1,5 ГГц (1,5 тысячи миллионов циклов в секунду), и графического про- цессора Broadcom VideoCore VI, работающего с частотой 500 МГц (500 миллио- нов циклов в секунду), для выполнения задач, связанных с обработкой видео и SD-графики (сюда относятся, например, игры). 252
Технические характеристики Raspberry Pi Система на кристалле подключается к модулям памяти 1 ГБ, 2 ГБ или 4 ГБ (одна, две или четыре тысячи миллионов байт) типа LPDDR4 (Low-Power Double- Data-Rate - маломощная, с удвоением частоты следования данных) RAM (опе- ративная память). Ее частота составляет 3200 МГц (3200 миллионов циклов в секунду). Эта память используется как центральным, так и графическим про- цессорами. Слот для карт microSD поддерживает карты емкостью до 512 ГБ (512 тысяч миллионов байт). Порт Ethernet поддерживает скорость подключения до одного гигабита (1000 Мбит/с, 1000-Base-T), в то время как стандарт беспроводной локальной сети Wi-Fi составляет 802.Нас и работает в частотном диапазоне 2,4 ГГц и 5 ГГц. Также он поддерживает стандарты Bluetooth 5.0 и Bluetooth Low Energy (Bluetooth с низким энергопотреблением) (BLE). Wi-Fi/ Система на Оператив- Разъем Разъем Порт Bluetooth кристалле нал память GPIO РоЕ Ethernet Мы составили отдельный список из ранее указанных параметров.Тем самым получили следующий набор спецификаций: процессор: 64-битный четырехъядерный ARM Cortex-A72 с частотой 1,5 ГГц; графический процессор: VideoCore VI с частотой 500 МГц; оперативная память: 1 ГБ, 2 ГБ или 4 ГБ типа LPDDR4; 253
Приложение F сеть: Gigabit Ethernet, двухдиапазонный 802.11ac, Bluetooth 5.0, Blue- tooth с низким энергопотреблением; аудио/видеовыходы: 3,5-мм аналоговый AV-разъем, 2 разъема microHDMI 2.0; периферийные устройства: 2 разъема USB 2.0,2 разъема USB 3.0, после- довательный интерфейс камеры, разъем дисплея (DSI); хранилище: карта microSD емкостью до 512 ГБ; питание: 5 В 3 А через разъем USB Туре-С; дополнения: 40-контактная колодка GPIO, поддержка передачи элект- ропитания через Ethernet (с использованием дополнительного обору- дования). 254
Приложение G Руководство по безопасности и эксплуатации Raspberry Pi 4 Model В Raspberry Pi Raspberry Pi 4 Модель В 1GB, 2GB + 4GB ВАЖНО: СОХРАНИТЕ ЭТУ ИНФОРМАЦИЮ ДЛЯ БУДУЩЕГО ИСПОЛЬЗОВАНИЯ. Внимание! Любой внешний источник питания, используемый с Raspberry Pi, должен соответствовать соответствующим нормам и стан- дартам, применяемым в стране предполагаемого использова- ния. Источник питания должен обеспечивать 5 В постоянного тока и минимальный ток 3 А. Инструкции по безопасному использованию Этот продукт не должен использоваться вопреки нормативам произво- дителя. Не подвергайте этот продукт воздействию воды или влаги и не разме- щайте его на проводящей поверхности во время работы. Не подвергайте этот продукт воздействию тепла из любого источни- ка; он предназначен для надежной работы при нормальной комнатной температуре. Эксплуатируйте этот продукт в хорошо проветриваемой среде и не на- крывайте его во время использования. Поместите этот продукт на устойчивую, плоскую, непроводящую по- верхность во время использования и не позволяйте ему контактировать с проводящими изделиями. 255
Приложение G Соблюдайте осторожность при обращении с этим продуктом, чтобы из- бежать механического или электрического повреждения печатной пла- ты и разъемов. Избегайте обращения с этим продуктом во время его питания. Исполь- зуйте только края, чтобы свести к минимуму риск повреждения элект- ростатического разряда. Любое периферийное устройство или оборудование, используемое с Raspberry Pi, должно соответствовать соответствующим стандартам для страны использования и быть соответствующим образом маркировано для обеспечения соблюдения требований безопасности и производи- тельности. Для всех сертификатов соответствия и номеров, пожалуйста, посетите сайт www.raspberrypi.org/compliance. 256
Предметный указатель А LibreOffice Impress 45 Add/Remove Software 47,228,229,230,232 Apple macOS 31,45 Astro Pi 157 LibreOffice Math 45 LibreOffice Writer 43,45 LXTerminaL 233,234 В M Bluetooth 13, 36,253,254 microSD-карта 22 MicrosoftWindows 31,45 c N Chromium 38,39,40,41,68,113,114,119 скачивание изображений 114 NOOBS 22,223,224,225, 226,232 D P Debian Linux 31,224 DisplayPort 22,27 Display Serial Interface 18 DVI-D 22,27 Python Sense HAT 165 диапазон выполнения команды 98 запуск программы 99 E игра на реакцию 152 инерциальная система отсчета 187 Ethernet-порт 15 интерфейс IDE Thonny 94 G история 95 операторы 105 GPIO 18 использование 125 описание 126 отступы 98 переменные 101 светоживопись 175 создание программы 95 H трикордер 197 управление джойстиком 195 HDMI 17,22,24,26,27,189,224,248,253,254 управление излучателем звука 146 L управление кнопкой 142 управление светодиодом 156 LibreOffice Base 45 LibreOffice Calc 45,170 LibreOffice Draw 45 условные конструкции 101 циклы 98 экологический мониторинг 181 257
Предметный указатель R Raspberry Pi 12 Ethernet-порт 15 GPIO 19 HDMI 17 microSD-карта 22 Raspberry Pi OS 51 USB 15 USB-контроллер 14 выключение 49 графический процессор 15 зарядное USB-устройство 22 интегральная схема управления питанием 14 история 10 клавиатура и мышь 22 композитный разъем 16 конфигурация 47 модуль беспроводной сети 15 модуль камеры 200 настройка 246 низкоуровневый интерфейс ввода/ вывода общего назначения 19 оперативная память 15 описание 10 периферийные устройства 20 подключение microSD-карты 25 подключение дисплея 26 подключение к источнику питания 28 подключение клавиатуры и мыши 26 подключение сетевого кабеля 28 разъем microSD-карты 19 разъем дисплея 18 разъем для модуля камеры 16 разъем для наушников 16 ресурсы в интернете 240 сборка корпуса 25 система на кристалле 15 технические характеристики 252 универсальная последовательная шина 15 центральный процессор 15 Raspberry Pi 4 5, И, 12,22,55,252,255 Raspberry Pi Foundation 51 Raspberry Pi OS Raspberry Pi Configuration 47 браузер Chromium 59 выбор языка 52 выключение 49 инструмент Recommended Software 45 меню 58 навигация 56 окно приветствия 52 офисный пакет LibreOffice 45 перезагрузка 55 подключение к сети 54,56 получение справки 45 проверка обновлений 54 просмотр доступного программного обеспечения 228 рабочий стол 56 удаление ПО 46 удаление программ 252 установка 225 установка и удаление программного обеспечения 227 установка пароля 55 установка ПО 46 установка программ 250 файловый менеджер 41 Raspberry Pi Starter Kit 21,22,25 Raspberry Pi Zero 11 S SCART 25,27 Scratch Sense HAT 161 бенгальский огонек 195 блок 52 версии 55 загрузка спрайтов 70 запуск программы 55 изменение фона 69 инерциальная система отсчета 186 258
Предметный указатель использование костюмов 78 наложение музыки 83 операторы 64 переменные 60 перетаскивание блоков 54 светоживопись 170 светофор 147 события 80 создание программы 53 сохранение программы 55 спрайт 52 сцена 52 управление джойстиком 190 управление излучателем звука 145 управление кнопкой 140 управление светодиодом 134 условные конструкции 60 циклы 58 экологический мониторинг 179 Scratch 3 51 знакомство с интерфейсом 52 Sense HAT 126,157 анимация 176 подключение 159 программирование 160 прокрутка сообщений 162 светоживопись 169 управление джойстиком 190 эмуляторы датчиков 178 Т TRRS 16,23,27,248 TTY-абстракции 239 U USB Туре-С 14,17,19,22,24,26,28,254 USB-контроллер 14 V VGA 22 W Wi-Fi 13,23,34,49,251,253 А акселерометр 159,185 Б бесконечный цикл 101 Г гироскоп 159,185,189 графический процессор 13 д датчик влажности 159,180 давления 180 измерения атмосферного давления 159 положения 159 температуры 159,181 3 запуск программ в терминале ТЫ зарядное USB-устройство 22 И игра поиск страшных отличий ИЗ ролевой лабиринт 119 синхронное плавание 76 скорость реакции космонавта 68 стрельба из лука 86 черепашьи подсолнухи 105 извлечение устройств 43 инерциальная система отсчета 185 инерциальный измерительный блок 185 пространственные оси 185 интегральная схема управления питанием 14 интернет-магазины 129 интерфейс командной строки 233,239 К кнопка 128 259
Предметный указатель комбинации клавиш 42 композитный разъем 16 крен 185 Л лаунчер 56 М магнитометр 159,185 макетная плата 127,128,150,157,159,144, 147,152 использование 157 МКС 157 модуль беспроводной сети 15 модуль камеры 201 тип 201 установка 201 мультимедийный интерфейс высокой четкости 17 Н навигация по каталогам 255 низкоуровневый интерфейс ввода/ вывода общего назначения 18 О оперативная память 15,255 офисный пакет LibreOffice 45 П переменная присвоение имени в Scratch 61 перемычки 128,150,152,155,158,159,144 тип 128 платы расширения Raspberry PI РОЕ HAT 19 последовательный интерфейс камеры 16 приглашение 254 пьезоэлектрический излучатель 129 Р работа с файлами в терминале 256 разъем GPIO 126,127,255 microSD-карты 19 дисплея 18 для модуля камеры 16 для наушников 16 резистор определение сопротивления 150 репозиторий 228 рыскание 185 С светодиод 128,152,155,155,156,157,141, 142,145,144,147,148,151,152,155, 154,155,156,169 сетевой порт 15 синтаксическая ошибка 96 система координат светодиодной матрицы 169 система на кристалле 15 Т тангаж 185 терминал запуск 254 У универсальная последовательная шина 15 устройства ввода 26,129,159 вывода 26,128 Ф физические вычисления 125,157 ц центральный процессор 15 цепь создание 152 циклы 58,65,86,100,165,169,198,252,255 бесконечные 59 260
Предметный указатель ч черепашка рисование графики в Python 108 Э эмулятор Sense HAT 158 261
Книги издательства «ДМК Пресс» можно заказать в торгово-издательском холдинге «Планета Альянс» наложенным платежом, выслав открытку или письмо по почтовому адресу: 115487, г. Москва, 2-й Нагатинский пр-д, д. 6А. При оформлении заказа следует указать адрес (полностью), по которому должны быть высланы книги; фамилию, имя и отчество получателя. Желательно также указать свой телефон и электронный адрес. Эти книги вы можете заказать и в интернет-магазине: www.a-planeta.ru. Оптовые закупки: тел. +7(499) 782-38-89. Электронный адрес: books@alians-kniga.ru. Гарет Халфакри Raspberry Pi. Официальное руководство для начинающих Главный редактор Мовчан Д. А. dmkpress@gmail.com Зам. главного редактора Перевод с английского Редактор Корректор Верстка Дизайн обложки Сенченкова Е. А. Черников С. В. Биняковский А. А. Синяева Г. И. Паранская Н. В. Мовчан А. Г. Формат 70х100716. Печать цифровая. Усл. печ. л. 21,29. Тираж 200 экз. Отпечатано в ПАО «Т8 Издательские Технологии» 109316, Москва, Волгоградский проспект, д. 42, корп. 5 Веб-сайт издательства: www.dmkpress.com