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.
Hiç ilgilenmiş olan yok mu arkadaşlar.
https://www.bluetooth.com/what-is-bluetooth-technology/how-it-works
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
...veri alıp gönderebiliyorsanız değişkeni neden gönderemiyorsunuz..?
değişken de bir çeşit veri..
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
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ış
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.
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 ?
Yok mu bu meseleyi ayrıntısıyla anlatabilcek bir arkadaş sorun yaşayanlar burdan faydalanmış olur.
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.
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/
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
#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
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.