HM-10 Bluetooth 4.0 BLE модуль — Введение

Примечание

Перевод статьи HM-10 Bluetooth 4.0 BLE Module Introduction с сайта Martyn Currey.

Первая часть подробного обзора HM-10.

Всё, что вы хотели знать, и даже больше.

Введение

HM-10 — это небольшой SMD Bluetooth 4.0 BLE модуль на 3.3 В, построенный на микросхеме TI CC2540 или CC2541 Bluetooth SOC (System On Chip). HM-10 производится компанией Jinan Huamao Technology и является одним из многих Bluetooth-устройств, которые они выпускают.

Существует 4 версии HM-10. Различия заключаются в наличии USB-контактов и кварцевого резонатора.

1 — с USB-контактами и дополнительным кварцем

2 — с USB-контактами без дополнительного кварца

3 — без USB-контактов, но с дополнительным кварцем

4 — без USB-контактов, без дополнительного кварца

HM-10-S-A HM-10-S-B HM-10-C-A HM-10-C-B

Модели HM-10C-A и HM-10C-B не имеют контактных площадок внизу (USB-соединения) и, следовательно, имеют 26 контактов вместо 34, что делает их немного дешевле в производстве. Вариант B не имеет внешнего кварца, что ещё больше удешевляет модуль. Функционально они все одинаковы.

Основные характеристики HM-10

  • Построен на чипе CC2540 или CC2541

  • +2.5 В до +3.3 В

  • Потребляет до 50 мА

  • Потребляет около 9 мА в активном состоянии

  • Потребляет 50–200 мкА в спящем режиме

  • Мощность радиопередатчика: -23 дБм, -6 дБм, 0 дБм, 6 дБм

  • Bluetooth версии 4.0 BLE

  • Скорость по умолчанию для прошивки до V700: 9600

  • Скорость по умолчанию для прошивки V700 и выше: 115200

  • PIN по умолчанию: 000000

  • Имя по умолчанию: HMSoft

Последние HM-10 все, по-видимому, используют чип CC2541. Он аналогичен CC2540, но отличается меньшим энергопотреблением и меньшей дальностью. CC254x построен на ядре 8051 и работает на частоте 32 МГц.

HM-10 стал очень популярным Bluetooth 4 BLE модулем для использования с Arduino. Отчасти благодаря стандартному UART-подключению, которое позволяет относительно просто подключить его к Arduino. Уровень UART — это и хорошо, и плохо: он обеспечивает простоту использования, но скрывает BLE-слой, так что у вас нет контроля над реальной работой BLE. HM-10 поддерживает только Bluetooth 4.0. Это означает, что он не может подключаться к модулям Bluetooth 2/2.1, таким как HC-06 и HC-05.

HM-10 управляется AT-командами, которые отправляются через UART-подключение. Существует множество команд — от простых до более сложных — они рассматриваются далее.

Подделки

В интернете много комментариев о поддельных HM-10, и даже Jinan Huamao включает информацию об этом в даташиты. Я не рассматриваю не-HM-10 как подделки — я вижу их как аналогичные устройства с другой прошивкой. На мой взгляд, если бы они были подделками, они бы копировали прошивку.

Думаю, большая часть проблемы связана с тем, как не-HM-10 продаются, особенно на таких площадках, как eBay и AliExpress. Часто можно увидеть модули, продаваемые как HM-10, хотя на самом деле они таковыми не являются. Одним из самых простых способов отличить не-HM-10 было отсутствие кварцевого резонатора, но, к сожалению, теперь можно купить настоящие HM-10 без кварца, так что путаница, вероятно, будет усиливаться.

HM-10 на плате-переходнике (breakout board)

HM-10 на плате-переходнике

HM-10 доступен как небольшой SMD-модуль, а также установленный на плату-переходник, которая выводит питание и UART-соединения на удобные для макетной платы штырьковые контакты. Плата-переходник включает стабилизатор напряжения 3.3 В, что делает модуль совместимым с 5 В. Это делает их идеальными для хоббистов. Следует отметить, что вывод RX по-прежнему рассчитан на 3.3 В, и при использовании 5 В Arduino необходимо преобразовать 5 В TX Arduino до 3.3 В для RX HM-10.

Выводы HM-10 на плате-переходнике

Вывод

Описание

STATE

Статус соединения. LOW — нет соединения. HIGH — соединение установлено

VCC

Питание. 3.6 В до 6 В

GND

Общая земля

TXD

Serial UART передача

RXD

Serial UART приём

BRK

Разрыв соединения. При наличии активного соединения подача LOW на BRK разрывает соединение

Встроенный светодиод

Встроенный светодиод мигает в ожидании подключения — полсекунды горит, полсекунды не горит.

Светодиод загорается постоянно при установлении соединения и возвращается к миганию при разрыве соединения.

Светодиод загорается постоянно при сопряжении. После сопряжения возвращается к миганию. По сути, модуль устанавливает соединение для сопряжения, поэтому включает светодиод, чтобы показать статус соединения. После завершения сопряжения соединение закрывается и светодиод выключается.

Поведение светодиода можно изменить с помощью команды PIO1.

AT+PIO10 — настройка по умолчанию. Без соединения светодиод мигает 500 мс вкл, 500 мс выкл. При соединении горит постоянно.

AT+PIO11 — без соединения светодиод выключен. При соединении горит постоянно.

Вывод STATE

Вывод STATE находится в состоянии LOW, когда нет соединения, и переходит в HIGH при установлении соединения.

Вывод BRK

Вывод BRK позволяет разорвать соединение. При наличии активного соединения кратковременная подача LOW на вывод BRK разрывает соединение. Когда соединения нет, установка BRK в HIGH или LOW не имеет эффекта. Хотя это не строго обязательно, подтяжка вывода BRK к HIGH при обычном использовании предотвратит плавание вывода.

Сайт Jinan Huamao Technology

Сайт: http://www.jnhuamao.cn/index.asp

Страница продуктов: http://www.jnhuamao.cn/bluetooth.asp

Загрузка прошивок: http://www.jnhuamao.cn/download_rom_en.asp?id=1#

Примечания к выпускам прошивок: http://www.jnhuamao.cn/index_en.asp?ID=1

Информационный пакет Bluetooth 4

Помимо файлов прошивки, на сайте Huamao доступно довольно много ресурсов.

Информационный пакет можно скачать, нажав на одно из изображений HM-10 на странице Bluetooth сайта Huamao. Перейдите на сайт, нажмите на одно из изображений HM-10 и загрузите zip-архив.

Также можно скачать отсюда.

Zip-файл содержит даташит, инструкции по режиму самообучения и другие полезные заметки. Даташит в загрузке соответствует версии V610/V707 2020-02.

Информационный пакет HM-10

Даташит в загрузке показывает V610/V707 и не полностью актуален — в нём нет новой команды AT+READOF и используется старая команда AT+CO. Однако он включает AT+PACK, которая была введена в v702. Контроль версий у Huamao выглядит так же хорошо, как у меня…

Readme в архиве тоже не актуален (доходит до V605). Readme, который поставляется с загрузкой прошивки, лучше. Readme, поставляемый с прошивкой V710, включает информацию до V709.

Прошивка

Последняя прошивка — v710 (ссылка на загрузку говорит V710, но папка внутри zip-архива называется V709), и её можно скачать из центра загрузок. Перейдите на страницу загрузки прошивок и нажмите ссылку Firmware Download на левой стороне.

Скорости передачи по умолчанию в AT-режиме постоянно меняются. Это скорости, используемые для подключения к HM-10.

Прошивка до V700 — 9600.

Прошивка V700–V709 — 115200.

V710 — похоже, снова 9600.

Вот обновления/изменения начиная с V700:

V710

?

V709

  • Добавлены команды AT+Z1 AT+Z2 AT+Z3 AT+Z4 AT+Z5 AT+Z6.

  • Эти команды используются для изменения полного пакета объявлений (advertisement) и пакета ScanResponse.

  • Используйте HM_Config_Assistant.exe для получения списка AT-команд.

V708

  • Добавлен режим глубокого сна.

  • AT+IMME1 и AT+SLEEP (или AT+PWRM0) — переводят модуль в режим глубокого сна 0.1 мкА.

V707

  • Изменена команда AT+ADDR.

  • Команда AT+ADDR используется для изменения MAC-адреса модуля.

  • Запрос: AT+ADDR?

  • Установка: AT+ADDR

  • P1: 12 байт, строка MAC.

V706

  • Добавлена команда AT+UART.

  • Команда AT+UART используется для переключения функции пробуждения UART, когда модуль находится в спящем режиме.

  • P1: 1 байт, возможные значения ?, 0, 1

  • ?: Запрос

  • 0: Включить функцию пробуждения UART (значение по умолчанию)

  • 1: Выключить функцию пробуждения UART.

V705

  • Добавлена команда AT+READOF.

  • AT+READOF? — используется для чтения длинного значения характеристики.

  • P1: 2 байта, начальный индекс.

  • P2: 4 байта, Handle характеристики.

V704

  • Изменена команда AT+CO.

  • AT+CO[P3][P4][P5] — используется для установления соединения.

  • P1: 1 байт, тип устройства.

  • P2: 12 байт, MAC устройства.

  • P3: 4 байта, Notify Handle.

  • P4: 4 байта, Write Handle.

  • P5: 2 байта, Write property.

  • P1 и P2 обязательны для ввода.

V703

  • Добавлена команда AT+INDICA_ON.

V702

  • Улучшена функция пробуждения.

  • Добавлена команда AT+PACK для изменения данных в пакете объявлений (Advertisement).

  • AT+PACK[P1][P2][P3][P4][P5][P6]

  • P1, P2, P3, P4, P5, P6 — длина каждого 2.

  • P1, P2, P3, P4, P5, P6 — значения 00~FF.

V701

  • Добавлена команда AT+SET_WAY.

V700

  • Скорость по умолчанию изменена на 115200.

  • Удалена команда AT+ANCS.

  • Удалена команда AT+COMP.

  • Удалена команда AT+128B.

  • Добавлена новая функция для поддержки BLE-устройств разных производителей.

  • Добавлена команда AT+FINDSERVICES?

  • Добавлена команда AT+FINDALLCHARS?

  • Добавлена команда AT+NOTIFY_ON.

  • Добавлена команда AT+NTOIFYOFF.

  • Добавлена команда AT+READCHAR.

  • Добавлена команда AT+CHAR.

  • Добавлена команда AT+READDATA.

  • Добавлена команда AT+READDESC.

  • Добавлена команда AT+SEND_DATA.

Другие изменения включают:

  • Скорость по умолчанию изменена на 115200.

  • AT-режим теперь принимает команды как с окончаниями строк, так и без них.

Было много сообщений о том, что Android 8.1 не подключается к дешёвым BLE-модулям (включая поддельные HM-10). Поддержка Jinan Huamao утверждает, что HM-10 (оригинальные, не копии) совместимы с Android 8. У меня нет Android 8, поэтому я не пробовал и не могу подтвердить. Некоторое время на их сайте было сообщение о совместимости HM-10 с Android 8, но, похоже, раздел новостей больше не существует.

Прошивка версии 5.49 доступна в двух вариантах: обычная и с длинным именем. Обычная прошивка не имеет обновлённого readme, поэтому я не знаю, какие изменения были внесены. Прошивка с длинным именем добавляет, как вы догадались, длинные имена. Имена устройств теперь могут содержать до 29 символов. При этом функция iBeacon и функция ANCS были удалены. Это выглядит как одноразовый вариант (более поздние прошивки не имеют версии с длинным именем), и если вам не критически нужны длинные имена, я рекомендую использовать обычные прошивки.

У меня всегда были проблемы с использованием HM-10 с другими модулями. Мне так и не удалось полностью заставить их работать с модулями вроде BT05 и AT09. BT05 и AT09 могли получать данные от HM-10, но не наоборот.

Я несколько раз писал Jinan Huamao по этому поводу и не получал ответов, но похоже, что они хотя бы занялись проблемой, и начиная с прошивки V700 совместимость с другими BLE-модулями улучшилась.

Bluetooth 4 BLE

BLE — это не обновление Bluetooth Classic, а другая система с другими предполагаемыми вариантами использования. BLE работает совершенно иначе, чем более ранние версии Bluetooth.

BLE разработан для приложений с низким энергопотреблением и достигает этого за счёт использования нечастых небольших пакетов данных. Он не предназначен для постоянных соединений и передачи больших объёмов данных. Для этого лучше подходит Bluetooth Classic. По сути, BLE достигает низкого энергопотребления за счёт того, что подключается нечасто, в отличие от Bluetooth Classic, который поддерживает постоянное соединение.

Хотя вы можете создать соединение в классическом стиле с помощью двух HM-10 (и я привожу пример ниже), они не были предназначены для этого, и если это всё, что вам нужно, лучше использовать модули Bluetooth Classic, такие как HC-05 или HC-05 и HC-06.

Существует два способа взаимодействия BLE-устройств: Broadcaster + Observer (Вещатель + Наблюдатель) и Central + Peripheral (Центральное + Периферийное устройство). HM-10 может использовать оба метода.

  • В режиме Broadcaster + Observer стандартного соединения нет. Вещатель, обычно какой-либо датчик, периодически отправляет сигналы (рекламные пакеты), которые Наблюдатель прослушивает. Вещатель обычно не знает, слушает ли его кто-то.

  • Режим Central + Peripheral больше похож (но не точно такой же) на классическое соединение. Когда Центральное (master) устройство находит Периферийное (slave) устройство, к которому хочет подключиться, оно инициирует соединение и берёт на себя роль ведущего, управляя соединением и таймингами.

Сервисы и характеристики HM-10

BLE целиком построен на сервисах и характеристиках, и, как все BLE-устройства, HM-10 имеет набор сервисов, каждый из которых содержит набор связанных характеристик. Характеристики — это места, где хранятся значения; некоторые из них доступны для чтения (READ), некоторые для записи (WRITE), а некоторые для чтения и записи (READ и WRITE).

Все сервисы на HM-10 являются предопределёнными, кроме одного. Это пользовательский сервис с одной пользовательской характеристикой. Предопределённые сервисы и характеристики — это те, UUID и имя которых установлены управляющим органом Bluetooth. Например, характеристика 0x2A00 — это имя устройства, и когда устройство имеет эту характеристику, она всегда должна содержать имя устройства.

Полный список предопределённых сервисов можно найти здесь, а список характеристик — здесь.

HM-10 использует пользовательскую характеристику для отправки и получения данных, которые он получает через последовательный интерфейс UART. Это работает путём установки значения пользовательской характеристики в значение передаваемых данных. Затем модуль отправляет уведомление удалённому устройству о наличии новых данных.

Когда вы говорите HM-10 передать «HELLO», он сначала устанавливает значение пользовательской характеристики в «HELLO», а затем отправляет уведомление удалённому устройству: «Эй, у меня новые данные, приходи и забирай». Удалённое устройство сканирует уведомления, и когда получает одно, оно знает, что доступно новое значение, поэтому читает данные и отправляет обратно сообщение: «Спасибо, получил».

Пользовательская характеристика может содержать до 20 символов, что означает, что для отправки строки длиннее 20 символов HM-10 разбивает данные на сегменты по 20 символов и отправляет каждый по очереди, пока не останется ни одного.

СЕРВИС 1

UUID: 00001800-0000-1000-8000-00805F9B34FB

GENERIC ACCESS

  • UUID: 00002A00-0000-1000-8000-00805F9B34FB — DEVICE NAME — READ

  • UUID: 00002A01-0000-1000-8000-00805F9B34FB — APPEARANCE — READ

  • UUID: 00002A02-0000-1000-8000-00805F9B34FB — PERIPHERAL PRIVACY FLAG — READ/WRITE

  • UUID: 00002A03-0000-1000-8000-00805F9B34FB — RECONNECTION ADDRESS — READ/WRITE

  • UUID: 00002A04-0000-1000-8000-00805F9B34FB — PERIPHERAL PREFERRED CONNECTION PARAMETERS — READ

СЕРВИС 2

UUID: 00001801-0000-1000-8000-00805F9B34FB

GENERIC ATTRIBUTE

  • UUID: 00002A05-0000-1000-8000-00805F9B34FB — SERVICE CHANGED — INDICATE

СЕРВИС 3

UUID: 0000FFE0-0000-1000-8000-00805F9B34FB

CUSTOM SERVICE (Пользовательский сервис)

  • UUID: 0000FFE1-0000-1000-8000-00805F9B34FB — CUSTOM CHARACTERISTIC — READ/WRITE/NOTIFY

Основную часть UUID пользовательского сервиса (FFE0) и основную часть UUID пользовательской характеристики (FFE1) можно изменить с помощью AT-команд.

Также можно добавить вторую характеристику.

Вы можете увидеть сервисы и характеристики в действии, используя приложение BLE Scanner. Давайте попробуем.

Начало работы с HM-10

Сначала используем Android-устройство для поиска HM-10. Затем попробуем прочитать сервисы и характеристики HM-10. Вы также можете использовать устройство iOS, но вам нужно будет найти подходящее приложение BLE Scanner.

Включите питание HM-10 — для этого можно использовать Arduino или просто подключить 5 В к VCC HM-10 и GND к GND HM-10.

Подключение HM-10

Если всё сделано правильно, светодиод на HM-10 должен мигать. При установлении соединения светодиод загорится постоянно.

Проверка HM-10 с Android-устройством

В зависимости от вашего Android-устройства и версии Android, HM-10 может отображаться или не отображаться при поиске Bluetooth-устройств в настройках Android.

Samsung S9 с Android 10 — находит HM-10

Lenovo TAB-M8 планшет с Android 10 — находит HM-10

Samsung S9 — поиск HM-10 Lenovo TAB-M8 — поиск HM-10

Если ваше устройство не находит HM-10 в настройках Bluetooth, попробуйте использовать приложение BLE Scanner.

Для подключения к HM-10 и чтения сервисов и характеристик нам нужно использовать BLE-приложение. Здесь я использую BLE Scanner. Существует множество других аналогичных приложений, например B-BLE.

Чтение характеристик HM-10 с помощью BLE Scanner

Откройте приложение BLE Scanner и найдите HM-10. Нажмите кнопку CONNECT, чтобы приложение подключилось к HM-10 и начало чтение его свойств.

BLE Scanner — поиск HM-10 BLE Scanner — подключение к HM-10

Нажатие на маленькие стрелки вниз раскроет сервисы и отобразит характеристики.

BLE Scanner — сервисы и характеристики

R = Прочитать значение (Read)

W = Записать значение (Write)

I = Включить/выключить индикации (Indications)

N = Включить/выключить уведомления (Notifications)

Нажатие на одну из меток R прочитает значение характеристики. Например, в разделе Device Name нажатие на R прочитает и отобразит значение имени устройства.

BLE Scanner — имя устройства

В разделе Custom Service вы можете увидеть значения сервиса и характеристики HM-10 по умолчанию. Вы также можете видеть, что пользовательская характеристика HM-10 имеет атрибуты Read, Write и Notify.

BLE Scanner — пользовательская характеристика

Вот и всё. Теперь вы готовы к следующей части — общению с HM-10.