Esp32 управление через bluetooth

ESP32: Bluetooth

В состав платы входит классический Bluetooth. Пример можно найти в разделе Examples/BluetoothSerial/SerialToSerialBT. В примере используется библиотека BluetoothSerial.

Рассмотрим упрощённый пример без дополнительных проверок. Просто будем посылать строку любому устройству, которое подключится к нашей плате.

 #include "BluetoothSerial.h" BluetoothSerial SerialBT; void setup() < SerialBT.begin("ESP32"); >void loop()

В реальных устройствах всё-таки не помешает дополнительная проверка.

Посылаем данные через последовательный порт

В Windows вы можете обнаружить плату через специальное окно настроек «Bluetooth & other devices» (англ.версия). Затем в диспетчере устройств нужно посмотреть появившегося номер COM-порта. После этого в Arduino IDE нужно выбрать данный порт и открыть «Монитор порта», в котором будут появляться сообщения.

Сначала напишем простой скетч, который будет считывать данные с компьютера или смартфона.

 #include "BluetoothSerial.h" BluetoothSerial SerialBT; void setup() < Serial.begin(115200); if (!SerialBT.begin("ESP32")) < Serial.println("An error occurred initializing Bluetooth"); >> void loop() < while (SerialBT.available()) < Serial.write(SerialBT.read()); >delay(50); > 

Данные удобно посылать через приложение Putty. В настройках выбираем тип соединения Serial и выставляем скорость. Главное — не ошибиться с номером порта, попробуйте методом перебора.

Putty General

Затем в блоке Terminal выбираем настройки Force on.

Putty Terminal

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

Putty Console

Посылаемые команды отображаются в мониторе порта.

Serial Monitor

Регистрируем события

Мы посылаем сообщения вслепую, не зная, соединился ли клиент к плате. Чтобы избежать этой проблемы, можем добавить в скетч функцию обратного вызова через register_callback(). Тем самым мы сможем отслеживать момент соединения компьютера (Putty).

 #include "BluetoothSerial.h" BluetoothSerial SerialBT; void callback(esp_spp_cb_event_t event, esp_spp_cb_param_t *param) < if(event == ESP_SPP_SRV_OPEN_EVT)< Serial.println("Client Connected"); >> void setup() < Serial.begin(115200); SerialBT.register_callback(callback); if (!SerialBT.begin("ESP32")) < Serial.println("An error occurred initializing Bluetooth"); >else < Serial.println("Bluetooth initialized"); >> void loop() < while (SerialBT.available()) < Serial.write(SerialBT.read()); >delay(50); > 

Снова запустите скетч и установите соединение через Putty. В успешном случае в мониторе порта появится сообщение Client Connected.

Можно не только отследить наступление события подключения клиента к плате, но и его адрес. Добавим немного дополнительного кода в функцию обратного вызова.

 #include "BluetoothSerial.h" BluetoothSerial SerialBT; void callback(esp_spp_cb_event_t event, esp_spp_cb_param_t *param) < if (event == ESP_SPP_SRV_OPEN_EVT) < Serial.println("Client Connected"); Serial.println("Client Connected has address:"); for (int i = 0; i < 6; i++) < Serial.printf("%02X", param->srv_open.rem_bda[i]); if (i < 5) < Serial.print(":"); >> Serial.println("--------------"); > > void setup() < Serial.begin(115200); SerialBT.register_callback(callback); if (!SerialBT.begin("ESP32")) < Serial.println("An error occurred initializing Bluetooth"); >else < Serial.println("Bluetooth initialized"); >> void loop() < while (SerialBT.available()) < Serial.write(SerialBT.read()); >delay(50); > 

Снова пытаемся соединиться с платой с компьютера или телефона и получаем адреса подключаемых устройств. На скриншоте показано, как я дважды подключался к плате с разных устройств.

Читайте также:  Блютуз мышь на ipad

Client Bluetooth

Включаем светодиод с телефона

Посылать данные можно с Android-телефона. Сначала в настройках нужно присоединиться к плате, а затем через приложение, которое умеет работать как Bluetooth-терминал (например, Bluetooth Terminal), увидеть поступающие сообщения или отправлять собственные команды.

Немного видоизменённый пример, в котором добавлена проверка на поступление символов 0 и 1 с Android-устройства (код для Android).

 // Подключаем библиотеку #include "BluetoothSerial.h" // Проверка, что Bluetooth доступен на плате #if !defined(CONFIG_BT_ENABLED) || !defined(CONFIG_BLUEDROID_ENABLED) #error Bluetooth is not enabled! Please run `make menuconfig` to and enable it #endif // Создаём экземпляр класса BluetoothSerial SerialBT; int LED = 2; // встроенный светодиод void setup() < Serial.begin(115200); // включаем передачу данных у последовательного порта SerialBT.begin("ESP32"); // Может придумать своё имя Serial.println("The device started, now you can pair it with bluetooth!"); pinMode(LED, OUTPUT); >void loop() < if (Serial.available()) < SerialBT.write(Serial.read()); >if (SerialBT.available()) < char incomingChar = SerialBT.read(); Serial.write(incomingChar); // При символе "1" включаем светодиод if (incomingChar == '1') < digitalWrite(LED, HIGH); Serial.println("On"); >// При символе "0" выключаем светодиод if ( incomingChar == '0') < digitalWrite(LED, LOW); Serial.println("Off"); >> delay(20); > 

После заливки скетча нужно дождаться появления надписи «The device started, now you can pair it with bluetooth!» в мониторе порта.

Дальше нужно послать команды. Это можно сделать через программу на Android (ссылка на исходник дана выше) или можно использовать готовую программу Bluetooth Terminal.

Bluetooth Terminal также может получать данные из платы. Вам нужно набрать любое слово в мониторе порта и оно отобразится на телефоне.

В последнее время наткнулся на новый терминал Serial Bluetooth Terminal с открытыми исходниками для Android-устройств Classic Bluetooth и BLE.

Узнать адрес ESP32-устройства

С помощью низкоуровневых функций можно узнать адрес-устройства.

У каждого Bluetooth-устройства есть адрес, по которому можно определить изготовителя. На сайте можно вбить адрес и получить имя производителя.

 #include "esp_bt_main.h" #include "esp_bt_device.h" bool initBluetooth() < if (!btStart()) < Serial.println("Failed to initialize controller"); return false; >if (esp_bluedroid_init() != ESP_OK) < Serial.println("Failed to initialize bluedroid"); return false; >if (esp_bluedroid_enable() != ESP_OK) < Serial.println("Failed to enable bluedroid"); return false; >> void printDeviceAddress() < const uint8_t* point = esp_bt_dev_get_address(); for (int i = 0; i < 6; i++) < char str[3]; sprintf(str, "%02X", (int)point[i]); Serial.print(str); if (i < 5) < Serial.print(":"); >> > void setup() < Serial.begin(115200); initBluetooth(); printDeviceAddress(); >void loop() <> 

После запуска скетча откройте монитор порта. Там вы должны увидеть адрес вида 24:0A:C4:27:07:66. Скопируйте адрес и определите производителя через сайт (ссылка выше). В моём случае это оказался Espressif Inc.

Присвоить новое имя устройству

Функция esp_bt_dev_set_device_name() позволяет присвоить устройству новое имя.

 #include "esp_bt_main.h" #include "esp_gap_bt_api.h" #include "esp_bt_device.h" bool initBluetooth(const char *deviceName) < if (!btStart()) < Serial.println("Failed to initialize controller"); return false; >if (esp_bluedroid_init() != ESP_OK) < Serial.println("Failed to initialize bluedroid"); return false; >if (esp_bluedroid_enable() != ESP_OK) < Serial.println("Failed to enable bluedroid"); return false; >esp_bt_dev_set_device_name(deviceName); esp_bt_gap_set_scan_mode(ESP_BT_SCAN_MODE_CONNECTABLE_DISCOVERABLE); > void setup() < Serial.begin(115200); if (!initBluetooth("ESP32 BT")) < Serial.println("Bluetooth init failed"); >; > void loop() <> 

Запустите пример и откройте монитор порта. Если никаких сообщений вы не видите, значит инициализация модуля прошла успешно. Теперь можете открыть окно настроек в Windows или на Android-телефоне и посмотреть список доступных Bluetooth-устройств. В списке вы должны увидеть устройство под именем «ESP32 BT».

Читайте также:  Bluetooth adapter dual mode

Источник

Связь ESP32 по Bluetooth в Arduino IDE

Связь ESP32 по Bluetooth в Arduino IDE

Развитие проектов интегрирующих передачу данных по Bluetooth предполагает переход на более современные микроконтроллеры ESP32, поддерживающие цифровой обмен данными по Wi-Fi, Bluetooth, порты АЦП, ЦАП, аудиоканал, протокол работы с SD картами, возможность энергосберегающего режима глубокого сна и ряд других новшеств.

Эти особенности позволяют эффективно применять данные микроконтроллеры в приложениях «интернета вещей» и проектах серии «умный дом» в сочетании с модулями ARDUINO и Raspberry Pi.

Отличительная черта контроллеров ESP32 — наличие двух интегрированных модулей Bluetooth: стандартного Bluetooth и Bluetooth Low Energy (BLE). Модуль BLE потребляет значительно меньше энергии, относительно стандартных классических протоколов Bluetooth. Экономия энергии достигается за счет того, что информационные пакеты отправляются периодически, по мере необходимости.

Данный тип обмена данными не поддерживает обмена файлами. Например, музыку или видео передать не получится.

Модули BLE могут использоваться для идентификации типов устройств, обмена информацией со смарт часами, GPS трекерами, фитнес браслетами и прочими приложениями, где требуется оперативный обмен короткими информационными пакетами, отображающими изменение контролируемых параметров.

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

Соответственно, стандартный Bluetooth выполняет функции обмена файлами, и представляет собой один из вариантов Bluetooth SPP (Serial Port Protocol), поддерживающий работу с большинством существующих устройств со стандартным последовательным протоколом.

Обмен данными между смартфоном и ESP32 через Bluetooth

Рассмотрим обмен данными смартфона и контроллера ESP32 посредством любой программы Bluetooth терминала, с помощью которой будем отправлять данные в микроконтроллер.

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

При этом, прием логической единицы отображается включением светодиода, а прием логического нуля — выключением. Для разработки будем использовать уже знакомую среду Arduino IDE. Начнём программу с добавления файла библиотеки BluetoothSerial, которая переводит модуль в режим Bluetooth SPP.

Скачать последнюю версию библиотеки можно с ее официальной страницы на GitHub: ссылка на скачивание Bluetooth Serial Library

Источник

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

Bluetooth модули HC-05 и HC-06 просты в использовании и находят достаточно широкое применение в радиоэлектронных проектах. Однако к их недостаткам можно отнести сравнительно большое энергопотребление и использование уже сильно устаревшей версии Bluetooth V2.0. На их фоне модули ESP32, обладающие встроенными Wi-Fi и Bluetooth, контактами для АЦП и ЦАП, поддержкой аудио устройств, спящего режима и многими другими возможностями, смотрятся весьма неплохо для конструирования различных проектов тематики интернета вещей (Internet of Things, IoT).

Внешний вид проекта использования Bluetooth в модуле ESP32

В данной статье мы рассмотрим использование классического Bluetooth в модуле ESP32 – мы будем управлять включением/выключением встроенного светодиода модуля с помощью смартфона. В дальнейших статьях на нашем сайте мы также рассмотрим использование в модуле ESP32 более «продвинутой» версии Bluetooth – технологии BLE (Bluetooth Low Energy – Bluetooth с низким энергопотреблением).

Читайте также:  Vision адаптер блютуз драйвер

Принципы использования классического Bluetooth и BLE в ESP32

Технология BLE (Bluetooth Low Energy), как следует из ее названия, потребляет значительно меньше энергии чем классический (classic) Bluetooth. Это достигается при помощи передачи данных по требованию с заранее определенными периодическими обновлениями. Но в отличие от классического Bluetooth технология BLE не используется для передачи файлов или музыки. Наверное, вы были неоднократно удивлены тем, что когда вы подключаете к вашему смартфону какой-нибудь фитнес браслет или умные часы, то вы в своем смартфоне можете посмотреть и уровень заряда батареи подключенного устройства – этот функционал становится доступен благодаря использованию технологии BLE. Данная технология работает вместе с версией Bluetooth V4.0 и может использоваться в серверных или клиентских устройствах, что делает ее чрезвычайно удобной для применения в умных часах, фитнес браслетах и т.д.

Классический Bluetooth, в то же время, достаточно удобен для передачи файлов и других данных. Практически все BLE устройства поддерживают и функционал классического Bluetooth.

Символ 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 с помощью Arduino IDE

Объяснение программы для модуля ESP32 для использования Bluetooth

Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты. Если вы ранее работали с Bluetooth модулями HC-05 или HC-06, то в программах для данных модулей вы найдете много общего с программой, которую мы рассмотрим в данном проекте.

Основная идея нашей программы состоит в том, что соединение Serial Bluetooth в модуле ESP32 «слушает» данные, поступающие от подключенных устройств (в нашем случае смартфона). Если мы будем принимать ‘1’, то мы будем включать встроенный светодиод модуля, а если мы будем принимать ‘0’, то мы будем выключать данный светодиод.

Начнем нашу программу мы с подключения библиотеки BluetoothSerial, которая позволяет Bluetooth модулю ESP32 работать в качестве Bluetoth SSP (Bluetoth с протоколом последовательного порта).

Источник

Оцените статью
Adblock
detector