Опубликовано

Модуль BLE Bluetooth HM-10/11

По материалам руководства к набору “Умный дом на базе Arduino. Большой набор + КНИГА

Модули Bluetooth оснащены последовательным портом, способным взаимодействовать с платой Arduino через контакты RX (прием) и TX (передача), и приемопередатчиком, использующим протокол беспроводной связи Bluetooth для взаимодействия «по воздуху» с другими устройствами, который понимают этот протокол (например, со смартфонами). Такой приемопередатчик функционирует как модем, преобразовывая сигналы протокола Bluetooth в обычный асинхронный последовательный протокол и обратно.

Существуют различные протоколы Bluetooth. Модули HM-10 и HM-11 поддерживают протокол Bluetooth 4.0, что дает возможность их подключения к смартфонам и на ОС Android, и на iOS (iPhone) — в отличие от популярных модулей HC-05 и HC-06, которые могут взаимодействовать только с ОС Android. HM-10/11 нельзя соединить с модулями HC-06 и HC-05, т. к. последние поддерживают протокол Bluetooth 2/2.1.

Наиболее существенным достоинством модулей Bluetooth BLE (Bluetooth Low Energy, Bluetooth LE) является их сверхмалое пиковое энергопотребление, среднее энергопотребление и энергопотребление в режиме простоя, что весьма важно для устройств с автономным питанием.


Примечание

Модуль HM-11, по своим эксплуатационным характеристикам аналогичен HM-10, но занимает меньшую площадь и имеет меньшее количество контактов.


Внешний вид, назначение контактов

bluetooth-hm-10

Рис. M5.1. Внещний вид и назначение контактов Bluetooth HM-10

Технические характеристики

Наименование Значение
Чип Bluetooth CC2540 или CC2541
Протокол связи Bluetooth 4.0 BLE
Радиус действия до 100 метров
Объем flash-памяти (для хранения прошивки и настроек), Мбит 8
Частота радиосигнала, ГГц 2,40 ÷ 2,48
Ток
  • в режиме установки связи — до 50 мА
  • после установки связи 9 мА
  • в режиме сна — 50 ÷ 200 µA
Напряжение питания, В + 2,5 В до + 3,3 В
Пароль по умолчанию 000000
Имя Bluetooth устройства по умолчанию HMSoft, BT05-A

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

Схема подключения

3-05-2-bluetooth

Рис. M5.2. Подключение Bluetooth HM-10

Тестируем подключение Bluetooth

  1. Установим терминальное приложение для смартфона. Их достаточно много, и функциональные возможности их примерно одинаковы. Предлагаем для смартфонов с OC Android популярное бесплатное приложение Serial Bluetooth Terminal, ориентированное на работу как с «классическими» модулями Bluetooth, так и с модулями, которые поддерживают протокол Bluetooth 4.0 BLE (рис. M5., а). Для iPhone и iPad можно использовать приложение HM10 Bluetooth Serial Lite (рис. M5.3, б).
3-05-3-bluetootch
а б

Рис. M5.3. а — окно установки Serial Bluetooth Terminal на Google Play; б — установка приложение HM10 Bluetooth Serial Lite для iOS

  1. Установив приложение на смартфон, откройте его. При этом Bluetooth на смартфоне должен быть включен.
  2. Подключите Bluetooth, как показано на рис. M5.2, а. Индикатор, расположенный на модуле Bluetooth, начнет мигать в ожидании соединения.
  3. Выберите в меню команду Device, а затем нажмите кнопку SCAN в правом верхнем углу окна (рис. M5.2, б).
а б

Рис. M5.4. Поиск устройств Bluetooth BLE в радиусе действия вашего телефона

  1. После недолгого поиска на экране появится список обнаруженых модулей Bluetooth (рис. M5.5, а). Ваш модуль может быть обозначен в списке на вкладке BLUETOOTH LE как HM-10 или BT05-A (в зависимости от производителя).
  2. Щелкните двойным щелчком на имени вашего модуля Bluetooth, и произойдет соединение модуля с платой Arduino через последовательный порт. При этом светодиодный индикатор на модуле перестанет мигать, а на экране смартфона появится надпись Connected (рис. M5.5, б).
а б

Рис. M5.5. Подключение к Bluetooth BLE

Совет

В зависимость от производителя конкретного устройства Android и версии операционной системы (для Android она должна быть выше 4.3) вы можете увидеть или не увидеть HM-10 среди устройств, обнаруженных Bluetooth (Bluetooth devices). Если ваш Android не находит HM-10 в своих настройках Bluetooth, попробуйте использовать приложение BLE Scanner app.

Взаимодействие смартфона и Arduino через Bluetooth BLE

Теперь, когда соединение Arduino и модуля Bluetooth установлено, осуществим обмен информацией между устройствами. Для этого:

  1. Временно отсоедините провода, подключенные к контактам D0 (RX) и D1(TX) платы Arduino, и загрузите код, приведенный в листинге M5.1.

Листинг M5.1. Обмен информацией между Arduino и модулем Bluetooth

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
void setup() {
 
Serial.begin(9600);
 
Serial.println("poexali!");
 
}
 
void loop() {
 
if (Serial.available()) {
 
char c = Serial.read(); // читаем из software-порта
 
Serial.print(c); // пишем в hardware-порт
 
}
 
}

Если при загрузке скетча на Arduino не отключать эти провода, то компилятор выдаст ошибку, показанную на рис. M5.6. Конфликт связан с тем, что пины D0 и D1 также используются для связи с компьютером посредством USB.

Рис. M5.6. Ошибки загрузки скетча в Arduino

  1. Снова подключите провода к контактам D0 (RX) и D1(TX) и выполните сопряжение смартфона с модулем Bluetooth, как было показано на рис. M5.5.
  2. Выполнив сопряжение, можно поздороваться с хостом на другом конце Bluetooth-канала (рис. M5.7). Как можно видеть, приветствие прошло успешно!
3-05-7a-bluetootch 3-05-7b-bluetootch
а б

Рис. M5.7. Привет Arduino! — вводим на смартфоне (а) и получаем в Мониторе порта (б)

При отладке скетча вам придется многократно отключать провода от контактов D0 и D1 во время загрузки скетча в Arduino. Кроме того, одного порта вам может быть недостаточно. В этом случае целесообразно использовать библиотеку SoftwareSerial, которая предустановлена в Arduino IDE. Библиотека SoftwareSerial позволяет реализовать последовательный интерфейс не только на D0 и D1, но и на любых других цифровых выводах Arduino с помощью программных средств, дублирующих функциональность UART (отсюда и название «SoftwareSerial»). Кроме того, она дает возможность программно создавать несколько последовательных портов, работающих на скорости до 115200 бод.

  1. Подключите контакты TX и RX модуля Bluetooth к выводам D2 и D3 (RXD3, TXD2) платы Arduino (а не к D0 и D1, как вы делали ранее!).
  2. Загрузите код, приведенный в листинге M5.2.

Листинг M5.2. Сопряжение платы Arduino и модуля Bluetooth

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <SoftwareSerial.h>
 
SoftwareSerial mySerial(2,3);//указываем пины RX и TX соответственно
 
void setup() {
 
pinMode(2,INPUT);
 
pinMode(3,OUTPUT);
 
Serial.begin(9600);
 
mySerial.begin(9600);
 
Serial.println("poexali!");
 
}
 
void loop() {
 
if (mySerial.available()) {
 
char c = mySerial.read(); // читаем из software-порта
 
Serial.print(c); // пишем в hardware-порт
 
}
 
if (Serial.available()) {
 
char c = Serial.read(); // читаем из hardware-порта
 
mySerial.write(c); // пишем в software-порт
 
}
 
}
  1. Введите в Мониторе порта любой текст (рис. M5.8, а) и нажмите кнопку Отправить — текст появится в окне терминала смартфона (рис. M5.8, б).
3-05-8a-bluetootch 3-05-8b-bluetootch
а б

Рис. M5.8. Привет Android! вводим в Мониторе порта (а) и получаем на смартфоне (б)

Управление светодиодом RGB по Bluetooth

Теперь осуществим на практике управление электронным прибором со смартфона по каналу Bluetooth.

1. Соберите схему, представленную на рис. M5.9.

3-05-9

Рис. M5.9. Управление RGB-светодиодом через Bluetooth

2. Загрузите скетч, приведенный в листинге M5.3.

Листинг M5.3. Управление светодиодом RGB через Bluetooth

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
#include <SoftwareSerial.h>
 
// Константы для хранения номеров контактов вывода:
 
const int greenPin = 9; //"зеленый" контакт LED RGB
 
const int bluePin = 10; //"синий" контакт LED RGB
 
const int redPin = 11; //"красный" контакт LED RGB
 
const int pinRX = 2; //RX – вход для приема данных -> к TX bluetooth
 
const int pinTX = 3; //TX – выход для передачи данных -> к RX bluetooth
 
int currentPin = 0; // текущий контакт для задания яркости
 
SoftwareSerial mySerial(pinRX,pinTX); // указываем пины rx и tx
 
void setup() {
 
pinMode(pinRX,INPUT);
 
pinMode(pinTX,OUTPUT);
 
pinMode(redPin, OUTPUT);
 
pinMode(greenPin, OUTPUT);
 
pinMode(bluePin, OUTPUT);
 
 
 
Serial.begin(9600);
 
mySerial.begin(9600);
 
Serial.println("poexali!");
 
}
 
void loop() {
 
if (mySerial.available()) {
 
char inByte = mySerial.read(); // читаем из software-порта
 
Serial.print(inByte); // пишем в hardware-порт
 
rgb(inByte); //включаем светодиод «цветом» inByte
 
}
 
 
 
if (Serial.available()) {
 
char c = Serial.read(); // читаем из hardware-порта
 
mySerial.write(c); // пишем в software-порт
 
rgb(c); //включаем светодиод «цветом» с
 
}
 
}
 
//функция для включения светодиода RGB
 
void rgb(byte cByte){
 
digitalWrite(currentPin,LOW);
 
// игнорируем любые другие значения:
 
if (cByte == 'r') {
 
currentPin = redPin;
 
}
 
if (cByte == 'g') {
 
currentPin = greenPin;
 
}
 
if (cByte == 'b') {
 
currentPin = bluePin;
 
}
 
digitalWrite(currentPin,HIGH);
 
}

3. Теперь, вводя символы r, g и b в Мониторе порта или на смартфоне, подключенном через модуль Bluetooth с помощью терминальной программы, мы можем изменять цвет светодиода RGB.

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