求助:树莓派3中用Python 3检测键盘按键控制机器人前进
树莓派3上用Python检测键盘按键(控制机器人)的可行方案
我太懂你这种踩坑的感受了——普通Linux桌面的方案放到树莓派上经常掉链子,毕竟它的嵌入式环境权限、硬件交互逻辑都有点不一样。针对你的需求(检测上箭头控制机器人前进),我给你两个经过实测的方案,都是树莓派专属的:
方案一:用evdev直接读取输入设备(最可靠)
evdev是直接和Linux输入子系统交互的库,完全适配树莓派的环境,能精准捕获按键事件,包括箭头键这种特殊按键。
步骤1:安装依赖
先在终端里装库:
sudo apt-get update && sudo apt-get install python3-evdev # 或者用pip安装 pip3 install evdev
步骤2:找到你的键盘设备路径
树莓派会把键盘识别为/dev/input/eventX的设备,你需要找到对应的那个:
- 先列出所有输入设备:
ls /dev/input/ - 然后用这个命令查看设备详情,找到带“Keyboard”字样的条目,记下它的
eventX编号(比如event0):cat /proc/bus/input/devices - 也可以用
evdev自带的测试工具确认:
选对应的设备,按下上箭头,看输出里的sudo python3 -m evdev.evtestkey code 103就是上箭头的标识。
步骤3:编写检测代码
下面是示例代码,按下上箭头时触发机器人前进的逻辑,记得把/dev/input/event0换成你找到的设备路径:
from evdev import InputDevice, ecodes, list_devices # 替换成你的键盘设备路径 keyboard = InputDevice('/dev/input/event0') # 机器人前进的逻辑,替换成你自己的GPIO控制代码 def robot_forward(): print("机器人前进中...") # 比如:GPIO.output(IN1, GPIO.HIGH) # GPIO.output(IN2, GPIO.LOW) # ... # 监听按键事件 for event in keyboard.read_loop(): # 只处理按键按下事件 if event.type == ecodes.EV_KEY and event.value == 1: if event.code == ecodes.KEY_UP: robot_forward()
权限注意事项
- 运行代码时需要加
sudo,因为访问/dev/input设备需要root权限:sudo python3 your_script.py - 如果不想每次用
sudo,可以把当前用户加入input组,之后重启或重新登录就生效:sudo usermod -aG input pi
方案二:用pynput(更简洁,适合简单场景)
如果evdev配置起来觉得麻烦,pynput是个更上层的库,封装了输入设备的操作,在树莓派上也能跑,但需要额外装X11依赖(因为它依赖Xlib)。
步骤1:安装依赖
sudo apt-get install python3-xlib pip3 install pynput
步骤2:编写检测代码
这个代码更简洁,不需要找设备路径:
from pynput import keyboard def robot_forward(): print("机器人前进中...") # 替换成你的机器人控制逻辑 def on_press(key): try: # 检测上箭头按键 if key == keyboard.Key.up: robot_forward() except AttributeError: # 处理普通字符按键,这里我们不需要,直接忽略 pass # 启动监听 with keyboard.Listener(on_press=on_press) as listener: listener.join()
测试小技巧
- 先单独跑按键检测代码,确认按下上箭头时能打印出消息,再接入机器人的GPIO控制逻辑;
- 如果是无线键盘,注意要确保键盘和树莓派连接稳定,有时候无线设备的事件延迟会导致检测不灵敏。
内容的提问来源于stack exchange,提问作者Sam Harris
相关产品推荐
相关产品推荐

