Использование Bluetooth в модуле ESP32

  • Михаил
  • 8 мин. на прочтение
  • 238
  • 16 Oct 2024
  • 16 Oct 2024

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