The words you are searching are inside this book. To get more targeted content, please make full-text search by clicking here.

Рассмотрены основные платы Arduino и платы расширения (шилды), добавляющие функциональность основной плате. Подробно описан язык и среда программирования Arduino IDE. Приведены практические проекты с использованием контроллеров семейства Arduino
в области робототехники, погодных метеостанций, "умного дома", вендинга, телевидения, , беспроводной связи (bluetooth, радиоуправление, связь с устройствами Android) и др. Все проекты сопровождаются схемами и листингами. На сайте издательства размещен архив с исходными кодами программ и библиотек, описаниями и спецификациями электронных компонентов.

Discover the best professional documents and content resources in AnyFlip Document Base.
Search
Published by BHV.RU Publishing House, 2021-01-16 08:39:40

Проекты с использованием контроллера Arduino, 4 изд.

Рассмотрены основные платы Arduino и платы расширения (шилды), добавляющие функциональность основной плате. Подробно описан язык и среда программирования Arduino IDE. Приведены практические проекты с использованием контроллеров семейства Arduino
в области робототехники, погодных метеостанций, "умного дома", вендинга, телевидения, , беспроводной связи (bluetooth, радиоуправление, связь с устройствами Android) и др. Все проекты сопровождаются схемами и листингами. На сайте издательства размещен архив с исходными кодами программ и библиотек, описаниями и спецификациями электронных компонентов.

Keywords: Arduino

Виктор Петин

4-е издание

Санкт-Петербург
«БХВ-Петербург»

2021

УДК 004
ББК 32.973.26

П29

Петин В. А.
П29 Проекты с использованием контроллера Arduino. — 4-е изд., перераб.

и доп. — СПб.: БХВ-Петербург, 2021. — 560 с.: ил. — (Электроника)

ISBN 978-5-9775-6711-4

Рассмотрены основные платы Arduino и платы расширения (шилды), добав-
ляющие функциональность основной плате. Подробно описан язык и среда про-
граммирования Arduino IDE. Приведены практические проекты с использованием
контроллеров семейства Arduino в области робототехники, погодных метеостан-
ций, "умного дома", вендинга, телевидения, беспроводной связи (bluetooth, радио-
управление, связь с устройствами Android) и др. Все проекты сопровождаются
схемами и листингами. На сайте издательства размещен архив с исходными ко-
дами программ и библиотек, описаниями и спецификациями электронных компо-
нентов.

В четвертом издании рассмотрены новые платы Arduino MKR и Nano 33, новые
платы расширения, светодиодные матрицы, протокол MQTT, RFID-идентифика-
ция, GPS-трекер, Яндекс.Карты и проекты в области нейронных сетей.

Для читателей, интересующихся современной электроникой

УДК 004
ББК 32.973.26

Группа подготовки издания:

Руководитель проекта Евгений Рыбаков
Зав. редакцией Екатерина Сависте
Компьютерная верстка Ольги Сергиенко
Дизайн обложки Марины Дамбиевой
Оформление обложки Карины Соловьевой

"БХВ-Петербург", 191036, Санкт-Петербург, Гончарная ул., 20.

ISBN 978-5-9775-6711-4 © ООО "БХВ", 2021
© Оформление. ООО "БХВ-Петербург", 2021

Оглавление

Предисловие ................................................................................................................... 13

Для кого и о чем эта книга? ..........................................................................................................13
Структура книги.............................................................................................................................13
Благодарности ................................................................................................................................14

ЧАСТЬ I. ARDUINO — ОБЩИЙ ОБЗОР................................................................. 15

Глава 1. Введение в Arduino ....................................................................................... 17

1.1. Arduino — что это?.................................................................................................................17
1.2. В чем преимущество Arduino? ..............................................................................................18
1.3. Новые тенденции и перспективы развития Arduino ............................................................18

Глава 2. Платы семейства Arduino и платы расширения для них ..................... 20

2.1. Обзор плат семейства Arduino...............................................................................................20
2.2. Arduino Uno .....................................................................................................................21
2.3. Arduino Nano....................................................................................................................22
2.4. Arduino Pro Mini ..............................................................................................................23
2.5. Arduino LilyPad................................................................................................................24
2.6. Arduino Mega2560 ...........................................................................................................25
2.7. Arduino Leonardo .............................................................................................................26
2.8. Arduino Due......................................................................................................................27
2.9. Arduino Yún......................................................................................................................28
2.10. Arduino MKR WiFi 1010 ...............................................................................................29
2.11. Arduino Nano 33.............................................................................................................30
2.12. Платы расширения для Arduino ...................................................................................31

ЧАСТЬ II. СРЕДЫ РАЗРАБОТКИ И ЯЗЫК ПРОГРАММИРОВАНИЯ
ПЛАТ ARDUINO ........................................................................................................... 33

Глава 3. Среда разработки Arduino IDE................................................................... 35

3.1. Установка Arduino IDE в Windows........................................................................................35
3.2. Установка Arduino IDE в Linux .............................................................................................36
3.3. Настройка среды Arduino IDE ...............................................................................................37

4 Оглавление

Глава 4. Облачная среда разработки Arduino Create ............................................ 41

4.1. Начало работы в среде Arduino Create..................................................................................41
4.2. Загрузка и выполнение пробного скетча ..............................................................................43

Глава 5. Программирование плат Arduino .............................................................. 45

5.1. Базовые знания........................................................................................................................45
5.1.1. Цифровые выводы........................................................................................................45
5.1.2. Аналоговые входы .......................................................................................................46
5.1.3. Широтно-импульсная модуляция ...............................................................................46
5.1.4. Память в Arduino..........................................................................................................46

5.2. Структура программы ............................................................................................................48
5.2.1. Функции setup() и loop()...............................................................................................48

5.3. Синтаксис и операторы ..........................................................................................................49
5.3.1. Управляющие операторы.............................................................................................49
5.3.1.1. Оператор if (условие) и операторы сравнения ==, !=, < , > .......................49
5.3.1.2. Оператор if...else ..........................................................................................49
5.3.1.3. Оператор for.....................................................................................................50
5.3.1.4. Оператор switch ...............................................................................................51
5.3.1.5. Оператор while.................................................................................................51
5.3.1.6. Оператор do...while..........................................................................................52
5.3.1.7. Оператор break ................................................................................................52
5.3.1.8. Оператор continue ...........................................................................................52
5.3.1.9. Оператор return ...............................................................................................53
5.3.2. Синтаксис......................................................................................................................53
5.3.2.1. ; (semicolon, точка с запятой) .........................................................................53
5.3.2.2. {} (curly braces, фигурные скобки) .................................................................53
5.3.2.3. Комментарии: // (single line comment, однострочный),
/* */ (multi-line comment, многострочный) .................................................................54
5.3.3. Арифметические операторы........................................................................................54
5.3.3.1. = (assignment, оператор присваивания).........................................................54
5.3.3.2. + (cложение), – (вычитание), * (умножение), / (деление) ...........................55
5.3.3.3. % (modulo) .......................................................................................................55
5.3.4. Операторы сравнения...................................................................................................55
5.3.5. Логические операторы .................................................................................................55
5.3.5.1. && (логическое И) ..........................................................................................55
5.3.5.2. || (логическое ИЛИ) ........................................................................................55
5.3.5.3. ! (логическое отрицание)................................................................................56
5.3.6. Унарные операторы....................................................................................................56
5.3.6.1. ++ (увеличение значения), / – – (уменьшение значения) ............................56
5.3.6.2. += , -= , *= , /=................................................................................................56

5.4. Данные.....................................................................................................................................56
5.4.1. Типы данных.................................................................................................................56
5.4.1.1. boolean..............................................................................................................56
5.4.1.2. char ...................................................................................................................57
5.4.1.3. byte....................................................................................................................57
5.4.1.4. int ......................................................................................................................57
5.4.1.5. unsigned int.......................................................................................................58
5.4.1.6. long ...................................................................................................................58

Оглавление 5

5.4.1.7. unsigned long....................................................................................................58
5.4.1.8. float ...................................................................................................................59
5.4.1.9. double................................................................................................................59
5.4.1.10. string — текстовые строки............................................................................59
5.4.1.11. Массивы .........................................................................................................60
5.4.1.12. void..................................................................................................................61
5.4.2. Константы .....................................................................................................................61
5.4.3. Переменные ..................................................................................................................62
5.4.3.1. Объявление переменных ................................................................................62
5.4.3.2. Границы переменных......................................................................................62
5.4.4. Преобразование типов данных....................................................................................63
5.4.4.1. char().................................................................................................................63
5.4.4.2. byte() .................................................................................................................63
5.4.4.3. int()....................................................................................................................63
5.4.4.4. long().................................................................................................................63
5.4.4.5. float().................................................................................................................63
5.5. Функции...................................................................................................................................64
5.5.1. Цифровой ввод/вывод ..................................................................................................64
5.5.1.1. Функция pinMode ............................................................................................64
5.5.1.2. Функция digitalWrite().....................................................................................64
5.5.1.3. Функция digitalRead() .....................................................................................65
5.5.2. Аналоговый ввод/вывод...............................................................................................66
5.5.2.1. Функция analogRead() ....................................................................................66
5.5.2.2. Функция analogReference().............................................................................67
5.5.2.3. Функция analogWrite() ....................................................................................67
5.5.3. Дополнительные фунции ввода/вывода .....................................................................68
5.5.3.1. Функция tone().................................................................................................68
5.5.3.2. Функция noTone()............................................................................................69
5.5.3.3. Функция shiftOut() ...........................................................................................69
5.5.3.4. Функция pulseIn() ............................................................................................71
5.5.4. Работа со временем ......................................................................................................72
5.5.4.1. Функция millis() ...............................................................................................72
5.5.4.2. Функция micros() .............................................................................................72
5.5.4.3. Функция delay() ...............................................................................................73
5.5.4.4. Функция delayMicroseconds().........................................................................74
5.5.5. Математические функции............................................................................................74
5.5.5.1. Функция min(x,yx)............................................................................................75
5.5.5.2. Функция max(x, y)............................................................................................75
5.5.5.3. Функция abs() ..................................................................................................75
5.5.5.4. Функция constrain(x, a, b) ...............................................................................76
5.5.5.5. Функция map(value, fromLow, fromHigh, toLow, toHigh)..............................76
5.5.5.6. Функция pow(base, exponent) .........................................................................77
5.5.5.7. Функция sq(x) ..................................................................................................77
5.5.5.8. Функция sqrt(x)................................................................................................77
5.5.6. Тригонометрические функции ....................................................................................77
5.5.6.1. Функция sin(rad)..............................................................................................78
5.5.6.2. Функция cos(rad) .............................................................................................78
5.5.6.3. Функция tan(rad) .............................................................................................78

6 Оглавление

5.5.7. Генераторы случайных значений ................................................................................78
5.5.7.1. Функция randomSeed(seed).............................................................................78
5.5.7.2. Функция random() ...........................................................................................78

5.5.8. Операции с битами и байтами.....................................................................................79
5.5.8.1. Функция lowByte() ...........................................................................................79
5.5.8.2. Функция highByte()..........................................................................................80
5.5.8.3. Функция bitRead() ...........................................................................................80
5.5.8.4. Функция bitWrite()...........................................................................................80
5.5.8.5. Функция bitSet()...............................................................................................80
5.5.8.6. Функция bitClear()...........................................................................................81
5.5.8.7. Функция bit()....................................................................................................81

5.5.9. Внешние прерывания ...................................................................................................81
5.5.9.1. Функция attachInterrupt ..................................................................................81
5.5.9.2. Функция detachInterrupt .................................................................................82

5.6. Управление портами через регистры ATmega .....................................................................83

ЧАСТЬ III. ПРАКТИЧЕСКОЕ ПРИМЕНЕНИЕ ARDUINO ................................ 85

Глава 6. Проекты для изучения выводов Arduino ................................................. 87

6.1. Цифровые выводы — «бегущий огонь» на светодиодах.....................................................87
6.1.1. Подключение светодиода к выводу Arduino ..............................................................88
6.1.2. Подключение к плате Arduino 8 светодиодов............................................................92

6.2. Цифровые входы — управляем светодиодами с помощью кнопок ...................................97
6.2.1. Подключение кнопки к плате Arduino........................................................................97
6.2.2. Управление кнопками количеством горящих светодиодов ....................................104

6.3. Аналоговые входы — светодиодный индикатор аналоговых значений ..........................107
6.3.1. Подключение потенциометра к плате Arduino ........................................................109
6.3.2. Вывод показаний потенциометра на светодиодную шкалу....................................112

6.4. ШИМ — радуга на RGB-светодиоде ..................................................................................114
6.4.1. Подключение к плате Arduino RGB-светодиода......................................................115

6.5. Светодиодные индикаторы ..................................................................................................118
6.5.1. Подключение к плате Arduino семисегментного индикатора ................................118

6.6. Расширение цифровых выходов — микросхема 74HC595 ...............................................122
6.6.1. Подключение к плате Arduino сдвигового регистра 74HC595 ...............................123

6.7. Расширение цифровых входов и выходов — микросхема MCP23017 ............................128
6.8. Расширение аналоговых входов — мультиплексор CD4051 ............................................129

Глава 7. Использование библиотек в проектах Arduino ..................................... 132

7.1. Установка библиотек............................................................................................................132
7.1.1. Установка библиотеки через Менеджер библиотек ................................................133
7.1.2. Установка библиотеки из ZIP-архива .......................................................................133
7.1.3. Установка библиотеки вручную................................................................................135

7.2. Подключение библиотеки....................................................................................................135
7.3. Создание собственной библиотеки .....................................................................................136

7.3.1. Создание заголовочного файла D5651.h ..................................................................136
7.3.2. Создание файла реализации D5651.cpp....................................................................137
7.3.3. Создание файла keywords.txt......................................................................................138

Оглавление 7

Глава 8. Arduino и последовательный порт UART .............................................. 140

8.1. Библиотека Serial ..................................................................................................................140
8.1.1. Функция Serial.begin ..................................................................................................140
8.1.2. Функция Serial.print ...................................................................................................141
8.1.3. Функция Serial.println ................................................................................................141
8.1.4. Функция Serial.write ...................................................................................................141
8.1.5. Функция Serial.available ............................................................................................142
8.1.6. Функция Serial.read....................................................................................................142

8.2. Использование UART для отладки программ....................................................................142
8.2.1. Подключение к плате Arduino нескольких кнопок..................................................142

8.3. Использование UART для установки параметров .............................................................145
8.4. Библиотека SoftwareSerial....................................................................................................149
8.5. Соединение по UART двух плат Arduino ...........................................................................150

Глава 9. Подключение датчиков к плате Arduino................................................ 153

9.1. Подключение аналоговых датчиков....................................................................................153
9.1.1. Подключение к плате Arduino аналогового датчика температуры LM335 ...........154

9.2. Подключение датчиков по протоколу 1-Wire ....................................................................156
9.2.1. Подключение к плате Arduino цифрового датчика температуры DS18B20..........157

9.3. Подключение датчиков влажности и температуры DHT ..................................................163
9.4. Подключение датчиков по протоколу I2C ..........................................................................167

9.4.1. Подключение к плате Arduino датчика интенсивности света BH1750 ..................169

Глава 10. Использование дисплеев в проектах Arduino...................................... 173

10.1. Символьные дисплеи на микроконтроллере HD44780....................................................173
10.1.1. Функция begin() ......................................................................................................176
10.1.2. Функция clear() .......................................................................................................176
10.1.3. Функция home() ......................................................................................................177
10.1.4. Функция setCursor()................................................................................................177
10.1.5. Функция write() .......................................................................................................177
10.1.6. Функция print() .......................................................................................................177
10.1.7. Функция cursor().....................................................................................................178
10.1.8. Функция noCursor()................................................................................................178
10.1.9. Функция blink() .......................................................................................................178
10.1.10. Функция noBlink().................................................................................................178
10.1.11. Функция display()..................................................................................................179
10.1.12. Функция noDisplay().............................................................................................179
10.1.13. Функция scrollDisplayLeft()..................................................................................179
10.1.14. Функция scrollDisplayRight() ...............................................................................179
10.1.15. Функция autoscroll() .............................................................................................179
10.1.16. Функция noAutoscroll().........................................................................................180
10.1.17. Функция leftToRight() ...........................................................................................180
10.1.18. Функция rightToLeft() ...........................................................................................180
10.1.19. Функция createChar() ...........................................................................................180

10.2. Подключение дисплеев на контроллере HD44780 по протоколу I2C.............................181
10.2.1. Вывод на ЖК-дисплей данных с датчика, работающего по протоколу I2C..........183

10.3. Графический дисплей Nokia ..............................................................................................186
10.4. OLED-дисплеи ....................................................................................................................192

10.4.1. Электронные часы на OLED-дисплее...................................................................193

8 Оглавление

10.5. Дисплеи Nextion..................................................................................................................197
10.5.1. Создание нового проекта для дисплея Nextion ....................................................198
10.5.2. Прошивка дисплея через UART............................................................................202
10.5.3. Прошивка дисплея с помощью карты microSD ...................................................203
10.5.4. Подключение дисплея Nextion к плате Arduino...................................................203

10.6. Светодиодные матрицы .....................................................................................................207
10.6.1. Четырехразрядная светодиодная матрица............................................................207
10.6.2. Вывод на четырехразрядную светодиодную матрицу спрайтов и символов .......210
10.6.3. Бегущая строка на четырехразрядной светодиодной матрице ...........................213
10.6.4. Русификация «бегущей строки» на четырехразрядной
светодиодной матрице .......................................................................................................215
10.6.5. Матрица 16×16 на светодиодах WS2812..............................................................218
10.6.6. Arduino-библиотека Adafruit Neopixel ..................................................................220
10.6.7. Графический аудиоспектроанализатор на матрице 16×16
светодиодов WS2812..........................................................................................................221

Глава 11. Подключение к Arduino исполнительных устройств ........................ 225

11.1. Подключение к плате Arduino электромагнитного или твердотельного реле...............225
11.2. Подключение к плате Arduino электродвигателя постоянного тока ..............................229

11.2.1. Управление двигателем с помощью транзистора................................................229
11.3. Управление двигателями с помощью драйвера ...............................................................231
11.4. Подключение к плате Arduino сервопривода ...................................................................234

11.4.1. Использование сервопривода в проекте звуковой сигнализации.......................237
11.5. Подключение к плате Arduino шагового двигателя.........................................................239

11.5.1. Управление дроблением шага и направлением вращения
шагового двигателя с платы Arduino ................................................................................242
11.6. Подключение к плате Arduino бесколлекторного двигателя ..........................................245

Глава 12. Arduino и беспроводная связь................................................................. 248

12.1. ИК-управление....................................................................................................................248
12.1.1. Управление сервоприводом с помощью ИК-связи..............................................251

12.2. Радиомодули для частоты 433 МГц ..................................................................................254
12.2.1. Управление светодиодом платы Arduino с другой такой же платы
по радиоканалу 433 МГц ...................................................................................................254

12.3. Радиомодули NRF24L01 ....................................................................................................257
12.3.1. Организация связи между двумя платами Arduino с использованием
модулей NRF24L01 ............................................................................................................259

12.4. Использование Arduino c аппаратурой радиоуправления ...............................................264
12.4.1. Принципы формирования радиосигнала ..............................................................266
12.4.2. Организация связи приемника с передатчиком ...................................................267
12.4.3. Разработка скетча для приема платой Arduino команд передатчика .................268

12.5. Arduino и Bluetooth .............................................................................................................271

Глава 13. Arduino и Интернет вещей ...................................................................... 279

13.1. Подключение к Интернету с помощью платы расширения Ethernet shield ...................279
13.1.1. Получение IP-адреса по DHCP..............................................................................280
13.1.2. Отправка данных на сайт «Народный мониторинг» через Ethernet shield.........282

13.2. Подключение к Интернету с помощью платы расширения GSM/GPRS shield.............289
13.2.1. Отправка и получение SMS-сообщений с помощью GSM/GPRS shield............291
13.2.2. Отправка данных на сайт «Народный мониторинг» через GSM/GPRS shield......295

Оглавление 9

13.3. Протокол MQTT .................................................................................................................299
13.3.1. Отправка данных по протоколу MQTT ................................................................300
13.3.2. Получение данных по протоколу MQTT..............................................................304
13.3.3. Android-приложение IoT MQTT Dashboard .........................................................307

13.4. Плата Arduino MKR WiFi 1010 для проектов IoT............................................................308
13.5. Отправка данных в облако Arduino IoT Cloud и получение их оттуда ..........................312

Глава 14. RFID-идентификация ............................................................................... 318

14.1. Считыватель RFID RC522..................................................................................................318
14.2. Организация контроля доступа по RFID-меткам.............................................................321
14.3. Запись информации на RFID-метку ..................................................................................323
14.4. Проект «Говорящая фотография» .....................................................................................330

Глава 15. Специальные возможности отдельных плат Arduino........................ 334

15.1. Использование Arduino Leonardo в качестве USB-устройства .......................................334
15.1.1. Arduino Leonardo: имитация клавиатуры .............................................................335
15.1.2. Блокируем клавиатуру с наступлением темноты.................................................337
15.1.3. Arduino Leonardo: имитация компьютерной мыши.............................................337

15.2. Плата Arduino Esplora.........................................................................................................340
15.2.1. Arduino Esplora: установка цветов RGB-светодиода...........................................343
15.2.2. Arduino Esplora: создание игры.............................................................................344

15.3. Плата Arduino LilyPad ........................................................................................................362
15.4. Плата Arduino Yún ..............................................................................................................367

15.4.1. Плата расширения Arduino Yún shield..................................................................367
15.4.2. Arduino Yún shield: управляем веб-камерой.........................................................369

Глава 16. Взаимодействие Arduino c другими программируемыми
системами...................................................................................................................... 372

16.1. Использование Arduino в проектах LEGO........................................................................372
16.1.1. Получение микрокомпьютером LEGO данных с датчика влажности
и температуры DHT11, подключенного к плате Arduino................................................373

16.2. Arduino в проектах ROS .....................................................................................................376
16.2.1. Установка ROS .......................................................................................................377
16.2.2. Узлы и темы в ROS ................................................................................................377
16.2.3. Пакет rosserial.........................................................................................................378
16.2.4. Подготовка сообщения (publisher) на Arduino .....................................................379
16.2.5. Создание подписки (subscriber) на Arduino..........................................................383
16.2.6. Связь через ROS двух плат Arduino......................................................................385

16.3. Arduino и Raspberry pi ........................................................................................................386
16.3.1. Установка WebIOPi на Raspberry Pi......................................................................387
16.3.2. Обмен данными по последовательному порту ....................................................389
16.3.3. Управление движущейся платформой на базе Arduino
по web-интерфейсу Raspberry Pi .......................................................................................390

Глава 17. Программирование в среде Arduino IDE других плат....................... 398

17.1. ESP8266 — микроконтроллер с интерфейсом Wi-Fi.......................................................398
17.1.1. Установка Arduino IDE для работы с ESP8266....................................................399
17.1.2. Печать курса валют на термопринтере в проекте Интернета вещей .................402

10 Оглавление

17.2. Z-Uno — плата для прототипирования устройств Z-Wave .............................................409
17.2.1. Установка Arduino IDE для Z-Uno ........................................................................411
17.2.2. Подключение к плате Z-Uno датчика влажности DHT11 ...................................414

ЧАСТЬ IV. ИНТЕРЕСНЫЕ ПРОЕКТЫ НА ARDUINO ..................................... 417

Глава 18. Умная теплица........................................................................................... 419

18.1. Мониторинг климатических параметров умной теплицы...............................................420
18.2. Индикация показаний умной теплицы..............................................................................425
18.3. Организация полива, обдува и освещения в умной теплице...........................................431
18.4. Переносим функции мониторинга и управления теплицей на устройство

с ОС Android........................................................................................................................440
18.5. Создаем собственное мобильное приложение для управления умной теплицей..........447
18.6. Превращаем нашу умную теплицу в объект Интернета вещей ......................................451

Глава 19. GPS-трекер и онлайн-сервис поиска стоянок ..................................... 461

19.1. Подключение GPS-модуля к плате Arduino .....................................................................461
19.2. Отправка данных по GPRS на сервер ...............................................................................464
19.3. Создание веб-страницы с использованием API Яндекс.Карт .........................................472

Глава 20. Проекты для вендинга: купюроприемник, монетоприемник,
разменный автомат..................................................................................................... 476

20.1. Купюроприемник ICT серий A7 и V7...............................................................................476
20.1.1. Подключение купюроприемника ICT V7 к плате Arduino..................................480
20.1.2. Скетч для получения номинала принимаемой купюры ......................................482

20.2. Монетоприемник CH-926 ..................................................................................................483
20.2.1. Настройка монетоприемника ................................................................................484
20.2.2. Калибровка монетоприемника ..............................................................................485

20.3. Разменный автомат (хоппер) Cube Hopper MK II............................................................485
20.3.1. Подключение хоппера к плате Arduino ................................................................487
20.3.2. Программирование хоппера ..................................................................................487

Глава 21. Создание управляющей платы для автомойки
самообслуживания ...................................................................................................... 492

21.1. Блок приема денежных средств и блок индикации .........................................................492
21.2. Выбор программ работы мойки ........................................................................................496
21.3. Отсчет времени выполнения программы. Реализация паузы .........................................499
21.4. Режим администратора. Установка параметров ..............................................................501

Глава 22. Arduino и интерфейс USB: управление роботами............................... 503

22.1. Интерфейс USB...................................................................................................................503
22.2. Плата расширения USB Host Shield ..................................................................................504
22.3. HID-устройства USB ..........................................................................................................505
22.4. Подключение HID-мыши USB ..........................................................................................508
22.5. Управление роботом с помощью руля Defender..............................................................508
22.6. Управление роботом с помощью геймпада Defender ......................................................518

Оглавление 11

Глава 23. Камера Pixy: реализация компьютерного зрения .............................. 525

23.1. Настройка камеры ..............................................................................................................526
23.2. Подключение камеры Pixy к плате Arduino .....................................................................527
23.3. Организация слежения камерой за объектом...................................................................529

Глава 24. Проекты на плате Nano 33 BLE Sense ................................................... 532

24.1. Начало работы с платой Nano 33 BLE Sense....................................................................533
24.2. Bluetooth Low Energy (BLE)...............................................................................................536
24.3. Отправка данных c датчиков платы Nano 33 BLE Sense по BLE ...................................537
24.4. БиблиотекаTensorFlow Lite................................................................................................540
24.5. Пример создания классификатора объектов с обучением ..............................................541

24.5.1. Сбор данных............................................................................................................542
24.5.2. Обучение модели....................................................................................................544
24.5.3. Скетч классификатора для запуска нейронной сети на плате
Nano 33 BLE Sense .............................................................................................................549

ПРИЛОЖЕНИЯ .......................................................................................................... 553
Приложение 1. Перечень использованных источников ...................................... 555
Приложение 2. Описание электронного архива.................................................... 556
Предметный указатель .............................................................................................. 557

Предисловие

Для кого и о чем эта книга?

Книга ориентирована на читателей, желающих быстро освоить темы программиро-
вания плат Arduino и использования их для связи с внешними системами в проек-
тах автоматизации и робототехники.
В книге содержится описание языка программирования плат Arduino в среде
Arduino IDE и предлагается изучение основ работы с платами Arduino на множест-
ве реальных примеров и проектов их использования, имеющих практическое зна-
чение и представляющих собой законченные решения, пригодные для включения
в ваши конструкции. Все проекты содержат электрические и (или) монтажные схе-
мы соединений и листинги соответствующих программ.
Все задействованные в проектах книги детали и компоненты нетрудно приобрести
в специализированных магазинах, кроме того, для удобства читателей на сайте из-
дательства «БХВ-Петербург» (https://bhv.ru/product-category/nabory-dlya-mejkerov/)
предлагаются наборы деталей и компонентов, с помощью которых вы сможете
быстро адаптироваться в мире Arduino и получить удовольствие, видя, как ожива-
ют ваши творения!
Книга сопровождается электронным архивом, содержащим исходный код всех рас-
смотренных примеров и проектов, используемые в проектах необходимые библио-
теки, а также техническую документацию на задействованные в проектах устройства
и датчики (см. приложение 2). Этот электронный архив можно скачать с FTP-
сервера издательства «БХВ-Петербург» по ссылке ftp://ftp.bhv.ru/9785977567114.zip,
а также со страницы книги на сайте www.bhv.ru.

Структура книги

Книга состоит из четырех частей и включает предисловие, двадцать четыре главы
и два приложения.

Часть I содержит описание платформы Arduino, обзор плат семейства Arduino
и плат расширения для Arduino.

14 Предисловие

В части II книги рассмотрены среда разработки Arduino IDE, новая облачная
среда разработки Arduino Create и язык программирования для плат Arduino.
Часть III посвящена изучению возможностей платы Arduino, использованию
в связке с ней датчиков, дисплеев, исполнительных устройств, организации бес-
проводного соединения плат Arduino, созданию устройств Интернета вещей.
Рассмотрено также взаимодействие Arduino с другими системами и программи-
рование в среде Arduino IDE других плат.
Часть IV посвящена созданию конкретных устройств на основе платы Arduino.
В приложениях приведены перечень использованных источников и описание
электронного архива, сопровождающего книгу.

Благодарности

Хочу поблагодарить родных и близких, которые с пониманием относились к потра-
ченному на книгу (за счет общения с ними) времени. Особая благодарность Богаче-
вой Марине Николаевне за поддержку и понимание.

Большая благодарность издательству «БХВ-Петербург», где поверили в необходи-
мость этой книги, и всем сотрудникам издательства, которые помогали мне в ее
создании.

Благодарю также всех читателей, купивших эту книгу, — надеюсь, она поможет
вам в разработке собственных проектов на основе Arduino.

ЧАСТЬ I

Arduino — общий обзор

Глава 1. Введение в Arduino
Глава 2. Платы семейства Arduino и платы расширения для них



ГЛАВА 1

Введение в Arduino

1.1. Arduino — что это?

Появление первых микроконтроллеров ознаменовало начало новой эры в развитии
микропроцессорной техники. Сосредоточение в одном корпусе большинства сис-
темных устройств сделало микроконтроллер подобным обычному компьютеру.
В отечественной литературе они даже назывались однокристальными микроЭВМ.
Соответственно и желание использовать микроконтроллеры как обычные компью-
теры возникло практически одновременно с их появлением. Но желание это сдер-
живалось многими факторами. Например, чтобы собрать устройство на микрокон-
троллере, необходимо знать основы схемотехники, устройство и работу конкретно-
го процессора, уметь программировать на ассемблере и изготавливать электронную
технику. Потребуются также программаторы, отладчики и другие вспомогательные
устройства. В итоге без огромного объема знаний и дорогостоящего оборудования
не обойтись. Такая ситуация долго не позволяла многим любителям использовать
микроконтроллеры в своих проектах. Сейчас, с появлением устройств, дающих
возможность работать с микроконтроллерами без наличия серьезной материальной
базы и знания многих предметов, все изменилось. Примером такого устройства
может служить проект Arduino итальянских разработчиков.
Arduino и его клоны представляют собой наборы, состоящие из готового электрон-
ного блока и программного обеспечения. Электронный блок здесь — это печатная
плата с установленным микроконтроллером и минимумом элементов, необходимых
для его работы. Фактически электронный блок Arduino является аналогом материн-
ской платы современного компьютера — на нем имеются разъемы для подключе-
ния внешних устройств, а также разъем для связи с компьютером, по которому и
осуществляется программирование микроконтроллера. Особенности используемых
микроконтроллеров ATmega фирмы Atmel позволяют производить программирова-
ние без применения специальных программаторов. Все, что нужно для создания
нового электронного устройства, — это плата Arduino, кабель связи и компьютер.
Второй частью проекта Arduino является программное обеспечение для создания
управляющих программ. Оно объединило в себе простейшую среду разработки и
язык программирования, представляющий собой вариант языка С/С++ для микро-

18 Часть I. Arduino — общий обзор

контроллеров. При этом в него добавлены элементы, позволяющие создавать про-
граммы без изучения аппаратной части. Так что для работы с Arduino практически
достаточно знания только основ программирования на С/С++. Создано для Arduino
и множество библиотек, содержащих код, работающий с различными устройствами.

1.2. В чем преимущество Arduino?

Пользователь современного компьютера не задумывается о функционировании от-
дельных частей ПК. Он просто запускает нужные программы и работает с ними.
Точно так же и Arduino позволяет пользователю сосредоточиться на разработке
проектов, а не на изучении устройства и принципов функционирования отдельных
элементов. Нет надобности и в создании законченных плат и модулей — разработ-
чик может использовать готовые платы расширения или просто напрямую подклю-
чить к Arduino необходимые элементы. Все остальные усилия будут направлены на
разработку и отладку управляющей программы на языке высокого уровня. В итоге
доступ к разработке микропроцессорных устройств получили не только профес-
сионалы, но и просто любители что-то сделать своими руками. Наличие готовых
модулей и библиотек программ позволяет непрофессионалам в электронике созда-
вать готовые работающие устройства для решения своих задач. А варианты исполь-
зования Arduino ограничены только возможностями микроконтроллера и имею-
щейся платы, ну и, конечно, фантазией разработчика.

1.3. Новые тенденции
и перспективы развития Arduino

Классический форм-фактор Arduino является знаковым, но он постепенно отмирает.
Uno-подобные платы, которые стали стандартом де-факто в мире любителей радио-
электроники, медленно уходят на пенсию.

В настоящее время внимание Arduino в большей степени направлено на Интернет
вещей (IoT). Сначала появилась серия плат MKR, предоставляющая различные ва-
рианты подключения к сети и управления питанием, что побуждает людей исполь-
зовать их в качестве единого стандартного формата для проектов IoT. Платы MKR
повысили уровень стандартизации процесса проектирования, облегчая жизнь раз-
работчика, пытающегося продать свой конечный продукт на рынке.

Затем появилаcь серия Nano 33. Ее платы имеют практически те же размеры, что и
оригинал Nano, но несут на борту новые процессоры и отличаются низким энерго-
потреблением. Это и плата Nano Every для обычных проектов на базе мощ-
ного микроконтроллера Microchip ATmega4809 с микросхемой ATSAMD11 ARM
Cortex-M0 и процессором для USB-to-serial связи, и Nano IoT на микросхеме
ATSAMD21 ARM Cortex-M0 с поддержкой Wi-Fi и Bluetooth LE и с крипточипом
для безопасного хранения сертификатов и общих ключей, совместимая с новым
облаком Arduino IoT, и Nano 33 BLE — энергоэффективные модули для работы по
технологии Bluetooth BLE.

Глава 1. Введение в Arduino 19

Эти новые Nano-платы могут быть совместимы с макетом, но больше предназначе-
ны для поверхностного монтажа в виде модулей. Они на самом деле нацелены на
мелких производителей, которые изготовили прототипы на классических или
MKR-платах и хотят довести свой продукт до полномасштабного производства.

На выставке CES 2020 компания Arduino представила новое семейство мощных
устройств Arduino Portenta, разработанное для требовательных промышленных
приложений, обработки задач искусственного интеллекта и для робототехники.
Оно оборудовано широким спектром поддерживаемых соединений для подключе-
ния периферийных устройств.

ГЛАВА 2

Платы семейства Arduino
и платы расширения для них

2.1. Обзор плат семейства Arduino

Основные версии плат Arduino представлены следующими моделями:
Due — плата на базе 32-битного ARM микропроцессора Atmel SAM3X8E ARM
Cortex-M3;
Leonardo — плата на микроконтроллере ATmega32U4;
Uno — самая популярная версия базовой платформы Arduino;
Duemilanove — плата на микроконтроллере ATmega168 или ATmega328;
Diecimila — версия базовой платформы Arduino USB;
Nano — компактная плата, используемая как макет. Она подключается к ком-
пьютеру при помощи кабеля USB Mini-B;
Mega — версия серии плат Mega на базе микроконтроллера ATmega1280;
Mega2560 — плата на базе микроконтроллера ATmega2560 с использованием
микроконтроллера ATMega8U2 для последовательного соединения по USB-
порту;
Mega ADK — версия платы Mega2560 с поддержкой интерфейса USB-host для
связи со смартфонами на Android и другими устройствами с интерфейсом USB;
Arduino BT — плата с модулем Bluetooth для беспроводной связи и программи-
рования;
LilyPad — плата, разработанная для носимых устройств (может зашиваться
в ткань);
Fio — плата, разработанная для беспроводных применений. Содержит разъем
для радио XBee, разъем для батареи Li-Po и встроенную схему подзарядки;
Mini — самая маленькая плата Arduino;
Pro — плата, разработанная для опытных пользователей (может являться
частью большего проекта);

Глава 2. Платы семейства Arduino и платы расширения для них 21

Pro Mini — как и плата Pro, разработана для опытных пользователей, которым
требуется низкая цена, меньшие размеры и дополнительная функциональность;

Arduino Yún — плата на основе Arduino Leonardo, объединяющая в себе досто-
инства двух платформ, поддерживаемых Свободным сообществом: Arduino
и Linux. Получившийся симбиоз предоставляет огромные возможности для ис-
пользования Интернета в своих проектах;

Arduino MKR — cерия плат, разработанная компанией Arduino, предоставляет
различные варианты подключения к сети и управления питанием, в большой
степени направлена на Интернет вещей (IoT);

Arduino Nano 33 — серия плат Nano нового поколения. Платы имеют практиче-
ски те же размеры, что и оригинал, но отличаются новыми процессорами, низ-
ким энергопотреблением и наличием беспроводных интерфейсов.

Рассмотрим более подробно некоторые из этих плат.

2.2. Arduino Uno

Плата Arduino Uno (рис. 2.1) построена на микроконтроллере ATmega328. В отли-
чие от всех предыдущих ее версий, использовавших для связи по USB микрокон-
троллер FTDI USB, новая Arduino Uno использует с этой целью микроконтроллер
ATmega8U2.

Характеристики платы Arduino Uno представлены в табл. 2.1.

Рис. 2.1. Плата Arduino Uno

22 Часть I. Arduino — общий обзор

Таблица 2.1. Характеристики платы Arduino Uno

Микроконтроллер ATmega328
Рабочее напряжение 5В
Входное напряжение (рекомендуемое) 7–12 В
Входное напряжение (предельное) 6–20 В
Цифровые входы/выходы 14 (6 из которых могут использоваться как выходы
ШИМ)
Аналоговые входы 6
Постоянный ток через вход/выход 40 мА
Постоянный ток для вывода 3,3 В 50 мА
Флеш-память 32 Кбайт, при этом 0,5 Кбайт используются
для загрузчика
ОЗУ 2 Кбайт
EEPROM 1 Кбайт
Тактовая частота 16 МГц

2.3. Arduino Nano

Плата Nano (рис. 2.2), построенная на микроконтроллере ATmega328 (Arduino Nano
3.0) или ATmega168 (Arduino Nano 2.x), имеет небольшие размеры и может исполь-
зоваться в лабораторных работах.

Рис. 2.2. Плата Arduino Nano

Arduino Nano способна получать питание через подключение USB Mini-B или от
внешнего источника питания: нерегулируемого 6–20 В (вывод 30) или регулируе-
мого 5 В (вывод 27). Источник с самым высоким напряжением выбирается автома-
тически.
Характеристики платы Arduino Nano представлены в табл. 2.2.

Глава 2. Платы семейства Arduino и платы расширения для них 23

Таблица 2.2. Характеристики платы Arduino Nano

Микроконтроллер ATmega168 или ATmega328
Рабочее напряжение 5В
Входное напряжение (рекомендуемое) 7–12 В
Входное напряжение (предельное) 6–20 В
Цифровые входы/выходы 14 (6 из которых могут использоваться как выходы
ШИМ)
Аналоговые входы 6
Постоянный ток через вход/выход 40 мА
Постоянный ток для вывода 3,3 В 50 мА
Флеш-память 16 Кбайт (ATmega168) или 32 Кбайт (ATmega328),
при этом 2 Кбайт используются для загрузчика
ОЗУ 1 Кбайт (ATmega168) или 2 Кбайт (ATmega328)
EEPROM
Тактовая частота 512 байтов (ATmega168) или 1 Кбайт (ATmega328)

16 МГц

2.4. Arduino Pro Mini

Плата Arduino Pro Mini (рис. 2.3) построена на микроконтроллере ATmega168.

Рис. 2.3. Плата Arduino Pro Mini

Характеристики платы Arduino Pro Mini представлены в табл. 2.3.

Микроконтроллер Таблица 2.3. Характеристики платы Arduino Pro Mini
Рабочее напряжение
Входное напряжение ATmega168
Цифровые входы/выходы 3,3 или 5 В (в зависимости от модели)
3,35–12 В (модель 3,3 В) или 5–12 В (модель 5 В)
Аналоговые входы 14 (6 из которых могут использоваться как выходы
ШИМ)
6

24 Часть I. Arduino — общий обзор

Постоянный ток через вход/выход Таблица 2.3 (окончание)
Флеш-память 40 мА
ОЗУ 16 Кбайт (2 — используются для загрузчика)
EEPROM 1 Кбайт
Тактовая частота 512 байтов
8 МГц (модель 3,3 В) или 16 МГц (модель 5 В)

Arduino Pro Mini может получать питание: через кабель FTDI, или от платы-
конвертера, или от регулируемого источника питания 3,3 или 5 В (зависит от моде-
ли платформы) через вывод VCC, или от нерегулируемого источника через вывод
RAW.

Выводы питания:

RAW — для подключения нерегулируемого напряжения;

VCC — для подключения регулируемых 3,3 или 5 В;

GND — выводы заземления.

2.5. Arduino LilyPad

Плата Arduino LilyPad (рис. 2.4) разработана так, чтобы ее можно было зашить
в ткань одежды вместе со встроенными источниками питания, датчиками, прово-
дами и приводами.

Рис. 2.4. Плата Arduino LilyPad

Характеристики платы Arduino LilyPad представлены в табл. 2.4.

Микроконтроллер Таблица 2.4. Характеристики платы Arduino LilyPad
Рабочее напряжение
Входное напряжение ATmega168 или ATmega328
2,7–5,5 В
2,7–5,5 В

Глава 2. Платы семейства Arduino и платы расширения для них 25

Таблица 2.4. Характеристики платы Arduino LilyPad

Цифровые входы/выходы 14 (6 из которых могут использоваться как выходы ШИМ)
Аналоговые входы 6
Постоянный ток 40 мА
через вход/выход
Флеш-память 16 Кбайт (ATmega168) или 32 Кбайт (ATmega328),
при этом 2 Кбайт используются для загрузчика
ОЗУ 1 Кбайт (ATmega168) или 2 Кбайт (ATmega328)
EEPROM 512 байтов (ATmega168) или 1 Кбайт (ATmega328)
Тактовая частота 16 МГц

2.6. Arduino Mega2560

Плата Arduino Mega2560 (рис. 2.5) построена на микроконтроллере ATmega2560.

Рис. 2.5. Плата Arduino Mega2560

Характеристики платы Arduino Mega2560 представлены в табл. 2.5.

Микроконтроллер Таблица 2.5. Характеристики платы Arduino Mega2560
ATmega2560
Рабочее напряжение 5В
7–12 В
Входное напряжение
(рекомендуемое)

26 Часть I. Arduino — общий обзор

Таблица 2.5 (окончание)

Входное напряжение (предельное) 6–20 В
Цифровые входы/выходы 54 (14 из которых могут использоваться
как выходы ШИМ)
Аналоговые входы 16
Постоянный ток через вход/выход 40 мА
Постоянный ток для вывода 3,3 В 50 мА
Флеш-память 256 Кбайт, из которых 8 Кбайт используются
для загрузчика
ОЗУ 8 Кбайт
EEPROM 4 Кбайт
Тактовая частота 16 МГц

2.7. Arduino Leonardo

Плата Arduino Leonardo (рис. 2.6) построена на базе микроконтроллера ATmega32U4,
имеющего, в отличие от всех других микропроцессоров, встроенную поддержку
для USB-соединения.

Характеристики платы Arduino Leonardo представлены в табл. 2.6.

Рис. 2.6. Плата Arduino Leonardo

Глава 2. Платы семейства Arduino и платы расширения для них 27

Таблица 2.6. Характеристики платы Arduino Leonardo

Микроконтроллер ATmega32U4
Рабочее напряжение 5В
Входное напряжение 7–12 В
(рекомендуемое)
Входное напряжение (предельное) 6–20 В
Цифровые входы/выходы 20 (7 из которых могут использоваться как выходы
ШИМ)
Аналоговые входы 12
Постоянный ток через вход/выход 40 мА
Постоянный ток для вывода 3,3 В 50 мА
Флеш-память 32 Кбайт, из которых 4 Кбайт используются для за-
грузчика
ОЗУ 2 Кбайт
EEPROM 1 Кбайт
Тактовая частота 16 МГц

2.8. Arduino Due

Arduino Due (рис. 2.7) представляет собой первую плату Arduino на основе 32-бит-
ного микроконтроллера с ARM-ядром — процессора Atmel SAM3X8E ARM
Cortex-M3.

В отличие от других плат Arduino, максимальное рабочее напряжение, которое вы-
держивают входы/выходы Arduino Due, составляет 3,3 В.

Рис. 2.7. Плата Arduino Due

28 Часть I. Arduino — общий обзор

Характеристики платы Arduino Due представлены в табл. 2.7.

Микроконтроллер Таблица 2.7. Характеристики платы Arduino Due
Рабочее напряжение
Входное напряжение AT91SAM3X8E
(рекомендуемое) 3,3 В
Входное напряжение (предельное) 7–12 В
Цифровые входы/выходы
6–20 В
Аналоговые входы 54 (12 из которых могут использоваться как выходы
Аналоговые выходы ШИМ)
Постоянный ток через вход/выход 12
Постоянный ток для вывода 3,3 В 2 (ЦАП)
Постоянный ток для вывода 5 В 50 мА
Флеш-память 800 мА
ОЗУ 800 мА
Тактовая частота 512 Кбайт
96 Кбайт (два банка: 64 и 32 Кбайт)
84 МГц

2.9. Arduino Yún

Arduino Yún (рис. 2.8) — это плата на основе Arduino Leonardo, объединяющая
в себе, как уже упоминалось ранее, достоинства двух платформ, поддерживаемых
Свободным сообществом: Arduino и Linux. Получившийся симбиоз предоставляет
огромные возможности для использования Интернета в своих проектах.

Arduino-часть платы содержит микроконтроллер ATmega32U4, работающий на
частоте 16 МГц. «Распиновка» Arduino Yún аналогична Arduino Leonardo, поэтому
вместе с Arduino Yún вы можете использовать большинство плат расширения
Arduino.

Linux-часть платы Arduino Yún использует микрокомпьютер Atheros AR9331, рабо-
тающий под управлением операционной системы Linino — специально подготов-
ленной версии OpenWRT (популярного дистрибутива Linux для встраиваемых сис-
тем).

Микрокомпьютер Atheros AR9331 работает на частоте 400 МГц, имеет 64 Мбайт
оперативной и 16 Мбайт флеш-памяти, встроенные интерфейсы Wi-Fi и Ethernet,
USB-host и слот для карты microSD. Linino содержит в себе пакетный менеджер
opkg, который позволяет устанавливать большое количество Linux-приложений,
а также интерпретатор языка Python 2.7, с помощью которого вы можете писать для
Linino свои приложения.

Глава 2. Платы семейства Arduino и платы расширения для них 29

Рис. 2.8. Плата Arduino Yún

Память для Linux-приложений может быть расширена с помощью съемного носи-
теля (карты microSD или USB-флешки).

2.10. Arduino MKR WiFi 1010

Arduino MKR WiFi 1010 (рис. 2.9) — это платформа из семейства MKR для разра-
ботчиков с минимальным опытом работы в сети, желающих создавать проекты IoT.
Плата состоит из трех основных блоков:

микроконтроллера ATSAMD21G18 с тактовой частотой 48 МГц и вычислитель-
ным ядром Cortex-M0+. Благодаря своей 32-битной архитектуре контроллер
справляется с ресурсоемкими математическими вычислениями, обрабатывает
аналоговые сигналы с большой точностью и воспроизводит музыку через встро-
енный ЦАП;

модуля беспроводной связи NINA-W10 от компании u-blox со встроенным чи-
пом ESP32. Модуль обеспечивает беспроводной обмен данными в диапазоне
2,4 ГГц по протоколам Wi-Fi и Bluetooth. Регулировка выходной мощности
позволяет достичь оптимального соотношения между дальностью связи, скоро-
стью передачи данных и энергопотреблением;

крипточипа ECC508 для защиты передаваемых данных с использованием шиф-
рования SHA-256. Крипточип дает возможность выполнять HTTPS-запросы без
нагрузки на основной процессор.

Поскольку платформа выполнена на архитектуре ARM Cortex-M0+, «родное» на-
пряжение ее выводов — 3,3 В. То есть выходы для логической единицы выдают

30 Часть I. Arduino — общий обзор

Рис. 2.9. Плата Arduino MKR WiFi 1010

3,3 В и рассчитаны принимать напряжение не более этого. Большее напряжение
повредит микроконтроллер.

2.11. Arduino Nano 33

Arduino Nano 33 — серия плат Nano нового поколения. Платы, как уже отмечалось
ранее, имеют практически те же размеры, что и оригинал, но отличаются новыми
процессорами, низким энергопотреблением и наличием беспроводных интерфей-
сов. К настоящему моменту выпущено четыре платы этой серии (рис. 2.10): Arduino
Nano Every, Nano 33 IoT, Nano 33 BLE и Nano 33 BLE Sense.

Рис. 2.10. Cемейство Arduino Nano 33:
Nano Every, Nano 33 IoT, Nano 33 BLE, Nano 33 BLE Sense (слева направо)

Глава 2. Платы семейства Arduino и платы расширения для них 31

В отличие от оригинальной платы Arduino Nano, несущей на борту 8-битный
микроконтроллер Microchip ATmega328P, плата Arduino Nano Every построена
на основе гораздо более мощного микроконтроллера Microchip ATmega4809
с микросхемой ATSAMD11 ARM Cortex M0 и процессором для USB-to-serial
связи.

Плата Arduino Nano 33 IoT основана на микросхеме ATSAMD21 ARM Cortex-
M0 с поддержкой Wi-Fi и Bluetooth LE, предоставляемой встроенным микрокон-
троллером Espressif ESP32 в форме модуля NINA-W102 u-blox. Плата также
оснащена 9-осевым инерциальным измерительным устройством (Inertial mea-
surement unit, IMU), крипточипом для безопасного хранения сертификатов и об-
щих ключей и совместима с новым облаком Arduino IoT.

В отличие от Nano Every и Nano 33 IoT, плата Arduino Nano 33 BLE не основана
на процессоре с микрочипом. Вместо этого она оснащена модулем u-blox NINA-
B306, который, в свою очередь, построен на базе платформы Nordic nRF52840
архитектуры ARM Cortex-M4F. Плата Nano 33 BLE также несет на борту
9-осевой IMU.

Плата Nano 33 BLE Sense построена на том же модуле u-blox NINA-B306, но —
в дополнение к 9-осевой IMU — поставляется с гораздо большим набором дат-
чиков: давления, влажности, температуры и света, а также датчиком жестов и
встроенным микрофоном.

2.12. Платы расширения для Arduino

Большую популярность плата Arduino приобрела не только из-за низкой стоимости,
легкости разработки и программирования, но главным образом благодаря наличию
плат расширения (так называемых шилдов), добавляющих Arduino дополнительную
функциональность. Шилды (кроме маленьких модулей и платы LilyPad) подклю-
чаются к Arduino с помощью имеющихся на них штыревых разъемов (рис. 2.11).

Существует множество различных по функциональности шилдов — от простей-
ших, предназначенных для макетирования, до сложных, представляющих собой
отдельные многофункциональные устройства.

Далее приведено краткое описание некоторых шилдов:

Ethernet Shield — обеспечивает подключение к Интернету;

XBee Shield — обеспечивает при помощи модуля Maxstream Xbee Zigbee бес-
проводную связь нескольких устройств Arduino;

MicroSD Shield — обеспечивает запись данных на карты microSD;

MP3 Shield — плата для воспроизведения звука в форматах Ogg Vorbis, MP3,
AAC, WMA и MIDI и записи звука в формате Ogg Vorbis;

Motor Shield — обеспечивает управление двигателями постоянного тока;

GSM/GPRS Shield — позволяет отправлять SMS-сообщения, делать телефон-
ные звонки, обмениваться данными по GPRS;

32 Часть I. Arduino — общий обзор

Рис. 2.11. Модульная структура установки плат расширения для Arduino

Cosmo WiFi Connect — обеспечивает организацию беспроводной сети стандар-
та IEEE 802.11b/g.
Существуют также шилды: Video Overlay Shield — для наложения текста на ана-
логовое видео, EasyVR Arduino Shield — многоцелевой модуль распознавания
речи, Music Shield — профессиональный аудиокодек и др.
Количество плат расширения (шилдов) постоянно растет. Ознакомиться с их спи-
ском можно на официальном сайте проекта Arduino по адресу: http://www.
arduino.cc/playground/Main/SimilarBoards#goShie.

ЧАСТЬ II

Среды разработки
и язык программирования
плат Arduino

Глава 3. Среда разработки Arduino IDE
Глава 4. Облачная среда разработки Arduino Create
Глава 5. Программирование плат Arduino



ГЛАВА 3

Среда разработки Arduino IDE

Разработка собственных приложений на базе плат, совместимых с архитектурой
Arduino, осуществляется в бесплатной среде разработки Arduino IDE. Среда пред-
назначена для написания, компиляции и загрузки собственных программ в память
микроконтроллера, установленного на плате Arduino-совместимого устройства.
Основу среды разработки составляет язык Processing/Wiring — это фактически
обычный язык C++, дополненный простыми и понятными функциями для управле-
ния вводом/выводом на контактах. Существуют версии среды для операционных
систем Windows, macOS и Linux.
Последнюю версию среды Arduino (1.8.13) и бета-версию Arduino (с эксперимен-
тальными возможностями) можно скачать со страницы загрузки официального сай-
та: http://arduino.cc/en/Main/Software.

ПРИМЕЧАНИЕ
В главе 4 вашему вниманию представлена новая облачная среда разработки Arduino
Create.

3.1. Установка Arduino IDE в Windows

Отправляемся на страницу http://arduino.cc/en/Main/Software (рис. 3.1), выбираем
версию для операционной системы Windows и скачиваем архивный файл. Он зани-
мает чуть более 80 Мбайт и содержит все необходимое, в том числе и драйверы. По
окончании загрузки распаковываем скачанный файл в удобное для себя место.
Теперь необходимо установить драйверы. Подключаем плату Arduino к компьюте-
ру. На ней должен загореться индикатор питания — зеленый светодиод. Windows
начинает попытку установки драйвера, которая заканчивается сообщением: Про-
граммное обеспечение драйвера не было установлено.
Открываем Диспетчер устройств. В составе устройств находим значок Arduino
Uno — устройство отмечено восклицательным знаком. Щелкаем правой кнопкой
мыши на значке Arduino Uno и в открывшемся окне выбираем пункт Обновить
драйверы и далее пункт Выполнить поиск драйверов на этом компьютере. Ука-
зываем путь к драйверу — ту папку на компьютере, куда распаковывали скачанный

36 Часть II. Среды разработки и язык программирования плат Arduino

архив. Пусть это будет папка drivers каталога установки Arduino. Игнорируем все
предупреждения Windows и получаем в результате сообщение: Обновление про-
граммного обеспечения для данного устройства завершено успешно. В заго-
ловке окна будет указан и COM-порт, на который установлено устройство.
Осталось установить и запустить среду разработки Arduino IDE.

Рис. 3.1. Страница загрузки официального сайта Arduino

3.2. Установка Arduino IDE в Linux

В Linux Ubuntu среда Arduino IDE устанавливается просто — она находится в репо-
зитории стандартных приложений Linux. Выбираем Arduino IDE из списка доступ-
ных программ в меню Ubuntu: Приложения | Центр приложений Ubuntu | Загру-
зить приложение. В списке разделов выбираем Инструменты разработчика,
в списке следующего уровня — Все приложения и в следующем открывшемся
списке — Arduino IDE (рис. 3.2). Щелкаем левой кнопкой мыши на значке этой
программы — справа от нее появляется кнопка Установить, нажимаем на эту
кнопку, и среда устанавливается автоматически.

Глава 3. Среда разработки Arduino IDE 37

Рис. 3.2. Выбор программы из центра приложений Ubuntu

3.3. Настройка среды Arduino IDE

Среда разработки Arduino (рис. 3.3) состоит из:

редактора программного кода;

области сообщений;

окна вывода текста;

панели инструментов с кнопками часто используемых команд;

нескольких меню.

ПРИМЕЧАНИЕ
Все примеры работы с Arduino IDE в этом издании книги показаны в наиболее распро-
страненной версии среды — 1.8.5.

Программа, написанная в среде Arduino, носит название скетч. Скетч пишется
в текстовом редакторе, который имеет цветовую подсветку создаваемого про-
граммного кода. Во время сохранения и экспорта проекта в области сообщений по-
являются пояснения и информация об ошибках. Окно вывода текста показывает
сообщения Arduino, включающие полные отчеты об ошибках и другую информа-
цию. Кнопки панели инструментов позволяют проверить и записать программу,
создать, открыть и сохранить скетч, открыть мониторинг последовательной шины.

Разрабатываемым скетчам дополнительная функциональность может быть добав-
лена с помощью библиотек, представляющих собой специальным образом оформ-
ленный программный код, реализующий некоторый функционал, который можно
подключить к создаваемому проекту. Специализированных библиотек существует
множество. Обычно библиотеки пишутся так, чтобы упростить решение той или

ГЛАВА 13

Arduino и Интернет вещей

Интернет вещей (Internet of Things, IoT) — это широкая сеть объектов, связанных
через Интернет и способных обмениваться данными. Интернет вещей предполагает
оснащение каждого устройства, будь то пылесос, холодильник или стиральная ма-
шина, модулем подключения к Интернету с возможностью взаимодействия его
с домашним компьютером или смартфоном домовладельца. В этой главе мы рас-
смотрим организацию доступа Arduino к сети Интернет с дальнейшей отправкой
данных в известные облачные сервисы и получением их оттуда.

13.1. Подключение к Интернету
с помощью платы расширения Ethernet shield

Самый распространенный метод обеспечить доступ платы Arduino к сети Интер-
нет — использование платы Ethernet shield (рис. 13.1). Ethernet shield — это плата
расширения, которая устанавливается на плату Arduino сверху. Она дает ей воз-
можность выступать в роли сетевого устройства и общаться по проводной сети
с аналогичными устройствами, с обычными компьютерами, принтерами, сервисами
в Интернете и прочими сетевыми ресурсами. Последняя версия платы Ethernet
Shield Rev3 полностью совместима с Arduino Mega2560.
Плата Ethernet shield основана на микросхеме Wiznet W5100, которая поддерживает
как TCP-, так и UDP-протоколы. Одновременно открытыми могут быть до четырех
подключений.
Плата обладает стандартным Ethernet-портом для подключения к сети с помощью
патч-корда витой пары и набором контактов для подключения к Arduino. Для об-
щения между собой Ethernet shield и Arduino задействуют контакты 4-й и с 10-го
по 13-й, поэтому их использование в других целях в присутствии платы расшире-
ния невозможно.
Для программирования сетевого взаимодействия подключается библиотека Ethernet
из стандартного дистрибутива. При использовании этой библиотеки необходимо
указывать MAC-адрес платы (уникальный идентификатор любого сетевого устрой-
ства). В более новых версиях Ethernet-шилда MAC-адрес можно увидеть на наклей-

280 Часть III. Практическое применение Arduino

ке на плате. Если такой наклейки нет, то просто введите любую похожую комбина-
цию, — главное, чтобы в вашей сети не было устройств с совпадающими MAC-
адресами.
На плате размещен слот для карты памяти формата microSD, которая может быть
использована для хранения ресурсов, раздаваемых по сети. Для взаимодействия
с такой картой следует подключить, например, библиотеку sdfatlib.
Для отправки данных в облачные сервисы в примерах этого раздела мы воспользу-
емся веб-клиентом на основе платы Arduino c установленной на нее платой расши-
рения Ethernet shield.

Рис. 13.1. Плата Ethernet shield Rev3

13.1.1. Получение IP-адреса по DHCP

Соединим Ethernet shield с платой Arduino и создадим простой пример получения
ими IP-адреса по DHCP. Соединяется Ethernet shield с платой Arduino так же про-
сто, как и любой другой шилд, — просто состыкуйте их вместе. Cледует учесть,
что установка других шилдов поверх Ethernet shield весьма затруднительна. Это
связано с большими размерами имеющегося на плате Ethernet shield разъема RJ-45,
служащего для подключения сетевого кабеля, поэтому, если вы хотите использо-
вать совместно с Arduino еще и другие шилды, лучше их размещать между Arduino
и Ethernet shield.
Итак, подключим плату Arduino к USB-порту компьютера, а Ethernet shield подсое-
диним c помощью сетевого кабеля к маршрутизатору, имеющему выход в Интернет
(рис. 13.2).
Скетч, обеспечивающий получение IP-адреса по DHCP, представлен в листин-
ге 13.1, а пример назначения статического IP-адреса — в листинге 13.2.

Глава 13. Arduino и Интернет вещей 281

Рис. 13.2. Подключение к плате Arduino платы расширения Ethernet shield Rev3

Листинг 13.1

// Получение IP-адреса по DHCP
// MAC-адрес Ethernet shield (можно увидеть на наклейке на плате) или
// произвольный уникальный в сети
#include <Ethernet.h>
#include <SPI.h>

byte mac[] = {0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x02};

void setup() {
// Open serial communications and wait for port to open:
Serial.begin(9600);
}
// запуск Ethernet-соединения
if (Ethernet.begin(mac) == 0) {
Serial.println("Failed to configure Ethernet using DHCP");
for (;;)
;
}
// печать в последовательный порт полученного по DHCP адреса
Serial.print("My IP address: ");
for (byte thisByte = 0; thisByte < 4; thisByte++) {
Serial.print(Ethernet.localIP()[thisByte], DEC);
Serial.print(".");
}
Serial.println();

}

void loop() {;}

ЭЛЕКТРОННЫЙ АРХИВ
Полный вариант рассмотренного скетча находится в папке examples\13\_13_01 сопрово-
ждающего книгу электронного архива (см. приложение 2).

282 Часть III. Практическое применение Arduino

Листинг 13.2

// Получение статического IP-адреса
// MAC-адрес Ethernet shield (можно увидеть на наклейке на плате) или
// произвольный уникальный в сети
#include <Ethernet.h>
#include <SPI.h>

byte mac[] = {0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x02};
// IP-адрес, назначаемый Ethernet shield:
byte ip[] = { 192, 168, 0, 111 };
// IP-адрес dns сервера:
byte sdns[] = { 192, 168, 1, 1 };
// адрес шлюза:
byte gateway[] = { 192, 168, 0, 1 };
// маска:
byte subnet[] = { 255, 255, 255, 0 };

void setup() {
Serial.begin(9600);
// запуск Ethernet-соединения
Ethernet.begin(mac, ip, sdns, gateway, subnet);
delay(1000);
Serial.println(Ethernet.localIP());

}
void loop() {;}

ЭЛЕКТРОННЫЙ АРХИВ
Полный вариант рассмотренного скетча находится в папке examples\13\_13_02 сопрово-
ждающего книгу электронного архива (см. приложение 2).

13.1.2. Отправка данных
на сайт «Народный мониторинг» через Ethernet shield

Получив доступ в Интернет, мы можем отправлять данные с платы Arduino в об-
лачные сервисы. Рассмотрим пример отправки данных на сайт «Народный монито-
ринг».
«Народный мониторинг» (http://www.narodmon.ru) — это проект по сбору и ото-
бражению на карте мира показаний температуры, атмосферного давления, влажно-
сти и т. п. практически в режиме реального времени по фактическому их состоянию
(а не на основе прогнозов), получаемых от различных датчиков среды, установлен-
ных как на улице для публичного доступа, так и в помещении для приватного,
а также от веб-камер для частного или публичного доступа. Передавать показания
датчиков на сайт «Народный мониторинг» можно посредством протоколов TCP/UDP

Глава 13. Arduino и Интернет вещей 283

или HTTP GET/POST. Минимальный интервал передачи показаний датчика —
5 мин (если передавать чаще, то возможна блокировка).

Чтобы стать участником проекта, необходимо зарегистрироваться. Для этого захо-
дим на сайт http://www.narodmon.ru и выбираем пункт меню Вход | Стать участ-
ником проекта. В регистрационной форме (рис. 13.3) вводим адрес электронной
почты, на который будут отправлены логин и пароль для входа в профиль.

Рис. 13.3. Регистрация на сайте «Народный мониторинг»

Подключим к плате Arduino с установленной на нее платой расширения Ethernet
shield датчик температуры LM335 (рис. 13.4) и настроим передачу показаний этого
датчика на сайт «Народный мониторинг» и отображение их на его карте мира.

Рис. 13.4. Монтажная схема подключения датчика температуры LM335 к плате Arduino
c установленной на ней платой Ethernet shield W5100

284 Часть III. Практическое применение Arduino

Для добавления датчика на карту необходимо выполнить следующие действия:
1. Подключить устройство мониторинга (в нашем случае — плату Arduino с дат-

чиком LM335) к источнику питания и к сети Интернет (через Ethernet shield).
2. Настроить передачу показаний на сайт «Народный мониторинг» с интервалом

5–15 мин (если чаще, то возможна блокировка).
3. Авторизоваться на сайте «Народный мониторинг», используя свой логин (e-mail

или номер мобильного телефона) и пароль, полученные при регистрации.
4. В разделе сайта Мои Датчики добавить устройство, введя его уникальный ал-

фавитно-цифровой код (MAC-адрес). Имейте при этом в виду, что добавление
возможно только после успешной передачи показаний на сервер и при верно
указанном MAC-адресе.
5. Выбрать тип данных для каждого из датчиков: температура, влажность, давле-
ние и пр.
6. Установить доступ к показаниям для каждого датчика: публичный (виден всем)
или приватный (только вам).
7. Указать названия для устройства мониторинга и подключенных к нему дат-
чиков.
8. Выполнить привязку устройства мониторинга к карте, указав полный адрес
его размещения или геокоординаты и щелкнув на строке с адресом в графе
УСТРОЙСТВО раздела сайта Мои Датчики (уточнить местоположение мож-
но, щелкнув на карте на маркере своего устройства и переместив в нужное место
появившееся всплывающее окно).
Для создания скетча (листинг 13.3) мы возьмем за основу рекомендованный ресур-
сом student-proger.ru пример подключения к сервису «Народный мониторинг»
и изменим его под свои требования (сетевые параметры) и датчики.

Листинг 13.3

#include <SPI.h>
#include <Ethernet.h>

byte mac[] = { 0x94, 0xDE, 0x80, 0x3A, 0x90, 0xC9 }; //MAC-адрес Arduino
const unsigned long postingInterval = 600000; // интервал между отправками

// данных 10 мин
// IP-адрес, назначаемый Ethernet shield:
byte ip[] = { 192, 168, 0, 119 };
// IP адрес, dns сервера:
byte sdns[] = { 192, 168, 1, 1 };
// адрес шлюза:
byte gateway[] = { 192, 168, 0, 28 };
// маска:
byte subnet[] = { 255, 255, 255, 0 };

288 Часть III. Практическое применение Arduino
Рис. 13.5. Добавление устройства на сайте «Народный мониторинг»

Рис. 13.6. Всплывающее окно нашего устройства на карте сайта «Народный мониторинг»

ГЛАВА 16

Взаимодействие Arduino
c другими программируемыми
системами

16.1. Использование Arduino в проектах LEGO

LEGO Mindstorms — конструктор (набор сопрягаемых деталей и электронных бло-
ков) для создания программируемого робота — впервые был представлен компа-
нией LEGO в 1998 г. В 2013 г. вышла 3-я модель серии — LEGO Mindstorms EV3.
Наборы LEGO Mindstorms комплектуются стандартными деталями LEGO (балки,
оси, колеса, шестерни, сервомоторы), а также сенсорами, двигателями и програм-
мируемым блоком. Программируемый блок (рис. 16.1) оснащен процессором Sitara
AM1808 (ARM9) частотой 300 МГц от Texas Instruments, несет на борту 64 Мбайт
оперативной памяти, 16 Мбайт флеш-памяти и слот для карт памяти microSDHC
объемом до 32 Гбайт. В наличии имеются USB-хост и модуль связи Bluetooth, воз-
можно подключение к сети Wi-Fi через USB-донгл, поддерживаются устройства

Рис. 16.1. Программируемый блок (микрокомпьютер) конструктора LEGO Mindstorm EV3

Глава 16. Взаимодействие Arduino c другими программируемыми системами 373

Apple. Блок оснащен монохромным LCD-дисплеем с разрешением 178×128, а для
подключения датчиков на нем имеются 4 порта ввода и 4 порта вывода команд.

Тем не менее очень часто в проектах с использованием конструктора LEGO
Mindstorm EV3 не хватает возможностей его стандартных датчиков, или для под-
ключения необходимых датчиков недостаточно имеющихся у микрокомпьютера
LEGO 4 портов. В такой ситуации допустимо задействовать возможности платфор-
мы Arduino.

Каждый порт микрокомпьютера LEGO Mindstorm EV3 поддерживает целый ряд
различных протоколов — в основном это сделано для совместимости с датчиками
NXT и датчиками сторонних производителей. Так, в каждом порту микрокомпью-
тера имеется канал аналого-цифрового преобразователя и реализована поддержка
протоколов I2C и UART.

Способность микрокомпьютера LEGO работать по протоколу I2C позволяет под-
ключить к каждому из его портов до 127 подчиненных устройств. И здесь мы рас-
смотрим способ превратить плату Arduino в I2C-датчик для этого микрокомпьюте-
ра. К плате Arduino может быть подключено множество датчиков разных типов,
и Arduino будет отправлять данные по протоколу I2C на микрокомпьютер LEGO,
выступая в роли своеобразного конвертера: получая запрос (по номеру датчика) из
микрокомпьютера LEGO на значение этого датчика и отправляя полученное значе-
ние в микрокомпьютер LEGO.

16.1.1. Получение микрокомпьютером LEGO
данных с датчика влажности и температуры DHT11,
подключенного к плате Arduino

Итак, подключим к плате Arduino датчик влажности и температуры DHT11 и выве-
дем его показания на экран микрокомпьютера LEGO.

Схема подключения платы Arduino (справа) к порту датчиков микрокомпьютера
LEGO (слева) приведена на рис. 16.2 (для лучшего понимания коннектор для под-
ключения датчиков LEGO к порту микрокомпьютера LEGO показан в увеличенном
виде).

Программное обеспечение для сопряжения микрокомпьютера LEGO и платы Arduino
состоит из двух частей: первая часть — программа для среды LEGO Mindstorm EV3,
вторая часть — скетч, выполняемый на Arduino.

Для создания программы в среде LEGO Mindstorm необходимо скачать блоки
Dexter Industries EV3 (Dexter.ev3b) и импортировать их в ПО LEGO Mindstorms
EV3 командой меню среды LEGO Mindstorm Инструменты | Мастер импорта
блоков. А затем сформировать программу, которая отсылает на плату Arduino
по протоколу I2C числа 1 и 2 и выводит приходящие в ответ данные на экран
(рис. 16.3).

ЭЛЕКТРОННЫЙ АРХИВ
Файл Dexter.ev3b размещен в папке examples\16\ сопровождающего книгу электронного
архива (см. приложение 2).

376 Часть III. Практическое применение Arduino

ЭЛЕКТРОННЫЙ АРХИВ
Полный вариант рассмотренного скетча находится в папке examples\16\_16_01 сопрово-
ждающего книгу электронного архива (см. приложение 2).

16.2. Arduino в проектах ROS

ROS (Robot Operating System, операционная система для роботов) — это структура
программной системы (фреймворк), предоставляющая функционал для распреде-
ленной работы по программированию роботов. Система ROS (под названием
Switchyard) была первоначально разработана в 2007 г. в Лаборатории искусствен-
ного интеллекта Стэнфордского университета.

При разработке робота обычно приходится реализовывать свою архитектуру, свой
протокол обмена сообщениями, драйвер пульта управления, логику навигации и пр.
И даже если имеется возможность использовать для этих задач различные готовые
библиотеки, то все равно остается серьезная проблема — объединить их для робота
в единую систему. Разработчики ROS позиционируют свою систему именно как
операционную — для программ взаимодействия и управления роботом ROS играет
роль операционной системы, предоставляя программам управления свои интерфей-
сы, библиотеки и готовые приложения. ROS работает под уже готовой OC (Ubuntu
Linux), в которой реализует свой дополнительный слой абстракции — конкретно
для управления роботами. ROS обеспечивает стандартные службы операционной
системы, такие как аппаратная абстракция, низкоуровневый контроль устройств,
реализация часто используемых функций, передача сообщений между процессами
и управление пакетами.

ROS развивается в двух направлениях: в качестве уже описанной здесь операцион-
ной системы и в виде поддерживаемых пользователями пакетов (ros-pkg), органи-
зованных в наборы (стеки), реализующие различные функции робототехники. Так,
ROS содержит вспомогательные библиотеки и приложения для роботов: преобра-
зование систем координат, утилиты для визуализации данных и распознавания
объектов, стек навигации и многое другое. Реализованы для ROS и драйверы, по-
зволяющие единым образом работать со многими устройствами: джойстиками,
устройствами GPS, камерами, лазерными дальномерами и пр.

ROS основана на архитектуре графов, где обработка данных происходит в узлах,
которые могут получать и передавать между собой сообщения (структурированные
данные). Комбинируя готовые узлы ROS и по необходимости дописывая собствен-
ные, можно существенно сократить время разработки и позволить себе сконцен-
трироваться только на тех задачах, которые действительно нужно решить.

К настоящему времени под управлением ROS работает уже много роботов. Вот не-
полный их список: PR2, TurtleBot, PR1, HERB, STAIR I и II, Nao, Husky A200,
iRobot Create, LEGO Mindstorms NXT.

ROS выпускается в соответствии с условиями лицензии BSD и c открытым исход-
ным кодом. Она бесплатна для использования как в исследовательских, так и в

Глава 16. Взаимодействие Arduino c другими программируемыми системами 377

коммерческих целях. Пакеты из ros-pkg распространяются на условиях различных
открытых лицензий.

16.2.1. Установка ROS

Шаги по установке ROS Kinetic Kame под Ubuntu Linux расписаны на официальном
сайте системы: http://www.ros.org/wiki/fuerte/Installation/Ubuntu. Рассмотрим ее
установку на компьютер с операционной системой Ubuntu Xenial (16.04 LTS).
1. Добавляем адрес сервера ROS, чтобы менеджер пакетов знал, откуда брать паке-

ты ROS:

sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc)
main" > /etc/apt/sources.list.d/ros-latest.list'

2. Получаем ключ:

sudo apt-key adv --keyserver 'hkp: //keyserver.ubuntu.com: 80' --recv-ключ
C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654

3. Обновляем список пакетов — тем самым сервер ROS.org будет проиндексирован:

sudo apt-get update

4. Отдаем команду установки ROS Fuerte (рекомендованная конфигурация
Desktop-Full):

sudo apt-get install ros-kinetic-desktop-full

Разработчики ROS стремятся интегрировать в систему лучшие открытые робото-
технические библиотеки, сохраняя при этом модульность системы, чтобы пользо-
ватель мог установить только те модули, которые ему действительно необходимы.
Некоторые библиотеки вынесены из ROS и устанавливаются в ОС стандартным
образом, что позволяет использовать эти библиотеки и без ROS:
1. Установим необходимый нам пакет rosserial:

sudo apt-get install ros-kinetic-ros-comm

2. Отдельно необходимо установить также пакеты rosinstall и rosdep:

sudo apt-get install python-rosinstall python-rosdep

3. В начале новой сессии bash необходимо прописать установку переменных окру-
жения ROS:

echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc . ~/.bashrc

На этом установка ROS завершена.

16.2.2. Узлы и темы в ROS

Узел — это исполняемый файл пакета ROS. Узлы ROS используют клиентские
библиотеки ROS для связи с другими узлами. Клиентские библиотеки ROS позво-
ляют реализовывать узлы ROS на различных языках программирования, например:

ГЛАВА 17

Программирование
в среде Arduino IDE других плат

Начиная с версии 1.6.5, Arduino IDE предоставила официальную поддержку для
добавления сторонних плат. Это позволяет программировать в знакомой среде и на
понятном Arduino языке Arduino-несовместимые платы и соответственно использо-
вать их в своих проектах.

17.1. ESP8266 — микроконтроллер
с интерфейсом Wi-Fi

С конца 2014 г. на китайских торговых площадках появились модули Wi-Fi ESP8266.
Причем, как выяснилось, это не просто модули Wi-Fi, а полноценные 32-битные
микроконтроллеры со своими наборами GPIO, в том числе поддерживающими ши-
ны SPI, UART и I2C. При этом сами модули состоят из минимального количества
деталей: собственно микросхемы ESP8266, флеш-памяти и кварцевого генератора.
Характеристики этих модулей представлены в табл. 17.1.

В настоящее время выпускается более 12 модификаций плат модулей ESP8266,
различающихся количеством выводов и вариантами исполнения. Модули продают-
ся с загруженной прошивкой, которая образует мост Wi-Fi → UART для подключе-
ния к другому микроконтроллеру, в том числе и к Arduino. Настройка соединения и
обмен данными осуществляются с помощью АТ-команд.

Возможны два варианта работы с модулем ESP8266:

использование его совместно с платой Arduino, которая будет управлять моду-
лем по UART;

создание собственной прошивки для модуля ESP8266 и его применение как
самодостаточного устройства.

Частота Таблица 17.1. Характеристики модулей ESP8266
Стандарт
Мощность Wi-Fi 2412–2484 МГц
802.11 b/g/n
+ 20 дБ

Глава 17. Программирование в среде Arduino IDE других плат 399

Поддерживаемые типы шифрования Таблица 17.1 (окончание)
Поддерживаемые режимы работы
WEP, WPA, WPA2
Напряжение питания Клиент (STA), точка доступа (AP),
Потребление тока клиент + точка доступа (STA + AP)
Количество доступных выводов GPIO 1,7–3,6 В
Внешняя флеш-память 70 мА (пиковое значение 240 мА)
RAM данных 4–10
RAM инструкций 512 Кбайт
Температурный режим 80 Кбайт
32 Кбайт
От –40 до 70°С

Один из недостатков плат ESP8266 — малое количество контактов, что сильно
ограничивает их применение в больших проектах. Эта проблема решена в новой
линейке контроллеров ESP — ESP32, которые отличаются большей производи-
тельностью, бо´льшим объемом оперативной памяти, имеют поддержку не только
Wi-Fi, но и Bluetooth, а также несут на борту большее количество выводов. Под-
робно ознакомиться с описанием микроконтроллера ESP32 можно, например, по
этой ссылке: http://micpic.ru/home/proekty-na-esp32/194-opisanie-mikrokontrollera-
esp32.html.

17.1.1. Установка Arduino IDE для работы с ESP8266

Arduino IDE позволяет создавать для ESP8266 прошивки и прошивать их в ESP8266
точно так же, как вы это делаете с Arduino. К тому же большая часть библиотек для
Arduino, не использующих внутренние порты и прочие аппаратные возможности
плат Arduino, после небольшой доработки отлично работают и на ESP-модулях.
В настоящее время для использования с ESP8266 адаптировано уже достаточно
много библиотек.

Рассмотрим установку Arduino IDE для работы с ESP8266.

Сначала необходимо скачать с официального сайта Arduino среду разработки
Arduino IDE версии не ниже 1.6.5 и установить ее на компьютер (см. главу 3). Затем
запускаем Arduino IDE, выполняем команду меню Файл | Настройки (рис. 17.1)
и в поле Additional Boards Manager URLs вводим:

http://arduino.esp8266.com/stable/package_esp8266com_index.json

Нажимаем кнопку OK.

Теперь выполняем команду меню Инструменты | Плата | BoardsManager и в спи-
ске ищем плату ESP8266. Выбираем этот пункт и версию и нажимаем на кнопку
Install (рис. 17.2) — запустится процесс скачивания и установки Arduino IDE для
ESP8266 (рис. 17.3).


Click to View FlipBook Version