wiota自动发送和接收数据
概述
这里描述的是AP端和终端(IoTE)自动发送和接收数据的简单demo,且AP支持多终端连接和数据收发。首先确保AP和终端的静态数据表同步以及设置的频点相同。终端向AP发送随机长度的随机字符数据,AP将收到的数据发回给终端。终端每隔5000ms向AP发送一次数据,每当终端数据发送成功或者数据发送失败或者接收到数据都有LED提示,且分别对应LED15、LED14、LED11(GPIO引脚定义,开发板对应LED位置下方说明)。AP将收到的数据(user_id、data)存放到队列,每隔100ms检测一次队列并向对应终端(对应user_id)发送数据,若检测到队列为空,则不发送。
DEMO源码放在文章末尾。
下面分别对AP端和终端的程序流程进行说明。
一、AP端
DEMO所在工程目录路径:PS\app\test\test_wiota_send_data.c
默认该DEMO为关闭状态,打开需要添加宏定义如下:
#define WIOTA_AP_SEND_DATA_DEMO
在main.c文件中加入声明:
void wiota_ap_data_recv_and_send_demo(void);
同时在main()函数中调用下列函数:
wiota_ap_data_recv_and_send_demo();
1.主流程
如图所示,DEMO主要包括三部分,wiota初始化、数据接收回调、数据发送线程。通过接收回调函数将接收到的数据信息(user_id和data)存放到队列,在发送线程内获取队列信息后发送到对应的user_id,若队列为空,则不发送。
2.使用的API接口列表
序号 | 函数名 | 功能 |
---|---|---|
1 | uc_wiota_init() | WIoTa协议栈的初始化 |
2 | uc_wiota_set_freq_info(freq) | 设置固定频点 |
3 | uc_wiota_register_recv_data_callback() | 注册接收回调 |
4 | test_show_recv_data() | 接收回调函数 |
5 | uc_wiota_run() | 启动WIoTa协议栈 |
6 | wiota_ap_send_data_task() | 发送数据任务 |
7 | uc_wiota_send_data() | 指定终端发送数据 |
8 | uc_wiota_exit() | 关闭WIoTa协议栈 |
二、终端(IOTE)
DEMO所在工程目录路径:PS\app\test\test_wiota_send_data.c
默认该DEMO为关闭状态,打开需要添加宏定义如下:
#define WIOTA_IOTE_SEND_DATA_DEMO
在main.c文件中加入声明:
void wiota_iote_data_recv_and_send_demo(void);
同时在main()函数中调用下列函数:
wiota_iote_data_recv_and_send_demo();
1.主流程
由上图所示,终端主要包含两部分:数据发送线程和LED控制线程。如果线程创建失败,则退出wiota协议栈。控制LED线程主要是为了更好更直观的观察终端收发信息的状态,当接收到AP的消息时,闪烁LED11,发送信息时,发送成功则闪烁LED15,否则闪烁LED14,其余状态则均处于暗状态。因为控制LED线程流程较简单,故此处就不做流程图分析。
下图为终端开发板LED对应位置。
2.数据发送线程流程
如图所示,数据发送线程分为外循环和内循环。外循环主要对终端进行初始化(包括设置频点、接收回调注册、设置user_id等)和连接AP,当连接失败次数大于等于4次时,就重新对终端进行初始化,直到连接成功后走到内循环。
内循环主要任务当成功连接AP后循环向AP发送随机信息,每发一条信息前先进行状态检测,若检测到错误则返回到外循环重新对终端初始化。每条信息最多发送4次,发送成功则闪烁LED15,然后继续发送下一个随机信息,若发送失败则重新发送,重发4次依然失败则闪烁LED14并退出wiota协议栈,然后返回外循环重新对终端进行初始化。
3.使用的API接口列表
序号 | 函数名 | 功能 |
---|---|---|
1 | uc_wiota_init() | WIoTa协议栈的初始化 |
2 | uc_wiota_set_freq_info(freq) | 设置固定频点 |
3 | uc_wiota_run() | 启动WIoTa协议栈 |
4 | pin_app_init() | 初始化GPIO PIN |
5 | uc_wiota_register_recv_data_callback() | 注册接收回调 |
6 | wiota_recv_cb() | 接收回调函数 |
7 | uc_wiota_set_userid() | 设置用户ID |
8 | uc_wiota_connect() | 连接同步AP |
9 | uc_wiota_wait_sync() | 等待同步连接 |
10 | rt_pin_mode() | 设置GPIO工作模式 |
11 | rt_pin_write() | 设置GPIO输出高低电平 |
12 | uc_wiota_reset_stats() | 清空wiota状态 |
13 | uc_wiota_get_state() | 查询wiota当前状态 |
14 | uc_wiota_get_all_stats() | 获取wiota当前所有状态 |
15 | rt_thread_create() | 创建线程 |
16 | wiota_test_recv_data_task() | 控制接收LED线程 |
17 | wiota_ap_send_data_task() | 发送数据线程 |
18 | uc_wiota_send_data() | 发送数据给AP |
19 | uc_wiota_exit() | 关闭WIoTa协议栈 |
三、运行结果
下图是终端给AP发送随机长度的随机信息。AP收到什么信息就相应的回什么信息。
user_id为0xabe44fca给AP发送信息:
AP收到0xabe44fca发送的信息且回复相同信息: