Bluetooth 4.0 BLE haberleşme protokolü nasıl çalışır ?

Başlatan görkem, 06 Aralık 2017, 18:46:08

görkem

Arkadaşlar Merhaba,

başlıktanda anlaşılacağı gibi  Bluetooth 4.0 BLE haberleşme protokolü nasıl çalışıyor  ? 2.0 versiyonlara benzemiyor

2.0 versiyonda  mac adresiyle bağlanıp hemen haberleşmeye başlıyorduk fakat 4.0 modülde öyle değil.

4.0 modül ile ilgili bilmek istediğim;

UUID  nedir ?

CHAR komutu ne işe yarar ?

ingilizce kaynaklarda UUID ile bağlamışlar fakat master-slave nasıl bağlanıyor nasıl eşleştiriliyor hakkında ayrıntılı bilgi bulamadım.



görkem


yldzelektronik

Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.

ceka

kos koca memlekkette ble 4.0 uuid ve iletişimi ile ilgili bir bilgi kaynak yok esp32 ile uğraşıyorum veri alıp gönderebiliyorum fakat benim istediğim bir değişkeni göndermek oysa gördüğüm tüm örneklerde string olarak gönderi var yabancı dilimiz de az olunca malesef teknoloji yi geriden takip etmek zorunda kalıyoruz

Andromeda

...veri alıp gönderebiliyorsanız değişkeni neden gönderemiyorsunuz..?
değişken de bir çeşit veri..
" Tanrı, iradesini hakim kılmak için yeryüzündeki iyi insanları kullanır, yeryüzündeki kötü insanlar ise kendi iradelerini hakim kılmak için Tanrı'yı kullanırlar." ..." Tanrı'dan mesaj gelmiyor, biz Tanrı'ya mesaj gönderiyoruz"

ceka

Affınıza sığınarak daha önce ble yani bluetooth lov energy ile veri alışverişi yada bu konu hakkında bilginiz var mıı değişken neden gönderemiyorsunuz derken bildiğiniz bluetooth şeklinde çalışmadığı için biraz açıklayıcı bilgiye ihtiyaç duyuyoruz malesef ve esp32 ıdf ile yazlım destekliyor arduino desteği daha oluşmadı desek yalan olmaz hala çözme aşamasındalar takip ediyorum bir kaç örnek var fakat başka da yok anlıycanız bilginiz varsa yazın esp32 ble hakkında şöyle şöyle kullanılıyor diye bir açıklamalı kod olsa da biz de anlasak uuid daha tam çözemedim bir kısım çalışıyor bir problemler çıkıyor var sa bildiğiniz yazın şu gidiyor sa bu da gider şeklinde cevap yazmak biraz beni üzdü açıkçası kolay gelsin

görkem

bende aynı sorun devam etmekte hala uuid haberleşmesini çözemedim 2.0 versiyonda mac adresiyle eşleştirebiliyorduk fakat 4.0 versiyonda uuid nasıl kullanılır neye göre eşleşme sağlanır bilgisini elde edemedim üstü kapalı hep anlatılmış

salih18200

Bluetooth 4.0 ve üzeri yani ble aslında bluetooth classic ile çok farklı çalışmaktadır. Neredeyse alakaları yoktur. UUID değeri ise BLE cihaz ve servislerin birbirleri ile kolayca anlaşabilmelerini sağlayan bir tanımlayıcı ID dir. Örneğin bir cihaz geliştirdiniz ve bu cihaz bir oda termostatı olsun. Bu oda termostatının doğal olarak kendi sınıfında bir uygulama ile haberleşmesi lazım. Bunu sağlayan ise UUID değeridir. Çoğu servis için tanımlanmış bir UUID değeri vardır. Örnek; akıllı ev, sağlık, havalandırma vs.

görkem

sadece haberleşmek için uuid değerini girmek eşleştirmeye yeterli oluyor mu ?
başka parametreler var mı tam olarak el sıkışma nasıl oluyor ?

görkem

Yok mu bu meseleyi ayrıntısıyla anlatabilcek bir arkadaş sorun yaşayanlar burdan faydalanmış olur.

yldzelektronik

Bakın hocam soruların devamı gelecek ama hep ingilizce ihtiyacınız var. Verdiğim linkte adamlar herşeyi anlatmış. Bir de arkadaş belirtmiş zaten.
Alıntı yapılan: salih18200 - 10 Aralık 2017, 00:07:21
Bluetooth 4.0 ve üzeri yani ble aslında bluetooth classic ile çok farklı çalışmaktadır. Neredeyse alakaları yoktur. UUID değeri ise BLE cihaz ve servislerin birbirleri ile kolayca anlaşabilmelerini sağlayan bir tanımlayıcı ID dir. Örneğin bir cihaz geliştirdiniz ve bu cihaz bir oda termostatı olsun. Bu oda termostatının doğal olarak kendi sınıfında bir uygulama ile haberleşmesi lazım. Bunu sağlayan ise UUID değeridir. Çoğu servis için tanımlanmış bir UUID değeri vardır. Örnek; akıllı ev, sağlık, havalandırma vs.


Tavsiyem önce ble nedir kavrayın. Ondan sonra tekrar sorun. Bazı şeyler daha net olur.
Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.

ceka

Aslında esp32 ble ile app inventor da veri alıyorum fakat string olarak yani örneklerde ne varsa o şekilde zor bir konu burdan arkadaşlara da faydalı olması için bir iki örnek eklemek isterim uuid ve characteristic anladık zaten de bildiğiniz değişkeni nasıl göndereceğim yani rakam göndermem gerekir yoksa diğer problemleri zaten aştım ble de uint8_t değişkene girdiğim değer aşıyor ve ble de kısa veriler gönderilebiliyor bu kısmı anlamadım aşamadım aslında aşmaya çalışıp aşmış bir örnek var fakat o da zaten bilinen bir chractaristic gönderiyor  örnek

https://www.youtube.com/watch?v=d-Ub9-ClEyU&t=13s


uygulamayı yapan kişinin ingilizcesini türkçeye çevirdim ;
(   3. Adım: Sonuç

Günün sonunda, bu yöntem düzgün bir şekilde uygulanan BLE kütüphanesinin yerini alamaz; ancak Arduino'ya eksiksiz BLE desteği gelene kadar bazı projelerin üstesinden gelmek için yeterli olabilir. Umarım bu Instructables size biraz yardımcı olurdu. ),,,,

konu burda ; türkçeye çevirirseniz güzel bir dille anlatıyor zaten aşağı yukarı konu belli de cihaz kimliği , karakteristik, bağlandı verisi , veri gönderme , bunun gibi konuları çoktan anladık efendim fakat daha yeni bir iletişim olduğu için bir çok konu sır gibi benim sıkıntım bir değişken değer göndermek oysa karşı tarafa rakam yani büyüklüğü biraz fazla ble ise karakter verisi gönderiyor burada takıldım kaldım yakında çözerim fakat bilen varsa yardımcı olursa gerçekten sevinirim kolay gelsin

http://www.instructables.com/id/How-to-Use-BluetoothBLE-With-ESP32/

ceka

Görkem bey ;
hangi program da yazıyorsunuz ne seviyedesiniz bilmiyorum ben kendim hoby seviyesinde kendimce bir şeyler yapmaya çalışıyorum burada arduino esp32 ble nin nasıl çalıştığına dair bir kod yükleyeceğim tabiki arkasında çalışan c++ kodları var bildiğiniz gibi alt fonksiyonları var ve bir kütüphanesi var  buradan bir kod yüklyip açıklama yapmaya çalışacağım bildiğim kadarı ile


/*
    Video: https://www.youtube.com/watch?v=oCMOYS71NIU
    Based on Neil Kolban example for IDF: https://github.com/nkolban/esp32-snippets/blob/master/cpp_utils/tests/BLE%20Tests/SampleNotify.cpp
    Ported to Arduino ESP32 by Evandro Copercini


   Create a BLE server that, once we receive a connection, will send periodic notifications.
   The service advertises itself as: 4fafc201-1fb5-459e-8fcc-c5c9c331914b
   And has a characteristic of: beb5483e-36e1-4688-b7f5-ea07361b26a8


   The design of creating the BLE server is:
   1. Create a BLE Server
   2. Create a BLE Service
   3. Create a BLE Characteristic on the Service
   4. Create a BLE Descriptor on the characteristic
   5. Start the service.
   6. Start advertising.


   A connect hander associated with the server starts a background task that performs notification
   every couple of seconds.
*/
#include <BLEDevice.h> // alt program kısmı
#include <BLEServer.h>// alt program kısmı
#include <BLEUtils.h>// alt program kısmı
#include <BLE2902.h> //bu kısım ise karşı tarafa ne göndereceğiniz belirten kısım site adresi https://www.bluetooth.com/specifications/gatt/services
BLECharacteristic *pCharacteristic;
bool deviceConnected = false;
uint8_t value = 0;


// See the following for generating UUIDs:
// https://www.uuidgenerator.net/


#define SERVICE_UUID        "4fafc201-1fb5-459e-8fcc-c5c9c331914b" // https://www.uuidgenerator.net bu adresten kendinize ait benzersiz bir uuid oluşturabilirsiniz ve kullanabilirsiniz sadece     size ait olan bir kod
#define CHARACTERISTIC_UUID "beb5483e-36e1-4688-b7f5-ea07361b26a8"




class MyServerCallbacks: public BLEServerCallbacks { // void setup a kadar alt programlar bağlanıp bağlanmadığını kontrel edern
    void onConnect(BLEServer* pServer) {
      deviceConnected = true;
    };


    void onDisconnect(BLEServer* pServer) {
      deviceConnected = false;
    }
};






void setup() {
  Serial.begin(115200);


  // Create the BLE Device
  BLEDevice::init("MyESP32"); // bu kısım ble aygıtınızın ismini tanımlayabileceğiniz kısım


  // Create the BLE Server  server oluşturma kısmı
  BLEServer *pServer = BLEDevice::createServer();
  pServer->setCallbacks(new MyServerCallbacks());


  // Create the BLE Service
  BLEService *pService = pServer->createService(SERVICE_UUID);


  // Create a BLE Characteristic okuma yazma diğer alt programlar
  pCharacteristic = pService->createCharacteristic(
                      CHARACTERISTIC_UUID,
                      BLECharacteristic::PROPERTY_READ   |
                      BLECharacteristic::PROPERTY_WRITE  |
                      BLECharacteristic::PROPERTY_NOTIFY |
                      BLECharacteristic::PROPERTY_INDICATE
                    );


  // https://www.bluetooth.com/specifications/gatt/viewer?attributeXmlFile=org.bluetooth.descriptor.gatt.client_characteristic_configuration.xml
  // Create a BLE Descriptor
  pCharacteristic->addDescriptor(new BLE2902()); bu kısım önemli yukardaki adrese tıklayıp türkçeye çevirin 16 bitlik bir iletişim kurma protokol kısmıdır
  // Start the service
  pService->start(); // bağlantı başlagıc kısmı alt programı çağrıyor


  // Start advertising
  pServer->getAdvertising()->start();
  Serial.println("Waiting a client connection to notify...");
}


void loop() {


  if (deviceConnected) {
    Serial.printf("*** NOTIFY: %d ***\n", value);
    pCharacteristic->setValue(&value, 1);
    pCharacteristic->notify();
    //pCharacteristic->indicate();
    value++;
  } // burada eğer bağlı ise sıradan characteristic verilerini teker teker gönderiyor
  delay(2000);
}



biraz karışık oldu fakat size bir ön bilgi olabilir daha çok yardımcı olmak isterim sormak istedikleriniz var ise bildiğim kadarı ile söyleyebilirim

ceka

#include <BLE2902.h> //bu kısım ise karşı tarafa ne göndereceğeniz kısım  burası biraz eksik kaldı eklemek istiyorum ble protokolünde karşı tarafa gönderip alabileceğiniz özel bir ble kod kısmı şimdi adresi alta yapıştırıyorum iletişimin nasıl yapılacağı ne göndereceği bu kısımda olması lazım ben öyle biliyorum yanlış olmaması gerekir yapıştıracağım adresi gatt protokol kısmını türkçeye çevirin araştırın

https://www.bluetooth.com/specifications/gatt/services

görkem

stm32f serisi için keil de kod yazıyorum AT komutları ile bluetooth u konfigure ediyorum   uuid ve uuid characteristic olayını anladım ios da hazır bir terminal programı ile haberleşebildim  fakat c# ile haberleştirmem gerekiyor c# da bluetooth 4.0 LE ile ilgili kütüphane bulamadım.