K_A18_001 基于STM32等单片机采集MQ2传感参数串口与OLED0.96双显示
K_A18_001 基于STM32等单片机采集MQ2传感参数串口与OLED0.96双显示
- 一、资源说明
- 二、基本参数
- 参数
- 引脚说明
- 三、驱动说明
- IIC地址/采集通道选择/时序
- 对应程序:
- 四、部分代码说明
- 1、接线引脚定义
- 1.1、STC89C52RC+MQ2传感参模块
- 1.2、STM32F103C8T6+MQ2传感参模块
- 五、基础知识学习与相关资料下载
- 六、视频效果展示与程序资料获取
- 七、注意事项
- 八、接线说明
- STC89C52RC
- STM32F103C8T6

一、资源说明
| 单片机型号 | 测试条件 | 模块名称 | 代码功能 |
|---|---|---|---|
| STC89C52RC | 晶振11.0592M | MQ2传感模块 | STC89C52RC采集MQ2传感模块参数 串口与OLED0.96双显示 |
| STM32F103C8T6 | 晶振8M/系统时钟72M | MQ2传感模块 | STM32F103C8T6采集MQ2传感模块参数 串口与OLED0.96双显示 |
其他资料目录 直戳跳转
二、基本参数
参数
可以用于家庭和工厂的气体泄漏监测装置,适宜于液化气、丁烷、丙烷、 甲烷、 酒精、烟雾等的探测;
灵敏度可调(图中蓝色数字电位器调节)
工作电压 5V 使用前,供电至少预热 2 分钟以上,传感器稍微发烫属于正 常现象;
输出形式:
a 模拟量电压输出
b 数字开关量输出(0 和 1)
引脚说明
| MQ2传感模块 | 引脚说明 |
|---|---|
| VCC | 正极 3.3-5V供电 |
| GND | 负极 接GND |
| DO | 数字量输出(默认高电平输出 到阀值输出低电平) |
| AO | 模拟量输出 |
三、驱动说明
STC89C52RC无ADC所以需要借助外部ADC模块 此处用PCF8591模块进行采集
IIC地址/采集通道选择/时序



对应程序:
以51为例
/*******************************************************************起动总线函数
函数原型: void Start_I2c();
功能: 启动I2C总线,即发送I2C起始条件.
********************************************************************/
void Start_I2c()
{PCF8591_SDA=1; /*发送起始条件的数据信号*/PCF8591_SCL=1;IIC_Delay();PCF8591_SDA=0; /*发送起始信号*/IIC_Delay(); PCF8591_SCL=0; /*钳住I2C总线,准备发送或接收数据 */IIC_Delay();
}/*******************************************************************结束总线函数
函数原型: void Stop_I2c();
功能: 结束I2C总线,即发送I2C结束条件.
********************************************************************/
void Stop_I2c()
{PCF8591_SDA=0; /*发送结束条件的数据信号*/PCF8591_SCL=1; /*结束条件建立时间大于4μs*/IIC_Delay();PCF8591_SDA=1; /*发送I2C总线结束信号*/IIC_Delay();
}/*******************************************************************字节数据发送函数
函数原型: void SendByte(UCHAR c);
功能: 将数据c发送出去,可以是地址,也可以是数据,发完后等待应答,并对此状态位进行操作.(不应答或非应答都使ack=0) 发送数据正常,ack=1; ack=0表示被控器无应答或损坏。
********************************************************************/
void SendByte(uint8_t c)
{uint8_t BitCnt;for(BitCnt=0;BitCnt<8;BitCnt++) /*要传送的数据长度为8位*/{if((c<<BitCnt)&0x80)PCF8591_SDA=1; /*判断发送位*/else PCF8591_SDA=0; PCF8591_SCL=1; /*置时钟线为高,通知被控器开始接收数据位*/IIC_Delay(); PCF8591_SCL=0; }IIC_Delay();PCF8591_SDA=1; /*8位发送完后释放数据线,准备接收应答位*/IIC_Delay(); PCF8591_SCL=1;IIC_Delay();if(PCF8591_SDA==1)ack=0; else ack=1; /*判断是否接收到应答信号*/PCF8591_SCL=0;IIC_Delay();
}/*******************************************************************字节数据接收函数
函数原型: UCHAR RcvByte();
功能: 用来接收从器件传来的数据,并判断总线错误(不发应答信号),发完后请用应答函数应答从机。
********************************************************************/
uint8_t RcvByte()
{uint8_t retc;uint8_t BitCnt;retc=0; PCF8591_SDA=1; /*置数据线为输入方式*/for(BitCnt=0;BitCnt<8;BitCnt++){PCF8591_SCL=0; /*置时钟线为低,准备接收数据位*/IIC_Delay();PCF8591_SCL=1; /*置时钟线为高使数据线上数据有效*/IIC_Delay();retc=retc<<1;if(PCF8591_SDA==1)retc=retc+1; /*读数据位,接收的数据位放入retc中 */IIC_Delay();}PCF8591_SCL=0; IIC_Delay();return(retc);
}/********************************************************************应答子函数
函数原型: void Ack_I2c(bit a);
功能: 主控器进行应答信号(可以是应答或非应答信号,由位参数a决定)
********************************************************************/
void Ack_I2c(uint8_t a)
{if(a==0)PCF8591_SDA=0; /*在此发出应答或非应答信号 */else PCF8591_SDA=1;IIC_Delay(); PCF8591_SCL=1;IIC_Delay();PCF8591_SCL=0; /*清时钟线,钳住I2C总线以便继续接收*/IIC_Delay();
}采集通道选择:
ISendByte(PCF8591,0x42);地址:
#define PCF8591 0x90 //PCF8591 地址
四、部分代码说明
1、接线引脚定义
需要自定义引脚可在此处更改,STM32要自定义引脚的话也要注意引脚时钟使能的更改
1.1、STC89C52RC+MQ2传感参模块
//MQ2传感+PCF8591模块引脚定义
MQ2传感模块---------------------------PCF8591
AO-------------------------------------AIN2sbit PCF8591_SCL=P1^0; //I2C 时钟
sbit PCF8591_SDA=P1^1; //I2C 数据
//OLED0.96模块引脚定义
sbit SCL=P1^2; //串行时钟
sbit SDA=P1^3; //串行数据
1.2、STM32F103C8T6+MQ2传感参模块
//MQ2传感模块引脚定义 GPIOA_0 ADC1通道0
#define ADC_GPIO_APBxClock_FUN RCC_APB2PeriphClockCmd
#define ADC_GPIO_CLK RCC_APB2Periph_GPIOA
#define ADC_PORT GPIOA
#define ADC_PIN GPIO_Pin_0
//OLED0.96模块引脚定义 //-----------------OLED IIC端口定义---------------- #define OLED_SCLK_Clr() GPIO_ResetBits(GPIOB,GPIO_Pin_8)//SCL
#define OLED_SCLK_Set() GPIO_SetBits(GPIOB,GPIO_Pin_8)#define OLED_SDIN_Clr() GPIO_ResetBits(GPIOB,GPIO_Pin_9)//SDA
#define OLED_SDIN_Set() GPIO_SetBits(GPIOB,GPIO_Pin_9)
五、基础知识学习与相关资料下载
1、STC89C52RC程序下载 直戳跳转
2、STM32F103C8T6程序下载
(1)串口下载 直戳跳转
(2)ST-LINK下载 直戳跳转
(3)J-LINK下载 直戳跳转
(4)DAP-LINK下载 直戳跳转
3、OLED0.96程序说明 直戳跳转
4、串口助手下载与使用
(1)安信可调试助手使用 直戳跳转
(2) sscom33串口调试助手使用 直戳跳转
(3)STC-ISP串口调试助手使用 直戳跳转
六、视频效果展示与程序资料获取
视频连接 直戳跳转
资料获取 (滑到最后添加个人号)
七、注意事项
1、VCC GND请勿接反,接反易烧
2、OLED显示异常时,排除接线接触不良
3、使用前需要预热
八、接线说明
STC89C52RC
/************************************************************************************
// 生成日期 : 2021-6-21
// 最近修改 : 2021-11-21
// 功能描述 : MQ2传感模块测试程序
// 测试条件 : STC89C52RC 晶振11.0592
接线
MQ2传感模块----------------------STC89C52RC
VCC-------------------------------5V
GND-------------------------------GND
MQ2传感模块----------------------PCF8591
AO--------------------------------AIN2PCF8591--------------------------------STC89C52RC
VCC-- ---------------------------------5V
GND- ----------------------------------GND
SCL- ----------------------------------P1.0 //SCL
SDA- ----------------------------------P1.1 //SDAOLED0.96(IIC) -------------------------STC89C52RC
VCC------------------------------------3.3V
GND------------------------------------GND
SCL------------------------------------P1^2
SDA------------------------------------P1^3
*************************************************************************************/
STM32F103C8T6
/************************************************************************************
// 生成日期 : 2021-6-21
// 最近修改 : 2021-11-21
// 功能描述 : MQ2传感模块测试程序
// 测试条件 : STM32F103C8T6 晶振8M 系统时钟 72M
接线
MQ2传感模块-----------------------STM32F103C8T6
VCC-------------------------------------3.3V
GND-------------------------------------GND
AO--------------------------------------PA_0 OLED0.96
VCC-- -----------------------------------3.3V
GND- ------------------------------------GND
SCL- ------------------------------------PB_8 //SCL
SDA- ------------------------------------PB_9 //SDA
*****************************************************************************************/
相关文章:
K_A18_001 基于STM32等单片机采集MQ2传感参数串口与OLED0.96双显示
K_A18_001 基于STM32等单片机采集MQ2传感参数串口与OLED0.96双显示一、资源说明二、基本参数参数引脚说明三、驱动说明IIC地址/采集通道选择/时序对应程序:四、部分代码说明1、接线引脚定义1.1、STC89C52RCMQ2传感参模块1.2、STM32F103C8T6MQ2传感参模块五、基础知识学习与相关…...
【云原生·Docker】常用命令
目录 🍁1、管理命令 🍁2、帮助命令 🍁3、镜像命令 🍁4、容器命令 🍂4.1.查看容器 🍂4.2.创建容器 🍂4.3.删除容器 🍂4.4.拷贝文件 🍂4.5.查看容器IP 🍁5、部署…...
户外露营储能电源芯片CSU3AF10
户外露营的项目有很多,随着户外储能电源的发展,越来越多的电子产品可以在户外使用,也不用担心因为在户外时间过长而手机或者其他电子产品电量耗尽。户外储能电源可保证人们随时随地的用电需求,同时也可以满足家电炊具的供电需求&a…...
无线WiFi安全渗透与攻防(八)之WEP-Hirte渗透WEP加密
WEP-渗透WEP新思路–Hirte 1.Hirte介绍 Hirte是破解无线网络WEP Key的一种攻击类型 只要客户端设备(笔记本电脑,手机等)连接过的无线网络,那些WIFI即使是不在攻击者范围内也都能被破解,因为该wifi的WEP密钥和配置文…...
前端常考面试题整理
display:none与visibility:hidden的区别 这两个属性都是让元素隐藏,不可见。两者区别如下: (1)在渲染树中 display:none会让元素完全从渲染树中消失,渲染时不会占据任何空间;visibility:hidden不会让元素…...
二十二、身份验证与权限
一、 准备工作 为了讲清楚身份验证与权限,我们再创建一个应用projects,设计模型如下: class Project(models.Model):name models.CharField(项目名称, max_length20, help_text项目名称)desc models.CharField(项目描述, max_length200, help_text项目…...
k8s pod 升级与回滚
当集群中的某个服务需要升级时,我们需要停止目前与该服务相关的所有pod,然后下载新版本镜像并创建新的pod。如果集群规模比较大,则这个工作变成了一个挑战,而且先全部停止然后逐步升级的方式会导致较长时间的服务不可用。kubernet…...
【Go】Go语言开发环境安装
【Go】Go语言开发环境安装 导入 安装环境:Winowds 我现在是win7安装的,与win10整体步骤是一样的,只是部分显示的时候有点差异不影响; 【名词】 编译器:先将代码编译成可执行文件,再执行; —…...
el-switch使用
效果图: 1.表格代码,给el-waitch加上change事件 <el-table-column prop"status" label"状态" align"center" width"150"> <template slot-sc…...
【算法入门】字符串基础
目录 一.字符串引言1.字符串基础二.洛谷P5734详解1.字符串相关库函数💫(1) strcpy函数 💫💫(2) strcat函数 💫💫(3)strstr函数 💫2.题…...
前端面试题 —— 浏览器原理(二)
目录 一、有哪些可能引起前端安全的问题? 二、网络劫持有哪几种,如何防范? 三、浏览器渲染进程的线程有哪些 四、僵尸进程和孤儿进程是什么? 五、为什么需要浏览器缓存? 六、对浏览器的理解 七、CSS 如何阻塞文档解析&…...
对于植物神经紊乱的治疗 中医采用辩证论治的方法
植物神经紊乱是由于心理压力过大、长期生活不规律所导致的一种疾病,这种疾病的发生往往是症状多样、涉及广泛的。当患有植物神经紊乱之后,主要的症状会以躯体化障碍为常见症状,但是很多患者还会出现情绪失控、睡眠障碍等问题。 对于植物神经紊…...
chatGPT之Python API启用上下文管理
chatGPT已经爆火一段时间了,我想大多数的开发者都在默默的在开发和测试当中,可能也是因为这个原因所以现在很难找到关于开发中遇到的一些坑或者方法和技巧。为什么别人的机器人能联想之前的语料,而你的却像个每次都只如初见的高冷机器人&…...
油田钻井实时在线监测系统
油田钻井的井下油层的压力不断变化,环境深度和压力巨大,且井下原油具有一定的流动性,实时在线压力监测是石油开采行业的难点。为更好地了解油田开采过程中油层的状况,提高油田开采效率和产量,油田钻井实时在线监测系统…...
经典PID控制算法原理以及优化思路
文章目录0、概念1、理解2、实现3、优化4、引用0、概念 PID算法是工业应用中最广泛算法之一,在闭环系统的控制中,可自动对控制系统进行准确且迅速的校正。PID控制,即Proportional – Integral(I) – Derivative(D) Control, 实际上是三种反馈…...
经典面试题之赋值和深浅拷贝的区别
1.区别 **赋值:**基本数据直接拷贝,互不影响,引用数据把地址赋值给新对象,新旧对象指向同一个地址。 **浅拷贝: **基本类型之间互不影响,对象只会复制对象的第一层基本数据和引用类型的地址,对象内部嵌套的…...
电子取证的电脑配置有关问题,以我仅有的知识为大家建议一下。
电子取证火力很重要,用轻薄本是没法取证的,所以至少是全能本或者是游戏本,牛逼的选手上台式,参考浙警许专家,yyds我专家! 我从实战出发,参考历年“美亚杯”和“长安杯”比赛,给大家…...
【基础算法】单链表的OJ练习(5) # 环形链表 # 环形链表II # 对环形链表II的解法给出证明(面试常问到)
文章目录前言环形链表环形链表 II写在最后前言 本章的OJ练习相对于OJ练习(4)较为简单。不过,本章的OJ最重要的是要我们证明为何可以这么做。这也是面试中常出现的。 对于OJ练习(4):-> 传送门 <-,分割链表以一种类似于归并的思想解得&a…...
MySQL 基础教程[13]
MySQL 基础教程[13]问题1问题1代码问题2问题2代码本系列MySQL 基础教程通过“问题-代码”的方式介绍各类方法,每篇设置2个MySQL综合问题,并给出解决方案。 问题1 kwgl数据库中有学生基本信息表student和系别表dept。表结构及说明如下: student (sid, s…...
个人练习-Leetcode-826. Most Profit Assigning Work
题目链接:https://leetcode.cn/problems/most-profit-assigning-work/ 题目大意:给出一串任务,difficulty表示任务难度,profit表示任务的收益(以下简称diff和pro)。给出一串工人的能力worker。每个工人只能…...
【Axure高保真原型】引导弹窗
今天和大家中分享引导弹窗的原型模板,载入页面后,会显示引导弹窗,适用于引导用户使用页面,点击完成后,会显示下一个引导弹窗,直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...
装饰模式(Decorator Pattern)重构java邮件发奖系统实战
前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...
BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践
6月5日,2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席,并作《智能体在安全领域的应用实践》主题演讲,分享了在智能体在安全领域的突破性实践。他指出,百度通过将安全能力…...
是否存在路径(FIFOBB算法)
题目描述 一个具有 n 个顶点e条边的无向图,该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序,确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数,分别表示n 和 e 的值(1…...
20个超级好用的 CSS 动画库
分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码,而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库,可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画,可以包含在你的网页或应用项目中。 3.An…...
WebRTC从入门到实践 - 零基础教程
WebRTC从入门到实践 - 零基础教程 目录 WebRTC简介 基础概念 工作原理 开发环境搭建 基础实践 三个实战案例 常见问题解答 1. WebRTC简介 1.1 什么是WebRTC? WebRTC(Web Real-Time Communication)是一个支持网页浏览器进行实时语音…...
关于easyexcel动态下拉选问题处理
前些日子突然碰到一个问题,说是客户的导入文件模版想支持部分导入内容的下拉选,于是我就找了easyexcel官网寻找解决方案,并没有找到合适的方案,没办法只能自己动手并分享出来,针对Java生成Excel下拉菜单时因选项过多导…...
windows系统MySQL安装文档
概览:本文讨论了MySQL的安装、使用过程中涉及的解压、配置、初始化、注册服务、启动、修改密码、登录、退出以及卸载等相关内容,为学习者提供全面的操作指导。关键要点包括: 解压 :下载完成后解压压缩包,得到MySQL 8.…...
【深度学习新浪潮】什么是credit assignment problem?
Credit Assignment Problem(信用分配问题) 是机器学习,尤其是强化学习(RL)中的核心挑战之一,指的是如何将最终的奖励或惩罚准确地分配给导致该结果的各个中间动作或决策。在序列决策任务中,智能体执行一系列动作后获得一个最终奖励,但每个动作对最终结果的贡献程度往往…...
用递归算法解锁「子集」问题 —— LeetCode 78题解析
文章目录 一、题目介绍二、递归思路详解:从决策树开始理解三、解法一:二叉决策树 DFS四、解法二:组合式回溯写法(推荐)五、解法对比 递归算法是编程中一种非常强大且常见的思想,它能够优雅地解决很多复杂的…...
