【嵌入式Linux项目】基于Linux的全志H616开发板智能家居项目(语音控制、人脸识别、安卓APP和PC端QT客户端远程操控)有视频功能展示
目录
一、功能需求
二、开发环境
1、硬件:
2、软件:
3、引脚分配:
三、关键点
1、设计模式之工厂模式
2、wiringPi库下的相关硬件操作函数调用
3、语音模块的串口通信
4、线程
5、摄像头的实时监控和拍照功能
6、人脸识别
四、编译和运行
五、视频功能展示
一、功能需求
- 火焰传感器检测到火焰时,蜂鸣器报警,直到无火焰时停止报警
- 语音控制多个LED灯的开和关(二楼灯、餐厅灯、客厅灯、卫生间灯)
- 语音开启摄像头,并在对应IP地址的网页上实时监控画面
- 语音控制摄像头拍摄照片,存在当前文件夹下(通过filezilla将照片传到PC上查看)
- 语言开启人脸识别功能,将拍摄照片与本人照片对比,识别成功蜂鸣器滴一声,失败滴四声
- 通过socket网络,实现开发板跑服务端,安卓手机跑客户端APP或PC上位机跑客户端,实现手机或上位机远程发送指令完成以上功能,并实时将温湿度传感器所测数据在安卓APP或PC上位机的QT界面上显示
二、开发环境
1、硬件:
Orangepi Zero2 全志H616开发板,语音模块SU-03T,摄像头模组OV9726,蜂鸣器,火焰传感器,4个LED等,4路继电器组,6v电源,若干杜邦线。
2、软件:
MobaXterm、VS Code、FileZilla
3、引脚分配:
在MobaXterm命令控制终端输入gpio readall可以查看开发板上的所有引脚。语音模块、蜂鸣器、火焰传感器和4路继电器组的引脚接线在下图框出。
由于加了温湿度传感器之后板子上引脚不够,所以在第二个视频演示时会把语言识别模块替换下来。温湿度传感器对应IO为,VCC--5V, GND--GND, DAT--3wPi。
三、关键点
1、设计模式之工厂模式
工厂模式提供了一种将对象的实例化过程封装在工厂类中的方式。本文通过使用工厂模式,将对象的创建与使用代码分离,提供一种统一的接口来创建不同类型的对象。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象(链表)。
//1.指令工厂初始化pCommandHead = addVoiceContrlToInputCommandLink(pCommandHead);//串口pCommandHead = addSocketContrlToInputCommandLink(pCommandHead);//2.设备控制工厂初始化//四个LED+火灾+蜂鸣器+摄像头pdeviceHead = addBathroomLightToDeviceLink(pdeviceHead);pdeviceHead = addUpstairLightToDeviceLink(pdeviceHead);pdeviceHead = addRestaurantLightToDeviceLink(pdeviceHead);pdeviceHead = addLivingroomLightToDeviceLink(pdeviceHead);pdeviceHead = addFireToDeviceLink(pdeviceHead);pdeviceHead = addBeepToDeviceLink(pdeviceHead);pdeviceHead = addCameraToDeviceLink(pdeviceHead);
2、线程
主函数中创建了三个线程:语音线程、火焰检测线程、网络线程。
语音线程(voiceThread):完成串口的配置和初始化,在while循环里每隔0.3s检查串口是否有语音命令词到来,有则执行对应操作。
火焰检查线程(socketThread):while循环里每隔0.5s检测是否有火焰,有则蜂鸣器发出警报,知道无火焰。
网络线程(socketThread):接收客户端指令,实现上位机远程发送指令完成 [ 功能要求 ] 所述功能;给客户端发送温湿度传感器所测数据,实时显示在QT界面上。
//1、接收客户端的指令控制灯和摄像头 执行指令功能与语音控制复用
//2、向客户端发送温湿度数据
void *socket_thread(){struct sockaddr_in c_addr;memset(&c_addr,0,sizeof(struct sockaddr_in));int clen = sizeof(struct sockaddr_in);socketHandler = findCommandByName("socketServer", pCommandHead);if(socketHandler == NULL){printf("find socketHandler error\n");pthread_exit(NULL);}printf("%s init success\n", socketHandler->commandName);socketHandler->Init(socketHandler, NULL, NULL);while(1){c_fd = accept(socketHandler->sfd, (struct sockaddr *)&c_addr, &clen);piThreadCreate(read_thread);pthread_tempAndHumi_create();}
}
在网络线程中,首先对套接字进行初始化配置,包括IPV4因特网协议、TCP协议的配置(socket),绑定IP地址和端口号(bind),通过套接字标识符监听对应端口(listen)并等待客户端接入(accept)。
客户端接入后,即创建读数据线程,在while循环中进程阻塞在read函数,直到客户端发出指令,指令的执行函数与语音模块的语音指令执行函数复用(voiceContrlFunc函数在第4小点展示)。例如:在QT界面按下 [开客厅灯] 按钮,客户端通过网络发出字符串"OLL" ,在服务端read读到指令放入socketHandler->command,调用函数voiceContrlFunc(socketHandler->command)执行指令。
同时客户端在接入之后会调用函数pthread_tempAndHumi_create()创建发数据的线程,即实时发送温湿度的数据,QT中配合信号槽接收数据并在QT界面上显示,代码如下。
void *read_thread(){while(1){int n_read = 0;memset(socketHandler->command, '\0', sizeof(socketHandler->command));n_read = read(c_fd, socketHandler->command, sizeof(socketHandler->command));//n_read是读到字节数voiceContrlFunc(socketHandler->command);if(n_read == -1){perror("read");}else if(n_read>0){printf("\nget: %d, %s\n",n_read, socketHandler->command);}else{ printf("client quit\n");break;}}
}
QT程序,控制开关客厅灯的函数:
void Widget::on_livingRoomLight_clicked()
{if(livingRoomLightFlag == 1){//客户端向服务端发送消息if(tcpSocket->state() == QAbstractSocket::ConnectedState){ui->livingRoomLight->setText("关客厅灯");tcpSocket->write("OLL");ui->textBrowser->append("> 客厅灯已打开\n");livingRoomLightFlag = 0;}else{ui->textBrowser->append("请先与服务端连接!");}}else{if(tcpSocket->state() == QAbstractSocket::ConnectedState){ui->livingRoomLight->setText("开客厅灯");tcpSocket->write("CLL");ui->textBrowser->append("> 客厅灯已关闭\n");livingRoomLightFlag = 1;}else{ui->textBrowser->append("请先与服务端连接!");}}
}
QT程序中的信号槽连接和TCP网络读函数:
connect(tcpSocket, SIGNAL(readyRead()), this, SLOT(receiveMessages()));void Widget::receiveMessages()
{QByteArray tmpByteArray = tcpSocket->readAll();char* tempHumi;tempHumi = tmpByteArray.data();ui->tempLabel->setText(QString::number(tempHumi[0]));ui->humiLabel->setText(QString::number(tempHumi[2]));
}
PC端QT界面
APP界面
3、wiringPi库下的相关硬件操作函数调用
包括wiringPi库的初始化,蜂鸣器、火焰传感器、继电器组的输入输出引脚配置和高低电平设置。wiringP库下的串口配置和初始化。
4、语音模块的串口通信
本文用的是全志H616芯片中的串口设备/dev/ttyS5,波特率115200,实现与语音模块的串口通信。语音模块收到我们发出的命令词,将命令词转化为16进制数据通过串口发送到开发板,在程序中完成对串口数据接收、存储、判断是哪种命令、执行对应命令的操作,包括开关二楼灯、餐厅灯、客厅灯、卫生间灯、开启摄像头、拍一张照片和人脸识别。
语音模块SU-03T需要烧入对应命令的SDK,本文配置的SDK是在智能公元/AI产品零代码平台上完成,免费的。
int get_voice_type(char *cmd)
{if(!strcmp("OLL", cmd)) return OLL;if(!strcmp("ORL", cmd)) return ORL;if(!strcmp("OUL", cmd)) return OUL;if(!strcmp("OBL", cmd)) return OBL;if(!strcmp("CLL", cmd)) return CLL;if(!strcmp("CRL", cmd)) return CRL;if(!strcmp("CUL", cmd)) return CUL;if(!strcmp("CBL", cmd)) return CBL;if(!strcmp("OC" , cmd)) return OC ;if(!strcmp("TAP", cmd)) return TAP;if(!strcmp("OFR", cmd)) return OFR;perror("voice recognition failure");
}void voiceContrlFunc(char *cmd){switch(get_voice_type(cmd)){case OLL://OLL ASCII对应的16进制4f 4c 4cprintf("open livingroom light\n");struct Devices *tmpOpenLivingroomLight = findDeviceByName("livingroomLight", pdeviceHead);tmpOpenLivingroomLight->open(tmpOpenLivingroomLight->pinNum);break;case ORL://ORL 4f 52 4cprintf("open restaurant light\n");struct Devices *tmpOpenRestaurantLight = findDeviceByName("restaurantLight", pdeviceHead);tmpOpenRestaurantLight->open(tmpOpenRestaurantLight->pinNum);break;case OUL://OUL 4f 55 4cprintf("open upstair light\n");struct Devices *tmpOpenUpstairLight = findDeviceByName("upstairLight", pdeviceHead);tmpOpenUpstairLight->open(tmpOpenUpstairLight->pinNum);break;case OBL://OBL 4f 42 4cprintf("open bathroom light\n");struct Devices *tmpOpenBathroomLight = findDeviceByName("bathroomLight", pdeviceHead);tmpOpenBathroomLight->open(tmpOpenBathroomLight->pinNum);break;case CLL://CLL 43 4c 4cprintf("close livingroom light\n");struct Devices *tmpCloseLivingroomLight = findDeviceByName("livingroomLight", pdeviceHead);tmpCloseLivingroomLight->close(tmpCloseLivingroomLight->pinNum);break;case CRL://CRL 43 52 4cprintf("close restaurant light\n");struct Devices *tmpCloseRestaurantLight = findDeviceByName("restaurantLight", pdeviceHead);tmpCloseRestaurantLight->close(tmpCloseRestaurantLight->pinNum);break;case CUL://CUL 43 55 4cprintf("close upstair light\n");struct Devices *tmpCloseUpstairLight = findDeviceByName("upstairLight", pdeviceHead);tmpCloseUpstairLight->close(tmpCloseUpstairLight->pinNum);break;case CBL://CBL 43 42 4cprintf("close bathroom light\n");struct Devices *tmpCloseBathroomLight = findDeviceByName("bathroomLight", pdeviceHead);tmpCloseBathroomLight->close(tmpCloseBathroomLight->pinNum);break;case OC://OC 4f 43printf("open camera\n");printf(" -------------------------------------------------------------------\n");printf(" --\033[1;32m 已开启摄像头,请到指定网页观看画面 https//192.168.43.206:8081 \033[0m--\n");//黄色字体printf(" -------------------------------------------------------------------\n");printf("\n");break;case TAP://TAP 54 41 50printf("take a picture\n");struct Devices *tmpTakeAPictureCamera = findDeviceByName("camera", pdeviceHead);tmpTakeAPictureCamera->takeAPicture();printf(" --------------------------------------\n");printf(" --\033[1;32m 已拍照,请在当前文件夹下查看照片 \033[0m--\n");//黄色字体printf(" --------------------------------------\n");printf("\n");break;case OFR://OFR 4f 46 52printf("open face recognition\n");struct Devices *tmpFaceRecCamera = findDeviceByName("camera", pdeviceHead);tmpFaceRecCamera->faceRecognition();break;}
}
5、摄像头的实时监控和拍照功能
参考这篇文章:(1031条消息) 香橙派Orange Pi Zero 2开发板配置USB摄像头的方法_阿龙还在写代码的博客-CSDN博客
6、人脸识别
通过命令词【人脸识别】让摄像头拍摄一张照片并与本地的本人照片做对比,成功则蜂鸣器滴一声,失败则滴四声。人脸识别的处理程序调用的是翔云OCR人脸识别 (netocr.com)的人脸识别API,该接口地址https://netocr.com/api/faceliu.do是https协议的地址,https协议是在http和tcp之间多添加了一层,进行身份验证和数据加密。
若要访问https协议的地址,则需要用到Libcurl这个跨平台的网络协议库,配合OpenSSL库,就可以访问https协议的接口。(编译OpenSSL支持Libcurl的https访问,如果直接编译Libcurl,只能访问http不能访问https,需要OpenSSL库才能访问https)
camera.c
#include "contrlDevices.h"
#include <stdio.h>
#include <curl/curl.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>extern struct Devices *pdeviceHead;//extern表面变量或函数是定义在其他文件中,声明 为全局变量在该源文件使用
struct Devices* findDeviceByName(char *name, struct Devices *phead);#define true 1
#define false 0
struct Devices camera;
char buf[1024] = {'\0'};//全局void cameraTakeAPicture(){system("(fswebcam -d /dev/video0 --no-banner -r 1280x720 -S 5 ./image.jpg) > tmpFile");//照片存放在当前目录下
}size_t readData(void *ptr, size_t size, size_t nmemb, void *stream){strncpy(buf, ptr, 1024);
}char *getPicBase64FromFile(char *filePath){char *bufPic = NULL;char cmd[128] = {'\0'};sprintf(cmd, "base64 %s > tmpFile", filePath);system(cmd);//图片的base64流数据存入tmpFile文件中int fd = open("./tmpFile", O_RDWR);int filelen = lseek(fd, 0, SEEK_END);lseek(fd, 0, SEEK_SET);//重新让文件的光标回到初始位置bufPic = (char *)malloc(filelen + 2);//+1也可以 多加点没毛病memset(bufPic, '\0', filelen + 2);read(fd, bufPic, filelen);close(fd);system("rm -f tmpFile");return bufPic;
}void cameraFaceRecognition(){camera.takeAPicture();CURL *curl;CURLcode res;char *postString;char *img1;char *img2;char *key = "DYRrmZz2rTwYGywyWdhKzR";char *secret = "56bc8e083a9b4d9fbf590413ddcb3a61";int typeId = 21;char *format = "xml";char *bufPic1 = getPicBase64FromFile("./image.jpg");char *bufPic2 = getPicBase64FromFile("./zyl.jpg");int len = strlen(key) + strlen(secret) + strlen(bufPic1) + strlen(bufPic2) + 128;postString = (char *)malloc(len);memset(postString, '\0', len);//sizeof(postString)替换成len,因为postString是指针sprintf(postString, "&img1=%s&img2=%s&key=%s&secret=%s&typeId=%d&format=%s", bufPic1, bufPic2, key, secret, 21, format);//拼接字符串curl = curl_easy_init();if (curl){curl_easy_setopt(curl, CURLOPT_COOKIEFILE, "/tmp/cookie.txt"); // 指定cookie文件curl_easy_setopt(curl, CURLOPT_POSTFIELDS, postString); // 指定post内容curl_easy_setopt(curl, CURLOPT_URL,"https://netocr.com/api/faceliu.do"); // 指定urlcurl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, readData);//当有数据回来 调用回调函数res = curl_easy_perform(curl);struct Devices *beepHandler = findDeviceByName("beep", pdeviceHead);if(strstr(buf, "是") != NULL){ beepHandler->open(beepHandler->pinNum); usleep(300000);beepHandler->close(beepHandler->pinNum);printf("\n");printf(" -----------------------------------\n");printf(" --\033[1;32m 人脸识别成功: the same person \033[0m--\n");//绿色字体printf(" -----------------------------------\n");printf("\n");}else{int i = 4;while(i--){beepHandler->open(beepHandler->pinNum); usleep(200000);beepHandler->close(beepHandler->pinNum); usleep(100000);}printf("\n");printf(" ------------------------------------\n");printf(" --\033[1;31m 人脸识别失败: different person \033[0m--\n");//红色字体printf(" ------------------------------------\n");printf("\n");}curl_easy_cleanup(curl);}
}//实例化对象
struct Devices camera = {.deviceName = "camera",.takeAPicture = cameraTakeAPicture,.faceRecognition = cameraFaceRecognition};struct Devices* addCameraToDeviceLink(struct Devices *phead){if(phead == NULL){return &camera;}else{//头插camera.next = phead;phead = &camera;return phead;}
}
7、qt程序跨平台运行(编译成安卓APP)
搭建环境所需的安装包:
四、编译和运行
编译时需要用到一些库文件和该库文件里的头文件,用到温湿度传感器时加上tempAndHumi.c
gcc bathroomLight.c livingroomLight.c restaurantLight.c upstairLight.c socketContrl.c voiceContrl.c fireDetection.c beep.c camera.c usartContrl.c main.c -I ../httpHandler/curl-7.71.1/_install/include/ -L ../httpHandler/curl-7.71.1/_install/lib/ -lcurl -lwiringPi -lpthread
运行:
sudo ./a.out
五、视频功能展示
智能家居功能展示
PC端QT界面功能展示
安卓app功能展示
相关文章:

【嵌入式Linux项目】基于Linux的全志H616开发板智能家居项目(语音控制、人脸识别、安卓APP和PC端QT客户端远程操控)有视频功能展示
目录 一、功能需求 二、开发环境 1、硬件: 2、软件: 3、引脚分配: 三、关键点 1、设计模式之工厂模式 2、wiringPi库下的相关硬件操作函数调用 3、语音模块的串口通信 4、线程 5、摄像头的实时监控和拍照功能 6、人脸识别 四、编…...
ElasticSearch基础篇-条件查询与映射
ElasticSearch基础篇二 条件查询 GET http://10.192.193.98:9200/shopping/_search?qtitle:小米手机q:代表查询条件 响应结果 {"took": 772,"timed_out": false,"_shards": {"total": 1,"successful": 1,"skipped…...

大模型部署框架 FastLLM 实现细节解析
0x0. 前言 接着 大模型部署框架 FastLLM 简要解析 这篇文章首先梳理了一下FastLLM的调用链和关键的数据结构,然后解析了 FastLLM 的一些实现细节和CPU/GPU后端实现采用的优化技巧。 0x1. 调用链和数据结构解析 以chatglm-6b的支持为例,函数入口在 htt…...

Flutter ios真机调试连接断开后应用闪退
使用ios真机调试的时候,能正常打开应用,但是当数据线断开连接的时候,应用就会关闭,重新打开就会闪退。 原因是flutter默认在开发过程中使用debug模式编译 只需要将debug选择为release 重新编译就行。...
序列化,反序列化之实例
别怕,我一直陪着你 一.知识1.魔术方法 二.实例1.绕过__wakeup, private2.php://filter, data://, __tostring3. 一.知识 1.魔术方法 __construct() 当一个对象创建时自动调用 __destruct() 当对象被销毁时自动调用 (php绝大多数情况下会自动调用销毁对象) __sleep…...
2022年全国职业院校技能大赛(高职组)“软件测试”赛项竞赛任务书
2022年全国职业院校技能大赛(高职组) “软件测试”赛项竞赛任务书 2022年7月 一、竞赛时间、内容及成绩组成 (一)竞赛时间 本阶段竞赛时间共为8小时,参赛选手自行安排任务进度,休息、饮水、如厕等不设专…...
第18节:R语言分析:临床安全性数据的数据分析
临床安全性数据的数据分析 背景 医疗器械临床试验中收集的数据的主要组成部分是关于患者安全的。 不良事件被定义为“受试者、使用者或其他人的任何不良医疗事件、非预期疾病或伤害,或不良临床体征(包括异常实验室发现),无论是否与研究医疗器械相关”。 收集并用于此数据…...

36.悬浮板
悬浮板 html部分 <div class"container"><div class"square"></div> </div>css部分 *{margin: 0;padding: 0; } body{background-color: #111;height: 100vh;overflow: hidden;display: flex;justify-content: center;align-it…...

BLE基础理论/Android BLE开发示例
参考:https://blog.csdn.net/qq_36075612/article/details/127739150?spm1001.2014.3001.5502 参考: https://blog.csdn.net/qq_36075612/article/details/122772966?spm1001.2014.3001.5502 目录 蓝牙的分类传统蓝牙低功耗蓝牙 蓝牙专业词汇ÿ…...
rocketmq 5.13任意时间延迟消息
原理是采用timewhile 实现的,源码分析可以参考 https://blog.csdn.net/sinat_14840559/article/details/129266105 除了useDelayLevel 已经默认改为false private boolean useDelayLevel false;官方示意代码在public class TimerMessageProducer for (int i 0;…...

小程序picker 在苹果手机不兼容 bug,按month时在iPhone 显示不正确及自动定位时间问题
如下图:点击弹出时间列表:日历控件点击选择显示1年1月 解决: 加上起始时间字段 <picker mode"date" value"{{date}}" start"1970-09-01" end"2030-09-01"></picker> 问题二: 还是&a…...

区块链服务网络的顶层设计与应用实践
日前,2023全球数字经济大会专题论坛:Web3.0发展趋势专题论坛暨2023区块链、元宇宙蓝皮书发布会在北京举行。本次论坛上隆重发布了《中国区块链发展报告(2023)》,对我国区块链行业在2022年的发展状况进行了总结梳理&…...
tomcat日志输出乱码
在Tomcat中,默认的字符编码可能导致应用参数日志出现乱码问题。这通常发生在接收来自客户端的请求参数,并将其记录到日志文件时。 Tomcat默认使用平台的默认字符编码,这可能是不稳定的,特别是当应用程序运行在不同的操作系统上时…...
Form1单例模式与互斥锁
一、使用mutex来解决。 如何让窗体Form1也是一个单例模式呢? 在窗体项目中找到Program.cs,双击。找到入口点,更改如下: [STAThread]private static void Main(){string mutexName "MyapplicatonMutexApp1121";usin…...

MySQL | 常用命令示例
MySQL | 常用命令示例 一、启停MySQL数据库服务二、连接MySQL数据库三、创建和管理数据库四、创建和管理数据表五、数据备份和恢复六、查询与优化 MySQL是一款常用的关系型数据库管理系统,广泛应用于各个领域。在使用MySQL时,我们经常需要编写一些常用脚…...

常见网关对比
常见网关对比 目前常见的开源网关大致上按照语言分类有如下几类: Nginxlua :OpenResty、Kong、Orange、Abtesting gateway 等 Java :Zuul/Zuul2、Spring Cloud Gateway、Kaazing KWG、gravitee、Dromara soul 等 Go :Janus、fa…...
机器学习动量优化算法笔记
动量优化算法(Momentum Optimization)是一种常用于训练神经网络的优化算法。它通过模拟物体在惯性作用下的运动来加速梯度下降过程,从而加快神经网络的收敛速度并提高训练效率。 在梯度下降算法中,每次更新权重时都是根据当前批次…...
asp.net与asp.net优缺点及示例
Asp.net Mvc架构模式是一种低耦合、可测试的web应用程序框架,它是基于CLR和成熟的MVC架构构建的。ASP .NET MVC不支持 ViewState和服务器控件。 Asp.net优点: 1.架构降低了程序间的耦合性,M VC,分层,目标明确 2.性能不支持viewsta…...
php 年月日 分组分页
//年月日 //分组 分页$type $this->request->type;$dateType "%Y-%m";//月$dateType1 "CONCAT(tmp.date,-01 00:00:00)";$dateType2 "CONCAT(LAST_DAY(CONCAT(tmp.date, -15)), 23:59:59)";if ($type day) {//日$dateType "%Y-…...
flutter开发实战-请求dio设置Cookie
flutter开发实战-请求dio设置Cookie 在最近开发中碰到了需要websocket长链接收到响应的auth,在之后的请求中需要将其设置为cookie中。 如Cookie:authDHSfQQSAXf89xZqJTLdEDVI2hwzc7p2lUmSNNdUSlgW2MyfQINpYr7jUbkX/; 设置cookie用到了dio_cookie_manager组件 一、…...

突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合
强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...
R语言AI模型部署方案:精准离线运行详解
R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...

SCAU期末笔记 - 数据分析与数据挖掘题库解析
这门怎么题库答案不全啊日 来简单学一下子来 一、选择题(可多选) 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘:专注于发现数据中…...
如何为服务器生成TLS证书
TLS(Transport Layer Security)证书是确保网络通信安全的重要手段,它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书,可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)
设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile,新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...

【单片机期末】单片机系统设计
主要内容:系统状态机,系统时基,系统需求分析,系统构建,系统状态流图 一、题目要求 二、绘制系统状态流图 题目:根据上述描述绘制系统状态流图,注明状态转移条件及方向。 三、利用定时器产生时…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序
一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南 在数字化营销时代,邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天,我们将深入解析邮件打开率、网站可用性、页面参与时…...

iview框架主题色的应用
1.下载 less要使用3.0.0以下的版本 npm install less2.7.3 npm install less-loader4.0.52./src/config/theme.js文件 module.exports {yellow: {theme-color: #FDCE04},blue: {theme-color: #547CE7} }在sass中使用theme配置的颜色主题,无需引入,直接可…...

【p2p、分布式,区块链笔记 MESH】Bluetooth蓝牙通信 BLE Mesh协议的拓扑结构 定向转发机制
目录 节点的功能承载层(GATT/Adv)局限性: 拓扑关系定向转发机制定向转发意义 CG 节点的功能 节点的功能由节点支持的特性和功能决定。所有节点都能够发送和接收网格消息。节点还可以选择支持一个或多个附加功能,如 Configuration …...