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-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 доступен как небольшой SMD-модуль, а также установленный на плату-переходник, которая выводит питание и UART-соединения на удобные для макетной платы штырьковые контакты. Плата-переходник включает стабилизатор напряжения 3.3 В, что делает модуль совместимым с 5 В. Это делает их идеальными для хоббистов. Следует отметить, что вывод RX по-прежнему рассчитан на 3.3 В, и при использовании 5 В Arduino необходимо преобразовать 5 В TX Arduino до 3.3 В для RX 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.
Даташит в загрузке показывает 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 с Android-устройством
В зависимости от вашего Android-устройства и версии Android, HM-10 может отображаться или не отображаться при поиске Bluetooth-устройств в настройках Android.
Samsung S9 с Android 10 — находит HM-10
Lenovo TAB-M8 планшет с Android 10 — находит 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 и начало чтение его свойств.
Нажатие на маленькие стрелки вниз раскроет сервисы и отобразит характеристики.
R = Прочитать значение (Read)
W = Записать значение (Write)
I = Включить/выключить индикации (Indications)
N = Включить/выключить уведомления (Notifications)
Нажатие на одну из меток
прочитает значение характеристики. Например, в разделе Device Name нажатие на
прочитает и отобразит значение имени устройства.
В разделе Custom Service вы можете увидеть значения сервиса и характеристики HM-10 по умолчанию. Вы также можете видеть, что пользовательская характеристика HM-10 имеет атрибуты Read, Write и Notify.
Вот и всё. Теперь вы готовы к следующей части — общению с HM-10.