射频通信模块/RfCommunication

射频通信模块是具有通信功能的模块,可以进行一对多的传输,也可以接受其他射频模块发送的数据。
一般射频通信模块与射频遥控器一起使用。
射频通信模块拥有一个可编程按键,可以获取按键状态,做按键事件。
射频类型的模块要实现互相通讯需要通过编程设置为相同的通讯名称,才可互相通信。
但是由于某些特殊情况无法通过编程来统一通信名称,所以提供了一种射频通信模块和射频遥控器手动配对的方法。
射频通信模块和射频遥控器有配对功能操作方法如下:
1. 长按射频通信模块上的按键指指示灯变为紫色(一般需要5秒钟)
2. 同时长按射频遥控器的按键1和按键9至蓝色指示灯闪烁(一般需要5秒钟)
3. 在射频遥控器蓝灯闪烁结束前,射频通信模块指示灯恢复蓝色则表示配对成功
注意:
1. 射频通信模块指示灯变为紫色后可维持15秒配对状态,15秒后指示灯将恢复颜色
2. 若是射频遥控器蓝灯闪烁结束后,射频通信模块指示灯仍为紫色,则配对失败

初始化

RfCommunication.init(name='public')
初始化模块通信名字,只有通信名字相同的模块之间才可以互相通信,不想互相通信的模块需要设置不同的通信名字
参数:name (str) – 通信名字

Examples

# 射频通信和射频遥控器通讯例程
from wonderbits import RfCommunication,RfTelecontroller,Display
import time

display1 = Display()
rfCommunication1 = RfCommunication()
rfTelecontroller1 = RfTelecontroller()

# 先将射频通信与射频遥控器配置成相同的名字
rfCommunication1.init('public')
rfTelecontroller1.init('public')

# 射频遥控器发送和12.3
rfTelecontroller1.send(12.3)
time.sleep(1)

# 显示射频通信收到的新数据
display1.print(1, 1, rfCommunication1.get_msg())

发送数据

RfCommunication.send(number)
调用此函数后,与本模块通信名字相同的模块将会受到发送的内容
参数:number (float) – 发送的数值

Examples

未提供。可参考 init 的使用案例

读取最新数据

RfCommunication.get_msg()
使用该函数可得到最近一次通信收到的内容,如果在程序开始后或使用clear_msg函数后没有发生过通信将返回None
返回:最新的通信内容,如果没有内容返回None
返回类型:float

Examples

未提供。可参考 init 的使用案例

清除最新数据

RfCommunication.clear_msg()
清除最新的通信内容,在再次接收到新的通信内容之前调用get_msg只会返回None
调用此函数并不会影响get_unread_msg_count和read的使用

Examples

# 射频通信和射频遥控器通讯例程
from wonderbits import RfCommunication,RfTelecontroller,Display
import time

display1 = Display()
rfCommunication1 = RfCommunication()
rfTelecontroller1 = RfTelecontroller()

# 先将射频通信与射频遥控器配置成相同的名字
rfCommunication1.init('public')
rfTelecontroller1.init('public')

# 射频遥控器发送和12.3
rfTelecontroller1.send(12.3)
time.sleep(1)

# 显示射频通信收到的消息
display1.print(1, 1, rfCommunication1.get_msg())
time.sleep(5)

 # 射频通信清除最新数据
rfCommunication1.clear_msg()

# 显示射频通信收到的新数据
display1.print(1, 1, rfCommunication1.get_msg())

获取未读数据个数

RfCommunication.get_unread_msg_count()
该函数用于获取通信存储队列中未读内容的个数,最多存储32个未读内容
返回:通信存储队列中未读内容的个数,范围0~32
返回类型:int

Examples

# 射频通信和射频遥控器通讯例程
from wonderbits import RfCommunication,RfTelecontroller,Display
import time

display1 = Display()
rfCommunication1 = RfCommunication()
rfTelecontroller1 = RfTelecontroller()

# 先将射频通信与射频遥控器配置成相同的名字
rfCommunication1.init('public')
rfTelecontroller1.init('public')

# 射频遥控器发送和12.3
rfTelecontroller1.send(1)
rfTelecontroller1.send(2)
rfTelecontroller1.send(3)
rfTelecontroller1.send(4)
rfTelecontroller1.send(5)
time.sleep(1)

#  一次显示射频通信收到的内容
while rfCommunication1.get_unread_msg_count() > 0:
    display1.print(1, 1, rfCommunication1.read())
    time.sleep(2)

从收件箱取一个数据

RfCommunication.read()
该函数用于获取通信存储队列中未读内容,读取后会删除这个数据
返回:通信存储队列中最早的未读内容,如果没有未读的数据返回None
返回类型:float

Examples

未提供。可参考 get_unread_msg_count 的使用案例

按键是否按下

RfCommunication.is_button_pressed()
该函数用于获取按键是否被按下
返回:按键的状态(按下返回True,否则返回False)
返回类型:bool

Examples

# 射频通信和射频遥控器通讯例程
from wonderbits import RfCommunication,Display
import time

display1 = Display()
rfCommunication1 = RfCommunication()

# 当按下按键时,则会在display1的第1行第1列显示True
while True:
    display1.print(1, 1, rfCommunication1.is_button_pressed())

当收到新数据

RfCommunication.when_received()
当收到新消息时,执行被修饰的函数

Examples

# 当rfCommunication1收到新消息会在display1模块中显示收到的信息内容

from wonderbits import RfCommunication,Display

display1 = Display()
rfCommunication1 = RfCommunication()

@rfCommunication1.when_received()
def run1(val):
    display1.print(1, 1, val)

while True:
    pass

事件源

RfCommunication.RfCommunication.source_button

button事件源

RfCommunication.RfCommunication.source_msg

msg事件源