Pybricks开发乐高控制器时遇ImportError:找不到pyautogui模块
问题:Pybricks开发乐高控制器时出现
ImportError: no module named 'pyautogui' 我尝试用pybricks、pybricksdev和pyautogui开发乐高控制器,用来在虚拟环境里模拟按键操作,但运行代码时触发错误:ImportError: no module named 'pyautogui',所有操作都在虚拟环境中进行。
错误信息
ImportError: no module named 'pyautogui'
运行的代码
from pybricks.hubs import PrimeHub from pybricks.pupdevices import ForceSensor, ColorSensor from pybricks.parameters import Port, Color from pybricks.tools import wait import pyautogui as pg # from pynput.keyboard import Key,Controller # keyboard = Controller() hub = PrimeHub() force_sensor = ForceSensor(Port.A) color_sensor = ColorSensor(Port.B) def check_color_movement(): detected_color = color_sensor.color() if detected_color == Color.GREEN: return "1" elif detected_color == Color.BLUE: return "11" else: return "0" while True: output = "" output1 = "" if force_sensor.pressed(): output1 += "111" movement = check_color_movement() if movement != "0": output += movement if output == '1': print("left") pg.press('a') # keyboard.press('a') # keyboard.release('a') elif output == '11': print("right") # pg.press('d') # keyboard.press('d') # keyboard.release('d') if output1: print("shoot") # pg.press('space') # keyboard.press('space') # keyboard.release('space') wait(100)
launch.json配置
{ "version": "0.2.0", "configurations": [ { "name": "Python Debugger: Module", "type": "debugpy", "request": "launch", "module": "pybricksdev", "args": ["run", "ble", "${file}"], } ] }
原因及解决办法
核心问题
你的代码是通过pybricksdev上传到乐高Hub运行的,而pyautogui是仅能在电脑端Python环境运行的库,无法在乐高Hub的固件系统中执行,这是导致错误的根本原因。
正确实现方案:拆分代码为两端
将逻辑拆分为「Hub端(读取传感器)」和「电脑端(执行按键)」,通过蓝牙传输数据:
1. Hub端代码(上传到乐高设备)
移除pyautogui依赖,添加蓝牙通信逻辑,发送传感器状态:
from pybricks.hubs import PrimeHub from pybricks.pupdevices import ForceSensor, ColorSensor from pybricks.parameters import Port, Color from pybricks.tools import wait from pybricks.messaging import BluetoothMailboxServer, TextMailbox hub = PrimeHub() force_sensor = ForceSensor(Port.A) color_sensor = ColorSensor(Port.B) # 初始化蓝牙服务器,等待电脑连接 server = BluetoothMailboxServer() mailbox = TextMailbox("sensor_data", server) server.wait_for_connection() def get_sensor_state(): state = [] # 识别颜色传感器状态 color = color_sensor.color() if color == Color.GREEN: state.append("LEFT") elif color == Color.BLUE: state.append("RIGHT") # 识别压力传感器状态 if force_sensor.pressed(): state.append("SHOOT") return ",".join(state) if state else "IDLE" while True: data = get_sensor_state() mailbox.send(data) wait(100)
2. 电脑端代码(本地运行)
接收Hub传来的传感器数据,调用pyautogui执行按键:
from pybricksdev.connections import BLEConnection from pybricksdev.ble import find_device import pyautogui as pg import asyncio async def main(): # 自动搜索并连接乐高Hub device = await find_device() async with BLEConnection(device) as conn: # 持续接收Hub发送的数据 async for msg in conn.messages(): if "LEFT" in msg: pg.press('a') print("left") if "RIGHT" in msg: pg.press('d') print("right") if "SHOOT" in msg: pg.press('space') print("shoot") asyncio.run(main())
3. 环境配置与运行步骤
- 在虚拟环境安装依赖:
pip install pybricksdev pyautogui - 运行流程:
- 用
pybricksdev将Hub端代码上传到乐高设备; - 运行电脑端代码,建立蓝牙连接后即可通过传感器控制电脑按键。
- 用
内容的提问来源于stack exchange,提问作者Alanwar Limdiwala
相关产品推荐
相关产品推荐

