BlueTooth hakkinda

Başlatan Zoroaster, 01 Haziran 2018, 13:44:06

Zoroaster

Bluetooth haberlesme yaparak cep telefonunu ile bir cihaza kumanda edecegim.

Elimdeki Bluetooth modul islemciye seri port uzerinden baglaniyor.

Cep telefonu ile kumanda verdikten sonra cep telefonunu off yapip kaldiracagim fakat tekrar tekrar calismakta olan cihaza baglanmak isteyebilirim.

Sorularim;

Cep telefonu mu master olmalidir yoksa cihazim mi master olmalidir? Bunun bir onemi varmi?

Master ile Slave`in ilk bulusmasi icin AT komutlarindan yararlanildigi soyleniyor.

Bu konulari anlatan en temel dokumani nereden bulurum?



Seytan deliginden kacti.

Zoroaster

Elimdeki modul uzerinde CC2540 cipi var.

Uzerinde CC2540 iceren hangi modulu alirsam alayim bunlarin seri porttan gelen verilere tepkisi aynimidir yoksa
bu cipin icindeki MCUya yazilan koda mi bagimlidir?

Aradigim sorularin cevabi modulu uretenlerde mi sakli yoksa cipi ureten TI'in CC2540 dokumaninda mi?


Seytan deliginden kacti.

Zoroaster

Seytan deliginden kacti.

satilla

Aradığınız soruların cevabı modülü üreten firmadan geçiyor. CC2540 modülün yazılımını sizde değiştirebilirsiniz yalnış hatırlamıyorsam 8051 tabanlı bir MCU barındırıyor.

Hangi cihazı master yapacağınız sizin akış şemanıza bağlı olarak değişebilir. Bağlantının kimin tarafından başlanacağına karar vermek sizin için önemliyse, o birimi master olarak seçin.

Master cihaz client cihaza bağlanabilir ancak client cihaz başka bir client'e bağlanamaz.

Zoroaster

#4
Anlasilan bu konuda konusmak isteyen yok.

BLE 4.0 CC2540 Module DBM01 modulunu STM32F103C8 kitimle kullanmak uzere dene yanillara basladim.
Konu hakkinda hic deneyimim olmadigindan elime gecen ilk CC250 li HC-08 modulun dokumanina gore denemeler yapmaya calistigimda seri iletisimden bana hic yanit verilmedigini gordum.

Megersem cipin ustunde CC2540 olmasi her modulun ayni davranacagi anlamina gelmiyormus.

En basitinden HC08 module enerji verdiginizde modul default olarak 9600 Baud ile haberlesmeye baslarken DBM01 modul 38400 ile haberlesiyormus.

Neyse dokumani bir kenara birakip hemen STM kitimin Usart1 TX pini DBM01 modulun Rx pinine,  STM kitimin Usart1 RX pini de DBM01 modulun Tx pinine baglayip modulun Gnd ve Vcc pinlerin de 3.3v verdigimde de STM den gonderdigim AT komutuna hic bir cevap gelmedigini gordum.

Bu basarisizliktan sonra dokumana goz attigimda CTRL adinda bir pin oldugunu bu pini low yaptigimizda seri porttan gelen verilerin KOMUT olarak algilandigini High yapildiginda ise KOMUT modundan cikip seffaf moda gectigini anladim. (Seffaf moda daha sonra deginecegim.)
CTRL pinin seviyesi degistirildiginde modulun sizinle ilgilenebilmesi icin en azindan 200 mili saniye zaman tanimak gerekiyor.

Simdilik amacim AT komutu gonderdigimde bana OK cevabinin gelmesi beklemek.

DBM01 modulu hakkinda gerekli dokumanlar asagidaki sayfada mevcut.

http://www.dorji.com/products-detail.php?ProId=26

Konu hakkindaki calismalarimi blog sayfamdan suslu olarak da yayinlamaktayim.
Seytan deliginden kacti.

fide

Alıntı yapılan: Zoroaster - 02 Haziran 2018, 07:30:41Anlasilan bu konuda konusmak isteyen yok.

BLE 4.0 CC2540 Module DBM01 modulunu STM32F103C8 kitimle kullanmak uzere dene yanillara basladim.
Konu hakkinda hic deneyimim olmadigindan elime gecen ilk CC250 li HC-08 modulun dokumanina gore denemeler yapmaya calistigimda seri iletisimden bana hic yanit verilmedigini gordum.

Megersem cipin ustunde CC2540 olmasi her modulun ayni davranacagi anlamina gelmiyormus.

En basitinden HC08 module enerji verdiginizde modul default olarak 9600 Baud ile haberlesmeye baslarken DBM01 modul 38400 ile haberlesiyormus.

Neyse dokumani bir kenara birakip hemen STM kitimin Usart1 TX pini DBM01 modulun Rx pinine,  STM kitimin Usart1 RX pini de DBM01 modulun Tx pinine baglayip modulun Gnd ve Vcc pinlerin de 3.3v verdigimde de STM den gonderdigim AT komutuna hic bir cevap gelmedigini gordum.

Bu basarisizliktan sonra dokumana goz attigimda CTRL adinda bir pin oldugunu bu pini low yaptigimizda seri porttan gelen verilerin KOMUT olarak algilandigini High yapildiginda ise KOMUT modundan cikip seffaf moda gectigini anladim. (Seffaf moda daha sonra deginecegim.)
CTRL pinin seviyesi degistirildiginde modulun sizinle ilgilenebilmesi icin en azindan 200 mili saniye zaman tanimak gerekiyor.

Simdilik amacim AT komutu gonderdigimde bana OK cevabinin gelmesi beklemek.

DBM01 modulu hakkinda gerekli dokumanlar asagidaki sayfada mevcut.

http://www.dorji.com/products-detail.php?ProId=26

Konu hakkindaki calismalarimi blog sayfamdan suslu olarak da yayinlamaktayim.
@Zoroaster eline sağlık. Güzel çalışma olmuş.
Blog adresini alabilir miyiz?
Her birimiz, geride bıraktığımız eserler kadar ölümsüzüz. Evlat gibi, talebe gibi, icatlar gibi...   http://fidenetgaraj.blogspot.com

Zoroaster

#6
Bir sorun cikti ve sayfamda gosterime sokmadim henuz.


DBM01 module AT komutlariyla isim veriyorum ve bu isim ceptelefonundaki LightBlue uygulamasi tarafindan tespit ediliyor adresi ve yayin gucu ogrenilebiliyor.

Ayni sekilde cep telefonunun setting menusundeki bluetooth uygulamasi da verdigim isimde bir cihaz buluyor.

Bu cihaza baglanmak istedigimde pairing code olarak 0000 yada 1234 girmemi istiyor. Bu degerlerden hangisini girersem gireyim eslesme olmadigi uyarisi veriyor.

Halbuki AT+CFG komutuyla modulun Pair Code degerinin "0000" oldugunu gorebiliyorum.

Modulde AT komutlari ile PAIRA, PAIRC kodlari ile Pair kodunu ve adresini degistirmeye kalktigimda ise OK cevabi yerine ERROR cevabi aliyorum.

Dokumanda hangi durumda ERROR cevabi alinacagina dair aciklama bulamadim ve Dorji firmasindan aciklama istedim.

Eger cevap yazarlarsa tikandigim bu noktadan sonra ilerleyebilecegimi dusunuyorum.

Youtube videolarindaki en temel kodlama ile basit bir android uygulamasi yazdim fakat cihazlari listele dedigimde  modulu hic gormuyor.

Ote yandan ipucu yakalamak adina Internette kullandigim modulle yapilmis tek bir proje dahi bulamadim.

Asagidaki sayfada yer alan urunle ilgili proje linki vs bilen varsa yazarsa sevinirim.

http://www.dorji.com/products-detail.php?ProId=26
Seytan deliginden kacti.

Zoroaster

#7
BLE 4.0 CC2540 Module DBM01 modulunu calistiramayinca HC05 modulu aldim.

Bu modulde de sorun cikti. Neyseki 2 modul siparis etmistim ve 2. modul calisti.

Benim elimdeki modul www.hc01.com sitesindeki HC05 modulu. (http://www.hc01.com/productdetail?productid=201702040005)

34 nolu pinini 3v3 pinine baglayip ardindan karta enerji (3v3) verirseniz modul AT moda giriyor.

Once 3v3 baglayayim sonra 34 nolu pini high yapayimi falan yemiyor. Bu pini 1K ile Pull up yaparsaniz tamam AT moda giriyor ama bu kez de 34 nolu pini low yapip seffaf iletim moduna geciremiyorsunuz. (Adamlarin module yazdiklari program power on asamasinda 34 nolu pini okuyor bir daha da bu pinle ilgilenmiyor) Dolayisi ile AT moda yada Transparent moda gecmek icin illa modulun enerjisini kesip 34 nolu pini uygun seviyeye getirip ardindan enerji vermek gerekiyor.

Belki bu durum modulu ureten firmaya gore degisiklik gosteriyordur.

Neyse bahsettigim modul oldukca basit kullanima sahip. (Acikcasi en baslarda bluetooth rutinlerini kendimiz yazacagiz bunu nasil yazarim diye kara kara dusunuyordum)

Modulleri satin aldiktan sonra 1 kereye mahsus parametre yukluyoruz.

Bunun icin 34 nolu pini 3v3 e baglayip module enerji veriyoruz.
Modul uzerindeki mavi led yaklasik 2 saniye On 2 saniye Off seklinde yanip sonuyor. Ledi bu sekilde yanip sonuyor gorurseniz bunun anlami modul AT modunda demek.


8 data bit, 38400 baud, 1 stop bit ve no parity ayarlamasi yaptigimiz MCU ile

"AT",0x0D,0x0A yolluyoruz.  Virgullere aldanmayin AT CRLF
Modul bize OK cevabi yolluyor.

Ok cevabi aldiktan sonra keyfe keder bazi parametreler daha yolluyoruz.

Mesela modulumuz yayin yaparken hangi isme sahip olsun isterseniz "AT+NAME=ISIM", 0x0D, 0x0A yolluyorsunuz.
Burada ISIM yerine LED Kontrol, Uzaktan Kumanda vs ne isterseniz onu yaziyorsunuz.

Mesela AT+NAME=LED CRLF

Bu komuta da Ok cevabi gelmesi gerekiyor.

Simdi de transparent moddaki iletisim hizini beliliyoruz.

Bunun icin "AT+UART=38400,0,0", 0x0D, 0x0A yolluyor ve Ok cevabini aliyoruz.

Daha sonra "AT+ROLE=0",0x0D,0x0A yolluyoruz. (Slave demek)

Gene OK cevabi gelecek.

Dikkat: Yeni satin alinmis bir modul AT modunda 38400 de calisiyor fakat Transparent hiz 38400 degil. (En azindan bendekiler degildi)
Bunu bizim ayarlamamiz gerekiyor.

Simdi module bu parametreleri yukledikten sonra modulun enerjisini kesiyoruz.

Artik modulu bir daha bu moda (AT moduna) sokmaya ve parametre yuklemeye gerek yok. Cunku parametreler module kalici olarak gomuldu. Yani bu islemi islemcinin Flasini bir kere programlamaya benzetebilirsiniz.

Simdi 34 nolu pini lowa baglayip gercek uygulama isine gecelim. Bu pin low yapilip ardindan modulun enerjisi verilirse modul uzerindeki mavi led saniyede yaklasik 2 kere yanip sonuyor. Ledi bu sekilde yanip sonuyor gorurseniz modul AT moddan  cikmis transparent moda girmis ama henuz bluetooth bir cihazla link kurmamamis demek.

MCU'nun USARt birimini 8 bit data, 38400, 1 stop bit, no parity ayarlayip seri portdan al gulum ver gulum tarzinda kodunuzu yaziyorsunuz. Yani BlueTooth standartiyla falan hic isimiz yok. Her seyi modul kendi yapiyor.

Gelelim Android kismina.

Android kisminda APP Inventor 2 de ListPicker, Textbox ve bir butondan olusan basit bir arayuz yapiyoruz.

Program da asagidaki gibi. Listpickeri tikladigimizda ortamdaki Bluetooth cihazlar listeleniyor. Bunlardan bizim isim verdigimiz cihazi gorursek tikliyoruz. (Hatirlarsaniz yeni satin alinan module isim verip bu ismi module gommustuk)



Bu programda telefondaki butona bastiginizda text boxa yazilmis metni alip bluetooth ile sizin module yolluyor.

Haa bu arada telefondan modulumuzu sectigimizde link kuruluyor ve artik modul uzerindeki mavi led

On Off On Off  1 saniye bekle On Off On Off seklinde cakiyor.  Ledi bu sekilde yanip sonuyor gorurseniz bunun anlami modul, Transparent modda ve telefonla vs link kurmus demek demek.

Yani ledin 3 tip yanip sonme durumu var. Ucunu de yukarida izah ettim.
Seytan deliginden kacti.

Zoroaster

#8
Yanlislikla 2 kez yollamisim.
Seytan deliginden kacti.

leblebitozu

@Zoroaster dbm01 ile nasil haberlesecegine dair bir blog yazisi

https://www.rhydolabz.com/wiki/?p=15206

Ayrica hc05 bluetooth classic moduludur digerleri ise BLE, tamamiyle ayri teknolojiler, BLE modulleri android settings kismindan goremezsin discover connect isleri vs tamamiyle ayri api ler vasitasiyla oluyor.

Zoroaster

Elimde cok sayida telefon ve HC05 modulu iceren kartlar var. Bunlarin hepsi de ayni odada duracaklar.

Her telefon sadece kendine ayrilmis HC05 ile eslesmeli.

Mevcut durumda telefondaki yazilima BlueTooth cihazlari listele deyip listeden herhangi bir HC05'i sectigimde ona baglaniyor.

Ben boyle istemiyorum. Her telefonun sadece tek bir esi olsun. HC05 sadece o telefonla baglanti kursun onunla haberlessin.

Nasil yaparim?
Seytan deliginden kacti.

tekosis

Hocam yapılacak onlarca, yüzlerce cihaz yoksa ben olsam şöyle yaparım;
* Her bluetooth modüle sırasıyla modul1, modul2, modul3 gibi isimler veririm.
* her bir modülün adres ve isim bilgilerini bir kenara not ederim.
* Her telefonda yüklenecek kodda bir listeleme ekranın olmadan(listpicker'i aradan çıkartarak) doğrudan o telefonun bağlanmasını istediğim adres ve isim bilgilerini connected bloğuna manual girerim.



İlim ilim bilmektir, ilim kendin bilmektir, sen kendin bilmezsin, bu nice okumaktır.

Zoroaster

Sapotaja karsi da onlem almam gerekecek.

HC05 ile telefon eslesip iletisime basladiklarinda ikinci bir telefon HC05 e baglanabilirmi?

HC05 li kartim, esi olan telefona baglanmadigini bir baska telefona baglandigini farkederse linki sonlandirabilirmi? (HC05 Power off-on yapmadan)

Komut listesine bakmaya usendim. Kusuruma bakmayin.
Seytan deliginden kacti.

tekosis

Hocam bluetooth tarafında mcu yok mu? Merak ettim kod güvenliğini neden kendi yazılımınız ile yapmıyorsunuz?
İlim ilim bilmektir, ilim kendin bilmektir, sen kendin bilmezsin, bu nice okumaktır.

Zoroaster

#14
MCU tarafinda onlem alacagim da kafami kurcalayan konu su.

Ya telefonumun eslesmesi gereken karta benim telefonum baglanmadan daha once bir baska telefon baglanirsa ne yapacagim? (Blutooth modul adini ve adresini ortama yayiyor dolayisi ile her kes modulumun adini biliyor)

Dolayisi ile karttaki MCU yabanci telefonun/yazilimin kendisi ile baglandigini sorgulayip ogrenebilir. Daha sonra da HC05 module birak o telefonu baglantiyi kes diyebilmesi lazim.

Ayrica HC05 e surekli atak yapilip benim baglanti kurmam da zorlastirilmamali.
Seytan deliginden kacti.