ESP-NOW 萤火虫同步闪烁
夜晚的树林里,很多萤火虫一开始各闪各的。过一会儿,它们会慢慢形成节奏:先是一小群一起闪,再变成一大片几乎同时闪烁。
这个案例会用 ESP-NOW 做一个“电子萤火虫”实验。每块主板都是一只萤火虫:自己按节奏闪光,听到附近伙伴闪光时,就把自己的节奏往前推一点。运行一段时间后,几块主板会逐渐同步闪烁。
参考资料:
1. 效果演示
准备 3 块或更多支持 ESP-NOW 的 MicroBlocks 主板,并给每块主板下载同一个程序 firefly.ubp。
运行后,每块主板都会启动自己的内部时钟,定时闪光,并接收其他主板发来的闪光消息。刚开始时,它们的闪光时间可能不一样;观察一会儿后,会看到闪光逐渐靠近,最后形成越来越整齐的同步。

课堂演示可以按这个顺序进行:
- 先只打开 1 块主板,观察它按照固定节奏闪光。
- 再打开第 2、3 块主板,观察它们一开始不同步。
- 把几块主板放近一些,等待它们逐渐同步。
- 按某一块主板的 A 键,随机打乱它的内部时钟,再观察它如何重新加入集体节奏。
2. 萤火虫同步闪烁的原理
这个程序用三个变量模拟一只萤火虫的内部节奏:
tick:时钟跳动一次的时间。本程序中默认是100毫秒。clock:当前时钟数值,可以理解为“已经走到第几格”。circle:一轮完整周期。本程序中默认是12。
可以把 clock 想象成一圈小钟:
0, 1, 2, 3, ... 11, 12
当 clock 增加到 circle 时,主板闪光一次,并把 clock 重新归零。

核心逻辑可以理解成:
每过 1 个 tick:
clock 增加 1
如果 clock >= circle:
发送 ESP-NOW 消息 "light"
自己闪光
clock = 0
同步的关键在于“听到别人闪光时,轻轻推一下自己的时钟”。
如果收到 ESP-NOW 消息:
如果 clock < circle:
clock 增加 1

这个动作叫做“推进”或“轻推”。它不会让所有主板立刻同步,只是让落后的主板稍微赶上前面的伙伴。很多次小小的推进叠加在一起,就会让整个群体逐渐形成相同节奏。
3. ESP-NOW 的优势
ESP-NOW 很适合做这个案例,因为它不是“连接一个服务器再通信”的方式,而是让设备之间直接发送短消息。
在这个案例里,ESP-NOW 有几个明显优势:
不需要路由器。教室里不需要提前配置 WiFi 名称和密码。
适合一对多广播。一只“萤火虫”发出
light消息,附近设备都可以收到。延迟低,反馈直观。学生能直接看到“我闪了一下,别人被影响了”的效果。
适合做群体行为实验。2 块板子可以看到互相影响,3 块以上更容易观察到同步过程。
特别的,ESP-NOW的通信距离很长,如果有条件的话,可以在整个教室中开展萤火虫同步闪烁的实验。
4. 可以继续探索的问题
改变
tick
tick越小,闪烁节奏越快;tick越大,节奏越慢。改变
circle
circle越小,闪光越频繁;circle越大,闪光间隔越长。改变推进幅度
现在收到消息后只让clock += 1。如果改成clock += 2或clock += 3,同步会不会更快?会不会更容易乱?增加消息过滤
只响应light消息,可以让程序在多人、多设备的课堂环境中更稳定。设置不同频道
把不同小组设置到不同 ESP-NOW 频道,可以让每组萤火虫只和本组同步。