之前想要實現在幾公尺外遙控 mac book,於是就在蝦皮上找到了這個藍牙搖桿,雖然懷疑產品能不能正常使用,不過看在價格99元的份上,還是買來嘗試看看
根據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()
print 出的結果
# 操控桿向上,print出的結果
Key.media_previous
Key.media_play_pause
# 操控桿向下,print出的結果
Key.media_next
Key.media_play_pause
# 操控桿向左、向右、前方2個按鍵、下方四個按鍵,print出的結果
Key.media_play_pause
由於 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 的程式碼,結果意外出現轉機……
續看,請參考:第二篇