ESP32 Упатство 37/55 - Користење на Bluetooth апликација со ESP32 BLE | SunFounder's 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 V |
| Напон на напојување | 3.0 – 3.6 V |
| Излезна струја (по канал) | 40 mA |
| Врвна струја (по канал) | 160 mA |
| Насоки за PWM фреквенција | 1 kHz |
| Праг на влезна логика | 0.2 VCC (ниско), 0.8 VCC (високо) |
| Пад на напон / RDS(on) / заситување | 0.1 V |
| Термички граници | 125 °C |
| Пакет | QFN48 |
| Белешки / варијанти | ESP32-WROOM-32, ESP32-WROVER |
- Обезбедете стабилно напојување (3.3 V) за да спречите падови на напон.
- Користете кондензатори за раздвојување во близина на пиновите за напојување.
- Одржувајте соодветно расејување на топлина ако користите висока струја.
- Бидете внимателни со нивоата на напон на GPIO пиновите; тие се толерантни на 3.3 V.
- Користете pull-up или pull-down отпорници по потреба за GPIO конфигурации.
- Следете ги BLE врските; осигурете се дека апликацијата е правилно спарена.
- Потврдете дека UUID-ите за услуги и карактеристики се единствени.
- Редовно проверувајте го серискиот монитор за пораки за дебагирање.
- Размислете за користење логички анализатор за сложено решавање проблеми со сигнали.
Инструкции за поврзување
Поврзувањето за овој проект е едноставно бидејќи ESP32 првенствено се поврзува преку USB за напојување и програмирање. Поврзете го ESP32 со вашиот компјутер користејќи микро USB кабел. Осигурете се дека USB портата обезбедува доволно напојување (обично 5 V). Серискиот монитор ќе се користи за дебагирање, така што не се потребни дополнителни хардверски врски за оваа апликација.
Кога користите ESP32 со надворешни компоненти во идни проекти, запомнете да ги поврзете пиновите за заземјување со заедничка земја. Ова осигурува дека ESP32 и сите поврзани сензори или модули ја делат истата референтна точка. Дополнително, ако користите батерија, поврзете го позитивниот терминал со 3.3 V пинот и негативниот терминал со пинот за земја на 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
Resources & references
-
DocumentationESP32 Tutorial 37/55- SunFounder doc page for Bluetooth appdocs.sunfounder.com
Files📁
No files available.