Программирование AVR Модули HM-10 Bluetooth 4 BLE Thu, November 21 2024  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.


Модули HM-10 Bluetooth 4 BLE Печать
Добавил(а) microsin   

Здесь приведен перевод руководства по использованию Bluetooth модулей HM-10 от Martyn Currey [1]. В описании использовались модули с версиями программного обеспечения 5.47 и 5.49.

Для firmware версии 5.49 есть 2 варианта, regular и long name. У версии regular нет обновленного readme, так что неизвестно, что в нем поменялось, если таковое было. Версия long name, как следует из названия, добавляет использование длинного имени, которое может иметь длину до 29 символов. В то же самое время удалены функции iBeacon и ANCS. Если Вам не нужно обязательно иметь длинные имена, то лучше оставаться на версии regular firmware.

Примечание переводчика: на момент перевода 181214 вышла версия 7.00 firmware HM-10.

2017-07-26 доступно Firmware 5.50.

2017-09.01 доступно Firmware 6.01 (исправлены ошибки, нет новых команд).

2017-10.xx доступно Firmware 6.03, расширена команда CO. Добавлена команда AT+MPIO (multi PIO control). Подробности см. в файле readme. В настоящее время (ноябрь 2017) руководство не было обновлено.

2018-03-24. Поддержка Jinan Huamao указала, что HM-10 (оригинальный, не копии) совместим с Android 8. На сайте они также добавили комментарий, что HM-10 работает с Android 8.

2018-03. Доступны модули HM-10 с версией firmware 6.05, но Jinan Huamao не сделал релиза этого firmware, v6.03 все еще остается самым последним firmware, доступным для загрузки. Все выглядит так, что Jinan Huamao избавляется от фейковых копий. Независимо от не выпуска последнего firmware последние HM-10 имеют надпись "HM-10", напечатанную шелкографией на PCB.

HM 10S A

HM-10 это маленький модуль 3.3v SMD Bluetooth 4.0 BLE, основанный на Bluetooth SOC-чипе CC2540 или CC2541 от TI (Texas Instruments). HM-10 сделаны Jinan Huamao, и это один из многих Bluetooth-устройств, которые они производят, включая модуль HM-11, который работает так же, как HM-10, отличаясь тем, что у HM-11 печатная плата меньше и меньшее количество контактов.

Есть 2 версии HM-10: HM-10C и HM-10S.

HM 10C HM 10S
HM-10C HM-10S

У HM-10C нет контактов на нижнем торце платы (соединения с USB), и у него 26 контактов вместо 34, что делает его дешевле в производстве. Могут быть и другие отличия (такие как используемый тип кварца) из-за даты изготовления. По сути это одинаковые модули.

Основные параметры HM-10:

• Напряжение питания от +2.5v до +3.3v, требуемый максимальный ток 50mA.
• В активном состоянии ток потребления около 9mA, и в состоянии сна 50 .. 200uA.
• Выходная мощность RF: -23dbm, -6dbm, 0dbm, 6dbm.
• Bluetooth version 4.0 BLE.
• Скорость по умолчанию последовательного порта 9600 бод.
• PIN по умолчанию 000000, имя по умолчанию HMSoft.
• Основан на чипе CC2540 или CC2541.

Все последние 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.

HC 05 FC 114 HC 06 FC 114

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

[HM-10 на переходной плате]

HM-10 также доступен смонтированным на специальной плате (breakout board), которая выводит цепи питания и сигналы UART на штырьковый разъем (с шагом 2.54 мм), удобный для установки в плату макетирования и подключения к другим устройствам.

HM 10 nonBranded

На breakout board установлен стабилизатор питания 3.3v, что делает модуль HM-10 совместимым с 5V, что идеально подходит для домашнего творчества. Однако следует помнить, что вывод RX все еще имеет рабочие уровни 3.3v, и когда HM-10 используется вместе со стандартным 5v Arduino, то следует преобразовать 5v уровень сигнала TX платы Arduino в уровень 3.3v для сигнала RX модуля HM-10.

Таблица с цоколевкой переходной платы:

Сигнал I/O Описание
1 BRK Вход Вывод для подачи сигнала разрыва соединения (Break). Если соединение активно, то перевод BRK в лог. 0 разорвет соединение.
2 VCC   Напряжение питания в диапазоне от 3.6V до 6V.
3 GND   Земля, общий провод для цепей питания и сигналов.
4 TXD Выход Передача TTL UART.
5 RXD Вход Прием TTL UART.
6 STATE Выход Состояние соединения. Лог. 0, если соединение не активно, лог. 1, если установлено соединение.

LED. На плате установлен светодиод (LED), который мигает при ожидании соединения с частотой 1 Гц (полсекунды выключен, полсекунды включен). LED светится постоянно, когда соединение установлено, и снова начинает мигать, когда соединение разрывается.

LED начинает светиться постоянно, когда осуществляется соединение (pairing). После pairing он возвращается к миганию. Это в основном устанавливает связь для соединения, и LED показывает его состояние. После завершения pairing соединение закрывается, и LED гаснет.

Поведение LED можно поменять командой PIO1.

AT+PIO10 – установка по умолчанию. Когда модуль не соединен, LED мерцает 500 мс включен, 500 мс выключен. Когда соединение есть, LED светится постоянно.
AT+PIO11 – когда нет соединения, LED погашен. Когда соединение есть, LED постоянно светится.

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

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

Подделки. В Интернете есть много комментариев про поддельные HM-10, и даже Jinan Huamao добавили информацию об этом с даташиты. Автор [1] на рассматривает эти не-HM-10 устройства как фальшивки, а просто как устройства с другой версией ПО (firmware). Если бы они были фальшивками, то копировали бы firmware.

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

[Bluetooth 4 BLE]

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

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

Есть два способа, как устройства BLE могут общаться друг с другом: Broadcaster + Observer и Central + Peripheral. HM-10 могут использовать оба этих метода.

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

• Сценарий Central + Peripheral более похож на классическое соединение (однако оно не полностью такое же, как классическое). Когда устройство Central (главное устройство, master) находит устройство Peripheral (подчиненное устройство, slave), устройство Central хочет соединиться с Peripheral и инициирует соединение. В результате Central получает соединение и берет на себя роль управления соединением и его интервалами времени.

[Характеристики и службы HM-10]

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

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

Полный список предопределенных служб можно найти по ссылке [2], и полный список характеристик по ссылке [3].

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

Когда Вы говорите модулю HM-10 передать "HELLO", он сначала устанавливает значение custom-характеристики в "HELLO", и затем отправляет оповещение, говорящее дальнему устройству: "Эй, у меня есть новые данные, подключайся и получи их". Дальнее устройство сканирует оповещения, и когда получает его, то знает о появлении нового значения, читает его данные и затем отправляет обратно сообщение "Благодарю, все получил".

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

SERVICE 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
 
SERVICE 2
UUID: 00001801-0000-1000-8000-00805F9B34FB
GENERIC ATTRIBUTE
 
• UUID: 00002A05-0000-1000-8000-00805F9B34FB
• SERVICE CHANGED
• INDICATE
 
SERVICE 3
UUID: 0000FFE0-0000-1000-8000-00805F9B34FB
CUSTOM SERVICE
 
• UUID: 0000FFE1-0000-1000-8000-00805F9B34FB
• CUSTOM CHARACTERISTIC
• READ/WRITE/NOTIFY

Основная часть custom-службы UUID (FFE0) и основную часть custom-характеристики UUID (FFE1) можно поменять командами AT. Может быть также добавлена вторая характеристика.

Сначала попробуем использовать устройство Android, чтобы прочитать службы и характеристики из модуля HM-10. Подайте питание на HM-10, для этого можно использовать Arduino, однако достаточно просто подать +5V на ножку HM-10 VCC и общий провод (минус) соединить с ножкой GND HM-10 GND.

HM 10 Get Sarted 01

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

Проверка HM-10 на устройстве Android. В зависимость от Вашего устройства Android и версии операционной системы Android на нем можно увидеть или не увидеть HM-10 среди устройств Bluetooth (Bluetooth devices) в настройках (Android Settings).

Samsung S7 на Android 6.0.1 – находит HM-10 и позволяет выполнить pairing. Sony Z3 Compact на Android 4.4.4 – находит HM-10 и позволяет выполнить pairing. Huawei honor pro 4 на Android 4.4.4 – не находит HM-10.

HM 10 S7 SCRN 01 HM 10 Sony Z3 SCRN 01 HM 10 honorPro4 SCRN 01
Samsung S7,
Android 6.0.1
Sony Z3 Compact,
Android 4.4.4
Huawei honor pro 4,
Android 4.4.4

Устройства Samsung S7 и Sony Z3 Compact показывают HM-10 в своих настройках, а honor Pro 4 не показывает. Но при использовании приложения BLE все эти телефоны находят HM-10.

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

HM 10 Samsung S7 Pairing 02

Модули могут пройти pairing с использованием pin по умолчанию 000000 (конечно, если Вы не поменяли его).

Чтобы подключиться к HM-10 и прочитать его службы и характеристики, нам понадобится приложение BLE. Автор использовал для этого BLE Scanner. Могут быть и другие подобные приложения, такие как B-BLE.

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

HM 10 BLE Scanner 03 HM 10 BLE Scanner 04

Кликая на маленькие стрелки вниз, можно раскрыть службы и отобразить их характеристики.

HM 10 BLE Scanner 05

Тыкая на метки HM 10 R icon, программа будет считывать значения характеристики. Например, под Device Name, если ткнуть на HM 10 R icon, то будут прочитано и показано значение имени устройства.

HM 10 BLE Scanner 06

Назначение меток:

 R  прочитать значение.
 W  записать значение.
 I  переключить индикации (on и off).
 N  переключить оповещения (on и off).

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

HM 10 BLE Scanner CustChar 07

Как и любое устройство BLE, работающее через все службы и характеристики, HM-10 работает через установку custom-характеристики для соответствия передаваемым данным (данные, принятые через последовательное соединение). Это можно увидеть при использовании приложения BLE Scanner.

Используя схему и скетч из раздела "Общение между Arduino и HM-10" (см ниже), подключите к Arduino модуль HM-10 и откройте Serial Monitor. Вы должны увидеть что-то наподобие того, что показано на скриншоте ниже. Используйте команду AT, что подтвердить работу соединения. Если соединение есть, HM-10 ответит OK.

HM 10 Serial Monitor AT cmd

Теперь в приложении BLE Scanner подключитесь к HM-10 тычком по кнопке CONNECT.

HM 10 Service Char 01

Откройте секцию "CUSTOM SERVICE" включите оповещения (notifications on) тычком на иконку HM 10 N icon.

HM 10 Service Char 02

Теперь всякий раз, когда Вы что-то набираете на клавиатуре в Serial Monitor Arduino, это должно появляться как значение custom-характеристики в программе BLE Scanner.

HM 10 Service Char 03

HM 10 Service Char 04

Чтобы отправить текст из приложения в Serial Monitor, ткните на иконку записи HM 10 W icon, и введите что-нибудь в появившемся окне ввода текста. Вы заметите, что значение custom-характеристики меняется в соответствии с вводимым текстом. Этот текст также должен появляться в окне Serial Monitor.

HM 10 Service Char 05

HM 10 Service Char 06

[Общение между Arduino и HM-10]

Следующее, что мы проделаем, это подключим HM-10 к Arduino, и попробуем реализовать базовую последовательную коммуникацию и протестируем AT-команды.

Примечание: AT-команды работают только тогда, когда HM-10 не подключен по Bluetooth. После того, как соединение произошло, передаваемые через UART команды обрабатываются как данные. "AT" является исключением, команда "AT" разрывает соединение.

Схема. Выполните соединения следующим образом:

– Ножку TX модуля HM-10 подключите к Arduino D8.
– Ножку RX HM-10 к делителю напряжения, и через него к Arduino D9(*).
– HM-10 GND к GND Arduino.
– HM-10 VCC к +5V Arduino.;

Примечание (*): сигналы HM-10 работают только с уровнями логики 3.3v. Официально никак не заявлено, что они "5v tolerant" (т. е. нет возможности напрямую подавать на них уровни логики 5V), поэтому используется делитель напряжения, чтобы привести уровни логики 5V к уровням 3.3V.

Автор [1] для общения с модулями использовал библиотеку AltSoftSerial. AltSoftSerial использует ножку D9 Arduino для передачи, и ножку D8 для приема. Вам понадобиться добавить библиотеку AltSoftSerial в Arduino IDE, чтобы можно было компилировать примеры скетчей, показанных далее.

Примечание: для связи с HM-10 использовалась программная реализация UART на библиотеке AltSoftSerial вместо стандартного аппаратного порта Arduino. Это было сделано для того, чтобы освободить стандартный порт Arduino для вывода отладочных сообщений.

HM 10 Circuit 01

HM 10 Breadboard 01

Модуль HM-10 является 3.3v устройством. Breakout board преобразует напряжение +5v VCC к 3.3v для питания HM-10, но сигнал RX все еще остается с уровнями 3.3v. Поэтому нам нужно понизить уровень логики Arduino 5V TX до 3.3V. Самый простой способ - сделать делитель напряжения из двух резисторов. Можно использовать резисторы 1 кОм и 2 кОм. 1K+2K = 3K. 2K составляют две трети от 3K, что соответствует 3.3V, которые также составляют две трети от 5V.

HM 10 VoltageDivider

Arduino увидит 3.3v сигнал на выводе HM-10 TX как лог. 1, поэтому можно напрямую соединить HM-10 TX и Arduino RX (D8).

Также можно подключить светодиод к выводу STATE, для чего нужен токоограничивающий резистор. На выходе STATE напряжение лог. 1, которое должно зажечь светодиод, составляет 3.3v, поэтому нужен резистор 100 Ом для ограничения тока на уровне приблизительно 10 мА. Подойдет любой другой резистор со значением 150 .. 470 Ом. Светодиод на выходе STATE будет загораться вместе со светодиодом на модуле HM-10.

HM 10 Circuit 03 LED HM 10 Breadboard 04 LED

Скетч Serial. После сборки схемы выгрузите следующий скетч. Это простая программа последовательного ввода и вывода. Все, что Arduino примет от Serial Monitor, будет зеркально послано в HM-10. Все, что передаст HM-10, отобразится в окне Serial Monitor.

Модулю HM-10 не нравятся символы конца строки(*) LF и CR (/n/r), не добавляете их к командам. Автор использовал символы конца строки при выводе в окно терминала, чтобы примеры было легче читать, и скетч выводит эти символы в Serial Monitor, но не отправляет их в HM-10.

Примечание (*): с версией 6.05 firmware добавлена возможность использовать произвольное окончание строк (с добавлением или без добавления /n/r).

Скетч использует библиотеку AltSoftSerial [5], поэтому она должна быть добавлена в Arduino IDE, или скопирована в папку library перед тем, как можно будет выполнить компиляцию.

// SerialIn_SerialOut_HM-10_01
//
// Используется аппаратный интерфейс serial для общения компьютера хоста
// и AltSoftSerial, чтобы осуществилась связь с модулем Bluetooth.
//
// Все, что было введено в окне Serial Monitor, отправляется в подключенное
// устройство HM-10. Все, что было получено подключенным устройством HM-10,
// отображается в окне Serial Monitor. В HM-10 не передаются специальные
// символы завершения строки (/n/r).
//
// Соединения:
//
// BT VCC               - Arduino 5V
// BT GND               - Arduino GND
// Arduino D8 (SS RX)   - BT TX (без делителя напряжения)
//  Arduino D9 (SS TX)  - BT RX (через делитель напряжения 5v -> 3.3v)
//
#include < AltSoftSerial.h>
AltSoftSerial BTserial;
// https://www.pjrc.com/teensy/td_libs_AltSoftSerial.html
 
char c=' ';
boolean NL = true;
 
void setup() 
{
   Serial.begin(9600);
   Serial.print("Sketch:   ");   Serial.println(__FILE__);
   Serial.print("Uploaded: ");   Serial.println(__DATE__);
   Serial.println(" ");
   BTserial.begin(9600);  
   Serial.println("BTserial started at 9600");
}
 
void loop()
{
   // Чтение из модуля Bluetooth и отправка в Arduino Serial Monitor:
   if (BTserial.available())
   {
      c = BTserial.read();
      Serial.write(c);
   } 
 
   // Чтение из Serial Monitor и отправка в модуль Bluetooth:
   if (Serial.available())
   {
      c = Serial.read();
      // Символы CR и LF (/r и /n) не отправляются к HM-10 в качестве
      // окончания строки:
      if (c!=10 & c!=13 ) 
      {
         BTserial.write(c);
      }
      // Эхо пользовательского ввода в главное окно.
      // Если новая строка, то печатается символ ">".
      if (NL) { Serial.print("\r\n>");  NL = false; }
      Serial.write(c);
      if (c==10) { NL = true; }
   }
}

Откройте Serial Monitor, включите питание модуля, и Вы должны увидеть что-то наподобие следующего:

HM 10 SerialMonitor 01

HM-10 требует ввода команд в верхнем регистре, обычно без добавления символов конца строки. Показанный выше скетч использует символы завершения строки только для пользователя, чтобы строки удобно отображались в окне Serial Monitor, т. е. символы завершения строки не посылаются в модуль Bluetooth, и вместо этого печатаются, когда эхо команд отображается в окне Serial Monitor. Для работы необязательно добавлять символы конца строк в данные для Serial Monitor, но это упрощает чтения следующих примеров. Обычно при работе командами с HM-10 все вводится в одной строке.

Помните, что когда Вы используете другие скетчи или адаптер USB - serial UART, необходимо настроить окончание строк без символов CR и LF (установка line endings -> No line ending в нижней части окна Serial Monitor).

В нижней части окна Serial Monitor установите скорость обмена 9600 baud, и все наши скетчи могут использовать настройку с использованием символов окончания строки:

HM 10 SerialMonitor 02

Чтобы проверить, правильно ли сделаны установки, мы используем команду "AT". Она используется для подтверждения работы канала команд, и должна вернуть ответ модуля "OK". Также "AT" можно использовать, чтобы разорвать активное соединение.

Введите "AT" (без кавычек) в поле ввода текста и кликните Send. Если все работает, то Вы должны увидеть "OK".

HM 10 SerialMonitor 03 AT

Чтобы проверить, какая версия firmware в HM-10, используйте AT+VERR?

HM 10 SerialMonitor 04 VERR

Чтобы проверить имя модуля, используйтеAT+NAME?, или используйте устройство Android и в нем поиск устройств Bluetooth. Для HM-10 имя по умолчанию HMsoft.

HM 10 SerialMonitor 05 NAME

HM 10 SerialMonitor 06 NAME Android Это работает только когда HM-10 в режиме Salve/Peripheral. Когда активен режим Master/Central, устройство не отправляет свое имя.























Чтобы получить адрес модуля, используйте AT+ADDR?

HM 10 SerialMonitor 07 ADDR

Имя можно поменять с помощью AT+NAME. Позже это будет использоваться для двух HM-10, чтобы помочь с их идентификацией - где какой. Как Вы увидите, имя было изменено на HMsoft-38A3. "38A3" здесь последние 4 цифры MAC-адреса устройства.

HM 10 SerialMonitor 08 NAME

Чтобы получить характеристики модуля Bluetooth, используйте AT+CHAR? или программу BLE scanner.

HM 10 SerialMonitor 09 CHAR

Чтобы найти UUID используйте AT+UUID? Это возвратит "OK+Get:0xFFE0".

HM 10 SerialMonitor 10 UUID

[Общие команды AT]

В таблице ниже дан список основных команд AT. Помните, что команды должны быть в верхнем регистре, и они не должны включать символы окончания строки (\r\n), если Вы не используете специальный скетч, который учитывает эту особенность модуля HM-10, удаляя эти символы.

Команда Описание
AT Команда тестирования и команда разрыва соединения. Если модуль не подключен по радио к другому устройству, то он ответит "OK". Если у модуля в настоящий момент активно соединение по радио с другим устройством, то соединение будет закрыто. Если активна настройка оповещения, то модуль ответит "OK+LOST".
AT+NAME? Опрос имени устройства. Модуль вернет имя модуля, которое используется в вещании (такое как HMsoft).
AT+NAMEnewname Меняет имя модуля. Например, команда AT+NAMEmyBTmodule поменяет имя устройства на myBTmodule. Максимальная длина нового имени может быть 12 символов.
AT+ADDR? Опрашивает MAC-адрес модуля. Вернет адрес в виде 12 шестнадцатеричных символов, например "OK+ADDR:606405D138A3".
AT+VERS?
AT+VERR?
Опрашивает номер версии firmware. Пример возвращенного номера версии: "HMSoft V540".
AT+RESET Перезапускает модуль. Модуль ответит "OK+RESET". Во время перезапуска активное соединение будет закрыто.
AT+RENEW Восстанавливает заводские настройки по умолчанию, быстрый и простой способ сбросить все настройки.
AT+BAUD? Запрашивает скорость обмена данными через UART. Эта скорость относится только к обмену данными с хостом, таким как Arduino, и не относится к скорости передачи данных по радио между модулями. В ответ на эту команду вернет значение от 0 до 8, например "OK+Get:0". Числа обозначают ряд скоростей: 0 – 9600, 1 – 19200, 2 – 38400, 3 – 57600, 4 – 115200, 5 – 4800, 6 – 2400, 7 – 1200, 8 – 230400. Настройка скорости по умолчанию 0 – 9600. Помните, что для обоих устройств, общающихся через UART (Arduino и HM-10) должна быть настроена одинаковая скорость обмена. Причиной мусорных символов часто бывает несоответствие настроек скорости.
AT+BAUDx Устанавливает скорость обмена данными через UART. Скорость задается числом x в диапазоне от 0 до 8 (см. команду AT+BAUD?). Максимальная скорость обмена для Arduino составляет 115200, так что если Вы установите 230400, то не сможете общаться с модулем.
AT+NOTIx Устанавливает состояние оповещения. Если оповещения включены, то HM-10 будет отвечать на команды сообщением подтверждения, или будет посылать сообщение при определенных событиях, например "OK" в ответ на команду AT и "OK+LOST" когда соединение разорвано. AT+NOTI0 выключает оповещения, AT+NOTI1 включает оповещения.
AT+NOTI? Опрашивает состояние оповещения. Возвратит 0 (оповещения выключены) или 1 (оповещения включены).
AT+PIN? Опрашивает номер PIN, использующийся для pairing. Возвратит номер из 6 цифр наподобие "OK+Get:123456". Вместо набора символов 123456 в этом примере может быть текущий установленный PIN.
AT+PIN Устанавливает новый PIN/PASS. PIN должен быть длиной 6 символов. AT+PIN654321 задает новый PIN на значение 654321.
AT+ROLE? Опрашивает текущую роль устройства, Master (главное устройство) или Slave (подчиненное устройство). Возвратит 0 (Slave или Peripheral) или 1 (Master или Central). Установка по умолчанию 0 (Slave).
AT+ROLEx Устанавливает роль устройства, x = 0 или 1. Используйте команду AT+ROLE0 для смены режима модуля на Slave/Peripheral, в ответ на эту команду модуль возвратит "OK+Set:0". Для смены режима на Master/Central используйте команду AT+ROLE1, модуль возвратит "OK+Set:1". В зависимости от версии firmware может потребоваться сброс, чтобы новая роль вступила в силу.
AT+IMME? Опрашивает режим запуска соединения. Возвратит 0 или 1. 0 означает соединяться немедленно (подразумевается, что ранее устанавливалось это соединение), 1 означает ждать команды, которая запускает соединение (AT+START, AT+CONN, AT+CONL). Установка по умолчанию 0 (соединяться при запуске модуля, т. е. при включении питания).
AT+IMMEx Устанавливает режим запуска соединения. AT+IMME0 устанавливает автоматическое соединение при старте(*), AT+IMME1 установит режим соединения вручную. Команда AT+IMMEx часто используется вместе с AT+ROLEx. AT+IMMEx может потребовать сброс, чтобы её установка вступила в силу.
AT+RESET Перезапускает (сбрасывает) модуль.
AT+RENEW Устанавливает у модуля заводские настройки по умолчанию.

Примечание (*): если не было предыдущих соединений, HM-10 автоматически подключится к любому другому доступному HM-10 (обычно к тому, у которого сигнал сильнее). HM-10 (по умолчанию) запоминает адрес последнего модуля, к которому он было подключен, и если он в эфире, то ранее сохраненное соединение имеет приоритет, когда HM-10 повторно пытается поднять автоматическое соединение.

Полный список команд см. в официальной документации (в архиве [7] см. файлы HM-DataSheet_V2017-07.pdf для версии 5.50 и HM-DataSheet_V5.45-2017-01.pdf для версии 5.45).

[Сканирование в поиске других модулей HM-10]

Автор использовал два модуля HM-10, один был подключен к Arduino, как было показано выше, на другой просто было подано питание.

HM 10 SCAN 01 Breadboard

Чтобы гарантировать, что используются заводские настройки по умолчанию, используется команда AT+RENEW:

HM 10 SCAN 02 RENEW

По умолчанию HM-10 находится в режиме Slave или Peripheral, и для сканирования других устройств нам нужно перевести модуль в режим Central или Master. Для этого используется команда AT+ROLE.

AT+ROLE? опрашивает, в каком режиме находится устройство.
AT+ROLE0 устанавливает модуль в режим Peripheral (подчиненное устройство).
AT+ROLE1 устанавливает модуль в режим Central (главное устройство).

В старых версиях firmware команда AT+ROLE требовала сбросить HM-10 либо передергиванием питания, либо с помощью команды AT+RESET. В более новых версиях firmware модуль сбрасывает себя сам (это видно по сообщению приветствия "www.jnhuamao.cn"). Таким образом перед тем, как мы переключимся в режим Master/Central, нужно выключить auto connect командой AT+IMME. У команды AT+IMME есть две опции: AT+IMME0 и AT+IMME1.

AT+IMME0 настраивает модуль на auto connect при старте (включении питания). Это режим по умолчанию.

AT+IMME1 настраивает модуль на ожидание поступления одной из AT-команд управления соединением (AT+START, AT+CON и AT+CONNL) перед тем, как модуль попытается выполнить соединение.

Если модули настроены на auto-connect, то когда мы вводим AT+ROLE1, модули автоматически соединятся перед тем, как у нас есть шанс ввести команду AT+IMME1 (auto-connect осуществляется довольно быстро).

Используйте AT+IMME1 для остановки автоматического соединения HM-10.

HM 10 SCAN 03 IMME

Используйте AT+ROLE1, чтобы перевести HM-10 в режим Central (главное устройство).

HM 10 SCAN 04 ROLE

Если Вы используете более старое firmware, то понадобится сбросить модуль либо передергиванием питания, либо командой AT+RESET. Если Вы забыли сбросить модуль, то команда AT+DISC не сработает.

Чтобы просканировать другие модули HM-10 используйте команду AT+DISC? (от слова Discover, т. е. "обнаружить").

HM 10 SCAN 05 DISC

В ответ будет выведен адрес (адреса) найденного модуля (модулей).

OK+DISCSOK+DIS0:A81B6AAE55E4OK+DISCE

Сообщение "OK+DISCE" показывает, что сканирование завершено.

Результаты сохранены в списке, этот список начинается с позиции 0, и может использоваться для запуска соединения командой AT+CONNx вместо ввода полного адреса. Здесь x это номер индекса или значение позиции в списке. Таким образом, если HM-10 найдет только один модуль, то результат будет сохранен по индексу 0 и AT+CONN0? можно использовать для подключения к этому модулю. Когда найдено больше одного модуля, адреса будут сохранены в списке в том порядке, как они были обнаружены.

После того, как соединение произошло, список очищается. Это означает, что если Вам нужно разорвать и повторно организовать соединение, то необходимо снова использовать команду AT+DISC?. Для экспериментов с AT командами вполне допустимо использовать AT+CONNx, но для реальной работы лучше запускать соединение с помощью полного адреса, это сделает скетч более надежным и легким для написания.

Имейте в виду, что AT+DISC? найдет только те модули HM-10, которые установлены в режим Peripheral. Вы не можете просканировать и найти модули, установленные в режим Central.

[Соединение Arduino-Arduino с помощью двух HM-10]

Можно довольно просто подключить друг к другу две платы Arduino с помощью двух модулей HM-10. Это работает как мост, и после установки соединения уровень UART HM-10 делает всю необходимую работу. Подразумевается, что при этом уровень UART не дает Вам никакого контроля над подробностями функционирования BLE. Чтобы сделать соединение, нам нужно перевести главный модуль в режим ручного соединения, установить режим Central, и затем использовать команду соединения AT+CON. После того, как HM-10 соединились, данные передаются путем установки значения custom-характеристики на передаваемые данные. Тогда принимающее устройство прочитает это значение.

На картинке ниже показаны соединения двух Arduino со своими модулями. Для каждого Arduino эти соединения одинаковые.

HM 10 Connection Circuit 01

HM 10 Breadboard Connection 02

HM 10 Breadboard Connection 03

В тесте использовались две разные версии Arduino IDE: одна 1.82, другая 1.63. Это дало возможность запустить два окна Serial Monitor. Одна плата Arduino была подключена через COM6, и другая через COM9.

HM 10 Connection 01 2 SerialMonitors

Запуск соединения HM-10 - HM-10 вручную. Чтобы осуществить соединение, сделайте следующее:

1. Установите второй (подчиненный) модуль в режим Peripheral (установка по умолчанию).
2. Установите первый (главный) модуль в режим запуска вручную с помощью AT+IMME1.
3. Установите первый (главный) модуль в режим Central с помощью AT+ROLE1.
4. Используйте AT+CON для соединения. Конечно, Вам нужно предварительно узнать адрес второго модуля, что можно найти командой AT+DISC?.

HM 10 Connection 02

После того, как у нас есть полный адрес второго HM-10, можно установить соединение либо с помощью этого адреса, либо с помощью индекса в списке. Здесь использовался адрес, и команда получилась вида AT+CONA81B6AAE5221. Вам нужно поменять адрес на другой, соответствующий адресу модуля.

HM 10 Connection 03 CON

Если соединение прошло успешно, то мы получим сообщение OK+CONNA, светодиоды LED на обоих модулях HM-10 перестанут мигать и будут гореть постоянно.

HM 10 Connection 04 CON

Теперь с помощью Serial Monitor можно передавать данные от одной платы Arduino к другой.

HM 10 Connection 05

HM 10 Connection 06

Автоматическая установка соединения HM-10 - HM-10. HM-10 может автоматически установить соединение после подачи питания без использования команды соединения. Когда рядом находятся 2 или большее количество модулей, и один из них в режиме Central, то он будет искать и подключаться к другому модулю HM-10. Это осуществляется полностью автоматически, и нет никакого контроля за тем, к какому модулю произойдет соединение, хотя обычно соединение происходит с тем модулем, от которого сигнал сильнее. Конечно, если присутствуют только 2 модуля, то это не имеет значения. Если у Вас есть только 2 модуля, установите один из них в режим Peripheral, и другой в режим Central. После этого они соединятся автоматически, ничего больше не требуется.

Если ранее уже осуществлялось соединение, то оно запоминается в памяти устройства, и у него будет приоритет при установке соединения перед возможными соединениями с другими модулями. После того, как Вы сделали соединение вручную, разорвите соединение (передергиванием питания), затем введите "AT+IMME0" (это включит auto connect). Затем сбросьте модуль либо новым передергиванием питания, либо командой AT+RESET. После этого эти модули должны соединиться автоматически, даже когда в области действия находятся другие модули HM-10.

Команда AT+IMME1 останавливает запуск автоматического соединения. Помните, что Вы не можете использовать AT-команды, когда соединение активно, потому что вводимые команды обрабатываются как данные (исключение составляет команда "AT", которая разрывает соединение). Поэтому для ввода AT-команд нужно выключить Peripheral-модуль и сбросить модуль Central.

[Дистанционное управление светодиодом с помощью HM-10]

Это очень простой пример дистанционного управления, когда нажатие кнопки, подключенной к одной из плат Arduino, приводит к зажиганию светодиода, подключенного к другой плате. Соединены эти платы только по радиоканалу, с помощью двух модулей HM-10.

К Arduino #1 мы добавим кнопку на порт D2 и к Arduino #2 добавим LED на порт D4, см. рисунок ниже.

HM 10 Circuit LED 01

Сигнал от кнопки на Arduino #1 подтягивается к земле через резистор 10 кОм. Таким образом, нажатие кнопки подает на D2 Arduino уровень лог. 1 (когда кнопка не нажата, на D2 уровень лог. 0). LED на Arduino #2 подключен через токоограничивающий резистор 220 Ом (также хорошо подойдет любой резистор 330 .. 680 Ом).

HM 10 connection 06 BreadBoards

HM 10 Remote LED

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

BTserial.print("AT+IMME1");
delay(1000);
BTserial.print("AT+ROLE1");
delay(1000);
BTserial.print("AT+CONA81B6AAE5221");
delay(1000);

Это не лучшее решение, но оно работает, и помогает упростить для понимания код примера. Конечно, если HM-10 уже находится в режиме Central, то для ручного запуска соединения первые две команды не нужны. Задержки оставляют время для ответа модуля. При желании Вы могли бы проверить корректный ответ от модуля на каждую команду перед отправкой следующей команды. И конечно, поменяйте адрес, чтобы он соответствовал Вашему используемому модулю.

Если Вы используете более старое firmware, то нужно добавить команду AT+RESET после команды AT+ROLE1.

С помощью режима автоподключения можно избежать использования этих команд.

После этого скетч проверяет состояние порта кнопки, и если оно поменялось, то посылает одну из двух простых команд.

• Уровень поменялся от лог. 0 к лог. 1. Это означает, что кнопка нажата, и нужно передать команду на включение светодиода. Это осуществляется отправкой символа "1" дальнему модулю.
• Уровень поменялся от лог. 1 к лог. 0. Это означает, что кнопка отпущена, и нужно передать команду на выключение светодиода. Это осуществляется отправкой символа "0" дальнему модулю.

Примечание: отправка символа ASCII "1" и "0" не то же самое, что отправка значения 1 и 0.

// Очень простое подавление дребезга контактов.
boolean state1 = digitalRead(switchPin); delay(1);
boolean state2 = digitalRead(switchPin); delay(1);
boolean state3 = digitalRead(switchPin); delay(1);
 
if ((state1 == state2) && (state1==state3))  
{
   switch_State = state1;  
   if (switch_State != oldswitch_State)
   {
      if ( switch_State == HIGH) { BTserial.print("1" );  Serial.println("1"); }
      else                       { BTserial.print("0" );  Serial.println("0"); }
      oldswitch_State = switch_State;
   }
}

Вторая плата Arduino просто ждет поступления символов "1" или "0", и если это произошло, то соответственно либо включает светодиод, либо выключает.

void loop()
{
   // Чтение из модуля Bluetooth и проверка данных на наличие команды:
   if (BTSerial.available())
   {
      c = BTSerial.read();
      // 49 соответствует ASCII-коду для "1"
      // 48 соответствует ASCII-коду для "0"
      if (c==49)   { digitalWrite(LEDpin,HIGH);   }
      if (c==48)   { digitalWrite(LEDpin,LOW);    }
      Serial.println(c);
   }
}

Скетч HM-10_Example_01_simpleLED_Central, который залит в Adruino, управляющий главным модулем Bluetooth (опрос кнопки и передача команд подчиненному модулю Bluetooth):

// HM-10_Example_01_simpleLED_Central
//
// Простое дистанционное управление с помощью двух
// модулей HM-10: включение и выключение светодиода (LED).
//
// Используемые выводы:
// BT VCC - Arduino 5V
// BT GND - Arduino GND
// Arduino D8 (RX) - BT TX без делителя напряжения
// Arduino D9 (TX) - BT RX через делитель напряжения
 
// https://www.pjrc.com/teensy/td_libs_AltSoftSerial.html
#include < AltSoftSerial.h>
AltSoftSerial BTserial; 
 
byte switchPin = 2;
boolean switch_State = LOW;
boolean oldswitch_State = LOW;
 
 void setup() 
{
   Serial.begin(9600);
   Serial.print("Sketch:   ");   Serial.println(__FILE__);
   Serial.print("Uploaded: ");   Serial.println(__DATE__);
   Serial.println(" ");
 
   BTserial.begin(9600);  
   Serial.println("BTserial started at 9600");
   Serial.println(" ");
 
   pinMode(switchPin, INPUT); 
 
   // Подключение к дальнему модулю Bluetooth:
   BTserial.print("AT+IMME1" );
   delay(1000);    
   BTserial.print("AT+ROLE1" );
   delay(1000);
   BTserial.print("AT+CONA81B6AAE5221" );
   delay(1000);
}
 
void loop()
{
   // Упрощенное подавление дребезга контактов кнопки:
   boolean state1 = digitalRead(switchPin); delay(1);
   boolean state2 = digitalRead(switchPin); delay(1);
   boolean state3 = digitalRead(switchPin); delay(1);
   if ((state1 == state2) && (state1==state3))  
   {
      switch_State = state1;  
 
      if (switch_State != oldswitch_State)
      {
         if ( switch_State == HIGH) { BTserial.print("1" );  Serial.println("1"); }
         else                       { BTserial.print("0" );  Serial.println("0"); }
         oldswitch_State = switch_State;
      }
   }
}

Скетч HM-HM-10_Example_01_simpleLED_Peripheral, который залит в Adruino, управляемый по радио от главного модуля Bluetooth (включение и выключения светодиода):

// HM-10_Example_01_simpleLED_Peripheral
//
// Простое дистанционное управление с помощью двух
// модулей HM-10: включение и выключение светодиода (LED).
//
// Используемые выводы:
// BT VCC - Arduino 5V.
// BT GND - GND.
// Arduino D8 (RX) - BT TX без делителя напряжения
// Arduino D9 (TX) - BT RX через делитель напряжения
 
// https://www.pjrc.com/teensy/td_libs_AltSoftSerial.html
#include < AltSoftSerial.h>
AltSoftSerial BTSerial; 
 
char c=' ';
byte LEDpin = 4;
 
void setup() 
{
   Serial.begin(9600);
   Serial.print("Sketch:   ");   Serial.println(__FILE__);
   Serial.print("Uploaded: ");   Serial.println(__DATE__);
   Serial.println(" ");
 
   BTSerial.begin(9600);  
   Serial.println("BTserial started at 9600");
   Serial.println(" ");
 
   pinMode(LEDpin, OUTPUT); 
   digitalWrite(LEDpin,LOW); 
}
 
void loop()
{
   // Чтение данных из модуля Bluetooth и проверка этих
   // данных на наличие команды:
   if (BTSerial.available())
   {
      c = BTSerial.read();
      // 49 это код ASCII символа "1"
      // 48 это код ASCII символа "0"
      if (c==49)   { digitalWrite(LEDpin,HIGH); }
      if (c==48)   { digitalWrite(LEDpin,LOW);  }
      Serial.println(c);
   }
}

Этот код хорошо работает, но что произойдет, когда Вы сбросите Arduino #1 при наличии активного соединения? Светодиод включится.

Когда Вы сбросите платы Arduino, но не модули HM-10, соединение останется активным, и AT-команды в функции setup() будут обработаны как данные. В результате чего любые символы "1" и "0" в этих данных будут просто переданы на дальний конец плате Arduino #2, и будут обработаны ей как команды для управления светодиодом. Есть несколько способов, как это предотвратить.

1. Перед отправкой настроечных AT-команд передайте сообщение приветствия на дальний конец, чтобы проверить активность соединения. Дальнее устройство ответило бы на это сообщение.

2. Проверка состояния вывода STATE модуля HM-10 перед отправкой AT-команд. Вывод STATE в лог. 1, когда соединение активно.

3. Предварительная настройка модулей на автоматическое соединение, чтобы опустить использование в скетчах AT-команд настройки и запуска соединения. Возможно это самое лучшее решение, выбор варианта реализации за Вами.

Позже мы рассмотрим, как управлять светодиодом просто с помощью HM-10, без второй платы Arduino.

[Программируемые порты HM-10]

У HM-10 есть 10 выводов, которыми может управлять пользователь (GPIO). Некоторые из них работают только как входы, другие могут быть или входами, или выходами. К сожалению, эти выводы не подключены к переходной плате (breakout board), так что к ним нужно подпаиваться напрямую (либо делать переходной разъем или дополнительную плату).

HM 10 ProgrammablePins 01

Функции выводов. Выводы, которые мы можем использовать, носят имена PIO-02 .. PIO-11 (или PIO2..PIOB в шестнадцатеричной нумерации).

HM 10 ProgrammablePins 02

Порт Функция
PIO2 OUTPUT / PWM OUTPUT
PIO3 OUTPUT
PIO4 INPUT / ADC / OUTPUT
PIO5 INPUT / ADC / OUTPUT
PIO6 INPUT / ADC / OUTPUT
PIO7 INPUT / ADC / OUTPUT
PIO8 INPUT / ADC / OUTPUT
PIO9 INPUT / ADC / OUTPUT
PIOA (PIO10) INPUT / ADC / OUTPUT
PIOB (PIO11) INPUT / ADC / DS18B20/ DHT11 / OUTPUT

Примечание: PIO-02 и PIO-03 могут выдавать выходной ток до 20 mA. PIO-04 .. PIO-11 рассчитаны на выходной ток только 4 mA.

Ниже во врезках даны команды управления выводами HM-10.

Устанавливает выходной уровень вывода в HIGH или LOW. pin = номер вывода от 2 до B. 0/1 = 0 для LOW, 1 для HIGH. Например, чтобы установить вывод PIO-02 в HIGH нам нужно использовать команду AT+PIO21, и для установки в LOW команду AT+PIO20.

Вывод PIO2 можно использовать как выход ШИМ (PWM). x = значение от 0 до 9.

AT+PIO20 = LOW
AT+PIO21 = HIGH
AT+PIO22 = 100 мс PWM
AT+PIO23 = 200 мс PWM
...
AT+PIO29 = 800 мс PWM

Команда AT+PIO21 установит длительность импульса HIGH 100 мс и длительность импульса LOW 100 мс.

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

Читает текущее состояние вывода. pin = номер вывода в диапазоне от 2 до B. Чтобы прочитать состояние PIO2, используйте AT+PIO2?. Эта команда возвратит состояние в виде "OK+PIO2:0" или "OK+PIO2:1". 0 соответствует LOW, и 1 HIGH.

Обратите внимание, что в этой команде используется два знака вопроса. Команда опрашивает состояние выводов PIO4 .. PIOB. Вернет один байт в форме от "OK+Col:00" до "OK+Col:FF", где шестнадцатеричные цифры представляют состояние выводов PIO4 .. PIOB. Биты 7 .. 0 отображены на выводы POI4 .. PIOB.

PIN 4 5 6 7 8 9 A B
BIT 7 6 5 4 3 2 1 0

Чтение состояния всех выводов PIO сразу. Вернет 2 байта в HEX-виде, от "OK+PIO?:0000" до "OK+PIO?:03FF". Последние 3 отображаются на ножки портов PIO0 .. PIOB; это означает, что 3FF == 001111111111, или все порты в состоянии HIGH. Выводы PIO0 и PIO1 (первые 2 бита) используются системой, и их состояние всегда возвращается как 0.

Выводы PIO4 .. PIOB можно использовать как аналоговые входы.

Читает напряжение на указанном выводе. pin обозначает вывод PIO от 4 до B. Вернет реальное напряжение на выводе в виде числа float из 3 цифр.

Для чтения напряжения на выводе PIOA (10) используйте AT+ADCA?, это вернет "OK+ADCA:2.80", когда на выводе напряжение 2.8v, и "OK+ADCA:0.00" когда на выводе уровень LOW, или когда напряжение на этот вывод не подано.

Устанавливает частоту, с которой обновляются регистры состояния выводов (внутри CC2541, опрос выводов в действительности опрашивает значение этих регистров, а не выводов). freq = частоте обновления в секундах, и это должно задаваться двумя цифрами от 00 до 99. Эта команда принимает только число из 2 цифр, например надо давать команду AT+CYC01 вместо AT+CYC1.

Обратите внимание, что в этой команде используется два вопросительных знака. Опрашивает текущую частоту. Вернет значение из 2 цифр в форме от "OK+Get:00" до "OK+Get:99". По умолчанию 10 секунд.

Состояние выводов HM-10 может быть также установлено для момента включения питания командой AT+BEFC, и также для момента установки соединения командой AT+AFTC.

Устанавливает состояние выводов PIO при включении питания / перед соединением. pinValues указывается в виде числа из 3 цифр, от 000 до 3FF, где отображается состояние выводов PIO0 .. PIOB. Помните, что PIO0 и PIO1 используются системой, и можно использовать только выводы PIO2 .. PIOB.

Для установки всех выводов (PIO2 .. PIOB) в HIGH передайте в команду BEFC значение 001111111111 в виде "3FF" (AT+BEFC3FF). Состояние выводов, которое было задано командой BEFC, может быть впоследствии изменено командой AT+PIOxv (x номер вывода, v уровень).

Устанавливает состояние выводов после того, как установится соединение. pinValues задается шестнадцатеричным числом из 3 цифр от 000 до 3FF, где биты этого числа отображаются на выводы PIO0 .. PIOB (точно так же, как и в команде AT+BECF). Помните, что PIO0 и PIO1 используются системой, и можно использовать только выводы PIO2 .. PIOB.

Например, чтобы установить PIO2 в HIGH, когда соединение установится, передайте в команду биты 001000000000 или "200" (AT+AFTC200).

Управление выводами модуля HM-10, когда он подключен к микроконтроллеру наподобие Arduino, в принципе не имеет особого смысла, потому что намного лучше использовать выводы самого Arduino. Полезнее управлять выводами HM-10, когда он используется сам по себе.

Управление выводами HM-10 по радио в режиме Peripheral. Выводами PIO можно управлять в режиме Peripheral через радиоканал. Это возможно, потому что HM-10 позволяет устройству Peripheral принимать AT-команды по радио, и выводами можно управлять AT-командами. Когда HM-10 управляется удаленно по радио, и команды AT приняты по радиоканалу, команды управления выводами работают немного по-другому. Здесь нам надо установить режим, MODE1 или MODE2.

PIO могут быть использованы как входы или выходы, в зависимости от режима по-разному:

Порт MODE1 MODE2
PIO2 OUTPUT / PWM OUTPUT OUTPUT / PWM OUTPUT
PIO3 OUTPUT OUTPUT
PIO4 INPUT / ADC / OUTPUT OUTPUT
PIO5 INPUT / ADC / OUTPUT OUTPUT
PIO6 INPUT / ADC / OUTPUT OUTPUT
PIO7 INPUT / ADC / OUTPUT OUTPUT
PIO8 INPUT / ADC / OUTPUT OUTPUT
PIO9 INPUT / ADC / OUTPUT OUTPUT
PIOA (PIO10) INPUT / ADC / OUTPUT OUTPUT
PIOB (PIO11) INPUT / ADC / DS18B20/ DHT11 / OUTPUT OUTPUT

Примечание: PIO-02 и PIO-03 могут выдавать выходной ток до 20 mA. PIO-04 .. PIO-11 рассчитаны на выходной ток только 4 mA.

Чтобы указать HM-10, что мы хотим управлять выводами PIO по радио, используются команды AT+MODE1 и AT+MODE2.

Устанавливает режим управления выводами PIO, в котором PIO2 и PIO3 работают как выходы, и PIO4 .. PIOB как входы.

Устанавливает режим управления выводами PIO, в котором PIO2 .. PIOB работают как входы.

Только в режиме MODE1 выводы PIO2 и PIO3 устанавливаются как выходы. Это означает, что команда AT+PIOxv работает только для этих двух выводов. Если Вы попытаетесь установить какой-нибудь другой вывод этой командой, то HM-10 не ответит, или в зависимости от версии firmware может разорвать и заново установить соединение.

[Пример автономного использования HM-10: управление светодиодом в MODE2]

В качестве простого примера будем включать и выключать светодиод по радио. Сначала попробуем сделать это вручную AT-командами через Serial Monitor. После того, как убедимся, что это работает, можно подключить к Arduino кнопку и написать скетч, который будет посылать такие же команды при нажатии и отпускании кнопки.

Главная управляющая система, Central HM-10:

HM 10 Circuit 01

Управляемая система, Peripheral HM-10:

HM 10 MODE2 Circuit2

HM 10 MODE2 Breadboard noSwitch

После сборки скомпилируйте и загрузите в память платы Arduino следующий скетч. Этот скетч использует библиотеку AltSoftSerial [5], поэтому она должна быть предварительно установлена в среде Arduino IDE, иначе скетч не скомпилируется.

// SerialIn_SerialOut_HM-10_01
//
// Использует аппаратный UART для соединения с компьютером хоста
// и обмена данными с модулем Bluetooth HM-10. Для работы с UART
// применена библиотека AltSoftSerial.
//
// Все, что было введено в окне терминала Serial Monitor, отправляется
// на подключенное устройство HM-10, и все, что поступило от HM-10,
// копируется в окно Serial Monitor.
// В модуль HM-10 не отправляются символы окончания строки.
//
//  Используемые выводы:
//  BT VCC - Arduino 5V
//  BT GND - Arduino GND
//  Arduino D8 (RX) - BT TX без делителя напряжения
//  Arduino D9 (TX) - BT RX через делитель напряжения (5v -> 3.3v)
//
#include < AltSoftSerial.h>
AltSoftSerial BTserial;
// https://www.pjrc.com/teensy/td_libs_AltSoftSerial.html
 
char c=' ';
boolean NL = true;
 
void setup() 
{
   Serial.begin(9600);
   Serial.print("Sketch:   ");   Serial.println(__FILE__);
   Serial.print("Uploaded: ");   Serial.println(__DATE__);
   Serial.println(" ");
   BTserial.begin(9600);  
   Serial.println("BTserial started at 9600");
}
 
void loop()
{
   // Чтение данных из модуля Bluetooth и отправка в Arduino Serial Monitor:
   if (BTserial.available())
   {
      c = BTserial.read();
      Serial.write(c);
   }
 
   // Чтение из Serial Monitor, и отправка в модуль Bluetooth:
   if (Serial.available())
   {
      c = Serial.read();
 
      // Не нужно отправлять символы конца строки в HM-10:
      if (c!=10 & c!=13 ) 
      {
         BTserial.write(c);
      }
 
      // Эхо пользовательского ввода в окно терминала.
      // Если здесь появляется новая строка, то печатается символ ">":
      if (NL) { Serial.print("\r\n>");  NL = false; }
      Serial.write(c);
      if (c==10) { NL = true; }
   }
}

Затем нам нужно выполнить несколько действий в окне Serial Monitor.

1. Установить режим Peripheral модуля HM-10, к которому подключен управляемый светодиод, чтобы он принимал AT-команды по радио.
2. Установить "главный" модуль HM-10 в режим Central.
3. Установить соединение.
4. Использовать команды AT+PIO, чтобы по радио включать и выключать светодиод, подключенный к модулю HM-10 в режиме Peripheral.

Настойка режима Peripheral. Чтобы настроить устройство HM-10 в режим Peripheral, нам сначала надо настроить его для принятия AT-команд по радио. К сожалению, это нельзя сделать по радио, так что понадобится подключение через UART. Для этой цели можно использовать или адаптер  usb-to-serial, или Arduino, в память которого загружен скетч serial.

Для настройки модуля через UART надо передать следующие команды:

AT
AT+RENEW
AT+ADDR?
AT+MODE2

Первая команда нужна, чтобы убедиться в правильности подключения через UART, и что модуль корректно отвечает на команды. Команда AT+RENEW вернет настройки HM-10 в состояние по умолчанию, в этом состоянии HM-10 находится в режиме Peripheral.

HM 10 MODE2 01

Нужно получить адрес модуля, он будет использоваться позже для подключения к модулю по радио:

HM 10 MODE2 02 ADDR

И в завершение нужно установить режим MODE2 для модуля HM-10. Это укажет HM-10 принимать и обратывать AT-команды по радиоканалу:

HM 10 MODE2 03 set MODE2

Модуль с адресом A81B6AAE5221 теперь установлен в режим Peripheral, и настроен для обработки AT-команд, поступающих к нему по радио. Теперь мы можем по радио посылать команды, чтобы управлять светодиодом, подключенным к PIO2.

Настройка режима Central. Другой модуль HM-10 будет "главным", и его надо настроить в режим Central. Это делается следующими командами:

AT
AT+RENEW
AT+IMME1
AT+ROLE1
AT+CON[ADDRESS]

Для управления светодиодом по радио будем использовать команды AT+PIO21 и AT+PIO20.

Команда AT позволяет сделать проверку соединения с модулем (что он отвечает на команды), и команда AT+RENEW сбрасывает модуль в состояние по умолчанию:

HM 10 MODE2 04

Команда AT+IMME1 настраивает соединение "вручную":

HM 10 MODE2 05

Команда AT+ROLE1 активизирует у модуля режим Central:

HM 10 MODE2 06

Если у Вас старое firmware HM-10, то следует обновить его. В случае старого firmware в этом месте нужно сбросить модуль, чтобы режим Central активизировался, и можно было продолжить.

Далее нам нужно осуществить соединение между модулем Central и Peripheral, для этого модулю Central надо дать команду AT+CON88C255122F9E. Если соединение произошло успешно, то HM-10 Central ответит "OK+CONNA", и на обоих модулях HM-10 перестанут мигать и начнут постоянно светиться LED, сигнализируя об активном соединении.

HM 10 MODE2 07

Теперь можно управлять светодиодом модуля Peripheral дистанционно, по радио, посылая AT-команды модулю Central. Чтобы зажечь светодиод, отправьте команду AT+PIO21:

HM 10 MODE2 LED ON

Команда AT+PIO20 должна выключить светодиод:

HM 10 MODE2 LED OFF

Примечание: начальное состояние светодиода модуля Peripheral может зависеть от настроек портов для включения питания и начала соединения, из-за чего светодиод может зажечься сразу после включения питания или после установки соединения. Начальное состояние вывода PIO можно поменять командой AT+BEFC (перед соединением) и командой AT+AFTC (после соединения).

Автоматизация процесса. Поскольку дальнее автономное устройство Peripheral уже настроено должным образом, на нем ничего менять не нужно. На Central модуле HM-10 мы установим для него auto connect командой AT+IMM0.

Чтобы оборвать соединение модуля Central (это нужно, чтобы он начал отвечать на AT-команды), выключите питание модуля Peripheral. После этого на модуле Central нужно выполнить команды:

AT
AT+RENEW
AT+ROLE1

Команда AT+RENEW сбрасывает HM-10 в заводское состояние по умолчанию, и поскольку IMME0 это режим по умолчанию, то это настраивать не нужно.

HM 10 MODE2 20

Теперь после включения питания у обоих модулей одни должны соединяться друг с другом автоматически.

Для управления светодиодом подключите кнопку на вывод D2 платы Arduino, к которой подключен HM-10 Central.

HM 10 MODE2 20 Circuit3

HM 10 MODE2 20 Breadboard switch

После этого скомпилируйте и выгрузите в память Arduino следующий скетч:

// HM-10_Example_03_MODE2_LED
//
// Простое дистанционное управление с помощью двух Bluetooth HM-10:
// включение и выключение светодиода (LED).
// Первый модуль HM-10 в режиме Central подключен к Arduino.
// Второй модуль HM-10, без Arduino, управляет светодиодом,
// подключенным к PIO2.
//
// Используемые выводы:
// BT VCC - Arduino 5V.
// BT GND - Arduino GND.
// Arduino D8 (RX) - BT TX без делителя напряжения.
// Arduino D9 (TX) - BT RX через делитель напряжения.
 
#include < AltSoftSerial.h>
AltSoftSerial BTserial; 
 
byte switchPin = 2;
boolean switch_State = LOW;
boolean oldswitch_State = LOW; 
 
void setup() 
{
   Serial.begin(9600);
   Serial.print("Sketch:   "); Serial.println(__FILE__);
   Serial.print("Uploaded: "); Serial.println(__DATE__);
   Serial.println(" ");
 
   BTserial.begin(9600);  
   Serial.println("BTserial started at 9600");
   Serial.println("");
 
   pinMode(switchPin, INPUT); 
}
 void loop()
{
   // Очень простое подавление дребезга контактов.
   boolean state1 = digitalRead(switchPin); delay(1);
   boolean state2 = digitalRead(switchPin); delay(1);
   boolean state3 = digitalRead(switchPin); delay(1);
   if ((state1 == state2) && (state1==state3))  
   { 
      switch_State = state1;  
 
      if (switch_State != oldswitch_State)
      {
         if ( switch_State == HIGH) { BTserial.print("AT+PIO21" ); Serial.println("The LED is ON");  }
         else                       { BTserial.print("AT+PIO20" ); Serial.println("The LED is OFF"); }
         oldswitch_State = switch_State;
      }
   }
}

Этот скетч довольно простой. Когда кнопка нажата, дальнему модулю Peripheral по радиоканалу отправляется команда AT+PIO21. Когда кнопка отпускается, посылается команда AT+PIO20. AT+PIO21 команда переводит PIO2 в HIGH, тогда светодиод начнет светиться, и команда AT+PIO20 установит PIO-2 в LOW, тогда светодиод погаснет.

HM 10 MODE2 LED ON OFF

[Пример чтения по радио датчика освещенности]

В этом примере мы сделаем опрашиваемый по радио датчик освещенности, для чего будем использовать автономный модуль HM-10 в режиме Peripheral и подключенный к нему фоторезистор (Light Dependent Resistor, LDR). LDR подключим к выводу PIOB модуля Peripheral HM-10. Использование MODE1 позволит нам читать уровень напряжения на PIOB Peripheral HM-10 через модуль Central HM-10 и беспроводное соединение.

Настройки. Оба модуля HM-10 настроены на auto connect с помощью команды AT+IMME1, и модуль Peripheral HM-10 настроен в режим MODE1.

Схема. Central HM-10 ("главный" модуль) подключен к Arduino. К Peripheral HM-10 ("подчиненный" модуль) подключен LDR через порт PIOB. Peripheral HM-10 можно запитать от батарейки, однако нужно учесть, что на VCC переходной платы HM-10 надо подать +5v, и на LDR надо подать +3.3v.

HM 10 RemoteLightSensor 02 Circuit

Скетч. Программа Arduino очень простая, она отправляет AT+ADCB? и выводит ответ на неё. AT+ADCB? запрашивает чтение напряжения на выводе PIOB дальнего Peripheral HM-10.

// Sketch: HM-10_Example_04A_RemoteLightSensor
//
// Используемые выводы Master HM-10:
// BT VCC - Arduino 5V.
// BT GND - Arduino GND.
// Arduino D8 (RX) - BT TX без делителя напряжения.
// Arduino D9 (TX) - BT RX с делителем напряжения.
//
// Используемые выводы Remote HM-10:
// HM-10 vcc - +5V.
// HM-10 GND - GND.
// HM-10 PIOB - LDR/CDS.
 
 #include < AltSoftSerial.h>
AltSoftSerial BTSerial; 
 
char c=' ';
char reply[30];
int pos = 0;
 
void setup() 
{
   Serial.begin(9600);
   Serial.print("Sketch:   ");   Serial.println(__FILE__);
   Serial.print("Uploaded: ");   Serial.println(__DATE__);
   Serial.println(" ");
 
   Serial.println("The HM-10s should be set for auto connect");
   Serial.println("The remote HM-10 should be set for MODE1");
 
   BTSerial.begin(9600);  
   Serial.println("BTserial started at 9600");
   Serial.println(" ");
}
 
void loop()
{
   BTSerial.print("AT+ADCB?");
   delay(500);
 
   pos = 0;
   while ( BTSerial.available() )
   {
      c = BTSerial.read();
      reply[pos] = c;
      pos++;
   }
   reply[pos] = '\0';
   Serial.print("Reply = "); Serial.println(reply); 
 
   delay (3000); 
}

HM 10 RemoteLightSensor 05 serialMonitor

В этом примере результаты чтения фотодатчика просто отображаются в окне Serial Monitor, но Вы можете реализовать в программе какие-то дополнительные действия, например начать мигать светодиодом на плате Arduino, когда свет включен (или когда выключен).

[HM-10: добавление второй Custom-характеристики]

По умолчанию HM-10 поставляется с одной пользовательской (custom) характеристикой custom-службы, а вторая custom-характеристика, предназначенная только для записи, может быть добавлена командой AT+FFE2. Эта команда была добавлена в firmware версии 5.45, и расширена в версии 5.50.

У второй custom-характеристики FFE2 есть только свойство WRITE, и нет свойства READ, и значение у этой характеристики, отправляемое в UART, будет такое же, как и у характеристики FFE1.

Опрашивает состояние второй custom-характеристики. Вернет 0 или 1.

0 характеристика не активна.
1 характеристика активна.

AT+FFE21 запускает вторую custom-характеристику.

AT+FFE20 останавливает вторую custom-характеристику.

Хотя вторая custom-характеристика предназначена только для записи (WRITE only), Вы можете настроить, использовать или нет ответ для неё с помощью команды AT+RESP.

AT+RESP?

Опрашивает состояние ответа, вернет 0 или 1.

0 запись без ответа.
1 запись с ответом.

AT+RESP0 установит вторую custom-характеристику на работу без ответа.

AT+RESP1 установит вторую custom-характеристику на работу с ответом.

Скетч. Этот скетч добавляет символы конца строки в данные, передаваемые в Serial Monitor, чтобы было проще читать команды. Этот скетч также удаляет любые символы конца строки из данных команд перед отправкой их в HM-10. Это означает, что Serial Monitor можно настроить в режим вывода этих символов "Both NL & CR".

После соединения и выгрузки скетча с помощью команды AT проверьте, что HM-10 отвечает на команды. Затем используйте команду AT+RENEW для восстановления заводских настроек.

HM 10 2ndChar 01

AT+FFE21 запустит в работу вторую custom-характеристику. Автор также настроил работу второй характеристики с ответом командой AT+RESP1.

HM 10 2ndChar 02

Передерните питание или выполните команду сброса, чтобы изменения в HM-10 вступили в силу.

HM 10 2ndChar 03

Вторая custom-характеристика работает только на запись (WRITE only). Это означает, что мы можем использовать её для отправки данных в HM-10, но не можем использовать для чтения данных. Все, что мы отправим в HM-10, будет выведено таким же, что в первой custom-характеристике.

Чтобы увидеть это в действии, можно использовать приложение BLE Scanner. Запустите его, найдите HM-10 и подключитесь к нему, раскройте custom service, и Вы должны увидеть две custom-характеристики:

HM 10 2ndChar 04

На характеристике FFE2 кликните на кнопку HM 10 W icon W, и появится окно ввода текста. Введите "HELLO", и отправьте этот текст. Значение характеристики должно поменяться на "HELLO", и "HELLO" должно появиться в Serial Monitor:

HM 10 2ndChar 05

[Использование HM-10 с другими модулями (не HM-10)]

Начиная с firmware 5.42, Jinan Huamao изменили, как HM-10 общаются с модулями не от Jinan Huamao. Версии до 5.42 HM-10 соединялись и обменивались данными очень хорошо.

При использовании свежих версий firmware, автор обнаружил, что стали ограничены возможности по подключению HM-10 с другими модулями UART BLE наподобие AT09 и BT05. HM-10 будет подключаться к другому модулю и передавать в него данные, но обратно данные HM-10 не принимает. Предполагалось, что функция самообучения AT+COMP1 должна сработать, но этого не случилось.

Функция iBeacon пока не доступна, она переписывается.

[Обновление firmware HM-10]

Важное замечание: обновление firmware нельзя откатить или отменить. Как только Вы выдали команду OK+SBLUP, больше нельзя вернуться к предыдущей версии firmware.

Программное обеспечение HM-10 довольно регулярно обновляется, и появляется для загрузки на сайте Jinan Huamao [6]. Там же можно найти руководство по обновлению новым firmware.

Как и платы Arduino, модуль HM-10 имеет на борту загрузчик (bootloader), который упрощает процедуру обновления firmware. Для этого понадобится Windows PC и адаптер преобразователя USB to serial UART (с уровнями сигналов 3.3V).

Получение файлов firmware. Со странички загрузки [6] загрузите zip-архив с последним HM-10 firmware, запишите его на диске в любую удобную папку, и распакуйте.

Замечание: firmware для чипов CC2540 и CC2541 разное, т. е. нельзя загрузить CC2540 firmware в чип CC251. Все модули, с которым работал автор, использовали чип CC2541, и на сайте Jinan Haumao выложены firmware для чипа CC2541, хотя это стоит еще раз проверить.

В zip-архиве firmware 5.47 содержалось 4, хотя для других версий это может поменяться. В последней версии версии 7.00 (на момент 181214) файл содержал 3 файла:

HMSoft.bin
HMSoft.exe
readme.txt

Для прошивки firmware нужны два файла HMSoft.exe и HMSoft.bin. HMSoft.exe это программа Windows, которая передает firmware в модуль, HMSoft.bin это само firmware. HMSoft.exe не требует инсталляции, и запускается простым двойным кликом.

Подключение HM-10 к компьютеру. Если Вы используете адаптер USB - TTL UART с уровнями сигнала 5V, то понадобится подключить делитель напряжения на его сигнал TX. Многие руководства из Интернет показывают соединение выводов 5V адаптера UART (и выводов Arduino с уровнями 5V) напрямую, но лучше так не делать. Модули HM-10 питаются от 3.3v, и используют логические уровни 3.3V, и сигнал RX модуля HM-10 не рассчитан на уровень 5V.

HM 10 FW Circuit

HM 10 FW BreadboardFront

HM 10 FW BreadboardBack

Вы можете заметить, что соединение между TX адаптера UART 5V до вывода RX HM-10 использует делитель, но другой сигнал между RX адаптера UART 5V до вывода TX HM-10 подключен напрямую. Так сделано потому, что уровни 3.3V устройства с уровнями 5V правильно интерпретируются как лог. 1.

На переходную плату HM-10 подано питание 5V от адаптера UART. Если Вы используете адаптер 3.3V UART, на выходе которого есть напряжение питания 3.3V, то потребуется отдельный источник питания для переходной платы HM-10, потому что минимальное напряжение, от которого работает стабилизатор напряжения переходной платы, составляет 3.6V.

После того, как все соединения сделаны, нужно проверить, работает ли связь HM-10 с компьютером. Можно использовать любую программу терминала (pytty, TerraTerm, SecureCRT), но можно также использовать Serial Monitor из Arduino IDE.

Замечание: следует помнить о том, что для HM-10 нужно вводить команды в верхнем регистре, и не нужно в них передавать символы окончания строки.

Чтобы воспользоваться Serial Monitor Arduino IDE, убедитесь, что правильно выбран номер порта для подключения. Номер порта, которому соответствует адаптер USB - UART, можно узнать в Диспетчере Устройств Windows. Предположим, что это порт COM6.

HM 10 FW COMport

Откройте Serial Monitor, выберите скорость подключения "9600 baud" и настройку "No line ending". Введите и отправьте команду AT, и если все соединения были сделаны правильно, то получите ответ "OK".

HM 10 FW AT OK

Если нет ответа "OK":

– Проверьте, правильно ли установлена скорость подключения. По умолчанию скорость 9600.
– Проверьте, что выбрана опция "No line ending" в нижней части окна Serial Monitor.
– Проверьте, правильно ли разведены сигналы TX и RX.
– Проверьте, не перепутали ли Вы номиналы резисторов делителя напряжения.
- Проверьте напряжение питания модуля HM-10.

После получения подтверждения "OK" мы можем проверить версию текущего firmware в модуле HM-10 с помощью команды AT+VERR?.

HM 10 FW VERR

В этом примере видно, что текущая версия 5.40.

Чтобы перевести в режим обновления, используйте команду AT+SBLUP. Вы должны получить ответ "OK+SBLUP", и LED на модуле HM-10 перестанет мигать.

HM 10 FW SBLUP

Закройте Serial Monitor.

Процесс обновления. Откройте папку, куда Вы распаковали содержимое архива firmware, и запустите HMSoft.exe. Если Вы используете Windows 7 или более свежую версию Windows, то может понадобиться запустить эту программу с правами администратора.

HM 10 FW HMSoft package

Выберите файл firmware HMSoft.bin, введите правильный номер COM-порта, и кликните на кнопку Load Image.

HM 10 FW HMSoft update01

Файл firmware будет записан и проверен. После завершения отобразится окно "Download completed successfully", и LED на HM-10 снова начнет мигать. Теперь можно закрыть программу обновления и снова запустить Serial Monitor, чтобы проверить версию нового firmware.

HM 10 FW update VERR

Проблемы при обновлении firmware. Если Вы запустили обновление, и ничего не происходит, то возможно что Вы оставили открытым Arduino IDE. Нужно из Arduino IDE, чтобы освободить COM-порт. Программа обновления HMSoft.exe не выдает сообщений об ошибке, если COM-порт недоступен.

Если выскочила ошибка таймаута (timeout error), то попробуйте снова запустить обновление. Если Вы постоянно получаете ошибку, то скорее всего виноват адаптер USB - UART. Некоторые адаптеры могут плохо работать на больших скоростях (возможно на которых стоят поддельные чипы FDTI), они могут быть причиной ошибок при передаче firmware и/или его проверке.

Если возникла проблема с загрузкой, то LED на модуле HM-10 будет продолжать светиться. Это означает, что он все еще в режиме передачи firmware (upload mode). Он останется в этом режиме даже после передергивания питания. Просто запустите заново обновление с помощью программы HMSoft.exe.

[Словарик]

BLE Bluetooth Low Energy, или Bluetooth LE, это беспроводная технология (иногда называемая Bluetooth Smart), разработанная и продвигаемая Bluetooth Special Interest Group (Bluetooth SIG), предназначенная для бытовой электроники, медицине, системах безопасности и индустрии домашних развлечений. BLE в сравнении с классическим Bluetooth был разработан для уменьшения энергопотребления и стоимости при сохранении почти такого же радиуса действия. Операционные системы для переносных устройств, включая iOS, Android, Windows Phone и BlackBerry, а также операционные системы macOS, Linux, Windows 8 и Windows 10 изначально имеют поддержку Bluetooth Low Energy (из Википедии).

[Ссылки]

1. HM-10 Bluetooth 4 BLE Modules site:martyncurrey.com.
2. GATT Services site:bluetooth.com.
3. GATT Characteristics site:bluetooth.com.
4. BLE Scanner site:play.google.com.
5. AltSoftSerial Library site:pjrc.com.
6. jnhuamao.cn Common Downloads.
7181213BLE-Bluetooth-HM-10.zip - скетчи, утилита обновления, документация.
8. Настройка App Inventor.

 

Комментарии  

 
0 #2 Andrey 11.09.2022 01:51
Подскажите пожалуйста, какая реальная скорость может быть достигнута при передаче через Bluetooth в этом модуле? Имеется в виду не скорость по UART, а скорость со всеми задержками.

microsin: вопрос по-настоящему сложный, не смогу на него ответить. Все зависит от конкретных рабочих условий, которые могут от вас даже не зависеть (т. е. от радиопомех, расстояния между модулями, наличия рядом других устройств Bluetooth). В идеальных условиях тоже не все однозначно - скорость может зависеть от режима работы, размера пакетов, дуплекс/симплекс, от скорости обработки данных в микроконтроллер е хоста.
Цитировать
 
 
0 #1 Strelok59 23.09.2020 14:46
HC-05 одно время работали нормально. Подключаю девайс к телефону посредством модуля. Вышло обновление андроид 10 и прочие, и с весны 20 года перестали работать модули. 2-3 минуты подключаются, и обрыв подключения. Выяснили, что проблема не в модулях. Не знаю, как решить проблему...
Цитировать
 

Добавить комментарий


Защитный код
Обновить

Top of Page