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'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
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
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
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
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.
+BLECONN:
+BLEDISCONN:
-
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!
>
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.
❗"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. ❗
- 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);
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!