ESP32 оқулығы 37/55 - ESP32 BLE арқылы Bluetooth қолданбасын пайдалану | SunFounder ESP32 IoT оқу жиынтығы
Бұл оқулықта біз ESP32-ні Bluetooth сервері ретінде қалай пайдалануға болатынын зерттейміз, мобильді қосымшадан хабарламалар жіберу және қабылдау үшін. Бұл ESP32 тақтаңыз бен мобильді құрылғыңыз арасында интерактивті байланысқа мүмкіндік береді, бұл оны IoT жобаларыңызға әмбебап қосымша етеді. Осы сабақтың соңында сіз мобильді құрылғыңыздан ESP32-ге мәтін жібере аласыз және оны сериялық мониторда көре аласыз.
Біз iOS және Android жүйелерінде қолжетімді LightBlue Explorer қосымшасын ESP32-мен байланысу үшін қолданамыз. Бұл оқулық Bluetooth Low Energy (BLE) байланысын түсінуге негіз болады және озық жобаларға дайындық жасайды. Көрнекі нұсқаулық үшін бейнені қараңыз (бейнеде 02:00-де).
Аппараттық құрал түсіндірмесі
Бұл жобадағы негізгі компонент - ESP32 микроконтроллері, ол Wi-Fi және Bluetooth мүмкіндіктерін біріктіреді. Бұл ESP32-ге сервер ретінде әрекет етуге, деректерді сымсыз қабылдауға және жіберуге мүмкіндік береді. ESP32-нің кірістірілген Bluetooth функциясы BLE қолдайды, бұл оны төмен қуатты қосымшалар үшін тиімді етеді.
ESP32-ден басқа, біз LightBlue қосымшасы орнатылған мобильді құрылғыны қолданамыз. Бұл қосымша пайдаланушыларға ESP32-ге қосылуға және Bluetooth арқылы деректер жіберуге мүмкіндік береді. Осы компоненттердің интеграциясы ESP32 мен мобильді құрылғылар арасында үздіксіз байланысты қамтамасыз етеді, пайдаланушының өзара әрекеттесуін жақсартады.
Деректер парағының мәліметтері
| Өндіруші | Espressif Systems |
|---|---|
| Бөлшек нөмірі | ESP32-WROOM-32 |
| Логика/IO кернеуі | 3.3 В |
| Қоректендіру кернеуі | 3.0 – 3.6 В |
| Шығыс тогы (арна үшін) | 40 мА |
| Ең жоғары ток (арна үшін) | 160 мА |
| PWM жиілігі бойынша нұсқау | 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 конфигурациялары үшін қажет болғанда pull-up немесе pull-down резисторларды қолданыңыз.
- BLE қосылымдарын бақылаңыз; қосымшаның дұрыс жұптастырылғанын қамтамасыз етіңіз.
- Қызметтер мен сипаттамалар үшін UUID бірегей екенін тексеріңіз.
- Қателерді жою үшін сериялық мониторды үнемі тексеріңіз.
- Күрделі сигнал ақауларын жою үшін логикалық анализаторды қолдануды қарастырыңыз.
Сымды қосу нұсқаулары
Бұл жоба үшін сымды қосу қарапайым, өйткені ESP32 негізінен қуат пен бағдарламалау үшін USB арқылы қосылады. ESP32-ні микро USB кабелі арқылы компьютерге қосыңыз. USB портының жеткілікті қуат беретінін қамтамасыз етіңіз (әдетте 5 В). Сериялық монитор қателерді жою үшін қолданылады, сондықтан бұл қосымша үшін қосымша аппараттық қосылымдар қажет емес.
Болашақ жобаларда ESP32-ні сыртқы компоненттермен қолданғанда, жер түйреуіштерін ортақ жерге қосуды ұмытпаңыз. Бұл ESP32 мен кез келген қосылған сенсорлар немесе модульдер бірдей анықтамалық нүктені бөлісетінін қамтамасыз етеді. Сонымен қатар, батареяны қолдансаңыз, оң терминалды 3.3 В түйреуішіне, ал теріс терминалды ESP32-дегі жер түйреуішіне қосыңыз.
Код мысалдары және түсіндірме
Берілген код Bluetooth серверін инициализациялайды, қажетті қызметтер мен сипаттамаларды орнатады және кіріс хабарламаларды өңдейді. Негізгі идентификаторларға Bluetooth құрылғысының атын анықтайтын bleName және мобильді қосымшадан кіріс хабарламаны сақтайтын 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 Tutorial 37/55 - SunFounder doc page for Bluetooth appdocs.sunfounder.com
Файлдар📁
Файлдар жоқ.