4. 无线广播¶
掌控板提供2.4G的无线射频通讯,共 13 Channel。可实现一定区域内的简易组网通讯。在相同通道下,成员可接收广播消息。就类似,对讲机一样。在相同频道下,实现通话。

对讲机¶
4.1. radio¶
你可以用两块掌控板上传该程序,在REPL下,发送和接收广播消息¶
1import radio
2import _thread
3
4channel=2
5
6radio.on()
7radio.config(channel=channel) # radio通道设置
8
9def rec_loop(): # radio接收循环
10 while True:
11 temp=radio.receive(True) # radio 接收数据,返回(msg,mac)
12 # temp=radio.receive() # radio 接收数据,返回msg
13 if temp: # 当接收到数据时打印
14 print(temp)
15
16_thread.start_new_thread(rec_loop, ()) # radio接收线程
17
18radio.send("hello mPython!")
首先我们需要 import radio
,导入无线模块。然后 radio.on()
,开启无线功能。配置无线通道 radio.config(channel)
,channel参数可设置1~13个通道。
使用 radio.send()
发送广播消息,消息类型为字符串。接收端,在相同channel,使用 radio.receive()
来接收广播数据。 receive(True)
返回数据类型为(msg,mac)。
mac为网络设备的MAC地址,地址均唯一。如,想做单播应用,可过滤其他MAC设备发送的消息。默认下 receive()
,返回的数据类型为msg,是不带MAC地址的。
4.2. 电报机¶
基于上面的radio学习,我们可以用掌控板制作个有趣的电报机!两个掌控板之间通过无线电和摩斯密码传播,是不是有谍战片的既视感咧!赶紧尝试下吧!

电报机¶
电报机示例¶
1import radio # 导入radio
2from mpython import * # 导入mpython
3import music # 导入music
4
5CH = 1 # channel变量
6
7radio.on()
8radio.config(channel=CH) # radio通道设置
9
10btna_stat, btnb_stat, touch_stat = [0] * 3 # 按键状态标志
11
12
13def set_channel(): # radio 通道设置函数
14
15 global CH, btna_stat, btnb_stat
16 if button_a.value() == 0 and btna_stat == 0: # a按键,减通道
17 CH -= 1
18 if CH < 1:
19 CH = 13
20 radio.config(channel=CH) # radio通道设置
21 oled.DispChar("Channel: %02d" % CH, 25, 5) # 通道显示
22 oled.show()
23 btna_stat = 1
24 elif button_a.value() == 1:
25 btna_stat = 0
26
27 if button_b.value() == 0 and btnb_stat == 0: # b按键,加通道
28 CH += 1
29 if CH > 13:
30 CH = 1
31 radio.config(channel=CH) # radio通道设置
32 oled.DispChar("Channel: %02d" % CH, 25, 5) # 通道显示
33 oled.show()
34 btnb_stat = 1
35 elif button_b.value() == 1:
36 btnb_stat = 0
37
38
39def ding(): # 叮叮响
40
41 global touch_stat
42 if touchPad_T.read() < 300 and touch_stat == 0: # 检测按键按下时,发出‘ding’响,并广播
43 music.pitch(500, 100, wait=False) # 播放"ding"
44 radio.send('ding') # radio 广播 "ding"
45 touch_stat = 1
46 elif touchPad_T.read() >= 300:
47 touch_stat = 0
48
49
50oled.DispChar("Channel: %d" % CH, 25, 5) # 开机显示
51oled.DispChar("电报机:触摸T", 25, 25)
52oled.show()
53
54while True:
55 set_channel() # 设置通道函数
56 ding() # 叮叮响函数
57 temp = radio.receive() # radio接收广播
58
59 if temp == 'ding': # 当接收到"ding"广播,发出叮响
60 rgb.fill((0, 10, 0)) # 指示灯
61 rgb.write()
62 music.pitch(500, 100, wait=False)
63 sleep_ms(50)
64 rgb.fill((0, 0, 0))
65 rgb.write()
上述电报机示例,ab按键选择无线通道,触摸T,发送电报。当接收到电报,掌控板的RGB会有指示。