wiota按键发送和接收数据
概述
这里描述的是终端(IoTE)每按键一次就向AP端发送一次数据的简单demo。
DEMO所在工程目录路径:PS/app/test/test_wiota_key_send_data.c
默认该DEMO为关闭状态,可通过menuconfig命令打开,具体过程为:
1. 在wiota_dev_customer工程根目录下,点击鼠标右键,执行ConEmu Here打开命令窗口。
2. 执行menuconfig命令,进到编译配置界面。
3. 依次选择 wiota PS→enable wiota test func→wiota send and recv test by key
4. 退出并保存。
成功打开后,在rtconfig.h里有如下宏定义:
#define WIOTA_TEST_DEMO
#define WIOTA_IOTE_KEY_SEND_DATA_DEMO
同时,AP侧也需要开启对应的模式,以配合测试,具体过程为:
1. 在wiota_ap_customer工程根目录下,点击鼠标右键,执行ConEmu Here打开命令窗口。
2. 执行menuconfig命令,进到编译配置界面。
3. 依次选择 wiota PS→enable wiota test func
4. 退出并保存。
成功打开后,在rtconfig.h里有如下宏定义:
#define WIOTA_TEST_DEMO
首先确保AP和终端的静态数据表同步以及设置的频点相同(默认都使用的100频点)。终端向AP发送数据,AP将收到的数据发回给对应终端。终端每按下KEY16一次就向AP发送一次数据,每当终端数据发送成功或者数据发送失败或者接收到数据都有LED提示,且引脚名称分别对应LED15、LED14、LED11(GPIO引脚定义,开发板对应LED引脚位置下方有说明)。下面分别对AP端和终端的程序流程进行说明。
一、AP端
DEMO所在工程目录路径:PS\app\test\wiota_test_demo.c
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 | uc_wiota_recv_callback() | 接收回调函数 |
| 5 | uc_wiota_run() | 启动WIoTa协议栈 |
| 6 | wiota_test_general_task() | 发送数据任务 |
| 7 | uc_wiota_send_data() | 指定终端发送数据 |
| 8 | uc_wiota_exit() | 关闭WIoTa协议栈 |
二、终端(IOTE)
1.主流程
终端主要包含两部分:数据发送线程和LED控制线程。如果线程创建失败,则退出wiota协议栈。数据发送线程下方有详细流程说明。
数据发送线程的作用是检测按键并做对应的数据发送操作,按键按下后马上触发,每按一次都有LED2提示。
控制LED线程主要是为了更好更直观的观察终端收发信息的状态,当接收到AP的消息时,LED11闪烁,发送信息时,发送成功则LED15闪烁,否则LED14闪烁。其余状态则均处于暗状态。因为控制LED线程流程较简单,故此处就不做流程图分析。
下图为终端开发板LED对应位置。

2.数据发送线程流程

如图所示,数据发送线程分为外循环和内循环。外循环主要对终端进行初始化(包括设置频点、接收回调注册、设置user_id等)和连接AP。
内循环主要任务是当成功连接AP后,检测按键并做对应的数据发送操作。
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 | rt_pin_read() | 读取GPIO电平 |
| 13 | rt_pin_attach_irq() | 绑定GPIO中断回调函数 |
| 14 | rt_pin_irq_enable() | 使能GPIO中断 |
| 15 | uc_wiota_reset_stats() | 清空wiota状态 |
| 16 | uc_wiota_get_state() | 查询wiota当前状态 |
| 17 | uc_wiota_get_all_stats() | 获取wiota当前所有状态 |
| 18 | rt_thread_create() | 创建线程 |
| 19 | wiota_test_led_ctrl_task() | 控制接收LED线程 |
| 20 | wiota_test_send_data_task() | 发送数据线程 |
| 21 | uc_wiota_send_data() | 发送数据给AP |
| 22 | uc_wiota_exit() | 关闭WIoTa协议栈 |
三、运行结果
下图是终端运行demo的日志信息。
