Использование Bluetooth в модуле ESP32
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 для использования Bluetooth
Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты. Если вы ранее работали с Bluetooth модулями HC-05 или HC-06, то в программах для данных модулей вы найдете много общего с программой, которую мы рассмотрим в данном проекте.
Основная идея нашей программы состоит в том, что соединение Serial Bluetooth в модуле ESP32 "слушает" данные, поступающие от подключенных устройств (в нашем случае смартфона). Если мы будем принимать ‘1’, то мы будем включать встроенный светодиод модуля, а если мы будем принимать ‘0’, то мы будем выключать данный светодиод.
Начнем нашу программу мы с подключения библиотеки BluetoothSerial, которая позволяет Bluetooth модулю ESP32 работать в качестве Bluetoth SSP (Bluetoth с протоколом последовательного порта).
#include "BluetoothSerial.h" //Header File for Serial Bluetooth, will be added by default into Arduino
Затем создадим объект ESP_BT для работы с функционалом технологии Bluetooth.
BluetoothSerial ESP_BT; //Object for Bluetooth
Далее, внутри функции setup() мы инициализируем Bluetooth соединение и последовательную связь со скоростью 9600 бод. Bluetooth соединению (сигналу) мы дали имя “ESP32_LED_Control” и по этому имени мы его сможем найти в смартфоне когда включим в нем Bluetooth. Также зададим режим работы для контакта, к которому подключен встроенный светодиод модуля, на вывод данных.
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. Также мы будем выводить значение этой переменной в окно монитора последовательной связи для тестирования работы проекта.
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 – мы будем выключать светодиод.
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");
}
КОД
#include "BluetoothSerial.h"
BluetoothSerial SerialBT;
void setup()
{
SerialBT.begin("ESP32test");
delay(1000);
}
void loop()
{
String inputFromOtherSide;
if (SerialBT.available()) {
inputFromOtherSide = SerialBT.readString();
SerialBT.println("You had entered: ");
SerialBT.println(inputFromOtherSide);
}
}
ССЫЛКИ
Связь ESP32 по Bluetooth в Arduino IDE
How to write a C# program to communicate with an ESP32 development board via Bluetooth Serial
Только полноправные пользователи могут оставлять комментарии. Аутентифицируйтесь пожалуйста, используя сервисы.