当前位置:   article > 正文

SGP30传感器示例程序(基于51单片机、IO模拟I2C)_sgp30传感器中文数据手册

sgp30传感器中文数据手册

SGP30传感器示例程序(基于51单片机、IO模拟I2C)


SGP30传感器I2C地址:0x58

说明:这里采用使用IO模拟的方式来实现I2C

点击这里下载SGP30测试源码及数据手册

/*SGP30传感器初始化函数*/
void SGP30_Init(void)
{
	Start_I2c();			//启动I2C总线
	SendByte(SGP30WAddr);	//发送SGP30传感器写地址
	SendByte(0x20);			//发送命令(0x2003|SGP30_IAQ_init)
	SendByte(0x03);
	Stop_I2c();				//停止I2C总线
}


/*SGP30传感器读取数据函数*/
void SGP30_Data_Read(unsigned int *dat)
{
	unsigned char Data01,Data02,Data03,Data04;	//读取数据暂存变量
	unsigned char CRC;		//CRC校验值接收变量
	Start_I2c();			
	SendByte(SGP30WAddr);
	SendByte(0x20);			//发送命令(0x2008|SGP30_Measure_IAQ)
	SendByte(0x08);
	Stop_I2c();
	DelayMs(10);			//必须延时10ms以上,但不宜太长,否则读取不到数据!!!
	Start_I2c();
	SendByte(SGP30RAddr);
	Data01 = RcvByte();		//CO2高位数据	
	Ack_I2c();
	Data02 = RcvByte();		//CO2低位数据	
	Ack_I2c();
	CRC = RcvByte();		//CRC校验值	
	Ack_I2c();
	Data03 = RcvByte();		//TVOC高位数据	
	Ack_I2c();
	Data04 = RcvByte();		//TVOC低位数据
	Ack_I2c();
	CRC = RcvByte();
	NoAck_I2c();
	Stop_I2c();

	dat[0]=((Data01<<8)|Data02);		//拼接CO2数据		
	dat[1]=((Data03<<8)|Data04);		//拼接TVOC数据
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42

直接将CO2数据转换为整型数据即可得到二氧化碳浓度数据

因本人水平有限,代码如有不足之处请指出!欢迎大家前来交流!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/604085
推荐阅读
相关标签
  

闽ICP备14008679号