ESP32-WROOM-32U KABLOSUZ BLE KLAVYE

 

Bu fikir nereden doğdu. Tabii ki ihtiyaçtan. PC başında filim seyretmek yerine PC yi açıp yattığınız  yerden seyretmek isterseniz değişen durumlara göre sesini aç, kapat, durdur gibi komutlara ihtiyacınız olabilir. Ya da oyun oynarken bazı kelimelerin girilmesi gerektiğinde aklınızda tutmak ve tek tek girmek sorun yaratabilir. Bunun yerine bu kelimeleri tek tuşa bağlamak iyi olacaktı.(Hala oyunlarda böyle şeyler var mı bilemiyorum)  Bu tip düşüncelerle daha önce görmüş olduğum  keyboard uygulamalarına baktım. Normal Arduino ile USB HID uyumlu klavye yapılamıyordu. Eskiden PS2 girişler vardı. Arduino ile PS2 klavye mouse yapılabiliyordu. Şimdi ise USB olmalıydı. HID uyumlu klavye için bir kaç çözüm var aşağıda bunları açıklamaya çalıştım. Ayrıca bu da kablosuz olmalıydı. Her zamanki gibi yanımızdan ayırmadığımız android telefonumuz yardımcı olabilirdi. Bundan dolayı ESP32 yi seçtim.
Ayrıca PC için bir program yüklemedim. Sadece PC bluetooth kısmında tanıttım hepsi bu. 

Öncelikle HID uyumlu klavyeyi Arduino ile nasıl yapabileceğimize bakalım.
Şayet klavyeyi HID uyumlu yani USB klavye gibi tanıtmak isterseniz arduino kartınızın ATMEGA 32U entegresine sahip olması gerekir. Normal ATMEGA328 entegreleri HID uyumlu olarak kullanılamıyor.

Bu arduino kartlarına örnek verecek olursak LEONARDO, Micro PRO modelleri ve ATMEGA32U kullanan diğer modeller olarak düşünebiliriz.
ESP32 WROOM32U entegresi de BLE özelliği yani Bluetooth özelliği ile HID uyumlu klavye gibi davranabiliyor.

ESP32 modülümü sadece bunun için kullanmak istemem diyebilirsiniz.
Fakat benim verdiğim programda BLE kısmını KLAVYE gibi kullanırken, yanında ESP32 nin diğer giriş ve çıkışlarını istediğiniz gibi başka işler için kullanabiliyorsunuz.
Ben programımda örnek olarak klavye olarak kullanırken, 1 adet rölenin açılıp kapanmasını da gösterdim. Siz de istediğiniz gibi bunu çoğaltabilirsiniz.
Yani ESP32 modülünüzü TAM KAPASİTE kullanabilirsiniz.

Nasıl kablosuz yapıyoruz derseniz de bunu 2 şekilde düşünebilirsiniz.
1. si ESP32 ye buton bağlayıp klavye olarak BLE kablosuz iletimiyle Kablosuz klavye yapabilirsiniz.
2. si ise ESP32 nin WIFI özelliğini kullanarak hem klavye basmalarını kablosuz alırsınız, hem de klavye kodlarını BLE ile kablosuz iletirsiniz.

İkinci seçimde ESP32 nin yanında olmak zorunda değilsiniz. Çünkü esp32 nin girişlerine butonla basmayacaksınız. WIFI kapsamı içerisinde ESP32 den uzağa gidebilirsiniz. Bu sayede ESP32 ye wifi üzerinden hem klavye hem de diğer çalışma komutlarını kablosuz olarak iletebileceksiniz.

NASIL YAPIYORUZ:

Öncelikle ESP32 yi TCP SOCKET SERVER olarak çalıştırıyoruz. Başka şekillerde de çalışabilir ama ben kolay olduğu için bu yolu seçtim.
Android için APP INVENTOR  programı ile TCP CLIENT programını yaptım. Bu haberleşme sağlandığında APP INVENTOR da yaptığım BUTONLAR ile klavye için belirteç yolladım.
Mesela PP yolladım. Bu PLAY/PAUSE butonuna bas demek olsun. ESP32 bu belirteci wifi üzerinden alınca klavyenin multimedya butonlarından PLAY PAUSE butonunun kodunu PC ye yollar.

Diğer android programında olan butonlar da bu mantıkla belirteçlerini yollarlar. ESP 32 bu belirteçlere göre klavye kodlarını oluşturur ve PC ye yollar.

Benim PC Windows 10 ve Türkçe klavye kullandığından Türkçe klavye karakter kodlarını da içermesi gerekir.

ESP32 kütüphanesi buna normalde yer vermese de Klavye kodlarını farklı şekilde yolladığınızda Türkçe karakterlerin de ekrana basıldığını göreceksiniz.

Öncelikle bu kodların ASCII 255 e kadar kodlarından oluştuğunu söylemem lazım. Fakat ASCII karakterlerinin hepsi ekrana basılabilir komutlar değildir. Mesela DEC 8 numara BACKSPACE tuşuna karşılık gelir DEC 9 numara TAB tuşuna karşılık gelir. DEC 32 numara boşluk tuşudur ve ilk 32-128 arası karakterler klavye basılabilir karakterleridir.

Klavyelerin ihtiyaçlara göre değiştirilmesi sonucu, zaman içerisinde bu kodlar değiştirilerek 128 den sonrası da kullanılmaya başlanmıştır. Mesela Ş Ü gibi Türkçede kullanılanlar gibi, diğer dillerde de İngilizcede olmayan karakterler vardı. Klavyeler yerele göre uyarlanması için bu komut seti farklılaşmaya başladı.
Tüm karakterleri öğrenmek için FOR NEXT döngüsüyle 32-255 arasını Excel de bastırmak istediğimde tam başarılı olamadım. Bunun nedeni ise bazı kodların ekranda yeni pencere açması yada START menüsünü açmasından dolayı bu tam başarılı sonuç vermedi.

Fakat ben de, sizin kendi karakterlerinizi ve klavye kodlarınızı görmeniz için Android programa bir karakter yollama butonu koydum. Bu buton ile kendi bilgisayarınızda hangi kodun hangi harfe denk geldiğine teker teker bakabileceksiniz. Baktıktan sonra hangi butonları kullanmak isterseniz buna göre karar verebileceksiniz.

Kütüphanede örnek bir karakter tablosu var. Fakat kendi klavye kodlarınızı karakterler için kullanmanız yerinde olacaktır. Bunun sebebi, ister Türkçe ister Almanca ister İngilizce olsun tüm karakter tablosuna erişebilmenizdir. Androiddeki bu kod gönderme butonuyla klavyenizi düzenleyebilirsiniz.

Kütüphane içerisinde size hazır butonlarda verilmiş. Mesela MULTIMEDIA butonları gibi. Bunları direkt olarak kullanabilirsiniz. Ben zaten bu butonları Android programa ekledim. Bir de android programda NUMPAD dediğimiz klavyenin sağ tarafında bulunan bazı klavyelerde yer darlığından konulmayan TUŞ TAKIMINI içerecek şekilde Android programa koydum.

Android programda bir de 1 adet Röle için AÇ KAPA butonları var.

 

 

Programda 2 kütüphane kullanılıyor. Birincisi Klavye için BLE kütüphanesi, ikincisi ise WIFI kütüphanesi. Bu kütüphane TCP SOCKET server destekliyor.  Zaten ESP32 kartını KARTLAR bölümüne eklediğinizde WIFI kütüphanesi hemen ekleniyor. Şayet eklediğiniz kütüphane bunu desteklemiyorsa benim verdiğim programlar bölümünden kütüphaneyi indirebilirsiniz.

WIFI ayarlarında aşağıdaki satırları yazmazsanız IP adres otomatik olarak değişeceğinden her defasında ESP32 nin adresini bağlantı için öğrenmeniz gerekir. Bunu önlemek ve sabit IP vermek için aşağıdaki satırları programınıza eklemeniz gerekiyor.
Ben verdiğim programda bunu ekledim. Siz IP adresi olan 184 sayısını istediğiniz gibi değiştirebilirsiniz. Fakat çok düşük yaparsanız otomatik olarak ağınızda çalışan IP adreslerle çakışabilir bunu mümkün olduğunca 100 den sonra vermeye bakın. Çakışma olmasın diye.

// statik ip adresi **********************************
IPAddress local_IP(192, 168, 1, 184);
// gateway ip (modem arayüzüne girişte kullandığınız ip adresi)
IPAddress gateway(192, 168, 1, 1);
IPAddress subnet(255, 255, 0, 0);
IPAddress primaryDNS(8, 8, 8, 8);   //isteğe bağlı google dnsleri
IPAddress secondaryDNS(8, 8, 4, 4);

//*******************************************************

Ayrıca bu satırları  verirken bir de SETUP kısmında aşağıdaki satırları da eklemelisiniz. WIFI begin komutundan önce.

if (!WiFi.config(local_IP, gateway, subnet, primaryDNS, secondaryDNS)) {

    Serial.println(“sta hatasi”);

  }

Bu şekilde her daim android program aynı IP adresine bağlanacaktır.

Arduino programının LOOP döngüsünde WIFI ile karakter alma işlemi yapılıyor. Karakter alındığında ise diğer alt programa giderek bunu BLE ile gönderiyor.

ÖNEMLİ NOKTA: benim ESP32 WROOM 32U modülüm 4MB modüldür. 2 ayrı kütüphaneyi dahil ettiğimde ve kütüphanelerdeki tablolar da PROGMEM komutuyla program hafızasında saklandığı için KART HAFIZASI seçiminde 4MB seçerken SPIFSS yi minimum ayarlamanız gerekiyor ki Program memory YETSİN.

 


BLE KLAVYE ayarı nasıl yapılacak.
Bunun için PC de Bluetooth ayarlarını açıp ESP32 çalışırken + butonuna basarak BLUETOOT YA DA BAŞKA CİHAZ EKLE kısmına geçin. Orada cihazın BLUETOOTH özelliği olduğunu belirtin. Arama yapacaktır ve “ESP32 Keyboard” gelecek. Bunu seçin. Seçildikten sonra ESP32 kapanasıya kadar bu bağlı olacaktır. Zaman içerisinde ESP32 yi açtığınızda klavye butona bastığınız halde çalışmıyorsa Bluetooth ayarlarına gidip hala aktif mi kontrol edin.


Buraya kadar sanırım bağlantıyı ve mantığını anlamışsınızdır.

Özellikle bazı butonlar için hazır komutları, BLUEKEYBOARD.h dosyasını açarak görebilirsiniz.
Burada multimedia ve NUMPAD kısmını göreceksiniz. Bu komutlar çalışıyor.

bleKeyboard.write(KEY_MEDIA_PLAY_PAUSE);

şeklinde komut olarak gönderebiliyorsunuz.

Karakterler ise BlueKeyboard.cpp dosyasında bulunuyor ama buna pek bakmanız gerekmeyecek. Çünkü karakter seti Türkçe klavyeye göre yeniden düzenlenmiş oldu. Siz Android program ile test ettiğiniz karakter kodlarını kullanacaksınız.

Bu şekilde KABLOSUZ klavyeniz oldu.

BEN NEDEN KOCA ESP32 MODÜLÜMÜ BURADA KULLANAYIM DİYORSANIZ HAKLI OLABİLİRSİNİZ.

Elbette bu programda,  hem BLE ile klavye kullanacaksınız. Hem de WIFI üzerinden ESP 32 yi başka işler için tam kapasite kullanabileceksiniz.
Bunun Yerine Arduino Micro PRO kartını aldığınızda yine HID uyumlu klavye yapabilirsiniz. Fakat bu kez bir ESP8266 modülünü, Arduino ya ekleyerek yine aynı mantıkla, Android kontrollü kablosuz bir klavye yapabilirsiniz.

Başka seçenekleriniz de olabilir. Bizim piyasada olmasa da ÇİN piyasasında HID uyumlu modüller var. Bu modüller seri porttan gelen bilgiyi direkt olarak klavye gibi kullandırtabiliyor. Seri port üzerinden bilgi girişi olduğu için elinizdeki Arduino micro veya mini gibi küçük kartlar da burada kullanılabilecektir.
Yine de kablosuz derseniz 2 seçeneğiniz olacaktır. Ya android üzerinden bir kontrol için Arduinoya ESP8266 ile wifi kontrol yapacaksınız. Ya da RF alıcı verici kullanarak kablosuz klavye yapabileceksiniz.

Bu programda klavye kodlarını ekranda görmeniz için bir ONLINE JAVA SCRIPT programı WEB üzerinden sunulmuş. Burada bastığınız karakter kodunu ve ekranda görünecek halini size gösteriyor.
Burada da şunu göreceksiniz. Mesela “a” harfi DEC 65 gösteriyorsa “A” harfi de 65 gösterecek. Sistem bunu nasıl algılıyor. Bu programda bunu da görebileceksiniz. Normal karakter “a” direkt basılmış oluyor. “A” ise SHIFT “a” tuşu ile sağlandığından java programı size SHIFT tuşuna bastığınızı da gösterecektir. Ya da CAPS LOCK butonu basılı olduğu için “A” yazdım diyecektir.

https://www.toptal.com/developers/keycode

NOT: Dikkat etmeniz gereken şey aktif pencerenin bu pencere olması. Çünkü klavyeden gelen kodlar aktif pencereye gider. Siz bir diğer pencereyi aktif ettiyseniz karakter kodları o pencereye gider.

Mesela bu online program ve bir TXT ekranı açık olsun. Siz TXT ekranını o an aktif olarak seçmişseniz karakter TXT ekranına yazılır JAVA programı bu tuşu algılamaz.

Ayrıntılar için VİDEOyu izlemelisiniz.  Elimden geldiğince size açıklamaya çalışacağım.

Fakat yine de öncesinde ASCII kodu ne demek bilmiyorsanız, bu tablolara bakmanızı öneririm.

https://www.commfront.com/pages/ascii-chart

Aşağıda Türkçe karakter kodunu ve klavyedeki yerlerini görebileceğiniz sayfa bulunuyor. Klavyenin SCAN CODE bölümünde bu tuşların OEM tuşlar olduğunu yani Her dilde ki farklılıkların buraya yazılabileceğini belirtmişler.

https://kbdlayout.info/KBDTUQ/10.0.17134.1

Scan kodları burada.

https://kbdlayout.info/KBDTUQ/10.0.17134.1/scancodes

Tuşların üzerindeki SCAN kodları ise klavye içerisinden hangi karakter koduna basıldığının algılanmasını gösteriyor. MATRİS şeklinde düşünün tüm klavye tuşları taranarak elde edilir. Bundan dolayı TARAMA işlemi yapan işlemci hangi tuşun basıldığını görür ve buna uygun ASCII kodunu PC ye gönderir. Türkçe karakter olan tuşların hemen yanında OEM-1 gibi yazar. Bu tuşlar değişken tuşlardır.

https://kbdlayout.info/KBDTUQ/10.0.17134.1/virtualkeys

Klavye kodlamasını anlamak isterseniz bu sayfaya da göz atabilirsiniz.
https://www.win.tue.nl/~aeb/linux/kbd/scancodes-10.html

Bu kütüphanede faklı tuşlara birlikte basmak için bir yöntem de var. Aşağıdaki komutları kullanarak önce basılacak tuşları ayarlayıp sonrasında ise hepsine bas komutunu verebilirsiniz.

bleKeyboard.press(KEY_LEFT_CTRL);

    bleKeyboard.press(KEY_LEFT_ALT);

    bleKeyboard.press(KEY_DELETE);

    delay(100);

    bleKeyboard.releaseAll();

Bu şekilde CTRL+ALT+DEL tuşlarına basmış olacaksınız.

Bunun yanı sıra PRINT komutu ile KELİME gönderebilirsiniz. Özellikle oyunlarda HİLE kodları bir kelimeden oluşuyor. Akılda tutmak yerine tek tuşla kelime yollayabilirsiniz.
FAKAT burada bir problem olabilir.

bleKeyboard.print(“Hello world”);

Yukarıdaki komut ile bu kelimeleri ekrana yazdırabilirsiniz fakat bazı karakterler Türkçe karakterler yerine denk gelebilir. Mesela “HELLO, WORLD” dediğinizde HELLOö WORLD göreceksiniz. Bundan dolayı dikkatli kullanılması gerekiyor.  Ya da normal karakter yollama komutunu tek tuşa programlayıp karakterleri arka arkaya gönderecek şekilde ayarlayabilirsiniz.  Aralarında 100ms gecikme bırakmak yerinde olacaktır. PC rahatlıkla kodları yakalayabilsin diye. Belki 50ms de yeter ama ben 100ms yaptım.

 NOT: Denemelerinizde SCROLL LOCK kilitlenirse ve klavyenizde bu tuş yok ise WİNDOWS denetim masasından ERİŞİM KOLAYLIĞI kısmına gelerek EKRAN KLAVYESİNİ seçin. Burada E-KİTLE butonuna basarak ilk haline getirebilirsiniz.

sağ taraftaki scroll lock tuşunu siyah renge döndürün. Şayet scroll lock basıldıysa ve klavyenizde yoksa.

Ayrıca tüm programlar arasında APP INVENTOR programında CLIENT SOCKET kullanılabilmesi için bir EXTENSION var. Bunu gerektiğinde APP INVENTOR programınıza ekleyebilirsiniz.
Program ismi: com.gmail.at.moicjarod.aix

ESP32 ile ilk defa çalışacaksanız ARDUINO IDE içinde yapmanız gerekenler var. Dosyaların bulunduğu yerde resimli anlatımları var. resimlere bakarak gerekli programları yüklemelisiniz ve IDE menülerinde PREFERENCES (Tercihler) yazan yere aşağıdaki resimdeki gibi ilgili satırları yazmanız gerekiyor.

esp01 için tercihler satırı

https://arduino.esp8266.com/stable/package_esp8266com_index.json

esp32 için tercihler satırı

https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json

 

FARKLI BİR KLAVYE: 
Bütün bunlara ek olarak Android telefonunuzdaki ekran klavyesini de kullanım için ayarlayabilirsiniz. aşağıdaki ekranda 2 adet textbox var. 1 adet clock sensörü var. Şayet textbox1 e ekran klavyesi ile bir karakter yazdıysanız bu 30ms içinde textbox2 ye yazılıyor. Bu temel bilgi. siz ise bu textbox2 deki karakteri alıp ESP32 ye gönderbilirsiniz. ESP32 deki programınız gelen karakterin ascii kodunu PC ye gönderecek klavye koduna çevirecektir.
Bu sadece sizin için bir örnek android programıdır.
Yapmanız gereken basit textbox2 ye bilgi geldiğinde sizin WIFI gönderme kısmına da gelecek ve hızlıca gönderecek.
Ben sadece temel kısmını buraya koyuyorum. EKRAN KLAVYESİNİ de kullanabilmeniz için.

 

TÜM PROGRAMLARA BURADAN ULAŞABİLİRSİNİZ.  

 

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.