Zigbee 自定义任务处理按键和双串口数据|学习笔记

简介: 快速学习Zigbee 自定义任务处理按键和双串口数据

开发者学堂课程【嵌入式之RFID开发与应用2020版:Zigbee 自定义任务处理按键和双串口数据】学习笔记与课程紧密联系,让用户快速学习知识

课程地址:https://developer.aliyun.com/learning/course/665/detail/11139


Zigbee 自定义任务处理按键和双串口数据

 

内容介绍:

一、自定义任务处理按键

二、双串口数据

 

一、自定义任务处理按键

接下来重点学习自定义的任务初始化完成后是如何工作的,首先任务是被动执行的。

1、任务被动执行的情况:

(1)接收到消息。有可能是协议栈发的消息,因为在初始化时已经注册了一个端点,如果对方刚好给端点号发了一包数据,只要注册端点并且端点号、任务号等没有问题,该函数就会被执行,就表示收到了数据。

(2)按键,刚开始也没有提到,这是属于另一部分的代码,其在中段里,当产生按键事件时,此处该板子上有两个按键,当按下这两个按键时,它就会给任务发消息,这里的任务很显然已经明确指定成自己自定义的任务。如图,手指位置即是两个按键,图中一共三个按键,第一个按键是复位键,后面两个是刚刚提到的按键。如果点击这两个按键,就会通过事件 osal_set_enent 设置到 DEMO_KEYBOARD1 和 DEMO_KEYBOARD2。接下来在自己写的应用程序中,会检测到该事件 events,从串口打开信息知道一个键被按下了,并且给 SENSOR 和 CLUSTERID 都发送了打开 OPEN 的命令,另外一个是自己设置的关闭命令。将自己的灯全部打开或者全部关闭,这两个按键一个开,一个关,这么多信息就是为了更直观的看到每一次动作的变化,包括后面是周期性的采集温度和湿度。

//任务事件处理函数

uint16 my_ProcessEvent( uint8 task_id, uint16 events )

{

afIncomingMSGPackett *MSGpkt =NULL;

if (events & SYS_EVENT_MSG)

{

MSGpkt =(afIncomingMSGPacket_t *)osal_msg_receive( my_TaskID ); while(MSGpkt !=NULL){

switch(MSGpkt->hdr.event)

{

case ZDO_STATE_CHANGE:

identity_nwk =(devstates_t)(MSGpkt->hdr.status);

if(identity_nwk == DEV_END_DEVICE){

image.png

二、双串口数据

首先学习第一个,先打开一个串口,然后需要将程序稍进去,先稍协调器的程序,将其改成协调器 CoordinatorEB,点击编译,完成后开始稍写。若稍写的过程中发现无法稍进去,总是弹出一些错误提示,建议复位下载器上面的按键,也是一个复位键,蓝色的灯点亮时,即表示可以稍写了。可以将串口打开,等待稍完后,正常情况下“串口数据接收处”就会收到信息。稍写完成后,点击全速运行,此时可以看到“串口数据接收处”已经打印了一些信息,端点的注册成功、网络的初始化、协调器建立成功,成功后,接下来只演示刚刚讲过的几部分内容。

image.png

首先通过按键看是否有 key1 down\n,并且自己的灯是否点亮。如图手指位置即按键处,按一下,会看到旁边的灯亮了并且显示的是 key1 down;按一下另外一个键,显示灯关了 key2 down。这是第一个知识点。

image.png

任务可以正常执行,网络是否真的能接收路由器和终端的加入,一会再考验它。以下代码表示任务正常执行。

debug("key2

down\n");my_SendPointToPointMessage(SAMPLEAPP_SENSOR_CLUSTERID,SET_TEMP_ADJUST_CLOSE);

my _SendPointToPointMessage(SAMPLEAPP_SENSO_CLUSTERID,SET _HUMI _ADJUST_CLOSE);

my _SendPointToPointMessage(SAMPLEAPP_CTRL_CLUSTERID,SET_TEMP_ADJUST_CLOSE);

my _SendPointToPointMessage(SAMPLEAPP_CTRL_CLUSTERID,SET_HUMI_ADJUST_CLOSE);

接下来学习到底能否接收到串口的数据,将 GPacket 数据放到最后。串口发的消息是 SYS_EVENT_MSG 并不是如按键一样独立的四键,串口是在四键的基础上再次封装了四键的类型(SERIAL_MSG),其可以在串口中看到,点击 Window 中的 B

MT_UART.c(Comontents\mt),

在这里发的 pMsg->hdr.event=CMD_SERIAL_MSG。所以在应用程序中如果发现是串口的数据,接下来首先发的数据自己约定一下格式,串口数据的格式大概是串口+长度+数据,首先是端口号,然后是数据长度,最后才是数据,即要将串口+长度去除掉才是真正的数据。对于串口,因为已经引入了两个串口,分别是串口0和串口1,长度一个字节不会超过256。首先数据是通过 msg 里存储,得到端口号 port,得到长度 len,此处给的是 RECV,规定不超过60个字节,60个字节内就将数据中的内容拷贝到 str 里面。然后判断长度,如果长度大于1,便将数据打印出来(“uart%sd(%);%s\n,port,len,ste),还会通过 serial_dispos,dispos即解析收到的数据,这就是另外一部分的内容:收到的是什么数据。

break;

case CMD SERIAL MSG:

{

uint8 str[UART RECV LEN];

uint8 port=*(((mtosALserialData_t*)MSGpkt)->msg);//数据包格式:串口+长度+数据

uint8 len =*(((mtosALserialData_t*)MSGpkt)->msg+1);

if(len <UART_RECV_LEN)

osal_memcpy(str,((mtosALSerialData_t *)MSGpkt)->msg+2,len);

else

break;

if(len > 1){

*(str+len) = 0;

debug("uart%d(%d):%s\n",port,len,str);

serial_disbos(port,len,str);

}

在解析数据时,如果收到端口0的数据,若是 open 也可以开灯;若是 close,可以关灯,和按键的效果是完全相同的。接下来演示一下。在串口调试助手中下方输入 open,可以看到灯亮了,而且输入完 open 后,会打印 uart0(4):open;输入 close 后,灯灭了。这个工具无法将数据记录下来,如果换一个工具可以记录信息,可能使用起来会更方便一些。此处使用另外一个工具 QCOMO_V1.6,实际上串口工具有很多。因为有些卡,所以将 Baudrate 调到921600,卡的主要原因是摄像头有些问题,每次开的时候,整个系统都会变得非常慢。此处将串口打开,输入 open 和 close,不需要发划行符,点击 open 时,灯亮了,点击 close 时,灯灭了,这个工具会更方便一些,其可以将信息记下来。

这就是串口,信息首先在(“uart%sd(%);%s\n,port,len,ste)被打印出来,而且信息被告知来自于第几个串口,可以来自于两个串口,此处是串口0,若想看串口1,是 COM Port:29。如果是29,可以打一些东西,比如依旧输入 open,看不到任何东西,是因为输出的东西打到串口0去了,除非将串口0和串口1全部打开。用一个工具表示串口0,另一个工具表示串口1,现在在第二个工具中发 open,第一个工具中有所显示,若发 close,同理也能显示,这时收到的就是串口1,另外一个发过去就是串口0,两个串口都能用。其实就是为了将另一个串口当做网关的通讯接口用,这是 debug 本身官方的问题,做了一些修正。后面详细介绍数据的通讯流程。

image.png

相关文章
|
存储 前端开发 异构计算
使用WebGL绘制热力图
使用WebGL绘制热力图
694 0
|
7月前
|
人工智能 搜索推荐 数据库
GEO为企业在AI驱动的未来开辟了新的流量入口
GEO(生成式搜索引擎优化)是AI时代品牌营销新阵地,核心是让品牌成为AI生成答案的权威信源。区别于传统SEO重排名,GEO重被AI理解、信任与引用。需转向“为AI而写”,系统构建内容结构、信任信号与平台可见性,实现GEO+SEO双驱动增长。(239字)
|
11月前
|
人工智能 安全
MCP是什么?为何被称为AI时代的“USB-C”
MCP(模型上下文协议)是AI领域的“通用接口”,像USB-C一样让大模型便捷连接数据源与工具。它通过标准化上下文传递,实现信息互通与任务协同,确保每次调用都具备数据血统、策略与出处管理,推动AI无缝交互与安全可控运行。
|
SQL 人工智能 分布式计算
ODPS十五周年实录|构建 AI 时代的大数据基础设施
本文根据 ODPS 十五周年·年度升级发布实录整理而成,演讲信息如下: 张治国:阿里云智能集团技术研究员、阿里云智能计算平台事业部 ODPS-MaxCompute 负责人 活动:【数据进化·AI 启航】ODPS 年度升级发布
632 9
|
8月前
|
人工智能 监控 JavaScript
5分钟吃上AI龙虾!OpenClaw 1分钟云上/本地部署+免费多模型配置喂饭级教程(MiniMax、Claude、阿里云百炼)
在AI工具层出不穷的2026年,OpenClaw(昵称“龙虾AI”)凭借“真执行、强隐私、高扩展”的核心优势脱颖而出。这款由PSPDFKit创始人Peter Steinberger打造的开源个人AI助手,彻底打破了传统AI“只聊天不做事”的局限——它能像真人员工一样处理邮件、管理日程、订机票、写代码,甚至监控文件夹自动备份,所有数据本地处理,隐私完全可控。更重要的是,它支持MiniMax、Claude、阿里云百炼等多类大模型自由切换,兼容飞书、微信、Telegram等主流聊天工具,搭配100+可扩展技能,成为兼顾实用性与隐私性的首选AI工具。
4418 1
|
12月前
|
Oracle Java 关系型数据库
ojdbc14.jar 怎么用?Oracle数据库连接详细步骤(附代码)
ojdbc14.jar是Java连接Oracle数据库的JDBC驱动,充当程序与数据库通信的桥梁。使用时需下载该jar包,导入项目(可通过IDE或命令行添加到类路径),再编写Java代码加载驱动并使用`jdbc:oracle:thin:`格式的连接字符串连接数据库,记得替换为实际的地址、端口、服务名及用户名密码。
|
JSON 数据可视化 知识图谱
基于百炼 qwen plus 、开源qwen2.5 7B Instruct 建非schema限定的图谱 用于agent tool的图谱形式结构化 文本资料方案
基于百炼 qwen plus 的上市企业ESG图谱构建工作,通过调用阿里云的 OpenAI 服务,从 Excel 文件读取上市公司 ESG 报告数据,逐条处理并生成知识图谱,最终以 YAML 格式输出。该过程包括数据读取、API 调用、结果处理和文件保存等步骤,确保生成的知识图谱全面、动态且结构清晰。此外,还提供了基于 Pyvis 的可视化工具,将生成的图谱以交互式图形展示,便于进一步分析和应用。
1819 3
|
存储 算法 开发者
etcd入门指南
etcd入门指南
1372 4
etcd入门指南
|
数据采集 JavaScript 前端开发
京东商品详情 API 接口指南(Python 篇)
本简介介绍如何使用Python抓取京东商品详情数据。首先,需搭建开发环境并安装必要的库(如requests、BeautifulSoup和lxml),了解京东反爬虫机制,确定商品ID获取方式。通过发送HTTP请求并解析HTML,可提取价格、优惠券、视频链接等信息。此方法适用于电商数据分析、竞品分析、购物助手及内容创作等场景,帮助用户做出更明智的购买决策,优化营销策略。
2016 0
|
Shell 数据安全/隐私保护 Docker
如何使用Docker安装FTP服务器?
【4月更文挑战第25天】
1699 0
如何使用Docker安装FTP服务器?