【单片机】PMS5003,PM2.5传感器数据读取处理

文章目录

  • 传感器介绍
  • 数据处理
  • 解析pm2.5的代码
  • 帮助、问询

传感器介绍

PMS5003是一款基于激光散射原理的数字式通用颗粒物浓度传感器,可连续采集
并计算单位体积内空气中不同粒径的悬浮颗粒物个数,即颗粒物浓度分布,进而
换算成为质量浓度,并以通用数字接口形式输出。本传感器可入各种与空气中
悬浮颗粒物浓度相关的仪器仪表或环境改善设备,为其提供及时准确的浓度数
据。

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

数据处理

读取的数据:
在这里插入图片描述

解析pm2.5的代码

逻辑是:
1、初始化串口和定时器10ms中断
2、循环读取一帧数据到rev_pm25_bufferdata
3、在主函数解析数据rev_pm25_bufferdata
4、最终的pm2.5数值就是pm25_value

使用pm25_value 的数据即可。


#include "sys.h"
#include "delay.h"
#include "usart.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>#include "led.h"
#include "timer.h"char rev_pm25_bufferdata[50];
char rev_pm25_data_cnt = 0;
char rev_pm25_flag = 0;
char rev_pm25_timercnt = 0;
char rev_pm25_sucess = 0;
uint32_t pm25_value = 0;
uint32_t pm25_verify = 0;
unsigned char pm25_verify_cnt = 0;int main(void) {NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);delay_init();RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);delay_ms(500);uart_init(9600);TIM4_Int_Init(99, 7199);                                     /* 10Khz的计数频率,计数到50为10ms */TIM_Cmd(TIM4, ENABLE);                                        /* 使能TIMx  开始计时 */while (1) {delay_ms(5);if (rev_pm25_sucess == 1) {rev_pm25_sucess = 0;if ((rev_pm25_bufferdata[0] == 0x42) && (rev_pm25_bufferdata[1] == 0x4d)) {pm25_verify = 0;for (pm25_verify_cnt = 0; pm25_verify_cnt < 30; pm25_verify_cnt++) {pm25_verify += rev_pm25_bufferdata[pm25_verify_cnt];}if (pm25_verify == (rev_pm25_bufferdata[30] * 256 + rev_pm25_bufferdata[31])) {pm25_value = rev_pm25_bufferdata[6] * 256 + rev_pm25_bufferdata[7];}}}}
}// 10ms
void TIM4_IRQHandler(void)                                    /* TIM4中断 */
{if (TIM_GetITStatus(TIM4, TIM_IT_Update) != RESET)  /* 检查TIM4更新中断发生与否 */{TIM_ClearITPendingBit(TIM4, TIM_IT_Update);   /* 清除TIM4更新中断标志 *///10ms一帧if (rev_pm25_flag == 1) {rev_pm25_timercnt++;}if (rev_pm25_timercnt >= 4) {rev_pm25_timercnt = 0;rev_pm25_flag = 0;//数据处理标志rev_pm25_sucess = 1;}}
}//A9模块
void USART1_IRQHandler(void)                                                                  /* 串口1中断服务程序 */
{u8 receiveData;if (USART_GetITStatus(USART1, USART_IT_RXNE) !=RESET)                              /* 接收中断(接收到的数据必须是0x0d 0x0a结尾) */{receiveData = USART_ReceiveData(USART1);                                      /* 读取接收到的数据 */if (rev_pm25_flag == 0) {rev_pm25_data_cnt = 0;rev_pm25_bufferdata[rev_pm25_data_cnt++] = receiveData;rev_pm25_flag = 1;} else if (rev_pm25_flag == 1) {rev_pm25_bufferdata[rev_pm25_data_cnt++] = receiveData;if (rev_pm25_data_cnt >= 50) {rev_pm25_data_cnt = 0;}}}
}

帮助、问询

https://docs.qq.com/sheet/DUEdqZ2lmbmR6UVdU?tab=BB08J2

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

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

相关文章

综测仪MT8862A控制方法

实现自动化控制&#xff0c;本次为大家讲解综测仪MT8862A的控制逻辑。 新建底层控制逻辑 在文件basis_contorl.py中写入仪器控制底层代码&#xff0c;代码如下&#xff1a; import tkinter.messagebox import pyvisaclass InstrumentControl(object):inst Nonedef __init__(…

Python中的scorecardpy.var_filter函数

scorecardpy是一个用于构建评分卡模型的Python库。在评分卡模型的构建过程中,变量选择是一个关键的步骤,而var_filter函数则是用于进行变量筛选的工具。本文和你一起来探索scorecardpy中的var_filter函数,让你以最短的时间明白这个函数的原理。也可以利用碎片化的时间巩固这…

【学习总结】Linux tmux 使用

1. 使用背景 本地连接服务器 AutoDL 训练模型时&#xff0c;使用 ssh 连接时&#xff1a; ssh -p xxxxx rootconnect.westc.gpuhub.com输入密码登录成功后 为了训练过程中本地和服务器始终连接&#xff0c;可以使用 tmux 终端复用工具开启后台训练 2. 安装 ~# sudo apt-ge…

CKA 基础操作教程(二)

Kubernetes Deployment 理论学习 Kubernetes Deployment &#xff08;部署&#xff09;是一种 Kubernetes 资源对象&#xff0c;用于定义和管理容器化应用程序的部署和更新。Deployment 提供了一种声明性的方式来定义应用程序的期望状态&#xff0c;并负责确保所需数量的 Pod…

聚簇索引与非聚簇索引b+树实现的区别

文章目录 聚簇索引非聚簇索引B树中聚簇索引的查找&#xff08;匹配&#xff09;逻辑B树中非聚簇索引的查找&#xff08;匹配&#xff09;逻辑 聚簇索引 特点&#xff1a; 索引和数据保存在同一个B树中 页内的记录是按照主键的大小顺序排成一个单向链表 。 页和页之间也是根据…

算法设计与分析实验报告c++java实现(矩阵链连乘、投资问题、完全背包问题、旅行商问题、数字三角形)

一、 实验目的 1&#xff0e;加深学生对算法设计方法的基本思想、基本步骤、基本方法的理解与掌握&#xff1b; 2&#xff0e;提高学生利用课堂所学知识解决实际问题的能力&#xff1b; 3&#xff0e;提高学生综合应用所学知识解决实际问题的能力。 二、实验任务 用动态规…

力扣回溯篇

文章目录 46.全排列78.子集17.电话号码的字母组合39.组数总和79.单词搜索131.分割回文子串 46.全排列 给定一个不含重复数字的数组 nums &#xff0c;返回其所有可能的全排列 。你可以按任意顺序返回答案。 输入&#xff1a;nums [1,2,3] 输出&#xff1a;[[1,2,3],[1,3,2],…

Linux:IO多路转接之poll

文章目录 select的缺点pollstruct pollfd解决缺点的方式 代码实现 本篇总结的是poll的相关内容&#xff0c;在总结poll的内容前&#xff0c;先回顾一下select的缺点 select的缺点 select的缺点也比较明显 等待的fd是有上限的&#xff0c;在我们当前这个版本来说&#xff0c;…

【AOSP】手把手教你编译和调试AOSP源码

一、下载AOSP源码 在开始之前&#xff0c;我们先安装编译AOSP需要的一些系统基本依赖&#xff0c;如下命令 sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g-multilib libc6-dev-i386 lib32ncurses5-dev x11proto…

Shell快捷键大全

Shell快捷键大全 快捷键操作控制命令&#xff1a;Ctrl C中断当前正在运行的命令Ctrl Z挂起当前正在运行的命令Ctrl L清屏编辑命令&#xff1a;Ctrl U删除光标之前的内容Ctrl K删除光标之后的内容Ctrl W删除光标之前的一个单词Ctrl Y粘贴之前使用Ctrl U&#xff0c;Ctr…

【图论】【分类讨论】LeetCode3017按距离统计房屋对数目

本文涉及的知识点 图论 分类讨论 本题同解 【差分数组】【图论】【分类讨论】【整除以2】3017按距离统计房屋对数目 LeetCode3017按距离统计房屋对数目 给你三个 正整数 n 、x 和 y 。 在城市中&#xff0c;存在编号从 1 到 n 的房屋&#xff0c;由 n 条街道相连。对所有 …

字节跳动2024春招内幕:Python itertools面试题大全(超全面!超详细!)绝对值得收藏!

在面对2024年字节跳动的Python开发岗位春季招聘时&#xff0c;深入了解和熟练应用Python标准库中的itertools模块成为了每位求职者不可回避的挑战。作为Python中处理迭代数据的利器&#xff0c;itertools不仅提供了一系列高效、优雅的工具来创建和操作迭代器&#xff0c;而且其…

MBTI测试在职场:如何与不同性格类型的同事相处?(包含开源免费的API)

MBTI简介 MBTI的全名是Myers-Briggs Type Indicator。它是一种迫选型、自我报告式的性格评估工具&#xff0c;用以衡量和描述人们在获取信息、作出决策、对待生活等方面的心理活动规律和性格类型。 差异简介 MBTI倾向显示了人与人之间的差异&#xff0c;而这些差异产生于&…

AcWing 1101.献给阿尔吉侬的花束

思路&#xff1a;BFS 这里不用BFS进行遍历了&#xff0c;这里实验一种比较高效的BFS遍历&#xff1a;双向BFS。 其实这个双向BFS很简单&#xff0c;也就是说我们只要知道了终点和起点&#xff0c;这两个并不能少其中一个&#xff0c;这样我们就可以用双向BFS来节省时间。 下…

Centos7下docker安装jenkins【使用docker-compose图文教程】

个人记录 前置条件&#xff1a;安装Docker与Docker-compose Centos7安装Docker与Docker-compose【图文教程】 查看jenkins最新的版本 https://www.jenkins.io/download/ 配置docker-compose.yml vim docker-compose.yml按i进行编辑模式&#xff0c;粘贴如下内容。把image里…

【SQLServer】快速查看SQL Server中所有数据库中所有表的行数

1.查看某个数据库中每个表的行数 SELECT @@servername as servername, db_name() as databasename, s.name AS schemaname, t.name AS tablename,p.rows AS rowcounts,SUM(a

11-pyspark的RDD的变换与动作算子总结

目录 前言 变换算子动作算子 前言 一般来说&#xff0c;RDD包括两个操作算子&#xff1a; 变换&#xff08;Transformations&#xff09;&#xff1a;变换算子的特点是懒执行&#xff0c;变换操作并不会立刻执行&#xff0c;而是需要等到有动作&#xff08;Actions&#xff09;…

java(7)之跳转语句

1、break跳转语句 说到break其实也不是跳转&#xff0c;它更像是一个终结语句&#xff0c;常用于在循环语句需要停止出现例如 while&#xff08;&#xff09;{ if&#xff08;&#xff09;{ break&#xff1b; }} 这样的形式或者 switch&#xff08;&#xff09;{ case…

Flutter 关键字

import ‘package:xxxx.dart’; //源于pub.dev (完美的相对引入) import ‘xxxx.dart’; //自定义文件(库)(参考的相对引入(填写import命令码所在文件的上级文件夹下的文件(库)相对路径))(受到import命令码所在文件的参考路径的影响) import&#xff1a;import不具有传递性(类似…

蓝桥 python笔记14——KMP、字符串哈希、最长回文子串、字典树

目录 KMP 字符串哈希 最长回文子串 字典树 KMP 模式匹配问题&#xff1a; KMP算法&#xff1a; 用动规的思想求Next数组&#xff1a;如果后缀的i位置前缀的j位置&#xff0c;Next[i1]j1&#xff1b;如果后缀的i位置!前缀的j位置&#xff0c;那就用KMP算法&#xff0c;令jNe…