Konuyu Oyla:
  • Derecelendirme: 5/5 - 1 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Delphi 10.3 ile mobil uygulamadan esp32 cihazına bluetooth le ile metin gönderme
#1
Thumbs Up 
Delphi 10.3 ile bir esp32 cihaza bluetooth le aracılığıyla metin gönderecek bir mobil uygulama yazmaya çalışıyorum.

BLE toknolojisi hakkında deneyimli değilim bu yüzden Delphi tarafında BLE ve yapısını öğrenmek için bu yardım belgesini takip ederek bu delphi örnek uygulamasını düzenlemeye çalışıyorum ( \Embarcadero\Studio\20.0\Samples\Object Pascal\Multi-Device Samples\Device Sensors and Services\Bluetooth\BLEScanner).

ESP32 tarafında ise bir kendin yap projesi buldum. Ama bu proje için kullanılan uygulama thunkable (online program yazma) uygulaması ve Delphi ile aynı şeyi (ekte uygulamanın blok görünümünü bulabilirsiniz) nasıl yapabileceğimi anlayamadım.

Bu amaç için elinde kullanabileceğim örnek uygulama / kod olan ya da prosedür seviyesinde yardımcı olabilecek var mıdır? Şimdiden teşekkürler.


Ek Dosyalar Resimler
   
Cevapla
#2
Herkese merrhaba, sonunda problemimi aşağıdaki şekilde çözdüm;
Öncelikle cihazın ve karakteristiğin UUID tanılamasını yapıyoruz (tabi isterseniz daha sonra da yapabilirsiniz)
const
 SERVICE : TGUID = '{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}';
 CHARACT : TGUID = '{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}';
ayrıca cihaz ve karatkteristiği tanımlıyoruz
Device         : TBluetoothLEDevice;
FCharacteristic: TBluetoothGattCharacteristic;
önemli ayrıntılardan biri BLE'nin çalışması için ACCESS_COARSE_LOCATION izninin alınmış olması gerekiyor (ben OnFormCreate yordamında çalıştırıyorum)
{$IFDEF ANDROID}
 FLocationPermission := JStringToString(TJManifest_permission.JavaClass.ACCESS_COARSE_LOCATION);
{$ENDIF}
ve izin talebinde bulunuyoruz
PermissionsService.RequestPermissions([FLocationPermission], RequestPermissionsResult, DisplayRationale);
NOT: daha öne de belirttiğim gibi bu programın kodlarını detaylı olarak (..\Embarcadero\Studio\20.0\Samples\Object Pascal\Multi-Device Samples\Device Sensors and Services\Bluetooth\BLEScanner) klasöründeki örnek programda bulabilirsiniz

gerekli izinlere ulaştıktan (ve cihaza eriştikten) sonra istediğiniz karakteristiğe yazmak için
FCharacteristic:= Device.GetService(SERVICE).GetCharacteristic(CHARACT);
FCharacteristic.SetValueAsString(RawByteString('komut'));
Device.WriteCharacteristic(CHARACT);
ÖNEMLİ: Embarcadero, mobil derleyicilerde Ansichar ve AnsiString kullanımını durdurduğundan (burada ve burada detayları bulabilirsiniz) 8-Bit iletişim ile çalışan hiçbir cihaza (neredeyse tamamı oluyor) Delphi mobil programı ile direkt veri gönderemiyorsunuz. Bu yüzdende ya TBytes kullanarak ya da benim yaptığım gibi bu harika kütüphaneyi kullanıDelphi mobil derleyicilere Ansichar ve AnsiString desteğini geri kazandırıp RawByteString kullanarak MCU'ya komutları gönderiyoruz. Gerisini de MCU'dan okuyarak hallediyoruz.

GÜNCELLEME: Örnek Delphi ve Arduino IDE uygulama kodları dosya olarak eklenmiştir.

ÖNEMLİ GÜNCELLEME:Ben bu gönderiyi hazırlarken bir proje üzerinde çalışıyordum ve bulduğum çözümün belirli parçalarını çıkartıp (ticari olduğundan) asıl işe yarayan kısmını paylaşmıştım. ama galiba biraz dikkatsiz ve özensiz davranmışım bu yüzden asıl faydalandığım kaynağa tekrar ulaşıp doğru bilgileri teyit ettim ve UUID değerlerini yanlış yazdığımı farkettim ve 19.004.2020 tarihinde bu değerleri olamsı gereken hale getirdim. Ek dosyasını 19.04.2020 tarihinden önce indirmiş olanlar sorunla kaşılaşabilirler. Lütfen dosyayı tekrar indiriniz. Hatadan dolayı ÖZÜR DİLERİM. Hatayı tespit etmeme vesile olan 41linea41 kullanıcı arkadaşımıza da Teşekkürler..


Ek Dosyalar
.zip   Delphi-ESP32.zip (Dosya Boyutu: 17,68 KB / İndirme Sayısı: 116)
Cevapla
#3
Teşekkürler yaşadığınız soruna bulduğunuz çözümü paylaştığınız için.
Cevapla
#4
(29-07-2019, Saat: 14:38)frmman Adlı Kullanıcıdan Alıntı: Teşekkürler yaşadığınız soruna bulduğunuz çözümü paylaştığınız için.

Ne demek, olması gerekeni yaptım, umarım birilerinin işine yarar ... Sadece soru sorup cevap bekleyeceksek bu platformlar neden var?
Cevapla
#5
@AlpDmr Bende Esp32,nodemcu ile mqtt iot işleri ile uğraşıyorum bilgilendire için teşekürler.
Muharrem ARSLAN
WWW
Cevapla
#6
(29-07-2019, Saat: 12:42)AlpDmr Adlı Kullanıcıdan Alıntı: Herkese merrhaba, sonunda problemimi aşağıdaki şekilde çözdüm;
Öncelikle cihazın ve karakteristiğin UUID tanılamasını yapıyoruz (tabi isterseniz daha sonra da yapabilirsiniz)
const
 SERVICE : TGUID = '{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}';
 CHARACT : TGUID = '{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}';
ayrıca cihaz ve karatkteristiği tanımlıyoruz
Device         : TBluetoothLEDevice;
FCharacteristic: TBluetoothGattCharacteristic;
önemli ayrıntılardan biri BLE'nin çalışması için ACCESS_COARSE_LOCATION izninin alınmış olması gerekiyor (ben OnFormCreate yordamında çalıştırıyorum)
{$IFDEF ANDROID}
 FLocationPermission := JStringToString(TJManifest_permission.JavaClass.ACCESS_COARSE_LOCATION);
{$ENDIF}
ve izin talebinde bulunuyoruz
PermissionsService.RequestPermissions([FLocationPermission], RequestPermissionsResult, DisplayRationale);
NOT: daha öne de belirttiğim gibi bu programın kodlarını detaylı olarak (..\Embarcadero\Studio\20.0\Samples\Object Pascal\Multi-Device Samples\Device Sensors and Services\Bluetooth\BLEScanner) klasöründeki örnek programda bulabilirsiniz

gerekli izinlere ulaştıktan (ve cihaza eriştikten) sonra istediğiniz karakteristiğe yazmak için
FCharacteristic:= Device.GetService(SERVICE).GetCharacteristic(CHARACT);
FCharacteristic.SetValueAsString(RawByteString('komut'));
Device.WriteCharacteristic(CHARACT);
ÖNEMLİ: Embarcadero, mobil derleyicilerde Ansichar ve AnsiString kullanımını durdurduğundan (burada ve burada detayları bulabilirsiniz) 8-Bit iletişim ile çalışan hiçbir cihaza (neredeyse tamamı oluyor) Delphi mobil programı ile direkt veri gönderemiyorsunuz. Bu yüzdende ya TBytes kullanarak ya da benim yaptığım gibi bu harika kütüphaneyi kullanıDelphi mobil derleyicilere Ansichar ve AnsiString desteğini geri kazandırıp RawByteString kullanarak MCU'ya komutları gönderiyoruz. Gerisini de MCU'dan okuyarak hallediyoruz.

GÜNCELLEME: Örnek Delphi ve Arduino IDE uygulama kodları dosya olarak eklenmiştir.
Günaydın

Çalışmanız çok faydalı olmuş ben de bu konu da araştırma yapıyordum dikkatimi çekti.
Eklentiyi indirip denediğim de ESP32 i telefon Bluettoh listesinde görüp eşleşmesine rağmen uygulama hem win hem de Android tarafında

Alıntı:Cihazla eşleşme gerçekleşmedi
hatası veriyor. ESP32 tarafında siz hem RX hem de TX tarafında aynı ID numarasını kullanmışsınız. Aynı örnek üzerinden gittim.
ESP32:
#define SERVICE_UUID                "320efc24-7c36-11ea-bc55-0242ac130003" // ServisID

#define CHARACTERISTIC_UUID_Islem   "42947d1c-7c36-11ea-bc55-0242ac130003" // Karakteristik ID

 pCharacteristic = pService->createCharacteristic(
                     CHARACTERISTIC_UUID_Islem,
                     BLECharacteristic:TongueROPERTY_READ
                   );

 BLECharacteristic *pCharacteristic = pService->createCharacteristic(
                     CHARACTERISTIC_UUID_Islem,
                     BLECharacteristic:TongueROPERTY_WRITE
                   );

Delphi:

const
 SERVICE : TGUID = '{320efc24-7c36-11ea-bc55-0242ac130003}';
 KARAKTER: TGUID = '{42947d1c-7c36-11ea-bc55-0242ac130003}';

kodlarda hiç bir değişiklik yapmama rağmen herhangi bir cihazı bulup eşelşme sağlayamıyor.
win 10 denediğimde ilginçdir. cihazları tarayıp bulup listeye ekliyor.

ESP32 tarafında yapmamız gereken ekstra bir işlem var mı? ESP32 sürümünü güncellemek gibi?

Sağlıklı Günler.
Cevapla
#7
(12-04-2020, Saat: 09:57)41linea41 Adlı Kullanıcıdan Alıntı:
(29-07-2019, Saat: 12:42)AlpDmr Adlı Kullanıcıdan Alıntı: Herkese merrhaba, sonunda problemimi aşağıdaki şekilde çözdüm;
Öncelikle cihazın ve karakteristiğin UUID tanılamasını yapıyoruz (tabi isterseniz daha sonra da yapabilirsiniz)
const
 SERVICE : TGUID = '{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}';
 CHARACT : TGUID = '{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}';
ayrıca cihaz ve karatkteristiği tanımlıyoruz
Device         : TBluetoothLEDevice;
FCharacteristic: TBluetoothGattCharacteristic;
önemli ayrıntılardan biri BLE'nin çalışması için ACCESS_COARSE_LOCATION izninin alınmış olması gerekiyor (ben OnFormCreate yordamında çalıştırıyorum)
{$IFDEF ANDROID}
 FLocationPermission := JStringToString(TJManifest_permission.JavaClass.ACCESS_COARSE_LOCATION);
{$ENDIF}
ve izin talebinde bulunuyoruz
PermissionsService.RequestPermissions([FLocationPermission], RequestPermissionsResult, DisplayRationale);
NOT: daha öne de belirttiğim gibi bu programın kodlarını detaylı olarak (..\Embarcadero\Studio\20.0\Samples\Object Pascal\Multi-Device Samples\Device Sensors and Services\Bluetooth\BLEScanner) klasöründeki örnek programda bulabilirsiniz

gerekli izinlere ulaştıktan (ve cihaza eriştikten) sonra istediğiniz karakteristiğe yazmak için
FCharacteristic:= Device.GetService(SERVICE).GetCharacteristic(CHARACT);
FCharacteristic.SetValueAsString(RawByteString('komut'));
Device.WriteCharacteristic(CHARACT);
ÖNEMLİ: Embarcadero, mobil derleyicilerde Ansichar ve AnsiString kullanımını durdurduğundan (burada ve burada detayları bulabilirsiniz) 8-Bit iletişim ile çalışan hiçbir cihaza (neredeyse tamamı oluyor) Delphi mobil programı ile direkt veri gönderemiyorsunuz. Bu yüzdende ya TBytes kullanarak ya da benim yaptığım gibi bu harika kütüphaneyi kullanıDelphi mobil derleyicilere Ansichar ve AnsiString desteğini geri kazandırıp RawByteString kullanarak MCU'ya komutları gönderiyoruz. Gerisini de MCU'dan okuyarak hallediyoruz.

GÜNCELLEME: Örnek Delphi ve Arduino IDE uygulama kodları dosya olarak eklenmiştir.
Günaydın

Çalışmanız çok faydalı olmuş ben de bu konu da araştırma yapıyordum dikkatimi çekti.
Eklentiyi indirip denediğim de ESP32 i telefon Bluettoh listesinde görüp eşleşmesine rağmen uygulama hem win hem de Android tarafında

Alıntı:Cihazla eşleşme gerçekleşmedi
hatası veriyor. ESP32 tarafında siz hem RX hem de TX tarafında aynı ID numarasını kullanmışsınız. Aynı örnek üzerinden gittim.
ESP32:
#define SERVICE_UUID                "320efc24-7c36-11ea-bc55-0242ac130003" // ServisID

#define CHARACTERISTIC_UUID_Islem   "42947d1c-7c36-11ea-bc55-0242ac130003" // Karakteristik ID

 pCharacteristic = pService->createCharacteristic(
                     CHARACTERISTIC_UUID_Islem,
                     BLECharacteristic:TongueROPERTY_READ
                   );

 BLECharacteristic *pCharacteristic = pService->createCharacteristic(
                     CHARACTERISTIC_UUID_Islem,
                     BLECharacteristic:TongueROPERTY_WRITE
                   );

Delphi:

const
 SERVICE : TGUID = '{320efc24-7c36-11ea-bc55-0242ac130003}';
 KARAKTER: TGUID = '{42947d1c-7c36-11ea-bc55-0242ac130003}';

kodlarda hiç bir değişiklik yapmama rağmen herhangi bir cihazı bulup eşelşme sağlayamıyor.
win 10 denediğimde ilginçdir. cihazları tarayıp bulup listeye ekliyor.

ESP32 tarafında yapmamız gereken ekstra bir işlem var mı? ESP32 sürümünü güncellemek gibi?

Sağlıklı Günler.

Merhaba, çözüm için eklediğim Delphi-ESP32.zip dosyasını az önce tekrar indirdim ve kodların sizin verdiğiniz örnekteki gibi olmadığını gördüm (hem RX hem de TX tarafında aynı ID numarası kullanılmış değil). Dosyayı yeni mi indirdiniz? yoksa daha önce indirmiştiniz şimdi mi kullanma ihtiyacı duydunuz?
Çünkü, yanlış hatırlamıyorsam çözümü yazarken ilk başta yanlış doysa yüklemiş ve bir iki gün sonra hatamı fark edince yeniden yüklemiştim.
Çözüm bulduğum mesajdaki dosyayı tekrar indirmeyi deneyip haber verir misiniz? ona göre yardımcı olmaya çalışayım.. İyi çalışmalar, sağlıklı günler..
Cevapla
#8
(29-07-2019, Saat: 12:42)AlpDmr Adlı Kullanıcıdan Alıntı: Herkese merrhaba, sonunda problemimi aşağıdaki şekilde çözdüm;
Öncelikle cihazın ve karakteristiğin UUID tanılamasını yapıyoruz (tabi isterseniz daha sonra da yapabilirsiniz)
const
 SERVICE : TGUID = '{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}';
 CHARACT : TGUID = '{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}';
ayrıca cihaz ve karatkteristiği tanımlıyoruz
Device         : TBluetoothLEDevice;
FCharacteristic: TBluetoothGattCharacteristic;
önemli ayrıntılardan biri BLE'nin çalışması için ACCESS_COARSE_LOCATION izninin alınmış olması gerekiyor (ben OnFormCreate yordamında çalıştırıyorum)
{$IFDEF ANDROID}
 FLocationPermission := JStringToString(TJManifest_permission.JavaClass.ACCESS_COARSE_LOCATION);
{$ENDIF}
ve izin talebinde bulunuyoruz
PermissionsService.RequestPermissions([FLocationPermission], RequestPermissionsResult, DisplayRationale);
NOT: daha öne de belirttiğim gibi bu programın kodlarını detaylı olarak (..\Embarcadero\Studio\20.0\Samples\Object Pascal\Multi-Device Samples\Device Sensors and Services\Bluetooth\BLEScanner) klasöründeki örnek programda bulabilirsiniz

gerekli izinlere ulaştıktan (ve cihaza eriştikten) sonra istediğiniz karakteristiğe yazmak için
FCharacteristic:= Device.GetService(SERVICE).GetCharacteristic(CHARACT);
FCharacteristic.SetValueAsString(RawByteString('komut'));
Device.WriteCharacteristic(CHARACT);
ÖNEMLİ: Embarcadero, mobil derleyicilerde Ansichar ve AnsiString kullanımını durdurduğundan (burada ve burada detayları bulabilirsiniz) 8-Bit iletişim ile çalışan hiçbir cihaza (neredeyse tamamı oluyor) Delphi mobil programı ile direkt veri gönderemiyorsunuz. Bu yüzdende ya TBytes kullanarak ya da benim yaptığım gibi bu harika kütüphaneyi kullanıDelphi mobil derleyicilere Ansichar ve AnsiString desteğini geri kazandırıp RawByteString kullanarak MCU'ya komutları gönderiyoruz. Gerisini de MCU'dan okuyarak hallediyoruz.

GÜNCELLEME: Örnek Delphi ve Arduino IDE uygulama kodları dosya olarak eklenmiştir.

Merhaba,
Bulduğunuz cevabı paylaşmanız çok güzel.

ESP32 nedir ne tür projelere uygundur, delphi ile neler nasıl yapılabilir, arduino vs raspberry pi ile farkları nelerdir gibi soruların cevaplarını da içeren makale  hazırlarsanız çok faydalanırız, müsait olduğunuzda yazarsanız çok mutlu oluruz.
Cevapla
#9
(18-04-2020, Saat: 16:26)pro_imaj Adlı Kullanıcıdan Alıntı:
(29-07-2019, Saat: 12:42)AlpDmr Adlı Kullanıcıdan Alıntı: Herkese merrhaba, sonunda problemimi aşağıdaki şekilde çözdüm;
Öncelikle cihazın ve karakteristiğin UUID tanılamasını yapıyoruz (tabi isterseniz daha sonra da yapabilirsiniz)
const
 SERVICE : TGUID = '{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}';
 CHARACT : TGUID = '{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}';
ayrıca cihaz ve karatkteristiği tanımlıyoruz
Device         : TBluetoothLEDevice;
FCharacteristic: TBluetoothGattCharacteristic;
önemli ayrıntılardan biri BLE'nin çalışması için ACCESS_COARSE_LOCATION izninin alınmış olması gerekiyor (ben OnFormCreate yordamında çalıştırıyorum)
{$IFDEF ANDROID}
 FLocationPermission := JStringToString(TJManifest_permission.JavaClass.ACCESS_COARSE_LOCATION);
{$ENDIF}
ve izin talebinde bulunuyoruz
PermissionsService.RequestPermissions([FLocationPermission], RequestPermissionsResult, DisplayRationale);
NOT: daha öne de belirttiğim gibi bu programın kodlarını detaylı olarak (..\Embarcadero\Studio\20.0\Samples\Object Pascal\Multi-Device Samples\Device Sensors and Services\Bluetooth\BLEScanner) klasöründeki örnek programda bulabilirsiniz

gerekli izinlere ulaştıktan (ve cihaza eriştikten) sonra istediğiniz karakteristiğe yazmak için
FCharacteristic:= Device.GetService(SERVICE).GetCharacteristic(CHARACT);
FCharacteristic.SetValueAsString(RawByteString('komut'));
Device.WriteCharacteristic(CHARACT);
ÖNEMLİ: Embarcadero, mobil derleyicilerde Ansichar ve AnsiString kullanımını durdurduğundan (burada ve burada detayları bulabilirsiniz) 8-Bit iletişim ile çalışan hiçbir cihaza (neredeyse tamamı oluyor) Delphi mobil programı ile direkt veri gönderemiyorsunuz. Bu yüzdende ya TBytes kullanarak ya da benim yaptığım gibi bu harika kütüphaneyi kullanıDelphi mobil derleyicilere Ansichar ve AnsiString desteğini geri kazandırıp RawByteString kullanarak MCU'ya komutları gönderiyoruz. Gerisini de MCU'dan okuyarak hallediyoruz.

GÜNCELLEME: Örnek Delphi ve Arduino IDE uygulama kodları dosya olarak eklenmiştir.

Merhaba,
Bulduğunuz cevabı paylaşmanız çok güzel.

ESP32 nedir ne tür projelere uygundur, delphi ile neler nasıl yapılabilir, arduino vs raspberry pi ile farkları nelerdir gibi soruların cevaplarını da içeren makale  hazırlarsanız çok faydalanırız, müsait olduğunuzda yazarsanız çok mutlu oluruz.

Aslında gerçekten güzel bir fikir, öneri için de teşekkürler. Bilgim dahilinde elektronik ve Delphi ile alakalı birkaç yardımcı döküman hazırlayabilirim.
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Delphi RabbitMq 3ddark 8 4.233 21-11-2022, Saat: 18:26
Son Yorum: 3ddark
  Raspberry Pi, MQTT ve Delphi SimaWB 15 12.122 26-01-2022, Saat: 15:08
Son Yorum: Jakarta2
  Nodemcu ile Delphi json haberleşme arsl01 10 9.893 24-12-2021, Saat: 09:25
Son Yorum: arsl01
  OpenAI GPT3 Nedir? Delphi ile Kullanımı Tan Ay 1 2.033 07-05-2021, Saat: 15:40
Son Yorum: mrmarman
  Mosquitto veri alma/ gönderme Hk. pro_imaj 4 4.367 24-09-2020, Saat: 11:11
Son Yorum: Fesih ARSLAN



Konuyu Okuyanlar: 1 Ziyaretçi