我是靠谱客的博主 落后花瓣,最近开发中收集的这篇文章主要介绍空气检测质点 stm32f103c8t6+lora+pm2.5+温湿度+气压+甲醛空气检测质点,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
空气检测质点
- 空气检测质点
- [源代码下载地址]
- 整体架构
- 数据采集
- 温湿度模块(型号:DHT11)
- 实物图
- 原理图
- 传输协议(串行接口,单线双向)
- 代码实现
- 气压模块(型号BMP180)
- 实物图
- 原理图
- 传输协议(I2C)
- 代码实现
- PM2.5模块(型号:GP2Y1014AU)
- 实物图
- 原理图
- 传输协议(ADC,检测电压)
- 代码实现
- 甲醛模块(型号:MS1100)
- 实物图
- 原理图
- 传输协议(ADC,电压检测)
- 代码实现
- 数据收集
- stm32f103c8t6
- 实物图
- 原理图
- 工程结构
- 数据发送
- LORA模块(型号:ATK-LORA-01)
- 实物图
- 原理图
- 传输协议(串口连接,AT指令)
- 代码实现
空气检测质点
[源代码下载地址]
csdn下载.
整体架构
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)
实物图
原理图
传输协议(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指令 | 返回值 |
---|---|
AT | OK |
AT+UART | OK |
AT+WLRATE=23,2 | OK |
AT+TPOWER=3 | OK |
AT+TMODE=0 | OK |
AT+WLTIME=0 | OK |
AT+CWMODE=0 | OK |
AT+ADDR=FF,FF | OK |
代码实现
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+温湿度+气压+甲醛空气检测质点所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复