wiota异步发送和接收数据
概述
这里是一个wiota异步发送和接收数据的简单demo,异步通信需要两个终端(IOTE),每个终端每隔5000ms发送一个随机长度的随机字符串。首先确保两个终端的静态数据表等配置统一和数据发送API参数中的目标user_id正确,否则会连接不上或收发数据失败。当终端数据发送成功或者数据发送失败或者接收到数据时都有相应的LED提示,且分别对应LED15、LED14、LED11(GPIO引脚定义,LED对应位置下面有说明)。
DEMO所在工程目录路径:PS\app\test\test_wiota_send_data.c
默认该DEMO为关闭状态,打开需要添加宏定义如下:
#define WIOTA_ASYNC_SEND_TEST
在main.c文件中加入声明:
void wiota_async_data_recv_and_send_demo(void);
同时在main()函数中调用下列函数:
wiota_async_data_recv_and_send_demo();
DEMO流程
主流程
如图所示,DEMO主要包括两部分,LED控制线程和数据发送线程。LED控制线程主要任务是当发送数据成功或失败和接收到数据时控制相应的LED闪烁500ms,此流程较为简单,故不作详细分析。数据发送线程主要有两个任务,一是每隔固定时间向对应user_id发送随机信息,二是控制三个计数器从而控制对应LED。
下图为LED的分布位置。
下面对数据发送线程进行详细分析。
发送数据流程
如图所示,数据发送路程分为外循环和内循环。外循环主要对终端进行初始化,初始化的详细信息在图中虚线框内,注册接收回调函数内,当收到信息时,接收计数器加1以控制接收LED11的闪烁。初始化完成后进入内循环。内循环主要动作是发送数据到另一终端和控制发送计数器,如果发送失败,闪烁LED14且退出wiota协议栈后进入外循环重新对wiota进行初始化。
使用的API接口列表
序号 | 函数名 | 功能 |
---|---|---|
1 | uc_wiota_init() | wiota协议栈的初始化 |
2 | uc_wiota_get_system_config() | 获取系统配置 |
3 | uc_wiota_set_userid() | 设置用户ID |
4 | uc_wiota_set_freq_info() | 设置频点 |
5 | uc_wiota_set_system_config() | 设置系统配置 |
6 | uc_wiota_set_crc() | 设置CRC校验 |
7 | uc_wiota_set_data_rate() | 设置数据传输速率 |
8 | uc_wiota_set_detect_time() | 设置发送前检测等待时间 |
9 | uc_wiota_set_unisend_fail_cnt() | 设置单播重传次数 |
10 | uc_wiota_set_subframe_num() | 设置发送时的子帧数 |
11 | uc_wiota_set_cur_power() | 设置当前的功率 |
12 | uc_wiota_register_recv_data_callback() | 注册被动接收数据回调 |
13 | uc_wiota_run() | 启动wiota协议栈 |
14 | uc_wiota_get_userid() | 获取用户ID |
15 | uc_wiota_send_data() | 发送数据 |
16 | wiota_async_send_task() | 数据发送线程 |
17 | pin_app_init() | 初始化GPIO PIN |
18 | wiota_async_led_strl_task() | LED控制线程 |
19 | rt_thread_create() | 创建线程 |
20 | uc_wiota_exit() | 关闭WIoTa协议栈 |
运行结果
下图是两个终端互相发送随机长度的随机信息。
下图user_id为0xabe44fca:
下图user_id为0xabe44fcb