打印
[STM32F1]

STM32F103C8T6+SGP30检测CO2与TVOC

[复制链接]
5654|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
KellyFoo|  楼主 | 2019-4-8 15:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我使用STM32F103C8T6开发板加SGP30传感器检测CO2与TVOC的浓度,只实现最简单的数据读取,但是读出来的数据各位全为1,不是有效数据,代码如下:
sgp30.h
#ifndef __SGP30_H
#define __SGP30_H

#include "myiic.h"

void Read_Air_Quality(u16 *co2, u16 *tvoc);

void        SGP30_Init(void);

#endif
sgp30.c
#include "sgp30.h"
#include "delay.h"

#include "OLED_IIC.h"

void SGP30_Init(void)
{        
        IIC_Init();
               
        IIC_Start();
        IIC_Send_Byte(0x58);
        IIC_Wait_Ack();
        IIC_Send_Byte(0x20);
        IIC_Wait_Ack();
        IIC_Send_Byte(0x03);
        IIC_Wait_Ack();
        IIC_Stop();
        
        IIC_Start();
        IIC_Send_Byte(0x58);
        IIC_Wait_Ack();
        IIC_Send_Byte(0x20);
        IIC_Wait_Ack();
        IIC_Send_Byte(0x08);
        IIC_Wait_Ack();
        IIC_Stop();
}

void Read_Air_Quality(u16 *co2, u16 *tvoc)
{
        u8 co2_high = 0;
        u8 co2_low = 0;
        u8 tvoc_high = 0;
        u8 tvoc_low = 0;
        
        delay_ms(15000);
        
        IIC_Start();
        IIC_Send_Byte(0x59);
        IIC_Wait_Ack();
        co2_high = IIC_Read_Byte(0);
        co2_low = IIC_Read_Byte(0);
        IIC_Read_Byte(0);
        tvoc_high = IIC_Read_Byte(0);
        tvoc_low = IIC_Read_Byte(0);
        IIC_Read_Byte(0);
        IIC_Stop();
        
        *co2 = (co2_high<<8)|co2_low;
        *tvoc = (tvoc_high<<8)|tvoc_low;
}
main.c
#include "stm32f10x.h"
#include "delay.h"
#include "sys.h"
#include <stdio.h>
#include <string.h>
#include "OLED_IIC.h"
#include "dht11.h"
#include "usart.h"
#include "sgp30.h"

/************************************************   
STM32F103C8T6     
12864_IIC_OLED_STM32驱动
OLED显示驱动模块: SSD1306
SGP30传感器
IIC: SCL, SDA
对应接口: PB0, PB1
SGP30:VCC, SCL, SDA, GND
对应接口: 3V, PB6, PB7, GND
CH340:TXD, RXD, GND
对应接口: PA10, PA9, GND
************************************************/

int main(void)
{
        u16 co2;
        u16 tvoc;

        delay_init();                           //延时初始化
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
        
        uart_init(9600);
        SGP30_Init();

        OLED_Init();                    //初始化OLED
  initial_olcd();                  //初始化
        clear_screen();                        //清屏
        
        delay_ms(50000);
        delay_ms(50000);
        delay_ms(50000);

        while(1)
        {
                Read_Air_Quality(&co2, &tvoc);
               
                USART_SendData(USART1, 1);
                delay_ms(12);
                USART_SendData(USART1, co2>>8);
                delay_ms(12);
                USART_SendData(USART1, 2);
                delay_ms(12);
                USART_SendData(USART1, co2&0x00ff);
                delay_ms(12);
                USART_SendData(USART1, 3);
                delay_ms(12);
                USART_SendData(USART1, tvoc>>8);
                delay_ms(12);
                USART_SendData(USART1, 4);
                delay_ms(12);
                USART_SendData(USART1, tvoc&0x00ff);
                delay_ms(12);
                while(USART_GetFlagStatus(USART1, USART_FLAG_TC)!=SET);
                USART_RX_STA = 0;
               
                display_number_16x8(1,1,co2);
                display_number_16x8(3,1,tvoc);
        }
}


请问有大神可以指点一下我这个小渣渣吗~

使用特权

评论回复
沙发
请叫我树人| | 2019-4-9 10:59 | 只看该作者
真是不错的啊! 可以的啊!

使用特权

评论回复
板凳
八层楼| | 2019-5-5 13:17 | 只看该作者
楼主是不是用的simulator的模式啊

使用特权

评论回复
地板
guanjiaer| | 2019-5-5 13:56 | 只看该作者
那估计是时序的问题

使用特权

评论回复
5
heimaojingzhang| | 2019-5-5 14:09 | 只看该作者
楼主的时序对不对  

使用特权

评论回复
6
罗黛心言| | 2019-5-29 20:05 | 只看该作者
您好请问之前那个sgp30传感器得问题解决了吗 可以跟我分享下吗

使用特权

评论回复
7
hello丶酷狗| | 2019-6-21 16:01 | 只看该作者
sgp3测的CO2,TVOC准不准

使用特权

评论回复
8
zjnlnl| | 2019-11-19 08:55 | 只看该作者
大佬,你这个问题解决了吗,能不能把这个代码分享下

使用特权

评论回复
9
lin130| | 2019-11-27 16:07 | 只看该作者
请问你的问题解决了吗?我也急需呢,方便的话加下QQ1305174379,联系一下呢,拜托啦

使用特权

评论回复
10
lin130| | 2019-11-27 16:07 | 只看该作者
zjnlnl 发表于 2019-11-19 08:55
大佬,你这个问题解决了吗,能不能把这个代码分享下

你的解决了吗?

使用特权

评论回复
11
琉璃苣| | 2019-11-27 17:05 | 只看该作者
lin130 发表于 2019-11-27 16:07
请问你的问题解决了吗?我也急需呢,方便的话加下QQ1305174379,联系一下呢,拜托啦 ...

有加

使用特权

评论回复
12
爱国道人| | 2020-5-14 11:32 | 只看该作者
首先确定I2C工作正不正常:硬件、软件

使用特权

评论回复
13
550963434| | 2020-6-9 15:02 | 只看该作者
SGP30的读地址是0xB1,写地址是0xB0

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

1

帖子

0

粉丝