第八章 STM32+SGP气体传感器+DHT11温湿度传感器+OLED模块显示室内温湿度、二氧化碳和甲醛浓度

        在智能家居相关的物联网毕设中,少不了室内气体检测功能,比如检测烟雾,检测一氧化碳,检测甲醛等有害气体浓度,别人有的,我们也要有!所以本章给大家介绍一款气体传感器——SGP气体传感器,这款气体传感器能够检测室内空气中二氧化碳和甲醛的浓度值,只不过得上电几分钟之后,检测得数值才会趋于稳定。使用也是非常简单,如下图所示,该模块有四根引脚,分别是VCC,GND,SCL和SDA。

        看到SCL和SDA,我们就知道了接下来STM32是通过I2C总线来跟它进行通讯的。按照资料提供的接线图,用杜邦线将STM32与SGP模块连接起来,再通过JLink或STlink将提供的SGP气体传感器的代码编译并烧录进去STM32,即可使SGP气体传感器工作起来。

        接下来说一下代码部分。

        第7行的 SGP_DATA变量负责存储GSP30模块回复给STM32的气体浓度数据

        第8行的 CO2DATA和TVOCDATA 两个变量分别存储气体浓度数据中CO2和TCVO的浓度值。

        第10行和第11行代码,在前面章节都有说了,一个是设置中断优先级分组,一个是初始化系统时钟相关,使延时效果准确。

        第12行是对SGP30模块进行初始化的函数,有兴趣想了解初始化步骤的可以从资料的代码里自行查看。

        上图中,方框1区域的代码是STM32单片机每500ms获取GSP30模块检测到的空气中CO2浓度值和TVCO浓度值,目的是让我们知道SGP30模块是否开始检测,当CO2浓度一直等于400ppm且TVCO浓度一直等于0ppd时,说明该模块还未开始检测,当STM32获取到的CO2浓度和TVCO浓度值开始变化了,说明模块开始检测,此时代码就会运行方框2区域的代码,执行内容依旧是STM32单片机每500ms获取SGP30模块检测到的空气中CO2浓度值和TVCO浓度值,其中CO2DATA存储CO2和TVOCDATA 存储TCVO的浓度值。


        正好第七章我们实现了OLED显示温湿度,现在顺便将该模块的功能移植到第七章的代码中,实现OLED显示环境的温湿度、二氧化碳和甲醛的浓度。

        首先打开SGP30工程文件和第七章的工程文件,因为SGP30与STM32之间是通过I2C进行通讯的,所以我们把I2C驱动源码文件移植到第七章的工程文件中。

         移植完I2C驱动源码文件后,我们就可以将包含GSP30初始化函数以及STM32获取CO2、TCVO浓度所需的函数的代码文件也移植过来。但是GSP30的代码工程已将这部分内容都整合在上面移植的SGP30文件内了,所以文件方面的移植只要完成上图的操作就可以了。 

         接下来打开第七章的代码,进行下图操作,将包含I2C驱动源码和STM32获取CO2和TCVO浓度所需的函数的代码C文件添加进工程中。

        在弹出的窗口进行一下操作。

         将移植过来的SGP30文件添加到编译路径。 具体操作如下:

        1.点击图中红色框的“魔法棒”图标。

         2.点击“魔法棒”后会弹出一个窗口,先点击窗口顶部的 C/C++ (图中1号标位置),然后点击图中2号标位置。

         3.完成2的步骤后,会弹出一个窗口,先点击1号标的位置,会弹出下面蓝色区域的长条框,长条框里面就可以选择我们要新的编译路径。

        4. 点击长条框右侧的地方(2号标位置),找到刚从SGP30工程文件移植过来的GSP30文件即可,如下图所示就是工程将移植过来的GSP30文件添加到编译路径,然后点击OK推出即可。

         做完上图操作,我们就可以调用sgp30.c里面函数了,首先在第七章代码的main.c开头添加SGP30.h头文件(第1个箭头指示),并将存储CO2、TVCO浓度数值的变量也复制过来(第2个箭头指示),然后调用SGP30初始化的函数(第3个箭头指示)。

         初始化完SGP30模块后,我们就可以调用获取CO2、TVCO浓度数值的代码并进行显示了,如下所示。1号标位置作用是在OLED上显示字符“CO2”、“ppm”、“TVCO”、“ppd”,2、3号标位置代码我就不多说了,上面有讲,4号标位置代码是在OLED上显示CO2、TVCO浓度数值。

         效果如下:

 想要资料的同学,评论区留下邮箱。

猜你喜欢

转载自blog.csdn.net/qq_44645742/article/details/126256342