6.空气质量检测和语音播报
目录
传感器
传感器分类
数字量传感器
模拟量传感器
电压型模拟量传感器
电流型模拟量传感器
接收不同数字电平信号
KQM6600 简介
获取数据手册
关注手册的内容
KQM660硬件层
编辑 KQM协议层
语音识别和语音播报模块
SU03T作用
SU03T简介编辑
SU03T硬件层
SU03T固件制作
编辑SU03T协议层
代码
KQM
SU03T
传感器
传感器分类
数字量传感器和模拟量传感器
数字量传感器
数字信号:只有 0 和 1
关注:接口(UART,单总线,IIC,SPI...)
模拟量传感器
模拟型传感器:模拟信号(电压,电流)
电压型模拟量传感器
如果电压太大,就需要硬件电路缩小
如果电压太小,就需要硬件电路放大
电流型模拟量传感器
电流:(4--10mA)串联高精度的采样电阻,把电流转化成电压,然后再通过 ADC 采集
接收不同数字电平信号
各种电平:
TTL 232 485 USB
TTL 232 485 本质上都是串口电平,但是电平规范不一样
TTL:单片机的串口,ESP8266,KQM6600 这些串口接口一般都是 TTL 电平
电脑接 TTL 电平的数据
232:232 芯片,将 TTL 电平转化为 232 电平
485 电平:TTL 通过 485 芯片,转换成 485 电平
USB 电平:TTL 通过 CH340 将 TTL 电平转换成 USB 电平
KQM6600 简介
获取数据手册
官网 立创商城 供应商要 百度
关注手册的内容
(1)供电电压
(2)确定接口
① 数字接口
IIC SPI UART 单总线
② 模拟接口
电压型 电流型
KQM660硬件层
KQM协议层
校验和:保证双方数据数据传输的准确:
自己计算的校验和要和对方传递的校验和一致,表示数据没有问题
语音识别和语音播报模块
SU03T作用
实现语音播报
SU03T简介

SU03T硬件层
SU03T 的串口烧录:SU03T 的 B6 B7 两个引脚串口烧录
SU03T 的通信引脚:SU03T 的 B2 B3
SU03T固件制作
SU03T协议层
9600 8 N 1
开机播报小智我来了
退出有需要再叫我
SU03T --> 单片机
开灯 AA 55 00 01 55 AA
关灯 AA 55 00 02 55 AA
室内温度 AA 55 00 03 55 AA
单片机 --> SU03T
播报室内温度 AA 55 01 9A 99 99 99 99 19 37 40 55 AA
AA 55 固定头
01 消息号
9A 99 99 99 99 19 37 40 消息内容
55 AA 固定尾
通信 TX B2 RX B3
下载 TX B7 RX B6
代码
KQM
void KQM_R_Buff_Clear(void)
{memset(Kqm.R_Buff, 0, sizeof(KQM_R_Buff_Length));Kqm.R_Length = 0;
}//处理函数
void KQM_Handle(void)
{uint8_t Data_CS = 0;if(Kqm.R_Idle == 1){//1数据接收完成Kqm.R_Idle = 0;if(Kqm.R_Buff[0] == 0x5F)//地址码正确{Data_CS = Kqm.R_Buff[0] + Kqm.R_Buff[1] + Kqm.R_Buff[2] + Kqm.R_Buff[3] + Kqm.R_Buff[4] + Kqm.R_Buff[5] + Kqm.R_Buff[6];if(Data_CS == Kqm.R_Buff[7])//校验通过{Sensor.VOC = ((Kqm.R_Buff[1] << 8) + Kqm.R_Buff[2] * 0.1);//Sensor.VOC = ((kqm.R_Buff[1] * 0x100) + kqm.R_Buff[2] * 0.1); 1<<8--->2^8=256//Sensor.VOC = ((kqm.R_Buff[1] * 256) + kqm.R_Buff[2] * 0.1);Sensor.CH20 = ((Kqm.R_Buff[3] << 8) + Kqm.R_Buff[4] * 0.01);Sensor.CO2 = ((Kqm.R_Buff[5] << 8) + Kqm.R_Buff[6]);printf("VOC=%.1f,CH20=%.2f,CO2=%d\r\n", Sensor.VOC, Sensor.CH20, Sensor.CO2);}else{printf("校验不正确!!!\r\n");}}else{printf("地址码不正确!!!\r\n");}KQM_R_Buff_Clear();}//不能放在这里,因为数据还没接收完就被清除了//KQM_R_Buff_Clear();
}
SU03T
//处理函数
void SU03T_Handle(void)
{if(Su03t.R_Idle == 1){//1数据接收完成Su03t.R_Idle = 0;if(Su03t.R_Buff[0]==0xAA&&Su03t.R_Buff[1]==0x55&&Su03t.R_Buff[4]==0x55&&Su03t.R_Buff[5]==0xAA)//帧头帧尾正确{switch(Su03t.R_Buff[3]){case 0x00:break;case 0x01:LED1_ON();LED2_ON();LED3_ON();LED4_ON();break;case 0x02:LED1_OFF();LED2_OFF();LED3_OFF();LED4_OFF(); break;case 0x03:Relay_ON();break; case 0x04:Relay_OFF();break;case 0x05:Su03t.S_Buff[0]=0xAA;Su03t.S_Buff[1]=0x55; Su03t.S_Buff[2]=0x02;Su03t.S_Buff[3]=0x00;Su03t.S_Buff[4]=0x00; Su03t.S_Buff[5]=0x00; Su03t.S_Buff[6]=0x00;Su03t.S_Buff[7]=0x00; Su03t.S_Buff[8]=0x00;Su03t.S_Buff[9]=0x37;Su03t.S_Buff[10]=0x40; Su03t.S_Buff[11]=0x55; Su03t.S_Buff[12]=0xAA;SU03T_SendBuff(Su03t.S_Buff,13);break;case 0x06:Su03t.S_Buff[0]=0xAA;Su03t.S_Buff[1]=0x55; Su03t.S_Buff[2]=0x03;Su03t.S_Buff[3]=0x00;Su03t.S_Buff[4]=0x00; Su03t.S_Buff[5]=0x00; Su03t.S_Buff[6]=0x00;Su03t.S_Buff[7]=0x00; Su03t.S_Buff[8]=0x00;Su03t.S_Buff[9]=0x37;Su03t.S_Buff[10]=0x40; Su03t.S_Buff[11]=0x55; Su03t.S_Buff[12]=0xAA;SU03T_SendBuff(Su03t.S_Buff,13);break;case 0x07:Su03t.S_Buff[0]=0xAA;Su03t.S_Buff[1]=0x55; Su03t.S_Buff[2]=0x04;Su03t.S_Buff[3]=0x00;Su03t.S_Buff[4]=0x00; Su03t.S_Buff[5]=0x00; Su03t.S_Buff[6]=0x00;Su03t.S_Buff[7]=0x00; Su03t.S_Buff[8]=0x00;Su03t.S_Buff[9]=0x37;Su03t.S_Buff[10]=0x40; Su03t.S_Buff[11]=0x55; Su03t.S_Buff[12]=0xAA;SU03T_SendBuff(Su03t.S_Buff,13);break;case 0x08:_uart_PlayDouble(18.1,1);break;default:break; }}else{printf("帧头帧尾不正确!!!\r\n");}SU03T_R_Buff_Clear();}//不能放在这里,因为数据还没接收完就被清除了//SU03T_R_Buff_Clear();
}
相关文章:
6.空气质量检测和语音播报
目录 传感器 传感器分类 数字量传感器 模拟量传感器 电压型模拟量传感器 电流型模拟量传感器 接收不同数字电平信号 KQM6600 简介 获取数据手册 关注手册的内容 KQM660硬件层 编辑 KQM协议层 语音识别和语音播报模块 SU03T作用 SU03T简介编辑 SU03T硬件层 …...
LeetCode 热题 100 543. 二叉树的直径
LeetCode 热题 100 | 543. 二叉树的直径 大家好,今天我们来解决一道经典的二叉树问题——二叉树的直径。这道题在 LeetCode 上被标记为简单难度,要求计算给定二叉树的直径。 问题描述 给你一棵二叉树的根节点,返回该树的直径。二叉树的直径…...
D. Explorer Space(dfs+剪枝)
Problem - 1517D - Codeforces 题目大意:给你一个n行m列的矩阵,以及每个点上下左右相邻点的边权,求出每个点任意走k步后再回到当前这个点的最小路程,如果不能回到起始点则输出-1 思路:既然走k步后要回到起始点&#…...
# KVstorageBaseRaft-cpp 项目 RPC 模块源码学习
KVstorageBaseRaft-cpp 项目 RPC 模块源码学习 。 一、项目简介 KVstorageBaseRaft-cpp 是一个基于 Raft 一致性算法实现的分布式 KV 存储系统,采用 C 开发。项目的核心目标是帮助开发者理解 Raft 原理和分布式 KV 存储的基本实现。RPC 模块是分布式系统通信的关…...
QT6 源(93)篇三:阅读与注释共用体类 QVariant 及其源代码,本类支持比较运算符 ==、!=。
(9) 本类支持比较运算符 、! : 可见, QString 类型里可存储多个 unicode 字符,即使只存储一个 unicode 字符也不等于 QChar。 (10)本源代码来自于头文件 qvariant . h : #ifndef Q…...
Qt开发经验 --- 避坑指南(13)
文章目录 [toc]1 安装Qt creator后无法使用debug调试2 安装VS后之间安装自带的Windows SDK3 Qt配置ssl4 ubuntu编译linuxdeployqt 更多精彩内容👉内容导航 👈👉Qt开发经验 👈 1 安装Qt creator后无法使用debug调试 安装最新版本Q…...
go 通过汇编学习atomic原子操作原理
文章目录 概要一、原理1.1、案例1.2、关键汇编 二、LOCK汇编指令2.1、 LOCK2.2、 原理2.2.1、 缓存行2.2.2、 缓存一致性之MESI协议2.2.3、lock原理 三、x86缓存发展四、x86 DMA发展参考 概要 在并发操作下,对一个简单的aa2的操作都会出错,这是因为这样…...
LOJ 6346 线段树:关于时间 Solution
Description 给定序列 a ( a 1 , a 2 , ⋯ , a n ) a(a_1,a_2,\cdots,a_n) a(a1,a2,⋯,an),另有一个存储三元组的列表 L L L. 有 m m m 个操作分两种: add ( l , r , k ) \operatorname{add}(l,r,k) add(l,r,k):将 ( l , r , …...
Python----神经网络(基于Alex Net的花卉分类项目)
一、基于Alex Net的花卉分类 1.1、项目背景 在当今快速发展的科技领域,计算机视觉已成为一个备受关注的研究方向。随着深度学习技术的不断进步,图像识别技术得到了显著提升,广泛应用于医疗、安防、自动驾驶等多个领域。其中,花卉…...
影刀RPA开发-魔法指令-玩转图片识别
聊聊天,就能生成指令! 1. 影刀RPA提取图片内容的方式 官方AI识别 集成的第三方识别指令 免费的识别指令 使用python自己编写识别代码,自己安装第三方库 import easyocr# 创建一个 EasyOCR 识别器,指定同时识别中文(简…...
从零开始开发纯血鸿蒙应用之XML解析
从零开始开发纯血鸿蒙应用 〇、前言一、鸿蒙SDK中的 XML API1、ohos.xml2、ohos.convertxml 三、XML 解析实践1、源数据结构2、定义映射关系3、定义接收对象4、获取文章信息 四、总结 〇、前言 在前后端的数据传输方面,论格式化形式,JSON格式自然是首选…...
运算放大器稳定性分析
我们常见的运放电路大多是在闭环状态。那么就必然遵循闭环控制系统的基本原理。闭环控制系统的核心是通过反馈来调节系统的输出,使其更接近期望值。 本文从闭环控制系统的角度,画出同相、反相差分电路的经典控制框图。有了控制框图就可以利用经典控制理论…...
python【扩展库】websockets
文章目录 介绍基础教程安装websockets接收与发送消息介绍 websockets基于python构建websocket服务、客户端的扩展库;官方文档;优点是正确性(严格测试,100%分支覆盖)、简单性(自管理连接)、健壮性、高性能(C扩展加速内存操作),双向通信;基于(python标准异步io框架)…...
leetcode 454. 4Sum II
题目描述 代码: class Solution { public:int fourSumCount(vector<int>& nums1, vector<int>& nums2, vector<int>& nums3, vector<int>& nums4) {unordered_map<int,int> table;int temp 0;for(auto n1:nums1){fo…...
MCP 传输层代码分析
MCP 传输层代码分析 MCP 整体架构说明 引用官方文档原文:Model Context Protocol (MCP) 构建在一个灵活且可扩展的架构上,使 LLM 应用和集成之间的无缝通信成为可能。具体架构细节可以参考文档(核心架构 - MCP 中文文档)。MCP 采…...
OBS studio 减少音频中的杂音(噪音)
1. 在混音器中关闭除 麦克风 之外的所有的音频输入设备 2.在滤镜中增加“噪声抑制”和“噪声门限”...
java的Stream流处理
Java Stream 流处理详解 Stream 是 Java 8 引入的一个强大的数据处理抽象,它允许你以声明式方式处理数据集合(类似于 SQL 语句),支持并行操作,提高了代码的可读性和处理效率。 一、Stream 的核心概念 1. 什么是 Str…...
Windows使用虚拟环境执行sh脚本
在代码文件夹git bash here echo ‘export PATH“/f/anaconda/Scripts:$PATH”’ >> ~/.bashrc echo ‘source /f/anaconda/etc/profile.d/conda.sh’ >> ~/.bashrc source ~/.bashrc conda路径确认 where conda conda activate mmt bash ./online.sh感谢gpt记录…...
Transformer Decoder-Only 算力FLOPs估计
FLOPs和FLOPS的区别 FLOPs (Floating Point Operations)是指模型或算法执行过程中总的浮点运算次数,单位是“次”FLOPS (Floating Point Operations Per Second)是指硬件设备(如 GPU 或 CPU)每…...
数字电子技术基础(五十七)——边沿触发器
目录 1 边沿触发器 1.1 边沿触发器简介 1.1.1 边沿触发器的电路结构 1.3 边沿触发的D触发器和JK触发器 1.3.1 边沿触发的D型触发器 1.3.2 边沿触发的JK触发器 1 边沿触发器 1.1 边沿触发器简介 对于时钟触发的触发器来说,始终都存在空翻的现象,抗…...
05.three官方示例+编辑器+AI快速学习three.js webgl - animation - skinning - ik
本实例主要讲解内容 这个Three.js示例展示了**反向运动学(Inverse Kinematics, IK)**在3D角色动画中的应用。通过加载一个角色模型,演示了如何使用IK技术实现自然的肢体运动控制,如手部抓取物体的动作。 核心技术包括: CCD反向运动学求解器…...
MYSQL数据库集群高可用和数据监控平台
项目环境 项目拓扑结构 软硬件环境清单 软硬件环境清单 软硬件环境清单 主机名IP硬件软件 master1 192.168.12.130 VIP:192.168.12.200 cpu:1颗2核 内 存:2GB HDD:20GB 网 络:NAT VmWare17 OpenEuler22.03 SP4 MySql8.0.3…...
《异常链机制详解:如何优雅地传递Java中的错误信息?》
大家好呀!👋 作为一名Java开发者,相信你一定见过各种奇奇怪怪的异常报错。但有没有遇到过这样的情况:明明只调用了一个方法,却看到异常信息像俄罗斯套娃一样一层层展开?🤔 这就是我们今天要讲的…...
MySQL 数据库集群部署、性能优化及高可用架构设计
MySQL 数据库集群部署、性能优化及高可用架构设计 集群部署方案 1. 主从复制架构 传统主从复制:配置一个主库(Master)和多个从库(Slave)GTID复制:基于全局事务标识符的复制,简化故障转移半同步复制:确保至少一个从库接收到数据…...
什么是深度神经网络
深度神经网络(DNN)详细介绍 1. 定义与核心原理 深度神经网络(Deep Neural Network, DNN)是一种具有多个隐藏层的人工神经网络模型,其核心在于通过层次化的非线性变换逐步提取输入数据的高层次抽象特征。与浅层神经网络相比,DNN的隐藏层数量通常超过三层,例如VGGNet、R…...
深入解析PyTorch中MultiheadAttention的隐藏参数add_bias_kv与add_zero_attn
关键背景 最近在学习pytorch中的源码尤其是nn.modules下算子的实现,针对activation.py下MultiheadAttention下有两个不常见的参数的使用比较有趣,因为时序领域很少使用这两个参数(add_bias_kv和add_zero_attn),但是其…...
最大化效率和性能:AKS 中节点池的强大功能
什么是节点池 在 Azure Kubernetes 服务 (AKS) 中,相同配置的节点会被分组到节点池中。这些节点池包含运行应用程序的底层虚拟机。创建 AKS 集群时,您需要定义初始节点数及其大小 (SKU)。随着应用程序需求的变化,您可能需要更改节点池的设置…...
用户态到内核态:Linux信号传递的九重门(一)
1. 信号的认识 1.1. 信号的特点 异步通知:信号是异步的,发送信号的进程无需等待接收进程的响应。预定义事件:每个信号对应一个预定义的事件(如终止、中断、段错误等)。 轻量级:信号不携带大量数据…...
c语言第一个小游戏:贪吃蛇小游戏01
hello啊大家好 今天我们用一个小游戏来增强我们的c语言! 那就是贪吃蛇 为什么要做一个贪吃蛇小游戏呢? 因为这个小游戏所涉及到的知识有c语言的指针、数组、链表、函数等等可以让我们通过这个游戏来巩固c语言,进一步认识c语言。 一.我们先…...
JAVA EE_网络原理_网络层
晨雾散尽,花影清晰。 ----------陳長生. ❀主页:陳長生.-CSDN博客❀ 📕上一篇:数据库Mysql_联…...
前端性能指标及优化策略——从加载、渲染和交互阶段分别解读详解并以Webpack+Vue项目为例进行解读
按照加载阶段、渲染阶段和交互阶段三个维度进行系统性阐述: 在现代 Web 开发中,性能不再是锦上添花,而是决定用户体验与业务成败的关键因素。为了全面监控与优化网页性能,我们可以将性能指标划分为加载阶段、渲染阶段、和交互阶段…...
Flink 系列之十五 - 高级概念 - 窗口
之前做过数据平台,对于实时数据采集,使用了Flink。现在想想,在数据开发平台中,Flink的身影几乎无处不在,由于之前是边用边学,总体有点混乱,借此空隙,整理一下Flink的内容,…...
控制台打印带格式内容
1. 场景 很多软件会在控制台打印带颜色和格式的文字,需要使用转义符实现这个功能。 2. 详细说明 2.1.转义符说明 样式开始:\033[参数1;参数2;参数3m 可以多个参数叠加,若同一类型的参数(如字体颜色)设置了多个&…...
Linux为啥会重新设置中断请求号与中断向量号之间的关系?
Linux内核重新设置中断请求号(IRQ)与中断向量号之间的关系,主要出于以下核心原因和设计考量: 1. 硬件多样性与抽象需求 硬件中断号(HW Interrupt ID)的差异 不同处理器架构的中断控制器(…...
自然语言处理NLP中的连续词袋(Continuous bag of words,CBOW)方法、优势、作用和程序举例
自然语言处理NLP中的连续词袋(Continuous bag of words,CBOW)方法、优势、作用和程序举例 目录 自然语言处理NLP中的连续词袋(Continuous bag of words,CBOW)方法、优势、作用和程序举例一、连续词袋( Cont…...
计算机网络笔记(二十二)——4.4网际控制报文协议ICMP
4.4.1ICMP报文的种类 ICMP(Internet Control Message Protocol)是IP协议的辅助协议,主要用于传递控制消息、错误报告和诊断信息。其报文分为两大类:查询报文和错误报告报文。 1. 错误报告报文(Error Messages&#x…...
【AI论文】作为评判者的感知代理:评估大型语言模型中的高阶社会认知
摘要:评估大型语言模型(LLM)对人类的理解程度,而不仅仅是文本,仍然是一个开放的挑战。 为了弥合这一差距,我们引入了Sentient Agent作为评判者(SAGE),这是一个自动评估框…...
Kubernetes生产实战(二十七):精准追踪Pod数据存储位置
在生产环境中,快速定位Pod数据的物理存储位置是运维人员的基本功。本文将揭秘Kubernetes存储系统的核心原理,并提供一套经过实战检验的定位方法体系。 一、存储架构全景图 K8S存储架构 Pod --> Volume Mount --> PVC --> PV --> Storage P…...
极新携手火山引擎,共探AI时代生态共建的破局点与增长引擎
在生成式AI与行业大模型的双重驱动下,人工智能正以前所未有的速度重构互联网产业生态。从内容创作、用户交互到商业决策,AI技术渗透至产品研发、运营的全链条,推动效率跃升与创新模式变革。然而,面对AI技术迭代的爆发期࿰…...
[SIGPIPE 错误] 一个 Linux socket 程序,没有任何报错打印直接退出程序
1. 问题 在编写一个程序的时候,当然程序很复杂,遇到了一个 Linux socket 程序,没有任何报错打印直接退出程序,但是在程序里面我有很多 error log ,在程序退出的时候完全没有打印。为了说明问题,我编写了一…...
Qt 界面优化(绘图)
目录 1. 绘图基本概念2. 绘制各种形状2.1 绘制线段2.2 绘制矩形2.3 绘制圆形2.4 绘制文本2.5 设置画笔2.6 设置画刷 3. 绘制图片3.1 绘制简单图片3.2 平移图片3.3 缩放图片3.4 旋转图片 4. 其他设置4.1 移动画家位置4.2 保存/加载画家的状态 5. 特殊的绘图设备5.1 QPixmap5.2 Q…...
AQS(AbstractQueuedSynchronizer)解析
文章目录 一、AQS简介二、核心设计思想2.1 核心设计思想回顾2.2 CLH锁队列简介2.3 AQS对CLH队列的改动及其原因 三、核心组件详解3.1 state 状态变量3.2 同步队列 (FIFO双向链表) 四、核心方法深度解析4.1 获取同步状态 (独占模式) - acquire(int arg)4.2 释放同步状态 (独占模…...
Java并发编程常见问题与陷阱解析
引言 随着计算机硬件技术的飞速发展,多核处理器已经变得普遍,Java并发编程的重要性也日益凸显。然而,多线程编程并非易事,其中充满了许多潜在的问题和陷阱。作为一名Java开发工程师,掌握并发编程的常见问题及其解决方案…...
DEEPPOLAR:通过深度学习发明非线性大核极坐标码(1)
原文:《DEEPPOLAR: Inventing Nonlinear Large-Kernel Polar Codes via Deep Learning》 摘要 信道编码设计的进步是由人类的创造力推动的,而且恰如其分地说,这种进步是零星的。极性码是在Arikan极化核的基础上开发的,代表了编码…...
Java多态详解
Java多态详解 什么是多态? 比如我们说:“驾驶一辆车”,有人开的是自行车,有人开的是摩托车,有人开的是汽车。虽然我们都说“开车”,但“怎么开”是由具体的车类型决定的:“开”是统一的动作&a…...
go程序编译成动态库,使用c进行调用
以下是使用 Go 语言打包成 .so 库并使用 C 语言调用的完整步骤: 1. Go 语言打包成 .so 库 (1)编写 Go 代码 创建一个 Go 文件(如 calculator.go),并定义需要导出的函数。导出的函数名必须以大写字母开头…...
iVX:图形化编程与组件化的强强联合
在数字化浪潮中,软件开发范式正经历着从文本到图形的革命性转变。iVX 作为国产可视化编程领域的领军者,以 “图形化逻辑 组件化架构” 的双重创新,重新定义了软件开发的效率边界。其技术突破不仅体现在开发方式的革新,更通过一系…...
华为配置篇-RSTP/MSTP实验
MSTP 一、简介二、常用命令总结三、实验 一、简介 RSTP(快速生成树协议) RSTP(Rapid Spanning Tree Protocol)是 STP 的改进版本,基于 IEEE 802.1w 标准,核心目标是解决传统 STP 收敛速度慢的问…...
端口号被占用怎么解决
windows环境下端口号被占用怎么解决 win r 快捷键打开cmd输入netstat -ano|findstr 端口号 通过这个命令找到pidtaskkill /pid pid端口号 /t /f 如下图所示 命令解读 netstat 是一个网络统计工具,它可以显示协议统计信息和当前的TCP/IP网络连接。 -a 参数告诉 nets…...
GO语言-导入自定义包
文章目录 1. 项目目录结构2. 创建自定义包3. 初始化模块4. 导入自定义包5. 相对路径导入 在Go语言中导入自定义包需要遵循一定的目录结构和导入规则。以下是详细指南(包含两种方式): 1. 项目目录结构 方法1:适用于Go 1.11 &#…...