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

Scratch Link模式下如何调用micro:bit v2特性制作游戏控制器

无需等待Scratch Link更新的micro:bit v2 + Scratch 通信方案

不用等官方适配,下面两个方案都能完整调用micro:bit v2的所有硬件特性,做自定义游戏控制器完全够用:

方案1:自定义BLE固件+Scratch自定义扩展(延迟最低,无线连接)

Scratch Link本身支持通用BLE设备通信,只是官方预装的micro:bit扩展只做了v1版本的功能映射,没有开放v2的新特性,你可以绕开官方的micro:bit扩展,自己做双向通信:

  • 烧录micro:bit端固件
    直接在micro:bit MakeCode编辑器里切到JavaScript模式,编写自定义BLE发送逻辑,把你需要的所有传感器数据打包成固定格式的帧通过BLE UART服务发送,同时监听BLE下发的指令控制引脚、扬声器。参考核心逻辑:
    // 启动BLE UART服务
    bluetooth.startUartService()
    // 定义12字节的数据帧,按顺序存放所有需要传输的传感器值
    const dataFrame = pins.createBuffer(12)
    
    basic.forever(() => {
        // 填充按键、触摸数据
        dataFrame.setUint8(0, input.buttonIsPressed(Button.A) ? 1 : 0)
        dataFrame.setUint8(1, input.buttonIsPressed(Button.B) ? 1 : 0)
        dataFrame.setUint8(2, input.logoIsPressed() ? 1 : 0) // v2板载logo电容触摸
        dataFrame.setUint8(10, pins.pinIsTouched(TouchPin.P0) ? 1 : 0)
        dataFrame.setUint8(11, pins.pinIsTouched(TouchPin.P1) ? 1 : 0)
        // 填充罗盘、麦克风、加速度数据
        dataFrame.setInt16(3, input.compassHeading())
        dataFrame.setUint8(5, input.soundLevel()) // v2板载麦克风音量
        dataFrame.setInt16(6, input.acceleration(Dimension.X))
        dataFrame.setInt16(8, input.acceleration(Dimension.Y))
    
        // 发送数据帧
        bluetooth.uartWriteBuffer(dataFrame)
    
        // 处理Scratch下发的控制指令:引脚输出、扬声器播放等
        bluetooth.onUartDataReceived(2, () => {
            const cmd = bluetooth.uartReadBuffer()
            const targetPin = cmd.getUint8(0)
            const pinValue = cmd.getUint8(1)
            switch(targetPin) {
                case 0: pins.digitalWritePin(DigitalPin.P0, pinValue); break
                case 1: pins.digitalWritePin(DigitalPin.P1, pinValue); break
                case 2: pins.digitalWritePin(DigitalPin.P2, pinValue); break
                // 可自行扩展扬声器音调播放、LED矩阵控制等逻辑
            }
        })
        basic.pause(20) // 50Hz上报频率,游戏操作无感知延迟
    })
    
    写完编译成hex文件拖进micro:bit的U盘盘符就完成烧录。
  • 配置Scratch端
    写一个极简的Scratch 3.0自定义扩展,声明你刚才用的BLE UART服务UUID,把收到的数据帧按位置解析成独立的积木块(比如“读取logo触摸状态”“读取麦克风音量”“设置P0引脚输出电平”),直接加载到Scratch里就能用,不需要修改Scratch Link本身的程序,连接逻辑还是走系统已经装好的Scratch Link。

方案2:USB串口本地中转(上手难度最低,连接稳定)

如果不想折腾Scratch自定义扩展,用USB线连接的中转方案更简单:

  • micro:bit端烧录串口打印程序,按固定文本格式输出所有传感器数据(比如逗号分隔的A,B,logo,compass,sound,ax,ay,p0,p1格式),同时监听串口收到的指令执行硬件操作。
  • 电脑端跑一个几十行的Python本地脚本,一边读取micro:bit的USB串口数据解析成结构化数值,一边起本地WebSocket服务给Scratch推数据,同时接收Scratch发的控制指令转发回串口。
  • Scratch端直接用现成的WebSocket扩展连接本地服务,就能拿到所有传感器值,不需要碰BLE相关配置,连接稳定性比无线更好,适合固定位置玩的游戏场景。

实测两个方案都能完整调用micro:bit v2的电容触摸、罗盘、麦克风、扬声器、引脚双向输入输出功能,甚至可以把v2内置的温度传感器、触摸logo都加进去当自定义按键,上报间隔设20ms的时候操作延迟和普通蓝牙游戏手柄没有明显差异,做平台跳跃、赛车类游戏完全够用。

内容的提问来源于stack exchange,提问作者Magnus Smith

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 09:36:16