LV01-01-AliOSThings-16-事件驱动-02-事件驱动的使用方法
本文主要是事件驱动——事件驱动的使用方法的相关笔记,若笔记中有错误或者不合适的地方,欢迎批评指正😃。
点击查看使用工具及版本
Windows版本 | windows11 |
Ubuntu版本 | Ubuntu22.04的64位版本 |
VMware® Workstation 16 Pro | 16.2.3 build-19376536 |
终端软件 | MobaXterm(Professional Edition v23.0 Build 5042 (license)) |
点击查看本文参考资料
分类 | 网址 | 说明 |
官方网站 | 阿里云 | 阿里云官网主页 |
阿里生活物联平台 | 生活物联网平台(飞燕平台)主页 | |
AliGenie | 天猫精灵开放平台AliGenie主页 | |
阿里物联网平台 | 阿里物联网平台主页 | |
Bluetooth 技术网站 | 蓝牙协议规范什么的可以来这里找 | |
Telink | Telink | Chips for a Smarter IoT (telink-semi.com) Telink中文官网 | |
开发手册 | AliOS Things开发指南 | AliOS Things开发指南,这里是最新版本,可以直接从官网找到 |
AliOS Things开发指南 | AliOS Things应用开发指南,这里应该是3.3版本的完整开发文档 | |
AliOS Things开发指南(3.0) | AliOS Things应用开发指南,这里应该是3.0版本的完整开发文档 | |
生活物联网平台开发文档 | 生活物联网平台(飞燕平台)开发文档 《设备端开发指南》 | |
Wi-Fi IoT品类定义与功能开发 | 天猫精灵IoT开放平台——Wi-Fi IoT品类定义与功能开发 | |
硬件平台 | mk3080 WiFi开发板 | WiFi开发板使用指南-阿里云开发者社区 |
esp8266开发板 | 一个教程:ESP8266-NodeMCU开发板详解-太极创客 (taichi-maker.com) | |
TLSR8258 Datasheet | Datasheet for Telink BLE + IEEE802.15.4 MultiStandard Wireless SoC TLSR8258 | |
参考资料 | AliOS Things 3.0 应用开发指南 | 这个只是一篇参考文章,里面是一些环境搭建相关的,可以参考 |
IP知识百科 - 华为 (huawei.com) | IP的一些相关知识点 |
点击查看相关文件下载
分类 | 网址 | 说明 |
蓝牙规范相关文档 | Core Specification 5.2 | 核心规格 5.2,该规范定义了创建可互操作的Bluetooth 设备所需的技术。 《Core_v5.2.pdf》 |
Mesh Model(v1.1) | 本Bluetooth 规范定义了模型(以及它们所需的状态和消息),这些模型用于在mesh 网络中的节点上执行基本功能,超出了Bluetooth Mesh 配置文件 规范中定义的基础模型。 本规范包括定义跨设备类型标准功能的通用模型,以及支持关键mesh 场景的模型,如照明控制、传感器、时间和场景。 《MshMDL_v1.1.pdf》 | |
Mesh Profile(v1.0.1) | 该Bluetooth 规范定义了基本要求,以实现可互操作的mesh 网络解决方案,用于Bluetooth 低能量无线技术。 《MshPRFv1.0.1.pdf》 | |
Mesh Device Properties | 本规范包含Bluetooth Mesh 配置文件 和Bluetooth Mesh 模型规范所要求的设备属性的定义。 但是跟之前的有些区别,我主要看的之前的版本:《MMeshDeviceProperties_v1.2.pdf》 | |
GATT Specification Supplement | GATT Specification Supplement | Bluetooth® Technology Website。 好像可以在线看:《GATT Specification Supplement》 | |
Assigned Numbers | GATT的一些类型定义可以在这里找。 | |
AliOS Things | alios-things/AliOS-Things | Gitee上的AliOSThings SDK源码仓库 |
alibaba/AliOS-Things | GitHub上的AliOSThings SDK源码仓库 | |
天猫精灵蓝牙Mesh协议栈 | alibaba-archive/genie-bt-mesh-stack | GitHub上的天猫精灵蓝牙Mesh协议栈源码仓库。 之前是在alibaba/genie-bt-mesh-stack这个仓库。 写笔记的时候最新提交为faf523618a6a2560090fc423222b9db80984bb7a |
蓝牙Mesh设备开发指南 | 阿里云生活服务平台开发手册——蓝牙设备开发一节中的内容 |
一、有哪些API?
1. yloop组件在哪?
yloop相关目录为 AOS_SDK_PATH/components/utility/yloop,这里主要是yloop实现的一些源文件:
还有一个头文件,里面包含了yloop相关的接口声明: AOS_SDK_PATH/include/utility/yloop:
2. 相关API函数
2.1 aos_loop_run()
我们只要使用yloop组件,最后一定要调用这个函数启动事件驱动循环。
2.2 aos_loop_schedule_call()
这个函数是用于注册回调函数的,就是事件发生的时候我们的处理函数。回调函数的函数指针类型如下:
函数指针只有一个void *类型参数,没有返回值。
2.3 aos_post_delayed_action()
这个函数也是注册回调函数的,只是它可以设置延时时间,也就是说事件发生后,延时一段时间再去执行回调函数。另外两个参数与aos_loop_schedule_call()一样。
2.4 aos_register_event_filter()
该函数是事件注册函数,用于向系统注册一个事件。
- type 参数就是事件的类型,前面我们知道事件分为系统事件和用户自定义函数,这个类型是一个无符号16位整型变量,最多有65535个事件种类。
- cb:系统事件回调,是一个函数指针,在事件产生后,会执行此回调函数。
这个函数指针的定义如下:
1 | /** |
这个函数指针有两个参数,有一个参数是 event ,它是 input_event_t 类型指针,定义如下:
2.5 aos_post_event()
系统怎么知道这个事件发生了?需要用到aos_post_event()函数:
2.6 aos_poll_read_fd()
3. 有哪些事件?
AOS_SDK_PATH/include/utility/yloop/aos/yloop.h文件中定义了事件的类型:
- system event
- WiFi event
二、典型应用
1. hello world
源代码如下,也可以看这里:helloworld_mk3080/example/08_event_hello_world.c · sumumm/AliOS-Things-Prj - 码云 - 开源中国 (gitee.com)
1 | /** ===================================================== |
分析可知,1000ms之后,会打印这个log日志,然后会在5000ms之后再去回调这个函数。这个里面不需要死循环,它其实会自己创建对应的任务,在aos_loop_run();之后的代码也不会执行。这里运行在mk3080开发板,效果如下:
2. 和Socket的结合
这只是一个框架:
1 | static int iotx_mc_connect(iotx_mc_client_t *pClient) |
3. 系统事件的处理
这只是一个框架:
1 | static void netmgr_events_executor(input_event_t *eventinfo, void *priv_data) |
三、官方demo
官方也为我们提供了相关的demo,在下面的两个目录有两个demo:
1 | AOS_SDK_PATH/application/example/example_legacy/yloop_app/yloop_app.c |
我们来看一下这个demo:AOS_SDK_PATH/application/example/example_legacy/yloop_app/yloop_app.c,它是一个关于WiFi的事件驱动例程。
1. application_start()
我们先看一下application_start()函数:
2. wifi_event_handler()
我们再来看一下回调函数wifi_event_handler():
3. udp_loopback_run()
我们再看一下UDP的循环传输函数:
4. yloop_proc()
这个函数是UDP相关的,它是实现UDP的发送和接收数据,里面会注册两个事件,定时事件和IO事件:
- 定时事件的回调函数
- IO事件的回调函数