PC_CONTROL_JOYSTICK_CONTROL WITH ARDUINO_PYTHON_MOBILE_CONTROL

Daha önceki yazılarımda HID uyumlu ARDUINO, ESP32 ile klavye kontrolünü anlatmıştım.
Bu yazımda ise HID uyumlu olmasa da ARDUINO, ESP8266, bir de mobil uygulamayla PC klavye  kontrolünü göstereceğim.

Bu yazımda PYTHON kullanacağım. Fakat KORKMAYIN bende yeni başlayanlardan olduğum için sizin de kolay anlayabileceğiniz bir programlama ile bunu anlatacağım.
İleri seviye PYTHON bilmenize gerek yok. Temel yazım bilgileri ile kolaylıkla adapte olabileceksiniz.

Ben WIN10 ve PYTHON3.11.6 versiyonunu kullanıyorum.

Öncelikle mantığını anlatacağım. Bunu anladıktan sonra ne kadar kolay olduğunu göreceksiniz.

Arduinodaki kütüphaneler gibi PYTHON da da kütüphaneler var. Hem de 1 den fazla.
Bu kütüphanelerin avantajları dezavantajları var. Bunları öğrenip hangisini seçeceğinize karar verebilirsiniz. Mesela bir tanesinde türkçe karakter yazmak çok kolay. diğerinde ise farklı bir metot ile yazdırabilirsiniz. Mesela birinde “ş” yazılabilirken diğerinde VK denilen Virtual keyboard komutlarıyla yazdırabilirsiniz. Bir diğerinde ise numerik klavyeden kod girmeyle yazdırabilirsiniz.( ALT+0222) gibi bir bileşim gerekiyor.
Bunun yanı sıra JOYSTICK olarak kullanacaksanız windows oyunlarında DIRECTX vardır. bu kütüphanelerden biri oyunlar için destek vermektedir. Bununla kablosuz joystick ya da mobil uygulama joystick yapabilirsiniz.

Benim örneklediğim modüller WIN10 altında güzel çalışıyor. Raspberry pi veya LINUX makinelerde denemedim. Sizler de farklı bir sistem üzerinde deneyebilirseniz sonuçlarını alttaki yorum kısmına bırakabilirsiniz.

Kütüphaneler:
1-) PYNPUT         ( Türkçe karakter ve diğer dillerdeki ekstra karakterler VK denilen virtual keybord kodları ile yazıldığından her dilde OEM olarak gösterilen tuşlar kolaylıkla yazılabiliyor. (sisteminiz hangi klavye diline sahipse ona göre karakteri VK kodu ile yazabiliyor. )
2-) PYAUTOGUI  ( Türkçe karakter ALT+0222 gibi yazılabiliyor.)
3-) KEYBOARD  ( Türkçe karakter “ş” gibi yazılabiliyor. )
4-) PYDIRECTINPUT ( Bu klavye kontrolde sınırlı desteği var. Fakat JOYSTICK olarak kullanmak için DIRECTX desteği var. Eski oyunlarda directx desteği vardı. Yeni oyunlarda denemedim. )

ÖNEMLİ NOKTA:
PYTHON programınız çalıştığında ekrana bir şeyler yazmasını istiyorsanız MUTLAKA bir TXT dosyası açın ve txt dosyasını ana pencere yapın.
Yoksa tüm yazacağı karakterleri programınıza yazar. Siz de silmek zorunda kalabilirsiniz.
Bunun için program başında 5s gecikme verilmiştir.

Not: Bu kütüphanelerin bazıları aynı zamanda MOUSE kontrolü de sağlamaktadır.

PYTHON programının dış aygıtlarla haberleşmesi için SERİ PORT kullanıyoruz. Bu seri port Arduino USB bağlantısındaki seri port olabilir. Ya da PC nizin Bluetooth kısmına ait seri port olabilir. Ya da bir USB seri çevirici kullanıyorsanız, bu kartın seri portu olabilir. Bundan dolayı arduino, esp8266, mobil uygulama her şey ile PC kontrol yapmak mümkün.
Sadece program çalıştığında doğru port’u seçtiğinizden emin olun.

Not: Ayrıca program başlamadan evvel 5s lik bir gecikme verilmiştir TXT dosyasını açabilmeniz için.
Ayrıca PYTHON programı çalıştıktan sonra arka planda çalışabileceği için ister txt dosyası ister excel dosyası, isterseniz de bir oyun programını çalıştırıp kullanabilirsiniz.

Buraya kadar sanırım mantığını anladınız. Arduino programı ise çok basittir. Bir tuşa bastığınızda PYTHON’un anlayacağı bir kodu seri porttan yollamanız gerekiyor. Başka bir şey yok. Zaten örnek dosyaya baktığınızda kolay olduğunu göreceksiniz.



Bir de mobil uygulama var. aşağıdaki resimlerde göreceğiniz gibi bir ekrana sahip. Bluetooth kullanıyor. Bluetooth ile bağlantı kurduktan sonra Arduinodaki gibi bastığınız tuşa bağlı olarak bluetooth üzerinden bir kod gönderiyor. Bu kod ise programdaki LOOKUP tablosundan bulunarak da çalışabilir ya da gelen koda göre IF cümleleri yazarak da bunu yapabilirsiniz.
Bu tablolarda o kütüphanenin hangi karakterlerini hangi kod ile yazabileceği belirtilir.
Mesela SC56 kodu geldiğinde, PYTHON, SC ile 56 yı ayırır ve 56 yı lookup tablosunda bulur ve komutu devreye sokar. Her kütüphanenin tablo sıralaması farklı olabilir tercih edeceğiniz şekilde kodu değiştirebilirsiniz.
Başındaki SC ise belirteçtir. İsterseniz Kütüphaneye göre değişik belirteç kullanabilirsiniz. Tabloya göre değişebilir. Ya da programların karışmaması için farklı bir kod kullanılabilir.

 

Bu ekranda WIFI butonları da görünüyor ama onlar ayarlanmadı. Ayarlayıp WIFI özelliği de kazandırabilirsiniz. Şu anda BLUETOOTH özelliği ile çalışıyor. program : BLUE_KBD.aia

 

BU butonların sadece VOL+ ve VOL – olanı bilgi yollayabilir. Sizler diğer tuşlar için bu örnek tuşların gönderdiği veri gibi ayarlayabilirsiniz. Komut şekli SC56 SC52 gibi ayarlanacak. Sayfada resim olarak göreceksiniz. aynı komut şeklini diğerlerine uygularsınız. sadece numara değişir.

 

Bu uygulamayı neden ve nerelerde kullanırız? dediğimiz de, mesela UK ile arduinoyu kontrol edersek o da bunu seri port üzerinden iletirse PC de filim seyrederken ya da müzik dinlerken MEDIA TUŞLARINI kullanabiliriz. Kablosuz olarak tabii ki.
Bunun yanısıra kablosuz JOYSTICK ya da MOUSE yapılabilir.
Bir diğer uygulama da kablosuz klavye olarak da kullanabiliriz.
Mesela PS2 klavyeyi Arduinoya bağlamak için yazdığım bir yazı var. Arduino bu basılan karakteri bluetooth ya da esp ile PYTHON programına gönderebilir Kablosuz klavyeniz hazır. Ya da RF ile çalışan sadece MEDIA tuşlarını kontrol eden bir proje yapabilirsiniz.
Zaten mobil klavye olarak telefonumuzu kullanmak için bir örnek program verdim. Sizler de gerekli değişiklikleri yaparak kendi uygulamanızı yapabilirsiniz.

PYTHON programlarının açıklaması: (NOT: Bazıları çalıştıktan 5s içinde txt dosyası açık olmalı. Karakter yazsın diye. )
1-) KEYBOARD_MIX.py : Tüm bahsedilen kütüphanelerin çalışmasını gösteren örnek.
2-) KEYBOARD_ANDROID_1.py : Sadece PYAUTOGUI kütüphanesinin yazabildiklerini gösterir.
3-) keyboard_yeni_lookup.py  : bu program KEYBOARD kütüphanesinin klavye kodlarına ait tabloyu gösterir ve ekrana yazar. (Bu programı denemek için bir EXCEL sayfası açarsanız hareketleri daha iyi görebilirsiniz.)
4-) arduino_multimedia.py : Bu program arduino nano ile yapılan 2 butonlu devre ile VOLUME UP ve VOLUME DOWN  media tuşunu çalıştırır.
( Bu program bluetooth COM portuna ayarlandığında değişiklik yapmadan Örnek mobil uygulamanın VOL+ ve VOL- tuşlarını da kullanır.)
5-) joy_orj_1.py : Bu program ise Bluetooth COM portuna bağlanarak Arduino RC CAR uygulamasını JOYSTICK olarak kullanarak OYUN programında kablosuz JOYSTICK uygulamasının kullanılmasını sağlar. Program tuşları Bu uygulamanın tuşlarına göre yapılmıştır.
Oyun programınızda karşılık gelen tuşların keyboard ayarlarını buna uygun değiştirseniz sorunsuz çalışacaktır.(Bu konuyu videoda göreceksiniz)

APP inventor ile yapılan bluetooth keyboard uygulamasında sadece VOL+ ve VOL- tuşlarının gönderimi ayarlanmıştır. Buna göre siz de kendi LOOKUP tablonuza göre diğer tuşların göndereceği komutları ayarlayabilirsiniz. Aşağıdaki resim size yol gösterecektir.

diğer tuşlarda SC yazan kısım yok. bu şekilde değiştirilmesi gerek. Bir de tuş kodunu programınıza göre ayarlamanız gerek.

Diğer Mobil uygulama ( Arduino RC car. mobil joystick uygulaması)  yeni versiyonları olmadığı için google play den indirilemiyor. Başka sitelerde var. Ama sorunlu indirmeler var. Belki de virüslü olabilir.
Bundan dolayı GITHUB programları arasında APK dosyasını size verdim Bu programı telefonunuza indirip kullanabilirsiniz. ( orj_bluetoothRCcontroller_2021-07-16.apk )

 

Butonlara basıldığında hangi yöne gidilecekse O harf PYTHON programında ayarlanacaktır. verilen örnekte bu harf sıralamasına göre program ayarlandı. sizler de OYUN larınızda bu harfleri oyun ayarlarından joystick ya da klavye ayarları bölümünden ayarlayabilirsiniz.
Bu resimdeki mod ACCELEROMETER kontrol ile çalışır. burada tuşlara basarak değil ekranı ileri geri sağa sola döndürerek oyunu kontrol edersiniz. Bu uygulamanın menüsünden ayarlanır.

 

PYTHON programı arka planda çalışırken isterseniz ekranda açık bırakabilirsiniz. İsterseniz de minimize edebilirsiniz. Arka planda da olsa seri port üzerinden bilgi geldikçe görevini yapacaktır.

Aşağıdaki linkleri kullanarak bu modüllerin dokuman sayfalarına ulaşabilirsiniz.

PYNPUT LİNKLER:

https://speedsheet.io/s/pynput?q=keyboard-commands#qMrB

https://pynput.readthedocs.io/en/latest/

https://pynput.readthedocs.io/en/latest/keyboard.html#reference

PYDIRECTINPUT LİNKLER:

https://pypi.org/project/pydirectinput-rgx/

https://github.com/learncodebygaming/pydirectinput/blob/master/README.md

PYAUTOGUI LİNKLER:

https://pypi.org/project/PyAutoGUI/

https://pyautogui.readthedocs.io/en/latest/keyboard.html#keyboard-keys

KEYBOARD LİNKLER:

https://pypi.org/project/keyboard/

https://github.com/boppreh/keyboard/blob/master/keyboard/_winkeyboard.py

https://github.com/boppreh/keyboard/tree/master

https://thepythoncode.com/article/control-keyboard-python#google_vignette

https://stackabuse.com/guide-to-pythons-keyboard-module/

NOT: Bu linkler dışında PYTHON temel yazılım ve komutlarını öğrenmek isterseniz
https://www.w3schools.com/python/  sayfasından öğrenebilirsiniz. uygulamalı örneklerle öğretir.

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

NOT: PYTHON 3.11 ile test edildi. Bazı kütüphaneler PYTHON son versiyonlarında çalışmayabilir. Bundan dolayı sisteminizde denerken PYTHON 3.11 versiyonunuzu kurarsanız sorun çıkmayacaktır. Daha sonra yeni versiyonla deneyebilirsiniz.
AYRICA BEN WINDOWS ÜZERİNDE DENEME YAPTIM. LINUX SİSTEMİNİZ VARSA BUNLARI DENEDİKTEN SONRA SONUÇLARI YORUM KISMINA BIRAKIRSANIZ MEMNUN OLURUM. BU BİLGİLERİ DENEYECEK OLANLAR SİZİN TECRÜBENİZDEN FAYDALANIR.

 


 

 

Bir cevap yazın

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