Bluetooth модули HC-05 и HC-06 просты в использовании и находят достаточно широкое применение в радиоэлектронных проектах. Однако к их недостаткам можно отнести сравнительно большое энергопотребление и использование уже сильно устаревшей версии Bluetooth V2.0. На их фоне модули ESP32, обладающие встроенными Wi-Fi и Bluetooth, контактами для АЦП и ЦАП, поддержкой аудио устройств, спящего режима и многими другими возможностями, смотрятся весьма неплохо для конструирования различных проектов тематики интернета вещей (Internet of Things, IoT).
В данной статье мы рассмотрим использование классического Bluetooth в модуле ESP32 – мы будем управлять включением/выключением встроенного светодиода модуля с помощью смартфона. В дальнейших статьях на нашем сайте мы также рассмотрим использование в модуле ESP32 более "продвинутой" версии Bluetooth – технологии BLE (Bluetooth Low Energy – Bluetooth с низким энергопотреблением).
Принципы использования классического Bluetooth и BLE в ESP32
Технология BLE (Bluetooth Low Energy), как следует из ее названия, потребляет значительно меньше энергии чем классический (classic) Bluetooth. Это достигается при помощи передачи данных по требованию с заранее определенными периодическими обновлениями. Но в отличие от классического Bluetooth технология BLE не используется для передачи файлов или музыки. Наверное, вы были неоднократно удивлены тем, что когда вы подключаете к вашему смартфону какой-нибудь фитнес браслет или умные часы, то вы в своем смартфоне можете посмотреть и уровень заряда батареи подключенного устройства – этот функционал становится доступен благодаря использованию технологии BLE. Данная технология работает вместе с версией Bluetooth V4.0 и может использоваться в серверных или клиентских устройствах, что делает ее чрезвычайно удобной для применения в умных часах, фитнес браслетах и т.д.
Классический Bluetooth, в то же время, достаточно удобен для передачи файлов и других данных. Практически все BLE устройства поддерживают и функционал классического Bluetooth.
Bluetooth, который используется в модулях подобных HC-05, является версией классического Bluetooth и называется Bluetooth SSP (Serial Port Protocol – протокол последовательного порта), что означает то, что в данном случае Bluetooth использует стандартный последовательный протокол.
В данной статье мы будем использовать функционал Serial Bluetooth (последовательного) в модуле ESP32 для его соединения со смартфоном, на котором запущено приложение Bluetooth Terminal. Из данного приложения мы будем передавать команды, с помощью которых мы будем включать/выключать встроенный светодиод модуля ESP32.
Подготовка Arduino IDE для работы с модулем ESP32
Имейте ввиду что Arduino IDE по умолчанию не поддерживает модуль ESP32 – вам необходимо скачать и установить библиотеку для его использования с помощью менеджера библиотек. Более подробно про все эти процессы вы можете прочитать в статье про программирование модуля ESP32 с помощью Arduino IDE.
Объяснение программы для модуля ESP32 для использования Bluetooth
Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты. Если вы ранее работали с Bluetooth модулями HC-05 или HC-06, то в программах для данных модулей вы найдете много общего с программой, которую мы рассмотрим в данном проекте.
Основная идея нашей программы состоит в том, что соединение Serial Bluetooth в модуле ESP32 "слушает" данные, поступающие от подключенных устройств (в нашем случае смартфона). Если мы будем принимать ‘1’, то мы будем включать встроенный светодиод модуля, а если мы будем принимать ‘0’, то мы будем выключать данный светодиод.
Начнем нашу программу мы с подключения библиотеки BluetoothSerial, которая позволяет Bluetooth модулю ESP32 работать в качестве Bluetoth SSP (Bluetoth с протоколом последовательного порта).
1 |
#include "BluetoothSerial.h" //Header File for Serial Bluetooth, will be added by default into Arduino |
Затем создадим объект ESP_BT для работы с функционалом технологии Bluetooth.
1 |
BluetoothSerial ESP_BT; //Object for Bluetooth |
Далее, внутри функции setup() мы инициализируем Bluetooth соединение и последовательную связь со скоростью 9600 бод. Bluetooth соединению (сигналу) мы дали имя “ESP32_LED_Control” и по этому имени мы его сможем найти в смартфоне когда включим в нем Bluetooth. Также зададим режим работы для контакта, к которому подключен встроенный светодиод модуля, на вывод данных.
1 2 3 4 5 6 7 |
void setup() { Serial.begin(9600); //Start Serial monitor in 9600 ESP_BT.begin("ESP32_LED_Control"); //Name of your Bluetooth Signal Serial.println("Bluetooth Device is Ready to Pair"); pinMode (LED_BUILTIN, OUTPUT);//Specify that LED pin is output } |
Внутри бесконечного цикла void loop мы будем проверять поступают ли какие-либо данные по соединению Bluetooth. Если поступают, то мы будем сохранять их в переменной incoming. Также мы будем выводить значение этой переменной в окно монитора последовательной связи для тестирования работы проекта.
1 2 3 4 |
if (ESP_BT.available()) //Check if we receive anything from Bluetooth { incoming = ESP_BT.read(); //Read what we recevive Serial.print("Received:"); Serial.println(incoming); |
Далее мы можем сравнить значение переменной incoming с заранее определенными данными и на основе результатов этого сравнения выполнить определенные действия. Но имейте ввиду, что значение, передаваемое по Bluetooth – оно символьного типа (char), а в нашей программе для модуля ESP32 мы будем считывать десятичный код этого символа в формате ASCII. К примеру, для символа ‘0’ его десятичный код равен 48, а десятичный код символа ‘1’ равен 49.
То есть значение переменной incoming в программе мы будем сравнивать со значениями 48 и 49 чтобы проверить передавался 0 или 1. Если передавалась 1, то мы будем включать светодиод, а если 0 – мы будем выключать светодиод.
1 2 3 4 5 6 7 8 9 10 11 |
if (incoming == 49) { digitalWrite(LED_BUILTIN, HIGH); ESP_BT.println("LED turned ON"); } if (incoming == 48) { digitalWrite(LED_BUILTIN, LOW); ESP_BT.println("LED turned OFF"); } |
Тестирование использования Serial Bluetooth в ESP32
Подключите ваш модуль ESP32 к компьютеру, запустите Arduino IDE и в ней укажите COM порт компьютера, к которому подключен модуль ESP32 – его можно узнать в диспетчере устройств Windows. Загрузите программу проекта в модуль ESP32. Откройте монитор последовательного порта (Serial monitor) в Arduino IDE и включите в настройках вашего смартфона использование Bluetooth. В списке доступных для подключения устройств вы должны обнаружить устройство с именем ESP32_LED_Control – подключитесь к нему.
После этого запустите на своем смартфоне приложение Bluetooth terminal (его предварительно необходимо скачать и установить с Google App store). Соедините это приложение с нашим подключенным по Bluetooth устройством, напечатайте в его терминале 1 и нажмите send (передать).
Модуль ESP32 должен принять этот символ и включить свой встроенный светодиод. Также он передаст смартфону сообщение, подтверждающее то, что светодиод включен (см. рисунок выше). Также результаты работы программы вы можете наблюдать в окне монитора последовательной связи – там будут показываться десятичные коды символов (48 или 49), которые мы принимаем.
При передаче 0 с приложения на смартфоне встроенный светодиод модуля будет выключаться. Более подробно работу программы вы можете посмотреть на видео, приведенном в конце статьи.
Исходный код программы (скетча)
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 |
/*Program to control LED (ON/OFF) from ESP32 using Serial Bluetooth * Thanks to Neil Kolbans for his efoorts in adding the support to Arduino IDE * Turotial on: www.circuitdigest.com */ #include "BluetoothSerial.h" //Header File for Serial Bluetooth, will be added by default into Arduino BluetoothSerial ESP_BT; //Object for Bluetooth int incoming; int LED_BUILTIN = 2; void setup() { Serial.begin(9600); //инициализируем последовательную связь со скоростью 9600 бод ESP_BT.begin("ESP32_LED_Control"); //Name of your Bluetooth Signal (имя нашего Bluetooth соединения) Serial.println("Bluetooth Device is Ready to Pair"); pinMode (LED_BUILTIN, OUTPUT);//Specify that LED pin is output (режим работы контакта на вывод данных) } void loop() { if (ESP_BT.available()) //проверяем получаем ли мы что-нибудь по Bluetooth { incoming = ESP_BT.read(); //считываем то, что мы принимаем Serial.print("Received:"); Serial.println(incoming); if (incoming == 49) { digitalWrite(LED_BUILTIN, HIGH); ESP_BT.println("LED turned ON"); } if (incoming == 48) { digitalWrite(LED_BUILTIN, LOW); ESP_BT.println("LED turned OFF"); } } delay(20); } |
Здравствуйте!
Есть ли готовый проект (или близкий), который реализует эквивалент HC-05 на ESP32 (BLE)? Мне надо прозрачную трансляцию последовательного порта UART в обе стороны через BT на Андроид-девайс (бортовой компьютер) для передачи данных GNSS. Скорость до 115200.
Добрый день, не совсем понял, к сожалению, что вы понимаете под эквивалентом HC-05 на ESP32 (BLE). Все проекты с Bluetooth на нашем сайте вы можете посмотреть по этой ссылке. Может быть, вам в наибольшей степени подойдет вот эта статья - передача данных на смартфон с помощью Arduino, модуля NRF24L01 и Bluetooth (BLE). Только переделать данный проект под ESP32.
Спасибо за ответ.
Нашёл нужное, здесь слейв: https://github.com/espressif/arduino-esp32/blob/master/libraries/BluetoothSerial/examples/SerialToSerialBT/SerialToSerialBT.ino
А здесь мастер: https://github.com/espressif/arduino-esp32/blob/master/libraries/BluetoothSerial/examples/SerialToSerialBTM/SerialToSerialBTM.ino
Хорошо, спасибо и вам. Надеюсь ваши ссылки помогут тем пользователям, которые столкнулись с такой же проблемой как и вы