- •От издательства
- •О техническом обозревателе
- •О соавторах
- •Об авторах
- •Вступительное слово
- •Благодарности
- •Предисловие
- •Почему важна защита интернета вещей?
- •Чем защита интернета вещей отличается от традиционной ИТ-защиты?
- •Законы хакинга интернета вещей
- •Заключение
- •Моделирование угроз для интернета вещей
- •Схема моделирования угроз
- •Определение архитектуры
- •Разбивка архитектуры на компоненты
- •Выявление угроз
- •Использование деревьев атак для обнаружения угроз
- •Распространенные угрозы интернета вещей
- •Атаки с подавлением сигнала
- •Атаки с воспроизведением
- •Атаки со взломом настроек
- •Клонирование узла
- •Заключение
- •Пассивная разведка
- •Физический или аппаратный уровень
- •Периферийные интерфейсы
- •Среда загрузки
- •Блокировки
- •Предотвращение и обнаружение несанкционированного доступа
- •Прошивка
- •Интерфейсы отладки
- •Физическая устойчивость
- •Разведка
- •Атаки на сетевой протокол и службы
- •Тестирование беспроводного протокола
- •Оценка веб-приложений
- •Картирование приложений
- •Элементы управления на стороне клиента
- •Аутентификация
- •Управление сеансом
- •Проверка ввода
- •Логические ошибки
- •Сервер приложений
- •Исследование конфигурации хоста
- •Учетные записи пользователей
- •Привилегии учетной записи
- •Уровни патчей
- •Удаленное обслуживание
- •Управление доступом к файловой системе
- •Шифрование данных
- •Неверная конфигурация сервера
- •Мобильное приложение и облачное тестирование
- •Заключение
- •4. Оценка сети
- •Переход в сеть IoT
- •VLAN и сетевые коммутаторы
- •Спуфинг коммутатора
- •Двойное тегирование
- •Имитация устройств VoIP
- •Идентификация устройств IoT в сети
- •Обнаружение паролей службами снятия отпечатков
- •Атаки MQTT
- •Настройка тестовой среды
- •Написание модуля MQTT Authentication-Cracking в Ncrack
- •Тестирование модуля Ncrack на соответствие MQTT
- •Заключение
- •5. Анализ сетевых протоколов
- •Проверка сетевых протоколов
- •Сбор информации
- •Анализ
- •Создание прототипов и разработка инструментов
- •Работа с Lua
- •Общие сведения о протоколе DICOM
- •Генерация трафика DICOM
- •Включение Lua в Wireshark
- •Определение диссектора
- •Определение основной функции диссектора
- •Завершение диссектора
- •Создание диссектора C-ECHO
- •Начальная загрузка данных функции диссектора
- •Анализ полей переменной длины
- •Тестирование диссектора
- •Разработка сканера служб DICOM для механизма сценариев Nmap
- •Написание библиотеки сценариев Nmap для DICOM
- •Коды и константы DICOM
- •Написание функций создания и уничтожения сокетов
- •Создание заголовков пакетов DICOM
- •Написание запросов контекстов сообщений A-ASSOCIATE
- •Чтение аргументов скрипта в движке сценариев Nmap
- •Определение структуры запроса A-ASSOCIATE
- •Анализ ответов A-ASSOCIATE
- •Создание окончательного сценария
- •Заключение
- •6. Использование сети с нулевой конфигурацией
- •Использование UPnP
- •Стек UPnP
- •Распространенные уязвимости UPnP
- •Злоупотребление UPnP через интерфейсы WAN
- •Другие атаки UPnP
- •Использование mDNS и DNS-SD
- •Как работает mDNS
- •Как работает DNS-SD
- •Проведение разведки с помощью mDNS и DNS-SD
- •Злоупотребление на этапе проверки mDNS
- •Атаки «человек посередине» на mDNS и DNS-SD
- •Использование WS-Discovery
- •Как работает WS-Discovery
- •Подделка камер в вашей сети
- •Создание атак WS-Discovery
- •Заключение
- •UART
- •Аппаратные средства для связи с UART
- •Как найти порты UART
- •Определение скорости передачи UART
- •JTAG и SWD
- •JTAG
- •Как работает SWD
- •Аппаратные средства для взаимодействия с JTAG и SWD
- •Идентификация контактов JTAG
- •Взлом устройства с помощью UART и SWD
- •Целевое устройство STM32F103C8T6 (Black Pill)
- •Настройка среды отладки
- •Кодирование целевой программы на Arduino
- •Отладка целевого устройства
- •Заключение
- •Как работает SPI
- •Как работает I2C
- •Настройка архитектуры шины I2C типа «контроллер–периферия»
- •Заключение
- •9. Взлом прошивки
- •Прошивка и операционные системы
- •Получение доступа к микропрограмме
- •Взлом маршрутизатора Wi-Fi
- •Извлечение файловой системы
- •Статический анализ содержимого файловой системы
- •Эмуляция прошивки
- •Динамический анализ
- •Внедрение бэкдора в прошивку
- •Нацеливание на механизмы обновления микропрограмм
- •Компиляция и установка
- •Код клиента
- •Запуск службы обновления
- •Уязвимости служб обновления микропрограмм
- •Заключение
- •10. Радио ближнего действия: взлом rFID
- •Радиочастотные диапазоны
- •Пассивные и активные технологии RFID
- •Структура меток RFID
- •Низкочастотные метки RFID
- •Высокочастотные RFID-метки
- •Настройка Proxmark3
- •Обновление Proxmark3
- •Клонирование низкочастотных меток
- •Клонирование высокочастотных меток
- •Имитация RFID-метки
- •Изменение содержимого RFID-меток
- •Команды RAW для небрендированных или некоммерческих RFID-тегов
- •Подслушивание обмена данными между меткой и считывателем
- •Извлечение ключа сектора из перехваченного трафика
- •Атака путем подделки RFID
- •Автоматизация RFID-атак с помощью механизма скриптов Proxmark3
- •Пользовательские сценарии использования RFID-фаззинга
- •Заключение
- •11. Bluetooth Low Energy (BLE)
- •Как работает BLE
- •Необходимое оборудование BLE
- •BlueZ
- •Настройка интерфейсов BLE
- •Обнаружение устройств и перечисление характеристик
- •GATTTool
- •Bettercap
- •Взлом BLE
- •Настройка BLE CTF Infinity
- •Приступаем к работе
- •Заключение
- •12. Радиоканалы средней дальности: взлом Wi-Fi
- •Как работает Wi-Fi
- •Атаки Wi-Fi на беспроводные клиенты
- •Деаутентификация и атаки «отказ в обслуживании»
- •Атаки на Wi-Fi путем подключения
- •Wi-Fi Direct
- •Атаки на точки доступа Wi-Fi
- •Взлом WPA/WPA2
- •Взлом WPA/WPA2 Enterprise для сбора учетных данных
- •Методология тестирования
- •Заключение
- •13. Радио дальнего действия: LPWAN
- •Захват трафика LoRa
- •Настройка платы разработки Heltec LoRa 32
- •Настройка LoStik
- •Превращаем USB-устройство CatWAN в сниффер LoRa
- •Декодирование протокола LoRaWAN
- •Формат пакета LoRaWAN
- •Присоединение к сетям LoRaWAN
- •Атаки на LoRaWAN
- •Атаки с заменой битов
- •Генерация ключей и управление ими
- •Атаки воспроизведения
- •Подслушивание
- •Подмена ACK
- •Атаки, специфичные для приложений
- •Заключение
- •14. Взлом мобильных приложений
- •Разбивка архитектуры на компоненты
- •Выявление угроз
- •Защита данных и зашифрованная файловая система
- •Подписи приложений
- •Аутентификация пользователя
- •Управление изолированными аппаратными компонентами и ключами
- •Проверенная и безопасная загрузка
- •Анализ приложений iOS
- •Подготовка среды тестирования
- •Статический анализ
- •Динамический анализ
- •Атаки путем инъекции
- •Хранилище связки ключей
- •Реверс-инжиниринг двоичного кода
- •Перехват и изучение сетевого трафика
- •Анализ приложений Android
- •Подготовка тестовой среды
- •Извлечение файла APK
- •Статический анализ
- •Обратная конвертация двоичных исполняемых файлов
- •Динамический анализ
- •Перехват и анализ сетевого трафика
- •Утечки по побочным каналам
- •Заключение
- •15. Взлом умного дома
- •Физический доступ в здание
- •Клонирование RFID-метки умного дверного замка
- •Глушение беспроводной сигнализации
- •Воспроизведение потока с IP-камеры
- •Общие сведения о протоколах потоковой передачи
- •Анализ сетевого трафика IP-камеры
- •Извлечение видеопотока
- •Атака на умную беговую дорожку
- •Перехват управления интеллектуальной беговой дорожкой на базе Android
- •Заключение
- •Инструменты для взлома интернета вещей
- •Предметный указатель
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-xcha |
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
используетлогику при получении сообщений отузла.Например,если |
|
|
|
|
|
m |
||||
w Click |
|
|
|
|
|
|
||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
узел сообщает значение температуры выше определенного порогаdf,-x chan |
.c |
|
||||||||
|
. |
|
|
|
|
|
|
|||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
|
|
|
|
|
e |
|
сервер может ответить узлу командами предпринять соответствую- щие действия (скажем, открыть клапан). В сетях LoRaWAN исполь- зуется топология типа «звезда»: несколько узлов могут взаимодей- ствовать с одним или несколькими шлюзами,которые подключаются к одному сетевому серверу.
Узел |
|
|
Узел |
Шлюз |
Сервер приложений |
|
||
Узел |
|
Сетевой сервер |
|
|
|
Узел |
Шлюз |
|
|
|
|
Узел |
|
Сервер приложений |
|
|
|
Узел |
|
|
Рис.13.1.Сетевая архитектура LoRaWAN
Захват трафика LoRa
В этом разделе мы продемонстрируем, как захватить трафик LoRa. Сделав это, вы научитесь использовать язык программирования Cir- cuitPython и взаимодействовать с простыми аппаратными инстру- ментами. Различные инструменты могут захватывать сигналы LoRa, но мы выбралите,которыедемонстрируютметоды,применимыедля других задач взлома IoT.
В этом упражнении мы будем использоватьтри компонента:
zzLoStik – устройство USB LoRa с открытым исходным кодом (до- ступно по адресу https://ronoth.com/lostik/). LoStik использует мо- дули Microchip RN2903 (США) или RN2483 (ЕС), в зависимости от региона, в котором вы находитесь;
zzCatWAN – USB-адаптер с открытым исходным кодом,совмести-
мый с LoRa и LoRaWAN (доступен по адресу https://electroniccats. com/store/catwan-usb-stick/);
zzHeltec LoRa 32 – плата разработки ESP32 для LoRa (https://heltec. org/project/wifi-lora-32/). Платы ESP32 – недорогие микроконтрол- леры с низким энергопотреблением.
Мы превратим LoStik в приемник, а плату Heltec – в отправителя, а затем попросим их связаться друг с другом с использованием LoRa.
Радио дальнего действия: LPWAN 357
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-xcha |
|
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
|
X |
|
|
|
|
|
|||
|
|
- |
|
|
|
|
|
d |
|
||
|
|
F |
|
|
|
|
|
|
t |
|
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
r |
||
|
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
BUY |
|
|
|||
Затем настроим карту CatWAN в качестве сниффера для захвата тра- |
|
|
to |
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
m |
|||
|
w Click |
|
|
|
|
|
|
||||
|
w |
|
|
|
|
|
|
|
|
|
|
фика LoRa. |
|
w |
|
df-x chan |
|
o |
|
||||
|
. |
.c |
|
||||||||
|
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
|
|
|
|
|
|
e |
|
Настройка платы разработки Heltec LoRa 32
Начнем с программирования платы Heltec с помощью Arduino IDE. (Обратитесь к главе 7, чтобы познакомиться с Arduino.)
Установите среду разработки Arduino IDE, если у вас ее еще нет, а затемдобавьтебиблиотекиHeltecдляArduino-ESP32.Этопозволит вам программировать платы ESP32, такие как модуль Heltec LoRa, с помощью Arduino IDE. Для установки выберите File > Preferenc- es > Settings (Файл > Предпочтения > Настройки), затем нажмите кнопку Additional Boards Manager URLs (Менеджер дополнитель-
ных плат). Добавьте в список следующий URL: https://resource.heltec. cn/download/package_heltec_esp32_index.json и нажмите OK. Затем вы-
полните команды Tools > Board > Boards Manager (Инструменты > Плата > Менеджер плат). Найдите Heltec ESP32 и нажмите Install
(Установить)для пункта Heltec ESP32 Series отHeltecAutomation,ко-
торый должен появиться в списке плат.Мы специально использова-
ли версию 0.0.2-rc1.
Следующий шаг – установка библиотеки Heltec ESP32. Нажмите
Sketch > Include Library > Manage Libraries (Скетч > Включить биб лиотеку >Управлятьбиблиотеками).Найдите Heltec ESP32 и нажмите
Install для строки Heltec ESP32 Dev-Boards от Heltec Automation. Мы использовали версию 1.0.8.
ПРИМЕЧАНИЕ Вы можете найти наглядное руководство по уста- новке поддержки Heltec Arduino-ESP32 по адресу https://heltec-auto- mation-docs.readthedocs.io/en/latest/esp32+arduino/quick_start.html?high- light=esp32.
Чтобы проверить, где сохранены библиотеки, нажмите File > Pref- erences > Sketchbook location (Файл > Свойства > Расположение блокнота скетчей). В Linux указанный там каталог обычно находится в /home/<имя пользователя>/Arduino, где вы должны найти подпапку library, содержащую такие библиотеки, как Heltec ESP32 Dev Boards.
Вам также, вероятно, потребуется установить драйвер VCP моста UART, чтобы плата Heltec отображалась как последовательный порт при подключении ее к компьютеру. Вы можете получить драйверы по адресу https://www.silabs.com/products/development-tools/software/usb- to-uart-bridge-vcp-drivers/. При работе в Linux убедитесь, что вы выбра- ли правильную версию для ядра, которое используете. Примечания к версии включают инструкции о том, как скомпилировать модуль ядра.
Обратите внимание: если вы вошли в систему как пользовательбез полномочий root, вам может потребоваться добавить свое имя поль- зователя в группу имеющих право на чтение и запись файлов специ- альных устройств /dev/ttyACM* и /dev/ttyUSB*. Это потребуется для
358 Глава 13
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-xcha |
|
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
|
X |
|
|
|
|
|
|||
|
|
- |
|
|
|
|
|
d |
|
||
|
|
F |
|
|
|
|
|
|
t |
|
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
r |
||
|
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
|
to |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
доступа к функциям Serial Monitor из среды Arduino IDE. Откройте |
|
|
|
|
|
m |
|||||
|
w Click |
|
|
|
|
|
|
||||
|
w |
|
|
|
|
|
|
|
|
|
|
терминал и введите эту команду: |
|
w |
|
df-x chan |
|
o |
|
||||
|
. |
.c |
|
||||||||
|
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
|
|
|
|
|
|
e |
|
$ ls -l /dev/ttyUSB*
crw-rw---- 1 root dialout 188, 0 Aug 31 21:21 /dev/ttyUSB0
Этот вывод означает, что владельцем группы файла является dial out (в вашем случае, вероятно, будет иное имя группы), так что вам нужно добавить свое имя пользователя в эту группу:
$ sudo usermod -a -G dialout <имя пользователя>
Пользователи, принадлежащие к группе dialout, имеют полный и прямойдоступ к последовательным портам в системе.Последобав- ления имени пользователя в группу у вас должен быть доступ, необ- ходимый для этого шага.
Программирование модуля Heltec
ЧтобызапрограммироватьмодульHeltec,подключимегокUSB-порту на нашем компьютере.
Убедитесь, что вы сначала подключили съемную антенну к основ- ному модулю.В противном случае можно повредить плату (риc.13.2).
Рис.13.2.Heltec Wi-Fi LoRa 32 (V2) основан на ESP32 и SX127x и поддерживает
Wi-Fi,BLE,LoRa и LoRaWAN.Стрелка указывает,где подключить антенну
ВсредеArduinoIDEвыберитеплату,нажавTools/Board/WiFiLoRa32 (V2), как показано на рис. 13.3.
Затем мы начнем писать программу Arduino, которая заставит мо- дуль Heltec действовать как отправитель пакетов LoRa. Код настроит радиомодульмодуляHeltecиотправитпростыеполезныеданныеLoRa в цикле.Щелкните File/New и вставьте код из листинга 13.1 в файл.
Радио дальнего действия: LPWAN 359
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-xcha |
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
Рис.13.3.Выберите правильную плату в Arduino IDE: WiFi LoRa 32 (V2)
Листинг 13.1. Код Arduino, который позволяет модулю Heltec LoRa действовать как базовый отправитель пакетов LoRa
#include "heltec.h" #define BAND 915E6 String packet;
unsigned int counter = 0;
void setup() {
Heltec.begin(true, true, true, true, BAND); Heltec.display->init(); Heltec.display->flipScreenVertically(); Heltec.display->setFont(ArialMT_Plain_10); delay(1500);
Heltec.display->clear();
Heltec.display->drawString(0, 0, "Heltec.LoRa успешно настроен!");
Heltec.display->display(); delay(1000);
}
void loop() { Heltec.display->clear();
Heltec.display->setTextAlignment(TEXT_ALIGN_LEFT); Heltec.display->setFont(ArialMT_Plain_10);
Heltec.display->drawString(0, 0, "Отправка пакетов: ");
Heltec.display->drawString(90, 0, String(counter)); Heltec.display->display();
360 Глава 13
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-xcha |
|
|
|
|
LoRa.beginPacket();
LoRa.disableCrc(); LoRa.setSpreadingFactor(7);
LoRa.setTxPower(20, RF_PACONFIG_PASELECT_PABOOST);
LoRa.print("Не очень секретное сообщение LoRa ");
LoRa.endPacket();
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
counter++; |
|
|
digitalWrite(LED, HIGH); |
// |
включить светодиод (HIGH – высокое напряжение) |
delay(1000); |
|
|
digitalWrite(LED, LOW); |
// |
погасить светодиод (LOW – низкое напряжение) |
delay(1000); |
|
|
}
Сначала мы включаем библиотеки Heltec, которые содержат функ- ции для взаимодействия с OLED-дисплеем на плате и микросхема- ми узла SX127x LoRa. Мы используем версию LoRa для США, поэтому определяем частоту равной 915 МГц.
Вызываем функцию setup(), которая, как вы помните, вызыва- ется один раз,когда стартует проектArduino.Здесь мы используем ее для инициализации модуля Heltec и его OLED-дисплея. Четыре логи- ческих значения в Heltec.begin включаютвстроенныйдисплей; радио LoRa; последовательный интерфейс, который позволяет вам видеть выходные данные устройства с помощью Serial Monitor, о котором вкратце рассказывается; и PABOOST (передатчик большой мощно- сти). Последний аргумент устанавливает частоту, используемую для передачи сигналов.Остальные команды внутри setup() инициализи- руют и настраивают OLED-дисплей.
Какиsetup(),функцияloop() являетсявстроеннойфункциейAr- duino и работает в бесконечном цикле, поэтому здесь мы размещаем нашу основную логику. Каждый цикл мы начинаем с печати строки Sending packet:, за которой следует счетчик на OLED-дисплее, чтобы отслеживать, сколько пакетов LoRa мы уже отправили.
Затем запускаем процесс отправки пакета LoRa. Следующие четыре команды настраивают радиомодуль LoRa: они отключают
проверку циклической избыточности (cyclic redundancy check, CRC)
в заголовке LoRa (по умолчанию CRC не используется), устанавли- вают коэффициент передачи на 7, мощность передачи – на макси- мальное значение 20 и добавляют в пакет фактическую полезную нагрузку (с помощью функции LoRa.print() из библиотеки Heltec). CRC–это значение фиксированнойдлиныдля обнаружения ошибок, которое помогает получателю проверять наличие повреждений па- кета. Коэффициент передачи определяет продолжительность пакета LoRa в эфире. SF7 – это самое короткое время в эфире, SF12 – самое длинное.Каждыйшагувеличенияпоказателяраспространенияудва- ивает время,котороетребуется в эфире для передачитого же объема данных. Несмотря на замедление, более высокие коэффициенты пе- редачи могут использоваться для передачи на большее расстояние. Мощность передачи – это мощность радиочастотной энергии в ват-
Радио дальнего действия: LPWAN 361
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-xcha |
|
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
|
X |
|
|
|
|
|
|||
|
|
- |
|
|
|
|
|
d |
|
||
|
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
r |
|||
P |
|
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
BUY |
|
|
|||
тах, которую будет излучать радиомодуль LoRa; чем она выше, тем |
|
|
|
to |
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
m |
||
w Click |
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
df-x chan |
|
o |
|
|||||
сильнее будет сигнал. Затем мы отправляем пакет , вызывая LoRa. |
. |
.c |
|
||||||||
|
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
|
|
|
|
|
|
e |
|
endPacket().
ПРИМЕЧАНИЕ Важно установить показатель распространения равным 7,если узлы LoRa находятся рядом друг с другом (в той же ком- нате или даже здании). В противном случае вы столкнетесь с серьез- ной потерей или повреждением пакетов.В нашем случае,когда все три компонента находились в одной комнате, было необходимо использо- вание SF7.
Наконец, увеличиваем счетчик пакетов и включаем, а затем гасим светодиод на плате Heltec,чтобы указать,что мытолько что отправи- ли еще один пакет LoRa .
ЧтобылучшеразобратьсявпредставленнойздесьпрограммеArdu- ino,мы рекомендуем изучить код библиотеки Heltec ESP32 LoRa идо-
кументацию по API: https://github.com/HelTecAutomation/Heltec_ESP32/ tree/master/src/lora/.
Тестирование отправителя LoRa
Чтобы попробовать код, загрузите его в плату Heltec. Убедитесь, что вы выбрали правильный порт в среде Arduino IDE. Нажмите Tools > Port (Инструменты > Порт) и выберите портUSB,к которому подклю- чен Heltec. Обычно это /dev/ttyUSB0 или, в некоторых случаях, /dev/ ttyACM0.
На этом этапе вы можете открыть консоль Serial Monitor, нажав Tools > Serial Monitor (Инструменты > Монитор последовательного порта). Мы перенаправили большую часть вывода на OLED-дисплей платы, поэтому консоль не нужна в этом упражнении.
Затем нажмите Sketch > Upload (Скетч > Загрузить), чтобы ском- пилировать, загрузить и запустить код на плате. Теперь вы должны увидеть счетчик пакетов на экране платы, как показано на рис. 13.4.
Рис.13.4.Плата Heltec,на которой запущен наш код и отображается номер отправляемого пакета
362 Глава 13