我是靠谱客的博主 落后花瓣,最近开发中收集的这篇文章主要介绍空气检测质点 stm32f103c8t6+lora+pm2.5+温湿度+气压+甲醛空气检测质点,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

空气检测质点

  • 空气检测质点
    • [源代码下载地址]
    • 整体架构
      • 数据采集
        • 温湿度模块(型号:DHT11)
          • 实物图
          • 原理图
          • 传输协议(串行接口,单线双向)
          • 代码实现
        • 气压模块(型号BMP180)
          • 实物图
          • 原理图
          • 传输协议(I2C)
          • 代码实现
        • PM2.5模块(型号:GP2Y1014AU)
          • 实物图
          • 原理图
          • 传输协议(ADC,检测电压)
          • 代码实现
        • 甲醛模块(型号:MS1100)
          • 实物图
          • 原理图
          • 传输协议(ADC,电压检测)
          • 代码实现
      • 数据收集
        • stm32f103c8t6
          • 实物图
          • 原理图
          • 工程结构
      • 数据发送
        • LORA模块(型号:ATK-LORA-01)
          • 实物图
          • 原理图
          • 传输协议(串口连接,AT指令)
          • 代码实现

空气检测质点

[源代码下载地址]

csdn下载.

整体架构

													V1.0成品图

V1.0版本

数据采集

温湿度模块(型号:DHT11)

实物图

温湿度

原理图

原理图

传输协议(串行接口,单线双向)

DATA引脚和微处理器之间采用单总线数据格式,每次通讯时间为4ms左右,完整的数据传输为40bit,高位先出。具体如下:

数据含义
温度高8位串口发送的第一个数据
温度高8位串口发送的第二个数据(默认00)
湿度高8位串口发送的第三个数据
湿度高8位串口发送的第四个数据(默认00)
校验8位串口发送的第五个数据
代码实现
dht11.h							 				头文件
void dht11_gpio_input(void);					输入初始化
void dht11_gpio_output(void);				    输出初始化
u16 dht11_scan(void);							扫描
u16 dht11_read_bit(void);						位读取
u16 dht11_read_byte(void);						字节读取
u16 dht11_read_data(u8 buffer[4]);				读取温度和湿度
main.c											在主函数中
if (dht11_read_data(buffer) == 0)				如果获取到40位数据后
{
	hum = buffer[0] + buffer[1] / 10.0;			得到湿度值
	temp = buffer[2] + buffer[3] / 10.0;		得到温度值
}
printf("温湿度模块t 温度 = %.2ft	湿度: %.2f		rn", temp, hum);

气压模块(型号BMP180)

实物图

气压模块

原理图

在这里插入图片描述

传输协议(I2C)

BMP180工作流程图如下:
在这里插入图片描述
I2C时序图如下:
在这里插入图片描述

代码实现
BMP180.h							 							头文件
void BMP_Init(void);											初始化
uint8_t BMP_ReadOneByte(uint8_t ReadAddr);						读一个8位的数据
void BMP_WriteOneByte(uint8_t WriteAddr,uint8_t DataToWrite);	读一个字节数据
short BMP_ReadTwoByte(uint8_t ReadAddr);						读一个16位的数据
void BMP_ReadCalibrationData(void);								获取计算参数
long BMP_Read_UT(void);											读取温度值
long BMP_Read_UP(void);											读取气压值
void BMP_UncompemstatedToTrue(void);					修正刚才获取的数据,并且计算海拔
main.c											在主函数中
BMP_Init();										初始化
BMP_ReadCalibrationData();						读取值
ID = BMP_ReadOneByte(0xd0);						读数据
BMP_UncompemstatedToTrue();						修正数据
printf("气压模块t 温度 = %d.%dCt   压强 = %ldPat  高度 = %.5fmrn",bmp180.Temp/10,bmp180.Temp%10,bmp180.p,bmp180.altitude);	

PM2.5模块(型号:GP2Y1014AU)

实物图

pm2.5

原理图

在这里插入图片描述

传输协议(ADC,检测电压)

在这里插入图片描述

代码实现
adc.h
float GetGP2Y(void);			 			获得ADC的值
void Adc_Init(void);						初始化ADC
u16  Get_Adc(u8 ch); 						获得ADC的值
u16 Get_GP2Y_Average(u8 times);				获得电压较稳定值
main.c										在主函数中
Adc_Init();									adc初始化Get_GP2Y_Average(20)
printf("PM2.5模块t	浓度 = %drn",Get_GP2Y_Average(20));

甲醛模块(型号:MS1100)

实物图

甲醛模块

原理图

在这里插入图片描述

传输协议(ADC,电压检测)

电压检测

代码实现
adc_dma.h							 						头文件
void ADC_DMA_Init(void);									初始化定义
float ADC_DMA_GET_MQ135(void);								定义电压值
main.c											在主函数中
ADC_DMA_Init();									初始化
printf("¼×È©Ä£¿ét	¼×È© = %4.2frn", ADC_DMA_GET_MQ135());	

数据收集

stm32f103c8t6

实物图

在这里插入图片描述

原理图

在这里插入图片描述

工程结构

在这里插入图片描述

数据发送

LORA模块(型号:ATK-LORA-01)

实物图

实物图

原理图

描述

传输协议(串口连接,AT指令)
AT指令返回值
ATOK
AT+UARTOK
AT+WLRATE=23,2OK
AT+TPOWER=3OK
AT+TMODE=0OK
AT+WLTIME=0OK
AT+CWMODE=0OK
AT+ADDR=FF,FFOK
代码实现
lora.h
u8 Lora_Init(void);				初始化
while ( 1 )
    {
				LED_C15_ON();     		配置mod0引脚
        delay_ms( 300 );
        if (Lora_Init())
        {
						uart2_init(115200);
            printf( "Lora Configuration Successful!rn" );
						LED_C15_OFF();
            break;
        }
        else
        {
            printf( "Lora Configuration fail!rn" );
        }
    }

最后

以上就是落后花瓣为你收集整理的空气检测质点 stm32f103c8t6+lora+pm2.5+温湿度+气压+甲醛空气检测质点的全部内容,希望文章能够帮你解决空气检测质点 stm32f103c8t6+lora+pm2.5+温湿度+气压+甲醛空气检测质点所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(45)

评论列表共有 0 条评论

立即
投稿
返回
顶部