合肥中科深谷嵌入式项目实战——基于ARM语音识别的智能家居系统(一)

news2024/10/7 2:25:31

基于ARM语音识别的智能家居系统

我们接下来带大家完成基于语音识别的智能家居系统嵌入式项目实战,使用到stm32开发板,讯飞的离线语音识别,我们在此之前,我们先学习一些Linux系统的基本操作。

Alt

一、Linux简介

在嵌入式开发中,涉及到开源(开放源码,任何人都可以下载,修改,使用)开发 ,我们就需要准备一个开源的操作系统,嵌入式开发中使用Linux操作系统。

操作系统(Operating System,OS)是软件的一部分,它是硬件基础上的第一层软件,是硬件和其它软件沟通的桥梁(或者说接口、中间人、中介等)。

操作系统在计算机系统中承上启下的地位:向下封装硬件,向上提供操作接口。

我们来介绍一下市面上常见的系统哪些是开源的:

Linux  开源    
Windows 闭源   C#
ROS  机器人操作系统 开源
IOS 闭源
鸿蒙OS:1.0 基于Linux    2.0分布式操作系统   开源

二、项目介绍

基于ARM语音识别的智能家居系统

我们这里不会做太复杂,我们是基于ARM开发板实现的一些小功能,我们可以实现通过语音来控制LED灯之类的。

基于语音识别的智能家居系统是一种将人工智能技术应用于家庭生活的系统,它可以通过语音识别技术实现家居设备的智能控制,例如智能灯光、智能音响、智能电视、智能锁等。用户可以通过语音指令对家居设备进行控制,实现智能化、便捷化的家居生活体验。

这种智能家居系统通常由以下组成部分构成:

  1. 语音识别引擎:负责将用户的语音指令转化为文字或者命令,是整个系统的关键技术。

  2. 控制中心:负责接收识别结果并控制家居设备的工作状态。控制中心通常是智能音箱、智能手机等设备。

  3. 家居设备:包括智能灯光、智能音响、智能电视、智能锁等家居设备。这些设备应当支持智能化控制,接受控制中心的指令进行相应的操作。

基于语音识别的智能家居系统可以通过接入互联网和云平台实现更多的功能,例如学习用户的习惯,自动调节家居设备的工作状态,或者获取天气、新闻等信息。这种智能家居系统已经开始普及,未来将会成为家庭生活的重要组成部分。

在这里插入图片描述

三、Linux目录结构

在 Linux 下,我们是看不到这些驱动器盘符,我们看到的是文件夹(目录):
在这里插入图片描述

在早期的 UNIX 系统中,各个厂家各自定义了自己的 UNIX 系统文件目录,比较混乱。Linux 面世不久后,对文件目录进行了标准化,于1994年对根文件目录做了统一的规范,推出 FHS ( Filesystem Hierarchy Standard ) 的 Linux 文件系统层次结构标准。FHS 标准规定了 Linux 根目录各文件夹的名称及作用,统一了Linux界命名混乱的局面。

目录

  • 目录是一组相关文件的集合。
  • 一个目录下面除了可以存放文件之外还可以存放其他目录,即可包含子目录。
  • 在确定文件、目录位置时,DOS和Unix/Linux都采用“路径名+文件名”的方式。路径反映的是目录与目录之间的关系。

路径

Unix/Linux路径由到达定位文件的目录组成。在Unix/Linux系统中组成路径的目录分割符为斜杠“/”,而DOS则用反斜杠“\”来分割各个目录。

路径分为绝对路径和相对路径:

  • 绝对路径
  1. 绝对路径是从目录树的树根“/”目录开始往下直至到达文件所经过的所有节点目录。
  2. 下级目录接在上级目录后面用“/”隔开。
  3. 注意:绝对路径都是从“/”开始的,所以第一个字符一定是“/”。
  • 相对路径
  1. 相对路径是指目标目录相对于当前目录的位置。
  2. 如果不在当前目录下,则需要使用两个特殊目录“.”和“”了。目录“.”指向当前目录,而目录“…”。

文件系统

Unix/Linux也采用了树状结构的文件系统,它由目录和目录下的文件一起构成。但Unix/Linux文件系统不使用驱动器这个概念,而是使用单一的根目录结构,所有的分区都挂载到单一的“/”目录上,其结构示意图如图所示:
在这里插入图片描述

在这里插入图片描述

  • /:根目录,一般根目录下只存放目录,在Linux下有且只有一个根目录。所有的东西都是从这里开始。当你在终端里输入“/home”,你其实是在告诉电脑,先从/(根目录)开始,再进入到home目录。
  • /bin: /usr/bin: 可执行二进制文件的目录,如常用的命令ls、tar、mv、cat等。
  • /boot:放置linux系统启动时用到的一些文件,如Linux的内核文件:/boot/vmlinuz,系统引导管理器:/boot/grub。
  • /dev:存放linux系统下的设备文件,访问该目录下某个文件,相当于访问某个设备,常用的是挂载光驱 mount /dev/cdrom /mnt。
  • /etc:系统配置文件存放的目录,不建议在此目录下存放可执行文件,重要的配置文件有 /etc/inittab、/etc/fstab、/etc/init.d、/etc/X11、/etc/sysconfig、/etc/xinetd.d。
  • /home:系统默认的用户家目录,新增用户账号时,用户的家目录都存放在此目录下,表示当前用户的家目录,edu 表示用户 edu 的家目录。
  • /lib: /usr/lib: /usr/local/lib:系统使用的函数库的目录,程序在执行过程中,需要调用一些额外的参数时需要函数库的协助。
  • /lost+fount:系统异常产生错误时,会将一些遗失的片段放置于此目录下。
  • /mnt: /media:光盘默认挂载点,通常光盘挂载于 /mnt/cdrom 下,也不一定,可以选择任意位置进行挂载。
  • /opt:给主机额外安装软件所摆放的目录。
  • /proc:此目录的数据都在内存中,如系统核心,外部设备,网络状态,由于数据都存放于内存中,所以不占用磁盘空间,比较重要的目录有 /proc/cpuinfo、/proc/interrupts、/proc/dma、/proc/ioports、/proc/net/* 等。
  • /root:系统管理员root的家目录。
  • /sbin: /usr/sbin: /usr/local/sbin:放置系统管理员使用的可执行命令,如fdisk、shutdown、mount 等。与 /bin 不同的是,这几个目录是给系统管理员 root使用的命令,一般用户只能"查看"而不能设置和使用。
  • /tmp:一般用户或正在执行的程序临时存放文件的目录,任何人都可以访问,重要数据不可放置在此目录下。
  • /srv:服务启动之后需要访问的数据目录,如 www 服务需要访问的网页数据存放在 /srv/www 内。
  • /usr:应用程序存放目录,/usr/bin 存放应用程序,/usr/share 存放共享数据,/usr/lib 存放不能直接运行的,却是许多程序运行所必需的一些函数库文件。/usr/local: 存放软件升级包。/usr/share/doc: 系统说明文件存放目录。/usr/share/man: 程序说明文件存放目录。
  • /var:放置系统执行过程中经常变化的文件,如随时更改的日志文件 /var/log,/var/log/message:所有的登录文件存放目录,/var/spool/mail:邮件存放的目录,/var/run:程序或服务启动后,其PID存放在该目录下。

四、Ubuntu终端基本操作

我们这里使用的系统是Ubuntu系统,后面,我们会介绍如何安装Ubuntu系统。

Ubuntu系统是一种基于Linux内核的流行的开源操作系统,由Canonical Ltd.开发。它以易用性、稳定性、安全性和社区支持而闻名。Ubuntu有服务器和桌面版本,许多个人、企业和组织都在全球范围内使用它。它包括一系列软件包和工具,而且是免费使用和分发的。Ubuntu还有几个官方和社区衍生版本,每个版本都根据特定的需求和喜好定制。

打开终端:   (Terminal)
	1、鼠标右键打开终端
	2、ctrl + alt + t
关闭:
	1、窗口右上角的x
	2、ctrl + d
放大:
	ctrl + shift + 加号(主键盘)
缩小:
	ctrl + shift + 减号
复制:
	1、ctrl + shift + c
	2、鼠标右键
粘贴:
	1、ctrl + shift + v
	2、鼠标右键

五、Linux基础shell命令

我们接下来,介绍一些shell指令,近几年来,尽管 Linux 发展得非常迅速,图形界面越来越友好,但是在真正的开发过程中,Linux 命令行的应用还是占有非常重要的席位,而且许多Linux功能在命令行界面要比图形化界面下运行的快。可以说不会命令行,就不算会 Linux。

1、ls(list)
列出当前目录下所有的文件内容。

在这里插入图片描述

ls -a:   显示隐藏文件(不隐藏任何以 .开始的项目)

在这里插入图片描述

.    :当前目录
..   :上层目录
ls -l :显示当前目录下所有的文件详细信息。

在这里插入图片描述

在这里插入图片描述

文件类型:(字串中的第一个字符)
	-:普通文件: 普通文件一般包括文本文件、数据文件、可执行的二进制程序文件等。   .txt   .c    .mp4   .mp3   .bmp   .jpg
	d: 目录文件(文件夹)   directory
		每个目录文件至少包括两个条目,“..”表示上一级目录,“.”表示该目录本身。
	c:字符设备文件  驱动文件      character
	b:块设备文件 驱动文件   block
	l:链接文件 (win中的快捷方式)  link
	p:管道文件  进程间通信    pipe
	s:套接字文件  网络通信  socket
Unix/Linux对数据文件(*.mp3、*.bmp),程序文件(*.c、*.h、*.o),设备文件(LCD、触摸屏、鼠标),网络文件( socket ) 等的管理都抽象为文件,使用统一的方式方法管理。

在Linux系统中,一切皆是文件。
2、cd
跳转到某个文件路径。
	cd + 路径

在这里插入图片描述

3、touch
新建普通文件
	touch + 普通文件名

在这里插入图片描述

4、mkdir
创建目录文件  make directory
	mkdir + 目录文件名

在这里插入图片描述

5、rm
移除文件   remove
	rm + 文件名    :移除普通文件

在这里插入图片描述

	rm + 文件名 + -r   :遍历移除目录文件内容

在这里插入图片描述

6、cp
拷贝普通文件  copy
	cp + 源文件 + 目标文件路径

在这里插入图片描述

cp + 源目录 + 目标文件路径 + -r      //拷贝目录文件

在这里插入图片描述

7、mv
剪切(移动)  move
	mv + 源文件 + 目标文件路径

在这里插入图片描述

mv 重命名:
mv + 原文件名 + 新文件名

在这里插入图片描述

8、权限切换
	Unix/Linux系统中的root账号通常用于系统的维护和管理,它对Unix/Linux操作系统的所有部分具有不受限制的访问权限。
	在Unix/Linux安装的过程中,系统会自动创建许多用户账号,而这些默认的用户就称为“标准用户”。
权限:
	普通用户权限:只能在用户主目录进行操作。
	超级权限(root):对所有文件都具有操作权限。
临时使用超级用户权限:
	sudo + 命令

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

9、chmod
修改文件权限

chmod 修改文件具有两种方式:字母法、数字法

用户能够控制一个给定的文件或目录的访问程度,一个文件或目录可能有读、写及执行权限:

  • 读权限(r)
    对文件而言,具有读取文件内容的权限;对目录来说,具有浏览目录的权限。

  • 写权限(w)
    对文件而言,具有新增、修改文件内容的权限;对目录来说,具有删除、移动目录内文件的权限。

  • 可执行权限(x)
    对文件而言,具有执行文件的权限;对目录了来说该用户具有进入目录的权限。

在这里插入图片描述

  1. 第1个字母代表文件的类型:“d” 代表文件夹、“-” 代表普通文件、“c” 代表硬件字符设备、“b” 代表硬件块设备、“s”表示管道文件、“l” 代表软链接文件。
  2. 后 9 个字母分别代表三组权限:文件所有者、用户者、其他用户拥有的权限。

每一个用户都有它自身的读、写和执行权限。

  • 第一组权限控制访问自己的文件权限,即所有者权限。
  • 第二组权限控制用户组访问其中一个用户的文件的权限。
  • 第三组权限控制其他所有用户访问一个用户的文件的权限。

这三组权限赋予用户不同类型(即所有者、用户组和其他用户)的读、写及执行权限就构成了一个有9种类型的权限组。

数字法:
	权限打开对应1,关闭对应0.
	例如:rw-rw-r--(文件权限组) 对应的八进制表示:
		 110110100  ---》664

在这里插入图片描述
还有很多的操作,大家可以自己探索。

操作系统家族发展时间线图谱

在这里插入图片描述

总结

我们今天主要学习Linux系统,以及相关shell操作,下一篇,我们讲介绍,如何安装Linux系统。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1183231.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python---upper()--转大写///与lower() --转小写

upper():把字符串全部转换为 大写形式 lower():把字符串全部转换为 小写形式 upper 英 /ˈʌpə(r)/ adj. 上面的,上层的,较高的;顶部的,上部的;(在机构、体系等中&#xff…

YOLOv8-Pose推理详解及部署实现

目录 前言一、YOLOv8-Pose推理(Python)1. YOLOv8-Pose预测2. YOLOv8-Pose预处理3. YOLOv8-Pose后处理4. YOLOv8-Pose推理 二、YOLOv8-Pose推理(C)1. ONNX导出2. YOLOv8-Pose预处理3. YOLOv8-Pose后处理4. YOLOv8-Pose推理 三、YOLOv8-Pose部署1. 源码下载2. 环境配置2.1 配置CM…

【C++干货铺】初识模板

个人主页点击直达:小白不是程序媛 C系列专栏:C干货铺 代码仓库:Gitee 目录 泛型编程 函数模板 函数模板格式 函数模板原理 函数模板实例化 模板参数的匹配原则 类模板 定义格式 类模板的实例化 泛型编程 什么是泛型? …

wsl和windows下编译C++以及函数重载和函数模板的问题记录

wslUbuntuvscodec 每次打开wsl,进入ubuntu中新建文件夹进行c编程的时候经常报错,显示配置文件有问题,但是每次按照vscode官方文件配置的话是没有问题的。百思不得其解。 今晚发现了问题所在。每次新建工作区的时候会自动生成.vscode文件夹&…

Keil Debug——error: #18: expected a “)“

目录 一、问题现象二、问题原因三、解决方案四、总结 一、问题现象 二、问题原因 这个错误是编译器在编译代码时发现的一种常见错误。导致这个报错的原因很多: 常见的自己一般可解决的: 它意味着在代码中某个位置缺少一个右括号 (“)”),导致…

Unity 判断两个UI是否相交

今天碰到要判断两个UI是否相交的交互。 尝试了下,发现有两个方法都成功了。 1、使用Collider2D组件 分别创建两个Image组件,并且添加Collider2D组件,其中一个还要添加Rigidbody2D组件,如下图: 然后创建个判断脚本“…

【SVN】

SVN 1 svn使用1.1 主干合并到分支1.2 分支合并到主干1.3 分支建立1.4 创建分支1.5 切换分支1.6 合并分支1.7 删除分支 2 概念理解 1 svn使用 1.1 主干合并到分支 首先,在本地trunk中先update一下,有冲突的解决冲突,保证trunk和repository已…

力扣每日一题 -- 2919. 使数组变美的最小增量运算数

//这题本质还是一个背包问题 //怎么去思考这个问题呢 //我最开始的思想是根据经验来看,最小增量运算数,并且使数组变美丽,那么就有点像编辑距离的问题 //但是我看了下时间复杂度,不能是n^2,那么再去仔细思…

番外---10.0 shell编程+调试

######### Step0:理解Shell script(shell变量作用域,定义,引用); Step1:掌握判断式用法(test, [ ], &&, ||,;,|) 2:正则表达式…

如何测试360手机浏览器的 --360手机浏览器测试范围概述

一、基本测试 冒烟测试 由开发,测试,产品共同参与进行。 (1) 主流程和基本功能测试(要求产品参与,如果不参与,一定要说明原因。测试确认此过程完成) a) 将本次提测的核心功能过一…

【Linux】程序地址空间回顾

我们的地址空间划分成如下几个区域: 代码区,字符常量区,已初始化全局变量区,未已初始化全局数据区,堆区,栈区;其中有代码区至栈区的代码地址依次增大。 局部变量是具有临时性的局部变量&#x…

springboot项目中手动提交事务

springboot项目中手动提交事务 演示主要代码场景/需求/实际效果解决办法 :在mi方法中手动提交事务Spring的7中事务传播行为 演示主要代码 Service 层代码 import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.an…

GPT-4 Turbo:OpenAI发布旗舰版GPT-4模型,更便宜|更强大|128K上下文|支持多模态

一、介绍 OpenAI 在 2023 年 11 月 7 日举行首届开发者大会,此次展会的亮点无疑是 GPT-4 Turbo 的亮相,它是 OpenAI 著名的 GPT-4 模型的升级版。 GPT-4 Turbo 有两种变体:一种用于文本分析,另一种能够理解文本和图像。 GPT-4 Tu…

Java 设计模式——解释器模式

目录 1.概述2.结构3.案例实现3.1.抽象表达式类3.2.终结表达式3.3.非终结表达式3.4.环境类3.5.测试 4.优缺点5.使用场景 1.概述 (1)如下图,设计一个软件用来进行加减计算。我们第一想法可能就是使用工具类,提供对应的加法和减法的…

第十三章 Python操作数据库

系列文章目录 第一章 Python 基础知识 第二章 python 字符串处理 第三章 python 数据类型 第四章 python 运算符与流程控制 第五章 python 文件操作 第六章 python 函数 第七章 python 常用内建函数 第八章 python 类(面向对象编程) 第九章 python 异常处理 第十章 python 自定…

基于SSM的本科生导师指导平台设计实现

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:Vue 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目:是 目录…

Scala语言使用Selenium库编写网络爬虫

目录 一、引言 二、环境准备 三、爬虫程序设计 1、导入必要的库和包 2、启动浏览器驱动程序 3、抓取网页内容 4. 提取特定信息 5. 数据存储和处理 四、优化和扩展 五、结语 一、引言 网络爬虫是一种自动抓取互联网信息的程序。它们按照一定的规则和算法,…

【VSS版本控制工具】

VSS版本控制工具 1 安装 VSS2 服务器端配置3 新建用户4 客户端配置Vss2005Vs20055 客户端详细操作 1 安装 VSS 第一步:将VisualSourceSafe2005安装包解压。 第二步:找到setup.exe双击运行。 第三步:在弹出的界面复选框中选中Iaccepttheterms…

Effective C++ 条款5:了解C++默默编写并调用哪些函数

编译器为一个空类声明一个拷贝构造函数、一个拷贝赋值操作符和一个析构函数,如果没有声明任何构造函数,编译器也会声明一个默认构造函数,所有的这些函数都是public且inline 因此,如果写下: class Empty{};…

少儿编程 2023年9月中国电子学会图形化编程等级考试Scratch编程三级真题解析(判断题)

2023年9月scratch编程等级考试三级真题 判断题(共10题,每题2分,共20分) 19、运行程序后,“我的变量”的值为25 答案:对 考点分析:考查积木综合使用,重点考查变量和运算积木的使用 开始我的变量为50,执行完第二行代码我的变量变为49,条件不成立执行否则语句,所以…