STM32驱动GY-39监测环境温度,湿度,大气压强,光强度

模块简介

GY-39 是一款低成本,气压,温湿度,光强度传感器模块。工作电压 3-5v,功耗小,安装方便。
其工作原理是,MCU 收集各种传感器数据,统一处理,直接输出计算后的结果,此模块,有两种方式读取数据,即串口 UART(TTL 电平)或者 IIC(2 线)。串口的波特率有 9600bps 与 115200bps,可配置,有连续,询问输出两种方式,可掉电保存设置。可适应不同的工作环境,与单片机及电脑连接。模块另外可以设置单独传感器芯片工作模式,作为简单传感器模块,MCU 不参与数据处理工作。在这里插入图片描述

模块测试

接线

这里使用的是MCU_IIC模式,所以在使用前需要先将S0与GND进行短接(模块默认是UART模式),如图中的蓝色跳线帽短接。
在这里插入图片描述

将模块其他需要的线与开发板连接,接线如下:
GY-39—STM32F103C8T6
SCL—PB6
SDA—PB7
STM32—FT232/USB转TTL
TX(PA9)—RX
RX(PA10)—TX

代码

数据计算方法模块的说明手册中已经有具体提出。
数据计算方法:
①光照强度计算方法(当 Byte2=0x15 时,数据:Byte4~Byte7) :
Lux=(前高8位<<24) | (前低8位<<16) | (后高8位<<8) | 后低8位 单位lux

②温度、气压、湿度、海拔,计算方法(当 Byte2=0x45 时):
温度:Byte4~Byte5
T=(高 8 位<<8)|低 8 位
T=T/100 单位℃

气压:Byte6~Byte9
P=(前高 8 位<<24) | (前低 8 位<<16) | (后高 8 位<<8) | 后低 8 位
P=P/100 单位 pa

湿度:Byte10~Byte11
Hum=(高 8 位<<8)|低 8 位
Hum=Hum/100 百分制

海拔:Byte12~Byte13
H=(高 8 位<<8)|低 8 位 单位 m

这是主函数中用于计算其输出值的部分代码:

扫描二维码关注公众号,回复: 17347766 查看本文章
if(Single_ReadI2C(0xb6,0x04,raw_data,10))
			{
    
    
				Bme.Temp=(raw_data[0]<<8)|raw_data[1];
				data_16[0]=(((uint16_t)raw_data[2])<<8)|raw_data[3];
				data_16[1]=(((uint16_t)raw_data[4])<<8)|raw_data[5];
				Bme.P=(((uint32_t)data_16[0])<<16)|data_16[1];
				Bme.Hum=(raw_data[6]<<8)|raw_data[7];
				Bme.Alt=(raw_data[8]<<8)|raw_data[9];
			}
			if(Single_ReadI2C(0xb6,0x00,raw_data,4))
			data_16[0]=(((uint16_t)raw_data[0])<<8)|raw_data[1];
			data_16[1]=(((uint16_t)raw_data[2])<<8)|raw_data[3];
			Lux=(((uint32_t)data_16[0])<<16)|data_16[1];
			
		  printf("Temp: %.2f  DegC  ",(float)Bme.Temp/100);
		  printf("  P: %.2f  Pa ",(float)Bme.P/100);
			printf("  Hum: %.2f   ",(float)Bme.Hum/100);
		  printf("  Alt: %.2f  m\r\n ",(float)Bme.Alt+36);
			printf("\r\n Lux: %.2f  lux\r\n ",(float)Lux/100);  
			delay_ms(200);

测试现象

连接好上电烧录程序后,可以看到串口的输出数据里已经有温度,大气压强,湿度,海拔和光照强度的值了。
在这里插入图片描述

总结

有关代码中海拔的计算可以在平地时候,让高度数据加上或者减去偏差值,让海拔数据等于当地平均海拔。同一地点,气压每天,每个季节都会变化的,如果是测绝对高度,是需要经常校准的。

猜你喜欢

转载自blog.csdn.net/qq_42250136/article/details/133905049