ESP32 Tutorijal 37/55 - Korištenje Bluetooth aplikacije sa ESP32 BLE | SunFounder's ESP32 IoT Learning komplet
U ovom tutorijalu ćemo istražiti kako koristiti ESP32 kao Bluetooth server za slanje i primanje poruka sa mobilne aplikacije. Ovo omogućava interaktivnu komunikaciju između vaše ESP32 ploče i vašeg mobilnog uređaja, čineći je svestranim dodatkom vašim IoT projektima. Do kraja ove lekcije, moći ćete slati tekst sa svog mobilnog uređaja na ESP32 i vidjeti ga prikazanog na serijskom monitoru.
Koristit ćemo LightBlue Explorer aplikaciju, dostupnu na iOS i Android platformama, za komunikaciju sa ESP32. Ovaj tutorijal je temelj za razumijevanje Bluetooth Low Energy (BLE) komunikacije i postavlja temelje za naprednije projekte. Za vizualni vodič, pogledajte video na (u videu na 02:00).
Objašnjenje hardvera
Primarna komponenta u ovom projektu je ESP32 mikrokontroler, koji integrira i Wi-Fi i Bluetooth mogućnosti. Ovo omogućava ESP32 da djeluje kao server, primajući i šaljući podatke bežično. Ugrađena Bluetooth funkcionalnost ESP32 podržava BLE, čineći ga efikasnim za aplikacije niske potrošnje energije.
Pored ESP32, koristit ćemo mobilni uređaj sa instaliranom LightBlue aplikacijom. Ova aplikacija omogućava korisnicima da se povežu na ESP32 i šalju podatke putem Bluetootha. Integracija ovih komponenti omogućava besprijekornu komunikaciju između ESP32 i mobilnih uređaja, poboljšavajući interakciju s korisnikom.
Detalji iz tehničke dokumentacije
| Proizvođač | Espressif Systems |
|---|---|
| Broj dijela | ESP32-WROOM-32 |
| Logički/IO napon | 3.3 V |
| Napon napajanja | 3.0 – 3.6 V |
| Izlazna struja (po kanalu) | 40 mA |
| Maksimalna struja (po kanalu) | 160 mA |
| Smjernice za PWM frekvenciju | 1 kHz |
| Ulazni logički pragovi | 0.2 VCC (nisko), 0.8 VCC (visoko) |
| Pad napona / RDS(on) / zasićenje | 0.1 V |
| Toplotna ograničenja | 125 °C |
| Paket | QFN48 |
| Napomene / varijante | ESP32-WROOM-32, ESP32-WROVER |
- Osigurajte stabilno napajanje (3.3 V) kako biste spriječili padove napona.
- Koristite kondenzatore za razdvajanje blizu pinova napajanja.
- Održavajte pravilno odvođenje topline ako koristite visoku struju.
- Budite oprezni s nivoima napona na GPIO pinovima; tolerišu 3.3 V.
- Koristite pull-up ili pull-down otpornike prema potrebi za GPIO konfiguracije.
- Pratite BLE veze; osigurajte da je aplikacija pravilno uparena.
- Provjerite da su UUID-ovi za servise i karakteristike jedinstveni.
- Redovno provjeravajte serijski monitor za poruke za otklanjanje grešaka.
- Razmotrite korištenje logičkog analizatora za složeno otklanjanje grešaka u signalima.
Upute za povezivanje
Povezivanje za ovaj projekt je jednostavno jer se ESP32 prvenstveno povezuje putem USB-a za napajanje i programiranje. Povežite ESP32 na računar pomoću mikro USB kabla. Osigurajte da USB port pruža dovoljno napajanja (obično 5 V). Serijski monitor će se koristiti za otklanjanje grešaka, tako da nisu potrebne dodatne hardverske veze za ovu aplikaciju.
Kada koristite ESP32 s vanjskim komponentama u budućim projektima, zapamtite da spojite pinove uzemljenja na zajedničko uzemljenje. Ovo osigurava da ESP32 i bilo koji povezani senzori ili moduli dijele istu referentnu tačku. Dodatno, ako koristite bateriju, spojite pozitivni terminal na 3.3 V pin, a negativni terminal na pin uzemljenja na ESP32.
Primjeri koda i objašnjenje
Dostavljeni kod inicijalizira Bluetooth server, postavlja potrebne servise i karakteristike te obrađuje dolazne poruke. Ključni identifikatori uključuju bleName, koji definira naziv Bluetooth uređaja, i receivedText, koji pohranjuje dolaznu poruku iz mobilne aplikacije.
const char *bleName = "ESP32_Bluetooth";
String receivedText = "";
Funkcija setup() inicijalizira serijsku komunikaciju i BLE postavke. Ovo je ključno za uspostavljanje veze s LightBlue aplikacijom.
void setup() {
Serial.begin(115200); // Inicijaliziraj serijski port
setupBLE(); // Inicijaliziraj Bluetooth BLE
}
Unutar funkcije loop(), kod provjerava dolazne poruke. Ako je primljena nova poruka, ispisuje se na serijski monitor i šalje se obavijest povezanom BLE uređaju.
if (receivedText.length() > 0 && millis() - lastMessageTime > 1000) {
Serial.print("Primljena poruka: ");
Serial.println(receivedText);
pCharacteristic->setValue(receivedText.c_str());
pCharacteristic->notify();
receivedText = "";
}
Za potpuno razumijevanje, pogledajte kompletan kod koji se učitava ispod članka. Ovo će vam pružiti sve potrebne detalje za uspješnu implementaciju projekta.
Demonstracija / Šta očekivati
Nakon uspješne implementacije, trebali biste moći slati poruke iz LightBlue aplikacije na ESP32. Dok kucate poruku, kao što je "Zdravo," pojavit će se na serijskom monitoru. Dodatno, možete slati poruke nazad u aplikaciju, potvrđujući dvosmjernu komunikaciju. Ako naiđete na probleme poput poruka koje se ne pojavljuju, osigurajte da je ESP32 pravilno uparen s aplikacijom i da se UUID-ovi podudaraju.
Vremenske oznake videa
- 00:00 Početak
- 2:10 Uvod u projekat
- 2:45 Stranica s dokumentacijom
- 4:04 Arduino kod
- 6:31 Instalacija Bluetooth aplikacije
- 7:12 Odabir ESP32 ploče i COM porta
- 8:54 Demonstracija projekta
#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
Resursi i reference
-
DokumentacijaESP32 Tutorial 37/55 - SunFounder doc page for Bluetooth appdocs.sunfounder.com
Datoteke📁
Nema dostupnih datoteka.