MicroBlocks 高级程序调用:用广播消息控制 CoCube
在 MicroBlocks 里,广播不只是“发一条消息”。它可以唤醒脚本、传递命令、调用自定义积木,甚至可以像“远程函数调用”一样,从网页或 Python 上位机控制 CoCube 执行任务。
本教程会从最基础的广播开始,一步步过渡到:
- 用网页通过 BLE 给 CoCube 发送广播消息。
- 用“最后消息”读取广播内容。
- 用广播调用无参数的自定义积木。
- 用
call,函数名,参数列表的格式调用带参数的自定义积木。 - 查看已有积木的函数名和参数列表,并通过广播调用它们。
- 把同样的消息机制扩展到 Python 上位机,以及之后的 MQTT、UDP 等通信方式。
1. 广播机制:从网页遥控 CoCube
先打开网页遥控器:
https://microblocks.fun/rfp/remote.html
这个网页可以通过 BLE 连接运行 MicroBlocks 的 CoCube,然后发送广播消息。连接成功后,在网页输入框中输入消息,再点击 Send,CoCube 端对应的“当收到”脚本就会被唤醒。

最简单的写法是:不同的广播消息对应不同的任务。

例如:
收到 forward -> 向前移动
收到 backward -> 向后移动
收到 left -> 向左旋转
收到 right -> 向右旋转
收到 smile -> 显示笑脸并播放提示音
这种写法很适合刚开始理解广播机制。网页发送的不是复杂数据,而是一个个“任务名字”。CoCube 端提前写好对应的任务脚本,收到哪个广播,就执行哪个任务。
可以在网页中依次发送:
forward
backward
left
right
smile
观察 CoCube 是否完成对应动作。
这里要注意:广播消息的文字必须和“当收到”积木里的文字一致。比如网页发送的是 forward,程序里就要有“当收到 forward”。
2. 最后消息:读取广播内容
上一节中,每一种消息都写一个“当收到”脚本。如果消息很多,程序会变得很散。
MicroBlocks 里有一个很重要的积木:最后消息。它可以读取刚刚收到的广播内容。
我们可以写一个统一的接收脚本:先读取 最后消息,再把消息放进 if / 否则如果 判断中,决定机器人要执行哪个任务。

这个程序的意思是:
当收到任意广播时
把“最后消息”保存到变量 msg
清空 TFT 屏幕
在 TFT 屏幕上显示 msg
如果 msg = forward,向前移动
否则如果 msg = backward,向后移动
否则如果 msg = left,向左旋转
否则如果 msg = right,向右旋转
否则如果 msg = smile,显示笑脸并播放提示音
现在通过网页发送:
forward
backward
left
right
smile
CoCube 会先把收到的消息显示到屏幕上,再根据 msg 的内容执行对应动作。
这一节的重点是理解一件事:
广播消息本身可以被程序读取和使用。
有了 最后消息,程序就不需要为每条消息都写一个单独的“当收到 xxx”脚本。所有消息可以先进入同一个入口,再由 if 判断分发到不同任务:
如果 msg = forward,向前移动
如果 msg = backward,向后移动
如果 msg = left,向左旋转
如果 msg = right,向右旋转
这样,所有消息都可以进入同一个“消息处理脚本”,程序结构会更清楚。
3. 广播调用自定义、无参数的函数
在 MicroBlocks 里,我们可以定义自己的积木。比如定义一个 myBlock:
myBlock:
显示“心”
等待 500 毫秒
显示“小心脏”

平时调用这个自定义积木,可以直接把 myBlock 积木拖出来执行。
或者添加积木库调用方法(添加积木库-其他-调用方法),通过调用函数名的方式来调用函数。
你可能不知道的是,直接广播消息也能起到类似“调用同名函数”的效果。

这时候可以把网页遥控器里的 myBlock 按钮看成一个远程按钮。网页发送 myBlock,CoCube 收到后执行同名任务。
这种方式适合没有参数的任务,例如:
smile
blink
beep
dance
reset
通过广播消息实现“调用函数”的优点是非常直观、轻量。
4. 广播调用自定义、有参数的函数
如果函数需要参数,单纯广播 myBlock 就不够了。
例如我们定义了一个带参数的自定义积木:
myBlock2 time
它可以根据参数 time 决定等待时间。
如果想通过广播调用它,可以约定一种消息格式:
call,函数名,参数
例如:
call,myBlock2,100
这条消息可以理解为:
调用 myBlock2,参数是 100
程序接收到广播后,需要先解析 最后消息:

解析思路如下:
收到任意广播
msg = 最后消息
如果 msg 的前 4 个字符是 call
用逗号分割 msg
第 2 项是函数名
第 3 项开始是参数列表
调用 函数名 参数 参数列表
以 call,myBlock2,100 为例:
分割后得到:
第 1 项:call
第 2 项:myBlock2
第 3 项:100
所以程序会执行:
调用 myBlock2 参数 100
这种格式的好处是:网页只需要发送不同的字符串,就可以调用不同函数,并且传入不同参数。
可以尝试:
call,myBlock2,100
call,myBlock2,500
call,myBlock2,1000
观察等待时间是否发生变化。
如果以后有多个参数,也可以继续放在后面:
call,函数名,参数1,参数2,参数3
例如:
call,setColor,255,0,0
call,moveTo,100,80,40
call,playTone,c,1,200
这已经很接近一个“小型命令系统”了。
5. 调用已有任意函数
不仅自定义积木可以这样调用,MicroBlocks 里很多已有积木也可以通过函数名调用。
关键问题是:怎样知道一个积木真正的函数名和参数列表?
可以在 MicroBlocks 中右键点击一个积木,然后选择“复制至剪贴板”。
然后再注释积木或者别的地方粘贴,就可以查看积木对应的 GP Script。

例如,CoCube 的“向前移动 1000 毫秒”积木,复制出来的脚本里可以看到类似内容:
'CoCube move for msecs' 'cocube;forward' 40 1000
这说明它真正调用的函数名是:
CoCube move for msecs
参数是:
cocube;forward
40
1000
所以就可以通过广播发送:
call,CoCube move for msecs,cocube;forward,40,1000
再比如,显示笑脸图像的积木可以看到类似函数名:
led_displayImage
如果参数是 happy,就可以发送:
call,led_displayImage,happy
网页遥控器里也可以提前写好这些命令,发送一下试试吧:
call,myBlock2,100
call,led_displayImage,happy
查看函数名时的建议
- 先用普通积木搭出你想要的动作。
- 右键这个积木,选择复制或查看脚本。
- 找到真正的函数名。
- 记录参数的顺序。
- 用
call,函数名,参数列表的格式测试广播调用。
对于 CoCube 机器人,这种方式特别适合做远程控制,例如:
call,CoCube move for msecs,cocube;forward,40,1000
call,CoCube move for msecs,cocube;backward,40,1000
call,CoCube rotate for msecs,cocube;left,30,1000
call,CoCube rotate for msecs,cocube;right,30,1000
call,CoCube wheels stop
如果某个函数调用失败,优先检查三件事:
函数名是否完全一致
参数数量是否正确
参数顺序是否正确
6. 不止网页:也可以用 Python 上位机发送消息
前面的例子使用网页发送广播消息,是因为它直观、方便演示。
但这套机制并不限制消息来源。只要能向 MicroBlocks 发送同样的广播字符串,就可以控制 CoCube。
例如,可以使用 Python 上位机:
https://github.com/wwj718/microblocksmessaginglibrary
这个库可以让 Python 程序和运行 MicroBlocks 的设备通过消息通信。也就是说,网页里点击 Send 发送的内容,Python 程序也可以发送。
可以把网页中的命令迁移到 Python:
forward
backward
left
right
smile
myBlock
call,myBlock2,100
call,CoCube move for msecs,cocube;forward,40,1000
call,CoCube wheels stop
这样就可以做出更复杂的上位机控制系统,例如:
- 用键盘方向键控制 CoCube。
- 用 Python 自动发送一串动作指令。
- 用摄像头识别结果,再发送控制命令。
- 用多个 CoCube 机器人组成队形。
- 用电脑界面发送
call,函数名,参数列表命令。
网页适合课堂演示,Python 适合做更完整的项目。两者背后的核心都是同一件事:
把任务写成广播消息;
让 MicroBlocks 程序解析消息;
再调用对应的函数。
7. 不只 BLE:同样的思路也适合其他消息系统
这一篇教程里,我们主要通过 BLE 广播消息实现任务调用。网页遥控器和 Python 上位机发送的都是类似这样的字符串:
forward
smile
call,myBlock2,100
call,CoCube move for msecs,cocube;forward,40,1000
但更重要的不是 BLE 本身,而是这套“消息驱动任务”的设计思路:
外部系统发送一条消息
MicroBlocks 程序接收消息
读取消息内容
解析命令和参数
调用对应任务或函数
因此,将来即使消息不是从 BLE 来的,也可以使用类似结构。例如:
- MQTT 消息:电脑、网页或服务器发布一条控制消息,CoCube 接收后执行任务。
- UDP 消息:局域网中的设备直接发送短消息,机器人收到后解析执行。
- WiFi 网页控制:网页按钮发送命令,MicroBlocks 程序根据命令调用函数。
- ESP-NOW 消息:多个机器人之间发送命令,实现协作控制。
也就是说,BLE 只是这节课使用的通信入口。真正可以复用的是:
用字符串描述任务;
用最后消息读取任务;
用 call 机制分发任务;
用函数名和参数列表扩展任务。
MQTT、UDP 等具体实现方式,会在之后的教程中继续介绍。