第 1 步:制作
利用无线电通信将一组micro:bit变成一群神奇的萤火虫
学习目标
- 如何在micro:bit之间使用无线电通信来触发事件
- 让micro:bit的LED显示器变亮或者变暗
- 如何使用随机数和概率来模仿真实世界的行为
它是什么?
萤火虫是用生物荧光(身体发出的光)来相互通讯的昆虫。
本项目利用micro:bit的无线电通信功能来模拟真实世界中萤火虫的行为。 Python版本由Nicholas H. Tollervey创建,MakeCode版本以其为基础创建。
将程序刷入位于同一房间的至少3个micro:bit中。 按下任一micro:bit上的按键A,应该能看到"一群"micro:bit收到无线电消息后点亮。 在黑暗的房间里使用大量micro:bit效果最佳。
一旦一个micro:bit收到无线电消息后,它就有十分之一的机会来传送自己的无线电消息,从而让另一波的micro:bit开始发光。
当灯光最终停止时,按任意micro:bit上的按键A重新启动“群”通信。
工作原理
- 当你在任一micro:bits上按下按键A时,程序使用无线电通信发出一条消息“flash” 。
- 当每个micro:bit收到消息时,它会随机等待一定的时间(50到350毫秒之间)。 然后它让LED显示屏变亮,再逐渐变暗,以此来模拟萤火虫的莹莹亮光。
- 随后它生成一个0到9之间的随机数。 如果数字是0,它会发送自己的“flash”无线电消息,触发更多的micro:bit萤火虫发光。 所以它有十分之一的机会来触发其他的micro:bit发光。
- 你可以混合使用旧版和新版的micro:bit。但它们都必须刷入MakeCode或Python版本的程序。 (无线电通信在每种编程语言中的工作方式略有不同。 MakeCode程序不能通过无线电与Python程序通信,反之亦然。)
所需材料
- 至少3个micro:bit,越多越好
- micro:bit电池盒(选配)
第 2 步:编程
1# A micro:bit Firefly.
2# By Nicholas H.Tollervey. Released to the public domain.
3import radio
4import random
5from microbit import display, Image, button_a, sleep
6
7# Create the "flash" animation frames. Can you work out how it's done?
8flash = [Image().invert()*(i/9) for i in range(9, -1, -1)]
9
10# The radio won't work unless it's switched on.
11radio.on()
12
13# Event loop.
14while True:
15 # Button A sends a "flash" message.
16 if button_a.was_pressed():
17 radio.send('flash') # a-ha
18 # Read any incoming messages.
19 incoming = radio.receive()
20 if incoming == 'flash':
21 # If there's an incoming "flash" message display
22 # the firefly flash animation after a random short
23 # pause.
24 sleep(random.randint(50, 350))
25 display.show(flash, delay=100, wait=False)
26 # Randomly re-broadcast the flash message after a
27 # slight delay.
28 if random.randint(0, 9) == 0:
29 sleep(500)
30 radio.send('flash') # a-ha
31
32
第 3 步:完善
- 更改显示屏闪烁时展示的图像
- 修改代码,使其更多或更少可能地在其他micro:bit上触发另一波闪烁事件。 随机数的范围可以与你拥有的micro:bit的数量匹配:如果你拥有更少的micro:bit,要更如此。
- 使用不同的无线电组号来设定小范围的群组。 具有相同编号的micro:bit才能互相通信。
- 尝试改变无线电信号功率。
使用MakeCode中的“radio set transmit power”模块。
在Python中,使用radio.config(power=7)
选择一个介于0 (最弱无线电信号) 和7 (最强) 之间的数字。
改变无线电功率有什么效果?
This content is published under a Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) licence.