《鸿蒙智能互联设备开发(微课版)》 课件 第7章 智能安防设备开发_第1页
《鸿蒙智能互联设备开发(微课版)》 课件 第7章 智能安防设备开发_第2页
《鸿蒙智能互联设备开发(微课版)》 课件 第7章 智能安防设备开发_第3页
《鸿蒙智能互联设备开发(微课版)》 课件 第7章 智能安防设备开发_第4页
《鸿蒙智能互联设备开发(微课版)》 课件 第7章 智能安防设备开发_第5页
已阅读5页,还剩56页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

7.1.1智能安防设备硬件环境介绍通过本节学习,您可以:了解智能安防设备硬件环境介绍智能安防设备硬件环境介绍1.Hi3861芯片Hi3861是海思半导体开发的一款高度集成的2.4GHzSoCWiFi芯片。Hi3861芯片集成高性能32bit微处理器和丰富的外设接口,外设接口包括SPI、UART、I2C、PWM、GPIO和多路ADC;芯片内置SRAM和Flash,可独立运行,并支持在Flash上运行程序。Hi3861支持HUAWEILiteOS和第三方组件,并配套提供开放、易用的开发和调试运行环境。Hi3861芯片适用于智能家电等物联网智能终端领域。典型应用场景包括智慧路灯、智慧物流、人体红外等连接类设备。

智能安防设备硬件环境介绍2.热释电红外传感器热释电红外传感器又称人体红外传感器。被广泛应用于防盗报警、来客告知及非接触开关等红外领域。热释电红外传感器外形如图所示。能检测人或某些动物发射的红外线并转换成电信号输出,是一种能检测人体发射的红外线的新型高灵敏度红外探测元件。能以非接触形式检测出人体辐射的红外线能量的变化,并将其转换成电压信号输出。将输出的电压信号加以放大,便可驱动各种控制电路。

智能安防设备硬件环境介绍3.蜂鸣器蜂鸣器是一种一体化结构的电子器件,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、电子设备、电话机、定时器等电子产品中作发声器件。

4.LED灯贴片LED又称SMDLED,是电路板上常用的元器件,如图所示。它的发光原理是将电流通过化合物半导体,通过电子与空穴的结合,过剩的能量以光的形式释出,达到发光的效果。

智能安防设备硬件环境介绍5.NFC通信NFC即近场通讯技术,是一种非接触式识别互联技术,可以在移动设备、PC和智能设备间进行近距离无线通信。NFC芯片是NFC技术的重要组成部分,其具有通信功能和一定的计算能力,部分NFC芯片产品甚至具有加密逻辑电路及加密/解密模块。NFC芯片使用的是NT3H1201芯片,芯片支持I2C通信,支持可配置的现场检测引脚,内部配备有EEPROM存储芯片,允许在RF和I2C之间快速传出数据。

谢谢7.1.2智能安防设备通信方式通过本节学习,您可以:了解智能安防设备的通信方式MQTT智能安防设备通信方式1.MQTT通信过程在MQTT通信过程中,有3种身份:发布者(Publisher)、消息代理(Broker)和订阅者(Subscriber)。其中发布者和订阅者都是客户端,消息代理是服务器。对于同一个客户端,它可能是发布者也可能是订阅者。MQTT客户端可以发布消息供其他客户端订阅,可以订阅其他客户端发布的消息,可以退订或者删除消息,断开与服务器的连接。MQTT服务器作为消息代理,位于消息发布者和订阅者之间。它接收来自发布者的连接请求,接收发布者发布的消息,处理订阅者的订阅和退订请求,向订阅者转发订阅的消息。发布者订阅者订阅者代理服务器发布消息Publish订阅请求Subscribe订阅请求Subscribe订阅请求Subscribe智能安防设备通信方式MQTT协议中传输的消息主要分为主题(Topic)和负载(Payload)。MQTT进行通信的具体过程如图所示:订阅者发送连接请求给代理服务器,代理服务器授权并返回一个CONNACK确认消息,形成一个会话;订阅者发送订阅请求给代理服务器,如果订阅成功,代理服务器返回一条SUBACK确认消息;智能安防设备通信方式发布者先与代理服务器建立连接,之后发布相应主题的消息内容给代理服务器,代理服务器将负载转发给订阅这个主题的订阅者;订阅者可以发送取消订阅给代理服务器,代理服务器返回UNSUBACK确认消息,经过PING命令之后可断开连接,返回DISCONNECT。智能安防设备通信方式2.MQTT主题在MQTT中使用主题名来标识一个主题。一个主题名的格式是:{app}{operator}/{infoType}/{infoTarget}/{infoPath}{app}表示发布本消息的应用程序。比如消息是由华为eSDK发布,则对应的{app}值为esdk;如果是其他App发布的,则{app}为该应用程序的关键字名称。{operator}是一个动作,表示操作类型,目前支持以下操作类型:get:获取操作,适用于无输入有输出的请求/响应场景。Set:设置操作,适用于有输入无输出的请求/响应场景。action:命令操作,适用于既有输入又有输出的请求/响应场景,输入、输出可选。notify:通知,适用于无须请求、主动推送的信息。智能安防设备通信方式操作类型operator消息类型infoType说明getsetactionrequest请求消息response响应消息notifyevent……事件通知消息。后续扩展的或者其他自定义通知类型操作类型operator消息类型infoType消息目标infoTargetgetsetactionrequest接收该请求消息的目标应用程序response接收该响应消息的目标应用程序,对应于{app},不能为*notifyevent……事件通知消息。后续扩展的或者其他自定义通知类型{infoType}表示消息类型,根据操作类型{operator}而定。{infoTarget}表示消息目标,其含义与{infoType}相关。{infoPath}表示信息对象。例如,可用clock表示终端时间,用temperature表示温度。智能安防设备通信方式3.主题通配符当订阅者订阅主题时,可以使用通配符来订阅多个主题。MQTT支持3种通配符:层级分隔符“/”多层通配符“#”单层通配符“+”层级分隔符“/”将主题分为了多个层级,使得主题层次分明。多层通配符“#”能够匹配当前主题层级下的所有子层级的子主题。单层通配符“+”只能匹配“+”所在的一层的主题。智能安防设备通信方式4.MQTT数据报文MQTT协议的数据报文主要由三部分组成:固定头、可变头和有效载荷。其中固定头是所有数据报文都必须包含的部分。MQTT协议数据报文固定头格式:Bit76543210Byte1MessageTypeDUPflagQoSlevelRETAINByte2RemainingLength智能安防设备通信方式MessageType:表示此数据报文的类型为连接请求、订阅请求、订阅确认、取消订阅等类型中的一种。DUPflag:用来保证消息可靠传输。设置为1,即在变长中增加消息标识,并需要返回确认。QoSlevel:消息的服务质量。等级表示保证传递的次数,分3个等级。RETAIN:发布保留标识。指是否保留消息在代理服务器中,以供新的订阅者订阅此消息。RemainingLength:表示可变头和有效载荷的字节数,最多可以占4个字节。可变头的内容因数据报文类型不同而不同,有效载荷表示消息的具体内容。Bit76543210Byte1MessageTypeDUPflagQoSlevelRETAINByte2RemainingLength智能安防设备通信方式5.MQTT消息格式JSON是一种存储和交换文本信息的语法,它采用了键值对(key/value)的方式。MQTT消息的JSON格式如下:字段类型说明Tokenstring消息标识。相同源发出的相同类型消息的token应该各不同,可以用自增数、随机数表示Timestampstring消息产生的时间戳…………其他的自定义拓展字段bodyJSON消息体,以JSON格式表示

{

“token”:”12345”,

“timestamp”:”2022-10-10T17:20:30Z”,

……

“body”:消息体

}智能安防设备通信方式6.MQTT数据访问操作类型为get、set、和action的主题,称为“数据访问”。一般是通信双方分别订阅请求主题和响应主题,请求方发布请求,经过服务器转发后,提供方发布响应,请求方最后接收到响应。智能安防设备通信方式7.MQTT事件通知对于事件通知类型的消息,事件通知方是主动发布消息,代理服务器将消息转发给订阅了该通知的订阅方,如图所示。谢谢7.2.1搭建智能安防设备开发代码工程通过本节学习,您可以:了解搭建智能安防设备开发代码工程搭建智能安防设备开发代码工程在hi3861工程目录下添加智能安防工程——AF,如图所示。在hi3861工程目录的app文件夹下创建文件夹AF。在AF文件夹下创建app_AF.c与BUILD.gn文件以及inc与src文件夹。在inc文件夹下创建AF.h文件在src文件夹下创建AF.c文件搭建智能安防设备开发代码工程在hi3861工程目录下添加智能安防工程——AF,如图所示。在hi3861工程目录的app文件夹下创建文件夹AF。在AF文件夹下创建app_AF.c与BUILD.gn文件以及inc与src文件夹。在inc文件夹下创建AF.h文件在src文件夹下创建AF.c文件谢谢7.2.2蜂鸣器驱动开发通过本节学习,您可以:了解蜂鸣器驱动开发蜂鸣器驱动开发1.初始化GPIO引脚连接蜂鸣器的引脚为GPIO_08,将该引脚进行宏定义。控制蜂鸣器需要用到PWM,GPIO_08引脚对应的为PWM1_OUT复用信号。所以对引脚进行初始化时需要将引脚复用为PWM1并设置输出模式。#defineAF_BEEP8//蜂鸣器的引脚

/**GPIO初始化**/

hi_gpio_init();//初始化GPIO

hi_io_set_func(AF_BEEP,HI_IO_FUNC_GPIO_8_PWM1_OUT);//设置GPIO_8引脚复用功能为PWM

hi_gpio_set_dir(AF_BEEP,HI_GPIO_DIR_OUT);//设置GPIO_8引脚为输出模式

hi_pwm_init(HI_PWM_PORT_PWM1);//初始化PWM1端口

蜂鸣器驱动开发2.设置蜂鸣器状态宏定义PWM的频率与占空比。通过控制GPIO_08引脚是否输出PWM来达到控制蜂鸣器的目的。#definePWM_DUTY3999//PWM的占空比

#definePWM_FREQ4000//PWM的频率

/*设置蜂鸣器的状态*/

voidBeepStatusSet(intstatus)

{

if(status==1)

{

hi_pwm_start(HI_PWM_PORT_PWM1,PWM_DUTY,PWM_FREQ);//输出PWM

}

if(status==0)

{

hi_pwm_stop(HI_PWM_PORT_PWM1);//停止输出PWM

}}谢谢7.2.3人体热释电传感器驱动开发通过本节学习,您可以:了解人体热释电传感器驱动开发人体热释电传感器驱动开发1.初始化GPIO引脚连接人体热释电传感器的引脚为GPIO_07,将该引脚进行宏定义。人体热释电传感器模块检测到有人靠近时会输出高电平,与之对应的GPIO_07只需要检测输入的电平是否上升为高电平。所以GPIO_07需要设置为上拉输入模式。

#defineAF_PIR7//热释电红外传感器的引脚

/**GPIO初始化**/

hi_gpio_init();

hi_io_set_func(AF_PIR,HI_IO_FUNC_GPIO_7_GPIO);//设置为GPIO模式

hi_gpio_set_dir(AF_PIR,HI_GPIO_DIR_IN);//设置GPIO_7为输入模式

hi_io_set_pull(AF_PIR,HI_IO_PULL_UP);//上拉模式

人体热释电传感器驱动开发2.功能开发芯片只需要检测人体热释电传感器模块是否输出高电平,即可知道是否有人靠近需要发出警报。所以需要用到GPIO_07的上升沿中断。中断响应函数内为事件标志位写入函数,中断触发则将标志位写入事件中。其他程序即可做出相应处理。

hi_gpio_register_isr_function(AF_PIR,HI_INT_TYPE_EDGE,

HI_GPIO_EDGE_RISE_LEVEL_HIGH,func,NULL);//设置上升沿中断

static

voidBeepAlarm(char*arg)

{

(void)arg;

osEventFlagsSet(g_eventFlagsId,FLAGS_MSK1);}谢谢7.2.4智能安防任务开发通过本节学习,您可以:了解智能安防任务开发智能安防任务开发对任务、延时、事件等参数进行宏定义或者全局定义。

#defineTASK_STACK_SIZE(1024*8)//任务内存大小

#defineTASK_PRIO25//任务优先级

#defineTASK_DELAY_3S300//延时3S的参数

#defineTASK_DELAY_1S100//延时1S的参数

#defineTASK_DELAY_100MS100000//延时100ms的参数

#defineFLAGS_MSK10x00000001U//事件标志位

osEventFlagsId_tg_eventFlagsId;//事件

uint8_ttopic_buf[64]="MQTT_MCU";//发布的主题

智能安防任务开发智能安防任务创建。

osThreadAttr_tattr;

="AFTask";//任务名称

attr.attr_bits=0U;//任务属性位

attr.cb_mem=NULL;//任务控制块的内存初始化地址,默认为系统默认分配

attr.cb_size=0U;//任务控制块的内存大小

attr.stack_mem=NULL;//任务的内存初始地址,默认为系统自动分配

attr.stack_size=TASK_STACK_SIZE;//任务的内存大小

attr.priority=TASK_PRIO;//任务的优先级

/**创建任务**/

if(osThreadNew((osThreadFunc_t)AFTask,NULL,&attr)==NULL){

printf("FailedtocreateAFTask!\n");

}

printf("SucceedtocreateAFTask!\n");智能安防任务开发事件的创建,人体热释电传感器的初始化及启动,NFC功能的初始化及启动并将NFC芯片序列号组包输出。

g_eventFlagsId=osEventFlagsNew(NULL);//创建一个事件ID

if(g_eventFlagsId==NULL){

printf("FailedtocreateEventFlags!\n");

}

AFInit();//初始化AF模块

ret=AFReadData(BeepAlarm);//读人体热释电的数据

if(ret!=0){

printf("AFReadDatafailed!\r\n");

return;

}printf("AFReadDatasucceed!\r\n");

智能安防任务开发

NFC_GPIOInit();//初始化NFC的通信引脚

usleep(TASK_DELAY_100MS);//延迟100ms

NT3HGetNxpSerialNumber(buffer);//获取NFC芯片的序列号

Hex2StringArray(str_buf,6,buffer);//转化为字符串

StringCat(topic_buf,str_buf);//组成一个新的发布主题

printf("Topic:%s\r\n",topic_buf);

ret=storeText(NDEFFirstPos,topic_buf);//把发布的主题写入NFC芯片中

if(ret!=1)

{

printf("NFCWriteDataFalied:%d",ret);

}

printf("Successfuldeployment!\r\n");智能安防任务开发智能安防功能代码实现。程序会一直等待事件响应,如果有人靠近人体热释电传感器模块输出高电平触发中断,向事件中写入标志位。等待的事件得到响应,实验箱的蜂鸣器报警并且在串口输出警报以及警报次数。

while(1)

{

osEventFlagsWait(g_eventFlagsId,FLAGS_MSK1,osFlagsWaitAny,osWaitForever);//等待事件响应

printf("\r\n!!!warning!!!\r\n");

time++;

printf("Numberofalerts:%d\r\n",time);

BeepStatusSet(ON);//开蜂鸣器

osDelay(TASK_DELAY_3S);//延时3S

BeepStatusSet(OFF);//关蜂鸣器

osDelay(TASK_DELAY_1S);//延时1S

}谢谢7.2.5智能安防功能调测通过本节学习,您可以:了解智能安防功能调测智能安防功能调测编译烧写完成后启动程序。输出SucceedtocreateAFTask!表示智能安防任务创建成功。输出AFReadDatasucceed!表示人体热释电传感器启动成功。输出Successfuldeployment!表示程序启动成功,开始检测是否有人员靠近。输出!!!warning!!!表示有人员靠近发出警报,并且蜂鸣器开始工作发出警报声。输出Numberofalerts:表示报警次数。谢谢7.2.6项目总结报告通过本节学习,您可以:了解智能安防项目的完整代码项目总结报告智能安防完整代码如下:app_AF.c:主体程序代码。包含智能安防任务创建,各外设程序初始化,主要功能代码实现。

#include<stdio.h>

#include<string.h>

#include"cmsis_os2.h"

#include"ohos_init.h"

#include"hi_io.h"

#include"hi_pwm.h"

#include"hi_gpio.h"

#include"AF.h"

#include"mqtt_connect.h"

#include"bsp_string.h"

#include"bsp_nfc.h"

#include"NT3H.h"

#defineTASK_STACK_SIZE(1024*8)//任务内存大小

#defineTASK_PRIO25//任务优先级

#defineTASK_DELAY_3S300//延时3S的参数

#defineTASK_DELAY_1S100//延时1S的参数

#defineTASK_DELAY_100MS100000//延时100ms的参数

#defineFLAGS_MSK10x00000001U//事件标志位

项目总结报告

osEventFlagsId_tg_eventFlagsId;//事件

uint8_ttopic_buf[64]="MQTT_MCU";//发布的主题

/**

*@brief中断响应函数

*/

static

voidBeepAlarm(char*arg)

{

(void)arg;

osEventFlagsSet(g_eventFlagsId,FLAGS_MSK1);

}

/**

*@briefAF任务函数

*/

static

voidAFTask(void){项目总结报告

intret;

inttime=0;

uint8_thuman_state='1';

uint8_tbuffer[16]={0};

uint8_tstr_buf[32]={0};

AFInit();//初始化AF模块

ret=AFReadData(BeepAlarm);//读人体热释电的数据

if(ret!=0){

printf("AFReadDatafailed!\r\n");

return;

}printf("AFReadDatasucceed!\r\n");

NFC_GPIOInit();//初始化NFC的通信引脚

usleep(TASK_DELAY_100MS);//延迟100ms

NT3HGetNxpSerialNumber(buffer);//获取NFC芯片的序列号

Hex2StringArray(str_buf,6,buffer);//转化为字符串

StringCat(topic_buf,str_buf);//组成一个新的发布主题

printf("Topic:%s\r\n",topic_buf);

ret=storeText(NDEFFirstPos,topic_buf);//把发布的主题写入NFC芯片中

项目总结报告

if(ret!=1)

{

printf("NFCWriteDataFalied:%d",ret);

}

printf("Successfuldeployment!\r\n");

while(1)

{

osEventFlagsWait(g_eventFlagsId,FLAGS_MSK1,osFlagsWaitAny,osWaitForever);//等待事件响应

printf("\r\n!!!warning!!!\r\n");

time++;

printf("Numberofalerts:%d\r\n",time);

BeepStatusSet(ON);//开蜂鸣器

osDelay(TASK_DELAY_3S);//延时3S

BeepStatusSet(OFF);//关蜂鸣器

osDelay(TASK_DELAY_1S);//延时1S

}}项目总结报告

/**

@briefAF任务创建函数

**/

static

voidAFEntry(void)

{

g_eventFlagsId=osEventFlagsNew(NULL);//创建一个事件ID

if(g_eventFlagsId==NULL){

printf("FailedtocreateEventFlags!\n");

}

osThreadAttr_tattr;

="AFTask";//任务名称

attr.attr_bits=0U;//任务属性位

attr.cb_mem=NULL;//任务控制块的内存初始化地址,默认为系统默认分配

attr.cb_size=0U;//任务控制块的内存大小

attr.stack_mem=NULL;//任务的内存初始地址,默认为系统自动分配

attr.stack_size=TASK_STACK_SIZE;//任务的内存大小

attr.priority=TASK_PRIO;//任务的优先级

/**创建任务**/

if(osThreadNew((osThreadFunc_t)AFTask,NULL,&attr)==NULL){

printf("FailedtocreateAFTask!\n");

}

printf("SucceedtocreateAFTask!\n");

}

/**让系统运行指定的函数**/

APP_FEATURE_INIT(AFEntry);项目总结报告inc/AF.h:硬件外设初始化头文件。

#ifndef__AF_H__

#define__AF_H__

typedef

enum{

OFF=0,

ON

};

voidAFInit(void);

intAFReadData(char*func);

voidBeepStatusSet(intstatus);

#endif项目总结报告src/AF.c:硬件外设引脚初始化及对应功能实现。

#include<math.h>

#include<stdio.h>

#include<string.h>

#include<unistd.h>

#include"cmsis_os2.h"

#include"hi_io.h"

#include"hi_pwm.h"

#include"hi_gpio.h"

#defineAF_BEEP8//蜂鸣器的引脚

#defineAF_

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论