MacOS读取蓝牙摇杆讯号,利用python修改pynput程序码实现 - 1.起始

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 的程序码,结果意外出现转机……
续看,请参考:第二篇


<<:  [Python]决策数01─运用CART做决策树

>>:  MacOS读取蓝牙摇杆讯号,利用python修改pynput程序码实现 - 2.研究 pynput

[Day27]快快乐乐一起打靶机

之後玩完漏洞平台之後,就可以练在玩线上靶机罗~ 这次要推荐的是 Hack the Box:https...

Day20 浅谈AJAX?

大家好我是乌木白,今天要和大家介绍的是 AJAX,AJAX 是我在学习 JavaScript 这门...

Day6. 依点成形,创造物件 - RigidBody(上)

经历了前两天的基础介绍,今天我们终於要到创建物件的环节了,而这个标题我想已经说明了一切,没错,这篇是...

Day 20. 来确认Mac电脑的显示卡/显示晶片

以我的电脑来做例子啊: 13寸 2020 处理器 2 GHz 四核心Intel Core i5 记忆...

使用storyboard实现代理功能

缘由: 这应该也算是我没学好的项目之一,tableview也算是开发实务里很常见的元件,举凡要连续套...