ESP32 Eğitimi 37/55 - ESP32 BLE ile Bluetooth Uygulaması Kullanımı | SunFounder'ın ESP32 IoT Öğrenme Kiti
Bu eğitimde, ESP32'yi bir Bluetooth sunucusu olarak kullanarak bir mobil uygulamadan mesaj gönderip almayı keşfedeceğiz. Bu, ESP32 kartınız ile mobil cihazınız arasında etkileşimli iletişim sağlayarak IoT projelerinize çok yönlü bir katkı sunar. Bu dersin sonunda, mobil cihazınızdan ESP32'ye metin gönderebilecek ve seri monitörde görüntüleyebileceksiniz.
ESP32 ile iletişim kurmak için hem iOS hem de Android'de bulunan LightBlue Explorer uygulamasını kullanacağız. Bu eğitim, Bluetooth Düşük Enerji (BLE) iletişimini anlamak için temeldir ve daha ileri düzey projeler için zemin hazırlar. Görsel bir rehber için lütfen videoya bakın (videoda 02:00'de).
Donanım Açıklaması
Bu projedeki ana bileşen, hem Wi-Fi hem de Bluetooth özelliklerini entegre eden ESP32 mikrodenetleyicisidir. Bu, ESP32'nin bir sunucu olarak hareket etmesine, verileri kablosuz olarak alıp göndermesine olanak tanır. ESP32'nin yerleşik Bluetooth işlevselliği BLE'yi destekleyerek düşük güçlü uygulamalar için verimli hale getirir.
ESP32'ye ek olarak, LightBlue uygulamasının kurulu olduğu bir mobil cihaz kullanacağız. Bu uygulama, kullanıcıların ESP32'ye bağlanmasına ve Bluetooth üzerinden veri göndermesine olanak tanır. Bu bileşenlerin entegrasyonu, ESP32 ile mobil cihazlar arasında kesintisiz iletişim sağlayarak kullanıcı etkileşimini artırır.
Veri Sayfası Detayları
| Üretici | Espressif Systems |
|---|---|
| Parça numarası | ESP32-WROOM-32 |
| Mantık/IO voltajı | 3.3 V |
| Besleme voltajı | 3.0 – 3.6 V |
| Çıkış akımı (kanal başına) | 40 mA |
| Tepe akımı (kanal başına) | 160 mA |
| PWM frekansı önerisi | 1 kHz |
| Giriş mantık eşikleri | 0.2 VCC (düşük), 0.8 VCC (yüksek) |
| Gerilim düşümü / RDS(on) / doyum | 0.1 V |
| Termal sınırlar | 125 °C |
| Paket | QFN48 |
| Notlar / varyantlar | ESP32-WROOM-32, ESP32-WROVER |
- Kesintileri önlemek için sabit güç kaynağı (3.3 V) sağlayın.
- Güç pinlerinin yakınında dekuplaj için kapasitörler kullanın.
- Yüksek akım kullanıyorsanız uygun ısı dağılımını sağlayın.
- GPIO pin voltaj seviyelerine dikkat edin; 3.3 V toleranslıdırlar.
- GPIO yapılandırmaları için gerektiğinde pull-up veya pull-down dirençleri kullanın.
- BLE bağlantılarını izleyin; uygulamanın doğru şekilde eşleştirildiğinden emin olun.
- Hizmetler ve özellikler için UUID'lerin benzersiz olduğunu doğrulayın.
- Hata ayıklama mesajları için seri monitörü düzenli olarak kontrol edin.
- Karmaşık sinyal sorunlarını gidermek için bir mantık analizörü kullanmayı düşünün.
Bağlantı Talimatları
Bu proje için bağlantı basittir çünkü ESP32 öncelikle güç ve programlama için USB üzerinden bağlanır. ESP32'yi bir mikro USB kablosu kullanarak bilgisayarınıza bağlayın. USB bağlantı noktasının yeterli güç sağladığından emin olun (genellikle 5 V). Hata ayıklama için seri monitör kullanılacaktır, bu nedenle bu uygulama için ek donanım bağlantısı gerekmez.
Gelecekteki projelerde ESP32'yi harici bileşenlerle kullanırken, toprak pinlerini ortak bir toprağa bağlamayı unutmayın. Bu, ESP32'nin ve bağlı sensörlerin veya modüllerin aynı referans noktasını paylaşmasını sağlar. Ayrıca, bir pil kullanıyorsanız, pozitif terminali 3.3 V pinine ve negatif terminali ESP32'deki bir toprak pinine bağlayın.
Kod Örnekleri ve Açıklama
Sağlanan kod, Bluetooth sunucusunu başlatır, gerekli hizmetleri ve özellikleri kurar ve gelen mesajları işler. Anahtar tanımlayıcılar arasında Bluetooth cihazının adını tanımlayan bleName ve mobil uygulamadan gelen mesajı saklayan receivedText bulunur.
const char *bleName = "ESP32_Bluetooth";
String receivedText = "";
setup() işlevi seri iletişimi ve BLE kurulumunu başlatır. Bu, LightBlue uygulamasıyla bağlantı kurmak için çok önemlidir.
void setup() {
Serial.begin(115200); // Seri bağlantı noktasını başlat
setupBLE(); // Bluetooth BLE'yi başlat
}
loop() işlevi içinde kod, gelen mesajları kontrol eder. Yeni bir mesaj alınırsa, seri monitöre yazdırılır ve bağlı BLE cihazına bir bildirim gönderilir.
if (receivedText.length() > 0 && millis() - lastMessageTime > 1000) {
Serial.print("Alınan mesaj: ");
Serial.println(receivedText);
pCharacteristic->setValue(receivedText.c_str());
pCharacteristic->notify();
receivedText = "";
}
Tam bir anlayış için, makalenin altında yüklenen tam koda başvurun. Bu, projeyi başarıyla uygulamak için gerekli tüm detayları sağlayacaktır.
Gösterim / Beklentiler
Başarılı bir uygulama sonrasında, LightBlue uygulamasından ESP32'ye mesaj gönderebilmelisiniz. "Merhaba" gibi bir mesaj yazdığınızda, seri monitörde görünecektir. Ayrıca, uygulamaya geri mesaj göndererek çift yönlü iletişimi doğrulayabilirsiniz. Mesajların görünmemesi gibi sorunlarla karşılaşırsanız, ESP32'nin uygulamayla doğru şekilde eşleştirildiğinden ve UUID'lerin eşleştiğinden emin olun.
Video Zaman Damgaları
- 00:00 Başlangıç
- 2:10 Projeye giriş
- 2:45 Dokümantasyon sayfası
- 4:04 Arduino kodu
- 6:31 Bluetooth Uygulamasını Kurma
- 7:12 ESP32 kartını ve COM portunu seçme
- 8:54 Projenin gösterimi
#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
Kaynaklar ve referanslar
-
BelgelendirmeESP32 Tutorial 37/55- SunFounder doc page for Bluetooth appdocs.sunfounder.com
Dosyalar📁
Dosya mevcut değil.