iT邦幫忙

0

MacOS讀取藍牙搖桿訊號,利用python修改pynput程式碼實現 - 1.起始

  • 分享至 

  • xImage
  •  

1. 前言:

之前想要實現在幾公尺外遙控 mac book,於是就在蝦皮上找到了這個藍牙搖桿,雖然懷疑產品能不能正常使用,不過看在價格99元的份上,還是買來嘗試看看
https://ithelp.ithome.com.tw/upload/images/20220130/201416677XGMuFfA7K.jpg

2. 讀取訊號:

根據google結果,嘗試使用過 tkinter, pygame, pynput,最終只有 pynput 有得到一些反饋

from pynput.keyboard import Listener

def on_press(key):
    print(key)

if __name__ == '__main__':
    while True: 
        with Listener(on_press = on_press) as listener:
            listener.join()

pynput的用法,請參考這篇

print 出的結果

# 操控桿向上,print出的結果
Key.media_previous
Key.media_play_pause
# 操控桿向下,print出的結果
Key.media_next
Key.media_play_pause
# 操控桿向左、向右、前方2個按鍵、下方四個按鍵,print出的結果
Key.media_play_pause

3. 功能實現

由於 pynput 只能讀取 2種藍牙搖桿的訊號,所以如果假設要執行 5種任務的話,就需要至少移動 3次搖桿(2^3=8),以下是實現的方式:

from pynput.keyboard import Key, Listener, Controller
import time
keyboard = Controller()
last_time = time.time()
lst = []

def on_press(key):
    global lst, last_time
    now = time.time()
    if now - last_time > 1: # 設定 2個按鍵間隔超過 1秒 就將之前的lst清空,避免輸入錯誤
        lst = []
    last_time = now # 更新最後按鍵時間

    if key == Key.media_previous: # 搖桿向上
        lst.append(0)
    elif key == Key.media_next:   # 搖桿向下
        lst.append(1)

    if lst == [0,0,0]:
        keyboard.press(Key.right) # 模擬鍵盤按向右鍵
        lst = []
    elif lst == [0,0,1]:
        keyboard.press(Key.left)  # 模擬鍵盤按向左鍵
        lst = []
    elif lst == [0,1,0]:
        keyboard.press(Key.up)    # 模擬鍵盤按向上鍵
        lst = []
    elif lst == [0,1,1]:
        keyboard.press(Key.down)  # 模擬鍵盤按向下鍵
        lst = []
    elif lst == [1,0,0]:
        keyboard.press(Key.space) # 模擬鍵盤按空白鍵
        lst = []

if __name__ == '__main__':
    while True: 
        with Listener(on_press = on_press) as listener:
            listener.join()

雖然有點麻煩,不過習慣了之後倒也還好。事情的轉機是有一次跟好友聊天,對方說應該可以用讀取key code的方式來讀取藍牙搖桿的訊號,當天晚上也研究網路上一些key code的程式碼,不過最終沒有什麼結果。但同時我也開始想研究 pynput 的程式碼,結果意外出現轉機……
續看,請參考:第二篇


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言