ESP32 Урок 37/55 - Использование Bluetooth-приложения с ESP32 BLE | Обучающий набор SunFounder для ESP32 IoT
В этом уроке мы рассмотрим, как использовать ESP32 в качестве Bluetooth-сервера для отправки и получения сообщений из мобильного приложения. Это обеспечивает интерактивную связь между вашей платой ESP32 и мобильным устройством, что делает её универсальным дополнением для ваших IoT-проектов. К концу этого урока вы сможете отправлять текст с мобильного устройства на ESP32 и видеть его на последовательном мониторе.
Мы будем использовать приложение LightBlue Explorer, доступное на iOS и Android, для связи с ESP32. Этот урок является основой для понимания связи Bluetooth Low Energy (BLE) и создаёт основу для более продвинутых проектов. Для наглядного руководства обратитесь к видео (на видео в 02:00).
Объяснение аппаратного обеспечения
Основным компонентом этого проекта является микроконтроллер ESP32, который объединяет возможности Wi-Fi и Bluetooth. Это позволяет ESP32 выступать в роли сервера, принимая и отправляя данные по беспроводной сети. Встроенная Bluetooth-функциональность ESP32 поддерживает BLE, что делает его эффективным для приложений с низким энергопотреблением.
Помимо ESP32, мы будем использовать мобильное устройство с установленным приложением LightBlue. Это приложение позволяет пользователям подключаться к ESP32 и отправлять данные через Bluetooth. Интеграция этих компонентов обеспечивает бесперебойную связь между ESP32 и мобильными устройствами, улучшая взаимодействие с пользователем.
Детали из технического описания
| Производитель | Espressif Systems |
|---|---|
| Номер детали | ESP32-WROOM-32 |
| Логическое/IO напряжение | 3,3 В |
| Напряжение питания | 3,0 – 3,6 В |
| Выходной ток (на канал) | 40 мА |
| Пиковый ток (на канал) | 160 мА |
| Рекомендации по частоте ШИМ | 1 кГц |
| Пороговые уровни входной логики | 0,2 VCC (низкий), 0,8 VCC (высокий) |
| Падение напряжения / RDS(on) / насыщение | 0,1 В |
| Тепловые пределы | 125 °C |
| Корпус | QFN48 |
| Примечания / варианты | ESP32-WROOM-32, ESP32-WROVER |
- Обеспечьте стабильное питание (3,3 В), чтобы избежать сбоев питания.
- Используйте конденсаторы для развязки рядом с выводами питания.
- Обеспечьте надлежащее рассеивание тепла при использовании высокого тока.
- Будьте осторожны с уровнями напряжения на выводах GPIO; они рассчитаны на 3,3 В.
- Используйте подтягивающие или стягивающие резисторы по мере необходимости для конфигураций GPIO.
- Следите за BLE-соединениями; убедитесь, что приложение правильно сопряжено.
- Проверьте, что UUID для сервисов и характеристик уникальны.
- Регулярно проверяйте последовательный монитор для отладочных сообщений.
- Рассмотрите возможность использования логического анализатора для устранения сложных проблем с сигналами.
Инструкции по подключению
Подключение для этого проекта простое, так как ESP32 в основном подключается через USB для питания и программирования. Подключите ESP32 к компьютеру с помощью micro USB-кабеля. Убедитесь, что USB-порт обеспечивает достаточное питание (обычно 5 В). Последовательный монитор будет использоваться для отладки, поэтому для этого приложения дополнительные аппаратные подключения не требуются.
При использовании ESP32 с внешними компонентами в будущих проектах не забудьте подключить выводы заземления к общей земле. Это гарантирует, что ESP32 и любые подключённые датчики или модули используют одну и ту же точку отсчёта. Кроме того, если вы используете батарею, подключите положительный вывод к контакту 3,3 В, а отрицательный вывод к контакту заземления на ESP32.
Примеры кода и пояснения
Предоставленный код инициализирует Bluetooth-сервер, настраивает необходимые сервисы и характеристики и обрабатывает входящие сообщения. Ключевые идентификаторы включают bleName, который определяет имя Bluetooth-устройства, и receivedText, который хранит входящее сообщение от мобильного приложения.
const char *bleName = "ESP32_Bluetooth";
String receivedText = "";
Функция setup() инициализирует последовательную связь и настройку BLE. Это важно для установления соединения с приложением LightBlue.
void setup() {
Serial.begin(115200); // Инициализация последовательного порта
setupBLE(); // Инициализация Bluetooth BLE
}
В функции loop() код проверяет наличие входящих сообщений. Если получено новое сообщение, оно выводится на последовательный монитор, и подключённому BLE-устройству отправляется уведомление.
if (receivedText.length() > 0 && millis() - lastMessageTime > 1000) {
Serial.print("Полученное сообщение: ");
Serial.println(receivedText);
pCharacteristic->setValue(receivedText.c_str());
pCharacteristic->notify();
receivedText = "";
}
Для полного понимания обратитесь к полному коду, который загружается ниже статьи. Это предоставит вам все необходимые детали для успешной реализации проекта.
Демонстрация / Что ожидать
После успешной реализации вы сможете отправлять сообщения из приложения LightBlue на ESP32. Когда вы вводите сообщение, например «Привет», оно появится на последовательном мониторе. Кроме того, вы можете отправлять сообщения обратно в приложение, что подтверждает двустороннюю связь. Если вы столкнулись с проблемами, такими как отсутствие сообщений, убедитесь, что ESP32 правильно сопряжён с приложением и UUID совпадают.
Видеометки времени
- 00:00 Начало
- 2:10 Введение в проект
- 2:45 Страница документации
- 4:04 Код Arduino
- 6:31 Установка Bluetooth-приложения
- 7:12 Выбор платы ESP32 и COM-порта
- 8:54 Демонстрация проекта
#include "BLEDevice.h"
#include "BLEServer.h"
#include "BLEUtils.h"
#include "BLE2902.h"
// Define the Bluetooth device name
const char *bleName = "ESP32_Bluetooth";
// Define the received text and the time of the last message
String receivedText = "";
unsigned long lastMessageTime = 0;
// Define the UUIDs of the service and characteristics
#define SERVICE_UUID "your_service_uuid_here"
#define CHARACTERISTIC_UUID_RX "your_rx_characteristic_uuid_here"
#define CHARACTERISTIC_UUID_TX "your_tx_characteristic_uuid_here"
// Define the Bluetooth characteristic
BLECharacteristic *pCharacteristic;
void setup() {
Serial.begin(115200); // Initialize the serial port
setupBLE(); // Initialize the Bluetooth BLE
}
void loop() {
// When the received text is not empty and the time since the last message is over 1 second
// Send a notification and print the received text
if (receivedText.length() > 0 && millis() - lastMessageTime > 1000) {
Serial.print("Received message: ");
Serial.println(receivedText);
pCharacteristic->setValue(receivedText.c_str());
pCharacteristic->notify();
receivedText = "";
}
// Read data from the serial port and send it to BLE characteristic
if (Serial.available() > 0) {
String str = Serial.readStringUntil('\n');
const char *newValue = str.c_str();
pCharacteristic->setValue(newValue);
pCharacteristic->notify();
}
}
// Define the BLE server callbacks
class MyServerCallbacks : public BLEServerCallbacks {
// Print the connection message when a client is connected
void onConnect(BLEServer *pServer) {
Serial.println("Connected");
}
// Print the disconnection message when a client is disconnected
void onDisconnect(BLEServer *pServer) {
Serial.println("Disconnected");
}
};
// Define the BLE characteristic callbacks
class MyCharacteristicCallbacks : public BLECharacteristicCallbacks {
void onWrite(BLECharacteristic *pCharacteristic) {
// When data is received, get the data and save it to receivedText, and record the time
std::string value = std::string(pCharacteristic->getValue().c_str());
receivedText = String(value.c_str());
lastMessageTime = millis();
Serial.print("Received: ");
Serial.println(receivedText);
}
};
// Initialize the Bluetooth BLE
void setupBLE() {
BLEDevice::init(bleName); // Initialize the BLE device
BLEServer *pServer = BLEDevice::createServer(); // Create the BLE server
// Print the error message if the BLE server creation fails
if (pServer == nullptr) {
Serial.println("Error creating BLE server");
return;
}
pServer->setCallbacks(new MyServerCallbacks()); // Set the BLE server callbacks
// Create the BLE service
BLEService *pService = pServer->createService(SERVICE_UUID);
// Print the error message if the BLE service creation fails
if (pService == nullptr) {
Serial.println("Error creating BLE service");
return;
}
// Create the BLE characteristic for sending notifications
pCharacteristic = pService->createCharacteristic(CHARACTERISTIC_UUID_TX, BLECharacteristic::PROPERTY_NOTIFY);
pCharacteristic->addDescriptor(new BLE2902()); // Add the descriptor
// Create the BLE characteristic for receiving data
BLECharacteristic *pCharacteristicRX = pService->createCharacteristic(CHARACTERISTIC_UUID_RX, BLECharacteristic::PROPERTY_WRITE);
pCharacteristicRX->setCallbacks(new MyCharacteristicCallbacks()); // Set the BLE characteristic callbacks
pService->start(); // Start the BLE service
pServer->getAdvertising()->start(); // Start advertising
Serial.println("Waiting for a client connection..."); // Wait for a client connection
}
Common Course Links
Common Course Files
Ресурсы и ссылки
-
ДокументацияESP32 Учебник 37/55 - Страница документа SunFounder для Bluetooth приложенияdocs.sunfounder.com
Файлы📁
Нет доступных файлов.