Arduino с RN4870/1
RN4870/1 — это небольшой BLE-модуль от Microchip, шириной всего 12 мм. В отличие от распространённых модулей для любителей, таких как HM-10, AT-09 и BT05, RN4870/1 предлагает расширенные возможности, позволяющие создавать пользовательские сервисы и характеристики, обеспечивая настоящую функциональность BLE. Несмотря на доступность, он остаётся недостаточно используемым в сообществе любителей электроники.
Характеристики RN4870/1
Полностью квалифицированный модуль Bluetooth 5.0 Low Energy
Сертифицирован FCC, IC, CE, KCC, NCC и SRRC
Встроенный стек Bluetooth 5.0 Low Energy
Интерфейс ASCII-команд через UART
Скриптовый движок для автономной работы
Сервис Beacon Private для маячковых сервисов
UART Transparent Service для последовательных данных
Удалённая конфигурация по воздуху (OTA)
Модуль использует ASCII-команды вместо AT-стиля и включает встроенный язык сценариев, позволяющий автономную работу без отдельного микроконтроллера в некоторых приложениях.
Полные возможности BLE 5.0
Безопасное шифрование AES128
GAP, GATT, SM, L2CAP и интегрированные публичные профили
Пользователь может создать до пяти публичных и четырёх частных сервисов
Программно настраиваемая роль: периферийное или центральное устройство, клиент или сервер
Аутентификация через клавиатурный ввод/вывод
RN4870/1 доступен в различных конфигурациях: с экранированием или без, с различными вариантами антенн и разными уровнями доступности выводов.
Начало работы
Создание платы расширения
Маленький SMD-формат RN4870/1 представляет сложности для любителей. Базовая плата расширения может быть изготовлена при аккуратной пайке. Автор установил свой модуль вверх ногами, чтобы сохранить доступ к контактам для будущих модификаций.
Перемычка, соединяющая пин 18/P2_0 с GND, включает режим программирования при запуске для обновления прошивки.
Альтернативные варианты плат расширения:
MikroElektronika RN4870/1 Click board — готовое решение
Разработки Jon Raymond — платы от сообщества
Gerber-файлы David Ashmore — доступны для скачивания с 2-пиновым I2C-интерфейсом, 2-пиновым I/O-интерфейсом и 8-пиновым SIP-интерфейсом
Выводы и базовая схема
Основные выводы:
Pin 3: GND
Pin 4: VBAT (вход 3.3 В)
Pin 23: UART_TX
Pin 22: UART_RX
Pin 30: Светодиодный индикатор (рекомендуется)
Предупреждение
Модуль работает на 3.3 В. Никогда не подавайте на него питание 5 В.
Тестирование начальной функциональности
Новые модули включают базовую настройку маячка, которую можно протестировать без дополнительной конфигурации:
Подайте питание 3.3 В и GND на модуль
Используйте приложение BLE-сканер (например, BLE Scanner от Bluepixel Technologies) на Android
Найдите маячок RN4870 в результатах сканирования
Подключитесь к устройству
Прочитайте имя устройства в характеристике Generic Access (0x1800)
При подключении светодиод меняет режим на два быстрых мигания в секунду.
Общение с RN4870/1
Настройка последовательной связи
Необходим USB-UART адаптер на 3.3 В. Модуль использует:
Скорость по умолчанию: 115200 бод
Все команды требуют символа возврата каретки (CR) (
\r)Два режима работы: режим данных (по умолчанию) и режим команд
Вход в режим команд
RN4870/1 входит в режим команд с помощью команды $$$. Важно, что эта команда работает только без символов конца строки. После входа модуль отвечает CMD>.
Для возврата в режим данных используйте ---\r (три символа тире плюс CR).
Базовые команды
Команда «D» — Информация об устройстве
Возвращает:
MAC-адрес устройства
Случайный адрес (если применимо)
Имя устройства
MAC-адрес подключённого устройства
Метод аутентификации
Функции устройства
Серверные сервисы
Фиксированный PIN-код (если настроен)
Команда «V» — Версия прошивки
Возвращает текущую версию прошивки (пример показывает v1.18.3).
Команда «GNR» — Получить имя подключённого устройства
Требует активного соединения. Возвращает имя текущего подключённого BLE-устройства.
При отключении модуль выводит сообщение %DISCONNECT%.
Первая связь
Предварительные требования
Прошивка 1.30 или новее (поставляется с сервисами и характеристиками по умолчанию)
Arduino IDE с правильно выбранным COM-портом
Приложение BLE Scanner на Android-устройстве
Процесс подключения
Откройте монитор последовательного порта в Arduino IDE
Запустите приложение BLE Scanner и начните сканирование
Выберите RN4870 из результатов сканирования
Нажмите CONNECT
Выберите «Custom Service» после подключения
Наблюдайте сообщение о подключении в мониторе последовательного порта
Обмен данными
Приём данных:
Пользовательская характеристика:
49535343-8841-43F4-A8D4-ECBE34729BB3Нажмите кнопку записи, введите текст (например, «hello»), нажмите OK
Модуль получает данные и отображает их в мониторе последовательного порта
Отправка данных:
Характеристика приёма:
49535343-1E4D-4BD9-BA61-23C647249616Включите уведомления через кнопку приложения
Введите данные в мониторе последовательного порта (например, «hello to you»)
Данные появляются в значении характеристики
Notify vs. Indicate
Существуют два метода уведомления с различными характеристиками:
Notify (Уведомление):
Не требуется подтверждение
Более быстрая передача
Менее надёжно
Позволяет непрерывный поток данных
«Вот данные, берите пока можете»
Indicate (Указание):
Требуется подтверждение после каждой передачи
Медленнее, но надёжнее
Модуль ждёт подтверждения перед отправкой следующего пакета
«Вот данные, вы их получили?»
Соединение двух модулей RN4870
RN4870/1 включает встроенный прозрачный UART-слой для простой связи между модулями. Эта функция повторяет функциональность HC-10, хотя эти модули предлагают более экономичную альтернативу, если нужна только последовательная передача.
Настройка подключения (прошивка 1.30)
Настройка модуля:
Войдите в режим команд на основном модуле:
$$$(без EOL)Включите UART transparent service:
SS,C0Начните сканирование:
FЗапишите MAC-адрес целевого модуля из результатов сканирования
Подключитесь:
C,0,[MAC_ADDRESS](0=публичный адрес, 1=частный адрес)
Установление соединения:
Оба модуля получают сообщения о подключении на последовательных терминалах. После подключения модули могут обмениваться данными в обоих направлениях.
Пример
Для подключения к модулю с MAC-адресом D88039F914F5:
C,0,D88039F914F5
Успешное подключение приводит к подтверждению на обоих устройствах, обеспечивая прозрачную последовательную связь.
Обновление прошивки
Требования
Модуль RN4870/1
USB-UART адаптер (3.3 В)
Программа isUpdate.exe от Microchip
Файлы прошивки (4 файла)
Номер COM-порта
Вход в режим программирования
Пин P2_0 (нижний центральный пин) должен быть подтянут к земле во время загрузки для входа в режим программирования.
Способы на плате расширения:
Перемычка, соединяющая P2_0 с GND
Проводное соединение P2_0 с GND (менее надёжно, несёт риски)
Процесс обновления прошивки
Скачайте isUpdate.exe и файлы прошивки со страницы документации Microchip RN4870
Закройте все открытые приложения монитора последовательного порта
Отключите питание RN4870
Подключите P2_0 к GND
Подайте питание (светодиод может не загореться, несмотря на документацию)
Откройте isUpdate.exe со следующими настройками:
COM-порт (например, COM 7)
Скорость: 115200
Тип памяти: Flash/Embedded Flash
Адрес: 0000
Нажмите «Connect»
При успехе появится сообщение «Port connect» и активируются кнопки
Выберите все 4 файла прошивки
Нажмите «Update»
Дождитесь сообщения «End of Write Memory»
Проверка после обновления
Закройте isUpdate или нажмите Disconnect
Отключите питание RN4870
Удалите провод программирования
Перезапустите модуль (светодиод должен загореться)
Откройте монитор последовательного порта
Войдите в режим команд:
$$$(без EOL)Проверьте прошивку:
V(с CR EOL)
Примечания к выпуску сопровождают каждую версию прошивки. При обновлении через несколько версий просмотрите все промежуточные примечания к выпуску для полной истории изменений.
Дополнительные ресурсы
Обзор продукта Microchip RN4870: официальная страница с даташитами, руководствами и прошивкой
Технические детали: сайт Microchip Developer с полной документацией
Форум Microchip: поддержка сообщества по вопросам RN4870/1
Даташит: полные технические спецификации и конфигурации выводов
Примечание
Оригинальная статья: Arduino with RN4870/1 (Martyn Currey)