空气检测质点
整体架构
数据采集
温湿度模块(型号:DHT11)
实物图
原理图
传输协议(串行接口,单线双向)
DATA引脚和微处理器之间采用单总线数据格式,每次通讯时间为4ms左右,完整的数据传输为40bit,高位先出。具体如下:
[tr]数据含义[/tr]
温度高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 头
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指令)
[tr]AT指令返回值[/tr]
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" );
}
}
空气检测质点
整体架构
数据采集
温湿度模块(型号:DHT11)
实物图
原理图
传输协议(串行接口,单线双向)
DATA引脚和微处理器之间采用单总线数据格式,每次通讯时间为4ms左右,完整的数据传输为40bit,高位先出。具体如下:
[tr]数据含义[/tr]
温度高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 头
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指令)
[tr]AT指令返回值[/tr]
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" );
}
}
举报