Skip to content

This repository has been created to provide information on how to establish a BLE connection using AT commands via ESP32.

Notifications You must be signed in to change notification settings

pingstech/ESP-BLE-AT-Commands

Repository files navigation

ESP32 ile BLE Kullanımı

Bugünkü yazımda ESP32'ye UART üzerinde AT komutları göndererek Bluetooth özelliğini kullanarak bilgi alış-verişinin nasıl yapılacağını öğreneceğiz.


💡BLE AT Komutları Ve Parametre Ayarları

  • 1️⃣AT+BLEINIT

   BLE'yi sunucu modunda çalıştırılması için gönderilmesi gereken komuttur. Aşağıdaki komut ESP32'ye gönderilerek BLE sunucu olarak çalıştırılması sağlanacaktır.

AT+BLEINIT=2 

Bu komuta karşılık olarak ESP32'nin aşağıdaki mesajı geri dönmesi beklemeliyiz!

   OK

  • 2️⃣AT+BLEADVDATAEX

   BLE’nin görünürlük ve parametre ayarlarının yapılabilmesi için ESP32’ye gönderilmesi gereken komuttur. Device Name: Cihaza verilecek isim Universal Unique Identifier: cihazın benzersiz bir şekilde tanımlanmasını sağlayan 128-bitlik evrensel bir kimlik numarasıdır. Manufacturer Data: Üretici verisi (opsiyoneldir), 16'lık formatta. TX_Power_Option: TX güç seviyesinin eklenip eklenmeyeceğini belirtir. 1: Eklenir, 0: Eklenmez.

AT+BLEADVDATAEX="Device_Name","Universal_Unique_Identifier","Manufacturer_Data",TX_Power_Option

Bu komuta karşılık olarak ESP32'nin aşağıdaki mesajı geri dönmesi beklemeliyiz!

   OK

  • 3️⃣AT+BLEGATTSSRVCRE

   BLE'nin sunucu olarak çalıştırıldığında hizmetlerin aktif edilebilmesi için ESP32'ye gönderilmesi gereken komuttur.

AT+BLEGATTSSRVCRE

Bu komuta karşılık olarak ESP32'nin aşağıdaki mesajı geri dönmesi beklemeliyiz!

   OK

  • 4️⃣AT+BLEGATTSSRVSTART

   BLE'nin sunucu olarak çalıştırıldığında tüm hizmetlerin veya belirli bir hizmeti başlatmak için ESP32'ye gönderilmesi gereken komuttur.

AT+BLEGATTSSRVSTART

Bu komuta karşılık olarak ESP32'nin aşağıdaki mesajı geri dönmesi beklemeliyiz!

   OK

  • 5️⃣AT+BLEGATTSSRVSTART

   BLE'nin diğer cihazlar tarafından keşfedilebilmesi, yayının başlatılması için ESP32'ye gönderilmesi gereken komuttur.

AT+BLEADVSTART

Bu komuta karşılık olarak ESP32'nin aşağıdaki mesajı geri dönmesi beklemeliyiz!

   OK

Yukarıda verilmiş olan tüm komutlar başarılı bir şekilde ESP32'ye gönderildiğin artık ESP32 BLE yayını yapmaya başlayacaktır.

⚠️⚠️⚠️ Daha sonrasında ise bir bağlantının kurulup kurulmadığını kontrol etmemiz gerekmektedir. Bir bağlantı kurulması durmunda aşağıdaki mesaj ESP32 tarafından bize iletilecektir.

+BLECONN:

⚠️⚠️⚠️ Eğer bağlantı sonlandırılırsa aşağıdaki mesaj ESP32 tarafından bize iletilecektir.

+BLEDISCONN:
  • 📫AT+BLEGATTSIND

    Bağlantının sağlandığı cihaza mesaj gönderilebilmesi için aşağıdaki komut ESP32'ye gönderilmelidir.
    • Connection Index: Mevcut bağlantıların listesinden hangi bağlantıya gönderileceğini belirtir..
    • Service Index: Sunucu tarafından sunulan hizmetlerin listesinden hangisinin kullanılacağını belirtir.
    • Characteristic Index: Belirli bir hizmet içindeki karakteristiklerin listesinden hangisinin kullanılacağını belirtir.
    • Data Length: Gönderilecek verinin uzunluğudur.
AT+BLEGATTSIND=Connection_Index,Service_Index,Characteristic_Index,Data_Length

Bu komuta karşılık olarak ESP32'nin aşağıdaki mesajı geri dönmesi beklemeliyiz!

   >

🚩Uygulama Gerçekleştirilmesi

   Yukarıda anlatılmış olan komutları bir işlemci aracılığı ile ESP32'ye gönderecek olan uygulamanın çalıştırılması için yapılması gereken işlemler anlatılacaktır. Burada yazılmış olan uygulama daha önceden yazılmış olan TCP Client projesine ek olarak yapılmıştır bundan dolayı "ESP32 Enable/Disable" fonksiyonları yer almamaktadır.

⚠️ İsterseniz ESP32'ye hard reset atmak isterseniz ESP32'ye güç verilen ilgili pini belli bir süre LOW'a çekip daha sonrasında HIGH'a çekmeniz yeterli olacaktır. ⚠️

❗"ble_app.h" incelendiğinde init, polling, timer ve receive fonksiyonları ile karşılaşacaksınız. Bu fonksiyonlar muhakkak ilgili yerlerde çağırılmalıdır. ❗

📣Tanımlanması Gerken Pointer Fonksiyonlar

  • Görüntülünebilirlik:

   ESP32 başka cihazlar tarafından görüntülünebilir duruma geldiğinde bu fonksiyon çalışacaktır.

static void device_detectable_fp(void * ble_obj, void * reference_obj);

  • Bağlantının Sağlanması:

   ESP32'ye başka cihazlar tarafından bağlantı sağlandığında bu fonksiyon çalışacaktır.

static void ble_connection_success_fp(void * ble_obj, void * reference_obj);

  • Bağlantının Kesilmesi:

   ESP32'ye başka cihazlar tarafından bağlantı sağlandındaktan sonra bu bağlantı kesilirse bu fonksiyon çalışacaktır.

static void ble_connection_fail_fp(void * ble_obj, void * reference_obj);

  • Reset:

   ESP32 gönderilmiş olan komutları başarılı bir biçimde gönderemediyse ve yeterince denemede bulunduysa, "AT+RESTORE" komutunun gönderilmesini ya da ESP32'ye reset atılmasının beklenileceği fonksiyondur.

static void ble_reset_waiting_fp(void * ble_obj, void * reference_obj);

  • Veri Gönderimi:

    ESP32'ye UART üstünden mesaj gönderilebilmesi için işlemcinin UART mesaj gönderme fonksiyonu bu fonksiyonda tanımlanmalıdır.

static void ble_transmit_data_fp(void * ble_obj, void * reference_obj, const unsigned char * tx_data, unsigned int tx_data_length);

  • Veri Alımı:

    Bağlantının sağlandığı cihaz bir mesaj gönderildiğinde bu fonksiyon çalışacaktır. Bu fonksiyon içerisinde alınan mesaj ve boyutu dönmektedir. Kullanıcı burada buffer'ını doldurmalıdır.

static void ble_received_data_fp(void * ble_obj, void * reference_obj, const unsigned char * rx_data, unsigned int rx_data_length);

❗Not:

    BLE yayınının yapılmasını sağlayan "state machine" yapısında "AT+RESTORE" komutu gönderilmemesinin sebebi bu projenin TCP Driver ve TCP Server uygulamaları ile birleştirilecek olmasıdır. Bundan dolayı bu projede bu komutun gönderilmesine yer verilmektense, komutun istenildiği biçimde gönderilmemesi durumunda "Reset" başlığı altında yer verilen callback fonksiyonu çalışacaktır!

About

This repository has been created to provide information on how to establish a BLE connection using AT commands via ESP32.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published