You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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
    
  • 运行流程:
    1. 用pybricksdev将Hub端代码上传到乐高设备;
    2. 运行电脑端代码,建立蓝牙连接后即可通过传感器控制电脑按键。

内容的提问来源于stack exchange,提问作者Alanwar Limdiwala

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 03:17:02