Саймон Монк
Программируем Arduino. Профессиональная работа со скетчами
Об авторе
Доктор Саймон Монк (Dr. Simon Monk; Престон, Соединенное Королевство) имеет степень бакалавра в области кибернетики и информатики, а также доктора наук в области программной инженерии. Доктор Монк несколько лет занимался академической наукой, прежде чем уйти в промышленность. Является одним из основателей компании Momote Ltd, специализирующейся на разработке программного обеспечения для мобильных устройств. Со школьных лет активно увлекается электроникой и много пишет для радиолюбительских журналов об электронике и открытом аппаратном обеспечении. Автор многочисленных книг по электронике, посвященных в основном открытым аппаратным платформам, особенно Arduino и Raspberry Pi. В соавторстве с Полом Шерцем написал третье издание книги «Practical Electronics for Inventors».
Вы можете последовать за Саймоном в Twitter, где он зарегистрирован как @simonmonk2.
Благодарности
Хочу выразить большую признательность издательству McGraw-Hill Education, сотрудники которого приложили массу усилий, чтобы выпустить эту книгу. Отдельное спасибо моему редактору Роджеру Стюарту (Roger Stewart), а также Ваставикте Шарма (Vastavikta Sharma), Джоди Маккензи (Jody McKenzie), Ли-Энн Пикрелл (LeeAnn Pickrell) и Клер Сплан (Claire Splan).
Хочу также поблагодарить компании Adafruit, SparkFun и CPC за предоставленные модули и компоненты, использовавшиеся при подготовке этой книги.
И напоследок, но не в последнюю очередь, спасибо Линде за ее терпение и великодушие, благодаря которым я смог написать эту книгу.
Введение
Arduino — стандартный микроконтроллер, получивший широкое признание у инженеров, мастеров и преподавателей благодаря своей простоте, невысокой стоимости и большому разнообразию плат расширения. Платы расширения, подключаемые к основной плате Arduino, позволяют выходить в Интернет, управлять роботами и домашней автоматикой.
Простые проекты на основе Arduino не вызывают сложностей в реализации. Но, вступив на территорию, не охваченную вводными руководствами, и увеличивая сложность проектов, вы быстро столкнетесь с проблемой нехватки знаний — врагом всех программистов.
Эта книга задумана как продолжение бестселлера «Programming Arduino: Getting Started with Sketches»[1]. Несмотря на то что эта книга включает краткое повторение основ из книги «Programming Arduino», она познакомит читателя с более продвинутыми аспектами программирования плат Arduino. В частности, эта книга расскажет, как:
• обеспечить эффективную работу при минимальном объеме доступной памяти;
• решать сразу несколько задач без помощи механизмов многопоточного выполнения;
• упаковывать код в библиотеки, чтобы им могли пользоваться другие;
• использовать аппаратные прерывания и прерывания от таймера;
• добиться максимальной производительности;
• уменьшить потребление электроэнергии;
• взаимодействовать с последовательными шинами разных типов (I2C, 1-Wire, SPI и последовательный порт);
• взаимодействовать с портом USB;
• взаимодействовать с сетью;
• выполнять цифровую обработку сигналов (Digital Signal Processing, DSP).
Загружаемые примеры
Книга включает 75 примеров скетчей, которые распространяются в открытом виде и доступны на веб-сайте автора www.simonmonk.org. Перейдя по ссылке на страницу этой книги, вы сможете загрузить исходный код примеров, а также самый актуальный список ошибок и опечаток, найденных в книге.
Что необходимо для чтения книги
Данная книга в первую очередь посвящена вопросам программирования. Поэтому для опробования большинства примеров будет достаточно платы Arduino, светодиода и мультиметра. Если у вас имеются дополнительные платы расширения Arduino, они тоже пригодятся. Для рассмотрения примеров из главы 12 вам понадобится плата Ethernet или Wi-Fi. На протяжении всей книги мы будем использовать разные модули для демонстрации разных интерфейсов.
В центре внимания находится Arduino Uno — наиболее широко используемая плата Arduino, но в главах, посвященных программированию порта USB и цифровой обработке сигналов, рассматриваются некоторые особенности других плат Arduino, таких как Leonardo и Arduino Due.
В приложении в конце книги вы найдете список поставщиков, у которых сможете приобрести все эти компоненты.
Как работать с этой книгой
Каждая глава посвящена отдельной теме, связанной с программированием Arduino. Главы книги, кроме главы 1, где приводится краткий обзор основ Arduino, можно читать в любом порядке. Если вы опытный разработчик, начните с главы 14, чтобы вникнуть в некоторые особенности программирования Arduino.
Далее следует краткое описание глав.
Глава 1 «Программирование Arduino». Эта глава содержит сводную информацию о программировании Arduino. Это учебник для тех, кому требуется быстро ознакомиться с основами Arduino.
Глава 2 «Под капотом». В этой главе мы заглянем под капот и посмотрим, как работают программы для Arduino и откуда они берутся.
Глава 3 «Прерывания и таймеры». Новички обычно стараются не использовать прерывания, и совершенно напрасно, так как часто они оказываются удобным инструментом и их программирование не представляет никаких сложностей. Однако прерывания имеют свои ловушки, и эта глава расскажет вам все, что вы должны знать, чтобы не попасть в них.
Глава 4 «Ускорение Arduino». Платы Arduino оснащены маломощными процессорами с невысоким быстродействием, поэтому иногда требуется выжать из них все, что только можно. Например, встроенная функция digitalWrite надежна и проста в использовании, но неэффективна, что особенно заметно, когда требуется одновременно включить несколько выходов. В этой главе вы узнаете, как увеличить ее производительность, а также познакомитесь с другими приемами создания быстродействующих скетчей.
Глава 5 «Снижение потребления электроэнергии». Когда для питания платы Arduino используются аккумуляторы или солнечные батареи, желательно уменьшить потребление электроэнергии. Этого можно добиться не только оптимизацией конструкции устройства, но и применением особых приемов программирования.
Глава 6 «Память». В этой главе мы посмотрим, как уменьшить потребление памяти, а также познакомимся с достоинствами и недостатками, связанными с динамическим распределением памяти в скетчах.
Глава 7 «Интерфейс I2C». Интерфейс I2C на плате Arduino может существенно упростить взаимодействие с модулями и компонентами и позволит обойтись меньшим числом контактов на плате. Эта глава описывает, как действует интерфейс I2C и как им пользоваться.
Глава 8 «Взаимодействие с устройствами 1-Wire». В этой главе рассказывается о шине 1-Wire для связи с устройствами, такими как датчики температуры компании Dallas Semiconductor, которые часто применяются с платами Arduino. Здесь вы узнаете,