учебник. Бхв, 2020. Isbn 9781119405375 (англ.) Isbn 9785977567367 (рус.) 2020 by John Wiley & Sons, Inc. Перевод на русский язык, оформление. Ооо бхвпетербург, Ооо бхв, 2020
Скачать 1.9 Mb.
|
Глава 15. Радиосвязь 398 На рынке предлагается большой выбор радиомодулей разных форм и разме- ров, но почти все они работают одинаково: когда на передатчике изменяется состояние одного выхода, на выходе приемника тоже появляется соответ- ствующий сигнал. По сути, это можно сравнить с однопроводной шиной, по которой за раз передается и принимается один бит информации. В этой главе мы познакомимся с основными принципами беспроводной связи, ограни- чившись простыми способами радиосвязи. В последующих двух главах мы расширим рассмотрение этой темы в область радиосвязи Bluetooth и Wi-Fi. Примечание Первое издание этой книги (выпущенное в 2013 г. издательством Wiley) содержало главу по радиосвязи с использованием радиомодулей XBee, которые работают, как беспро- водной последовательный канал. Но радиомодули XBee трудно настроить для правиль- ной работы, они дорого стоят и могут взаимодействовать только друг с другом. В этом издании я решил заменить эту главу двумя новыми главами по Bluetooth и Wi-Fi, по- скольку большинство пользователей находят их более полезными и доступными, чем радиомодули XBee. Также я добавил настоящую главу по простым радиоканалам, по- скольку она закладывает хорошую основу для понимания электромагнитного спектра и его значение для радиосвязи. Если же вы хотите научиться работать с радиомодулями XBee, я настоятельно рекомендую сначала ознакомиться с материалом этой главы, а за- тем просмотреть видеоруководство по работе с ними, которое можно найти по адресу blum.fyi/xbee-tutorial. ЭЛЕКТРОМАГНИТНЫЙ СПЕКТР Прежде чем приступать к рассмотрению работы радиосвязи, полез- но получить базовые знания научных принципов, на которых она основа- на. Электромагнитный спектр , наверное, является одним из самых важных аспектов нашей жизни, о котором мы никогда не задумываемся. Данный спектр определяет всю излучаемую во вселенной энергию от гамма-лучей ультравысокой частоты до низкочастотных радиоволн. Посередине спектра находится видимый свет, наиболее знакомый нам тип электромагнитного излучения. Свет от разных источников — солнца, осветительных ламп, све- тодиодов наших устройств на Arduino — воздействует на наши глаза в виде электромагнитного излучения. Подобно тому, как глаз воспринимает элек- тромагнитную энергию, которую затем наш мозг интерпретирует, как свет и извлекает из нее разную информацию, так и оснащенная «глазами» в виде радиоприемника плата Arduino может принимать электромагнитные излу- чения в виде радиоволн, а затем извлекать из них информацию. На рис. 15.1 приведено наглядное представление (созданное агентством НАСА) всех форм электромагнитных излучений. Все электромагнитные излучения передаются в виде волн определен- ной частоты, которые распространяются в вакууме со скоростью света 16 Беспроводная связь Bluetooth Список деталей и оборудования для проектов этой главы Плата Feather 32u4 Bluefruit LE (с впаянными разъемами) (1 шт.). USB-кабель (тип A на Micro-B) (1 шт.). Беспаечная макетная плата половинного или полного размера (1 шт.). Набор проволочных перемычек. Резистор номиналом 220 Ом (1 шт.). Подстроечный потенциометр номиналом 10 кОм (или другой анало- говый датчик по вашему выбору) (1 шт.). Светодиод красный диаметром 5 мм (1 шт.). Сетевой адаптер, 5 В, 1 А, выходной USB-разъем (1 шт.). Модуль управляемого силового реле (реле IoT Power Relay от компа- нии Digital Loggers, Inc.) (1 шт.). Лампочка с сетевым питанием (1 шт.). Небольшая отвертка (1 шт.). Смартфон с возможностями BTLE (iPhone или Android) (1 шт.). Исходный код и прочие электронные ресурсы Исходный код, видеоуроки и прочие электронные ресурсы для этой главы можно загрузить с веб-страницы https://www.exploringarduino. com/content2/ch16. Исходный код для проектов этой главы можно также загрузить на вкладке Downloads веб-страницы издательства Wiley для этой книги: https://www.wiley.com/go/exploringarduino2e. ЧТО ВЫ УЗНАЕТЕ ИЗ ЭТОЙ ГЛАВЫ С корее всего, вам очень быстро надоело передавать через простой радио- канал своей плате Arduino по одному биту информации за раз. Как мы знаем из опыта работы с ноутбуком, смартфоном или устройствами IoT, при наличии радиосвязи другого типа возможности могут быть намного бóльшими. В этой главе мы рассмотрим радиосвязь Bluetooth, которая яв- ляется наиболее распространенным стандартом беспроводной связи в мире. Разные варианты Bluetooth используются в гарнитурах, клавиатурах, мышах, компьютерах, смартфонах, радиомаяках и т.п. Глава 16. Беспроводная связь Bluetooth 424 ЧТО ТАКОЕ BLUETOOTH? В последнее время термин Bluetooth начали широко применять (часто не- правильно) для описания любой беспроводной связи малого радиуса дей- ствия между двумя узлами. В действительности разная реализация Bluetooth для различных типов устройств предусматривалась с самого начала. Это обстоятельство часто создает путаницу, когда говорят, что какое-либо устройство поддерживает Bluetooth. Поэтому, прежде чем рассматривать разработку программного обеспечения для Bluetooth, полезно ознакомить- ся с разными версиями и профилями Bluetooth, а также с соответствующей терминологией. Стандарты и версии Bluetooth Исходный стандарт Bluetooth (IEEE 802.15.1) был создан институтом IEEE (Institute of Electrical and Electronics Engineers — Институт инженеров по электротехнике и радиоэлектронике США); в настоящее время эта техноло- гия находится в ведении специальной группы SIG Bluetooth. Примечание Стандарт Bluetooth — только один из стандартов, разработанных и поддерживаемых институтом IEEE . В ведении этого института находятся также другие технологии, с ко- торыми вам, возможно, приходилось встречаться: Wi-Fi (IEEE 802.11); PoE (Power over Ethernet — питание через Ethernet, IEEE 802.3); стандарт POSIX, являющийся основой для обеспечения совместимости между разными версиями операционной системы UNIX (IEEE 1003); FireWire (IEEE 1394) и многие другие. Спецификация Bluetooth прошла через несколько этапов развития, когда шаг за шагом добавлялись новые возможности и улучшения. Первая версия, выпущенная в 1998 г., была в основном направлена на обеспечение беспро- водной альтернативы проводным каналам последовательной связи (таким же каналам последовательной связи, как и те, которые мы использовали в предыдущих главах для передачи сообщений с платы Arduino на компью- тер.) В вышедшей в 2004 г. версии Bluetooth 2.0 была добавлена возможность более высокой скорости передачи данных, что проложило дорогу Bluetooth в качестве цифрового канала для передачи аудио (возможно, наиболее зна- комое вам применение Bluetooth). Если вам когда-либо приходилось испы- тывать трудности, пытаясь выполнить сопряжение гарнитуры Bluetooth со своим смартфоном, то, возможно, вам будет легче, если узнаете, что трудно- сти испытывали не только вы. Исходная спецификация не содержала явной поддержки потокового аудио, поэтому интегрирование этой возможности в спецификации Bluetooth, а также в радиоустройства и процессоры, со- храняя при этом обратную совместимость, было для группы Bluetooth SIG Список деталей и оборудования для проектов этой главы Плата Adafruit Feather M0 Wi-Fi w/ATWINC1500 (с впаянной PCB- антенной) (1 шт.). USB-кабель (тип A на Micro-B) (1 шт.). Беспаечная макетная плата половинного или полного размера (1 шт.). Набор проволочных перемычек. Резистор номиналом 220 Ом (4 шт.). Резистор номиналом 4,7 кОм (2 шт.). Трехцветный (RGB) светодиод с общим анодом диаметром 5 мм (1 шт.). Пьезоэлектрический зуммер (1 шт.). Сетевой адаптер, 5 В, 1 А, выходной USB-разъем (необязательно) (1 шт.). Четырехразрядный 7-сегментный дисплей с интерфейсом I 2 C (30×14 мм, любого цвета) (1 шт.). Реквизиты доступа к сети Wi-Fi (и, факультативно, права администра- тора на доступ к маршрутизатору). Исходный код и прочие электронные ресурсы Исходный код, видеоуроки и прочие электронные ресурсы для этой главы можно загрузить с веб-страницы https://www.exploringarduino. com/content2/ch17. Исходный код для проектов этой главы можно также загрузить на вкладке Downloads веб-страницы издательства Wiley для этой книги: https://www.wiley.com/go/exploringarduino2e. ЧТО ВЫ УЗНАЕТЕ ИЗ ЭТОЙ ГЛАВЫ В от мы и достигли конечной темы этой книги. Подключение платы Arduino к Интернету можно сравнить, пожалуй, только с запуском ее в космос, чтобы сделать весь мир своей игровой площадкой. В общем и целом возможность связи по Интернету — чрезвычайно слож- ная тема. О том, как лучше всего выполнить сопряжение платформы Arduino с Интернетом вещей (IoT 1 ), можно с легкостью написать целые тома. 1 Англ. Internet of Th ings. — Прим. пер. 17 Wi-Fi и облачные хранилища Глава 17. Wi-Fi и облачные хранилища 466 Но поскольку невозможно рассмотреть все существующие способы со- пряжения платы Arduino с Всемирной сетью, в этой главе мы ограничимся взаимодействием платы Arduino (или любого другого устройства IoT) через интерфейс локальной сети. Также мы узнаем, как с помощью платы Arduino, оснащенной возможностью радиосвязи Wi-Fi, раздавать веб-страницы и ра- ботать с облачными данными. В частности, мы рассмотрим составные уров- ни сетевой топологии, процесс раздачи веб-страниц, а также выясним, как взаимодействовать с интерфейсом прикладного программирования (API) сторонних разработчиков. РАБОТА ARDUINO В СЕТИ Изложить все подробности работы Интернета в одной главе затрудни- тельно, поэтому для ознакомительных целей взаимодействие Arduino с Интернетом можно, по сути, рассматривать, как показано на рис. 17.1. Сначала мы рассмотрим работу только в пределах нашей локальной сети. При работе в локальной сети взаимодействие с платой Arduino через брау- зерный интерфейс возможно только в том случае, когда как Arduino, так и браузер подключены к одному и тому же маршрутизатору (по проводному или беспроводному каналу). А затем мы исследуем, как можно с помощью маршрутизатора получить доступ к плате Arduino из любой точки мира (по крайней мере, оттуда, где есть Интернет). Сетевая терминология Прежде чем приступать к рассмотрению работы с Arduino в Сети, озна- комимся с соответствующей терминологией. Далее приведен краткий список слов, понятий и сокращений, которые нужно усвоить, чтобы работать с ма- териалом этой главы. Рис. 17.1. Упрощенное представление Сети и локальной сети Интернет Лок альная с ет ь Модем Маршрутизатор Плата Arduino Компьютер с проводным подключением Компьютер с беспроводным подключением ПРЕДМЕТНЫЙ УКАЗАТЕЛЬ А Адрес IP глобальный 468 локальный 468 шлюза 495 MAC 468 Акселерометр микросхема LIS3DH 277 трехосевой ADXL335 93 Амплитуда волны 170 Амплитудная манипуляция 403 Аналого-цифровой преобразователь, АЦП 86 Антенна несимметричная четвертьволновая 404 Архитектура микроконтроллера 8-разрядная 37 32-разрядная 37 ARM 38 AVR 37 Б Библиотека Adafruit BTLE SPI 431 Adafruit GFX 516 Adafruit LED Backpack 516 Adafruit LIS3DH Library 286 Adafruit nRF5 430 Adafruit Unifi ed Sensor Library 286 Adafruit Universal Sensor 289 JSON 502 LiquidCrystal 300, 303, 305, 306 Mouse.h 226 RTClib 374, 381 SD 360, 366 Servo.h 144, 146 Stepper.h 157, 158 TimerOne 343, 344 WiFi101 by Arduino 473 Wire 256, 257, 259 Бит 84 Булевы переменные 75 В Веб-сервер 471 Версия Bluetooth 2.0 424, 425 3.0 425 4.0 425 Волатильная переменная 342 Д Дальномер инфракрасный Sharp 92 Данные регистратор 352 тип данных 61 unsigned long 163 Датчик температуры AD7414 251 TC74A0-5.0VAT 250 TMP36 93 Делитель напряжения резистивный 97 Диапазон радиочастот ISM 401 Диод заграждающий 109 Директива RoHS 99 препроцессора 375 ПРЕДМЕТНЫЙ УКАЗАТЕЛЬ 536 Дисплей семисегментный 513, 514 Длина волны электромагнитного излучения 400 Дребезг контактов 72, 335 З Заголовок ответа 481 Загрузчик 40, 41 Закон Ома 57, 58 Запись в файл на SD-карте 364 Запрос GET 485 И Излучение электромагнитное длина волны 400 частота 400 Индикатор хода выполнения 308 Институт IEEE 424, 469 Интернет-подключение 425 Интерфейс Web-API 498 Facebook 499 Git Hub 498 Google Maps 498 NASA 499 Phillips Hue 499 назначение 501 К Карты MicroSD 353 SD 353 Клиент 470 Ключевое слово (byte) 308, 311 LED_BUILTIN 51 Код ответа 404 481 HTTP 481 Кодер поворотный 332 Команда analogWrite() 64 AT 433 df 358 digitalRead() 71 digitalWrite() 52 GET 469 ipconfi g 496 mkdosfs 359 ping 479 pinMode() 50, 51 POST 469 sudo 359 unmount 358 Wire.beginTransmission() 261 Wire.endTransmission() 261 Wire.requestFrom() 261 Wire.write() 261 Комментарии многострочные 50 однострочные 50 Компания Atmel 36, 37 Digital Loggers, Inc. 416 JeeLabs 374 Maxim Integrated 372 Microchip 36, 37 Nordic Semiconductor 426 NXP Semiconductors 372 PJRC 344 Конденсатор развязывающий 127 Короткое замыкание 116 Корпус, тип DIP 529 SMD 529 Коэффициент заполнения сигнала 65 Л Линия MISO 273 MOSI 273 SCLK 273 SS 275 Логический оператор ИЛИ 76 М Макетная плата беспаечная 55 Маршрутизатор администрирование 495 ПРЕДМЕТНЫЙ УКАЗАТЕЛЬ 537 Микроконтроллер ATmega 16U2 190 32U4 439 328P 525 Cortex M0 471 архитектура 8-разрядная 37 32-разрядная 37 AVR 37, 38 Микросхема H-моста L293D 117 nRF5 430 WiFi WINC1500 473, 475 акселерометра LIS3DH 277 гироскопа L3GD20H 297 датчика температуры AD7414 251 TC74A0-5.0VAT 250 преобразователя USB/RS-232 CP2104 187 сдвигового регистра 74HC595 232 стабилизатора напряжения L7805CV 127 триггера Шмитта 74AHCT14 340 часов реального времени DS1307 372 PCF8523 372 Миллиампер 58 Многозадачность 332 Модификатор F() 375, 432 Модуляция цифровых сигналов 402 широтно-импульсная 54, 64 Мощность номинальная 59 уравнение 59 Н Напряжение опорное 86 электросети 414 О Облако 467 Объект DateTime 382 Serial 198 Объявление переменной 61 Оператор != 75 <= 62 #ifdef 381 if() 71 if...else 71 include 146 Keyboard.begin() 220 return 76 инверсии 76 присваивания 75 П Панель администрирования маршрутизатора 495 Переменная булева 75 волатильная 340 объявление 61 Период сигнала 67 Плата Adafruit METRO 328 534 Arduino Due 37 Feather 45, 427, 471 Mega ADR 192 Mega 2560 41 MKR1000 51 Seeeduino Lite 216 Photon 45 Uno 41 макетная беспаечная 55 Порт RS-232 186 перенаправление 497 последовательный компьютера 48 переадресация 493 ПРЕДМЕТНЫЙ УКАЗАТЕЛЬ 538 Преобразование NAT 468 Препроцессор директива 375 определение FORCE_UPDATE 381 Прерывание Arduino запуск 334 процедура обработки 333 Приложение Adafruit Bluefruit LE Connect 440, 442, 452, 453 Провод заземления 415 нулевой 415 фазный 415 Программа alternate.ino 236 arduino_read_pot.ino 208 bargraph.ino 243 blink.ino 62 BTLE_led.ino 447, 457 BTLE_sensor.ino 435 car.ino 132 chronograph.ino 164 debounce.ino 74 entrance_logger.ino 387 fun_with_sound.ino 347 hbridge.ino 123 hw_multitask.ino 341 lamp_remote.ino 416 LCD_progress_bar.ino 308 LCD_text.ino 305 LCD_thermostat.ino 321 led.ino 60 lightrider.ino 240 list_control.ino 204 lock_computer.ino 222 motor.ino 113 motor_pot.ino 115 mouse.ino 224 music.ino 179 nightlight.ino 101 piano.ino 183 pot.ino 89, 193 read_temp.ino 259 rf_test.ino 407 rgb_nightlight.ino 78 sd_read_write.ino 369 sd_read_write_rtc.ino 375 stepper.ino 157 sweep.ino 149 timer1.ino 344 web_weather_display.ino 518 web_weather.ino 509 write_to_sd.ino 365 загрузчика Arduino 38 последовательной связи PuTTY 197 Программатор AVRISP mkII 39 Проект OpenWeatherMap 499 Протокол Android Open Accessory 192 DHCP 470 FTP 426 HTTP 469 HTTPS 426 I2C 248 SMBus 248 SMTP 426 безопасности WPA 477 WPA2 477 Профиль Bluetooth A2DP 426 GATT 426 HID 454 Прошивка для WINC1500 475 Р Радиомодули XBee 398 Радиоспектр 400 Реализация Bluetooth Classic 425 Low Energy 425 BTLE 425 Регистр сдвиговый 230 Регистратор данных 352 Режим транзистора насыщения 109 шины SPI 273 ПРЕДМЕТНЫЙ УКАЗАТЕЛЬ 539 Резистор повышающий встроенный 160, 161 Реле 413 IoT Power Relay 416 принцип работы 416 С Светодиод падение напряжения 58 рабочий ток 58 трехцветный 77 Сервер DNS 470 Сервопривод 140 управление 141 Сигнал коэффициент заполнения 65 период 67 скважность 65 тактовый полярность 273 частота 343 цифровой модуляция 402 Система DNS 468 глобального позиционирования GPS 278 Служба HID Keyboard 454, 455 DNS 426 Сопряжение Bluetooth 454 Состояние «плавающее» 68 Спектр электромагнитный 398 Специальный символ новой строки 194 табуляции 194 Спецификатор const 61 Стабилизатор напряжения 127 Статор 107 Т Таймер Timer1 343 Типы данных 61 Ток утечки 70 Триггер Шмитта 338 У Управление сервоприводом 141 Уравнение мощности 59 Утилита JSON Pretty Printer 504 Ф Файл CSV 353 log.csv 365 pitches.h 174 заголовочный pitch.h 173 типа CSV 217 Формат FAT16 354 FAT32 354 JSON 501 Фоторезистор 98 Функция analogRead() 88 analogReference() 94 attachInterrupt() 340 boolean debounce (boolean last) 75 cmd.toLowerCase() 443 constraint() 100, 101 createChar() 307 debounce() 76, 317 delay() 52, 329 digitalPinToInterrupt() 333, 340 digitalRead() 71, 184 digitalWrite() 73 forward() 123 indexOf() 444 isConnected() 432 Keyboard.press() 223 Keyboard.print() 221 Keyboard.println() 221 Keyboard.releaseAll() 223 loop() 60 map() 100, 101 millis() 163 |