Search Code

ESP32 Eğitimi 37/55 - ESP32 BLE ile Bluetooth Uygulaması Kullanımı | SunFounder'ın ESP32 IoT Öğrenme Kiti

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.

bluetooth_lightblue

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

Görseller

bluetooth_lightblue
bluetooth_lightblue
838-ESP32 Tutorial 37/55- Arduino code for Bluetooth app test
Dil: C++
#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
}

Kaynaklar ve referanslar

Dosyalar📁

Dosya mevcut değil.