【STM32】温湿度采集与OLED显示
一、实验目的:
学习I2C总线通信协议,使用STM32F103完成基于I2C协议的AHT20温湿度传感器的数据采集,并将采集的温度-湿度值通过串口输出。
二、实验要求:
1)解释什么是“软件I2C”和“硬件I2C”? (阅读野火配套教材的第23章“I2C–读写EEPROM”原理章节)
2)阅读AHT20数据手册,编程实现:每隔2秒钟采集一次温湿度数据,显示到OLED上,同时通过串口发送到上位机的“串口助手”软件。
三、实验过程:
U8g2库–OLED显示
具体参考上一个oled屏的博客
链接:https://blog.csdn.net/AO1918/article/details/139640039
配置CubexMX
1.RCC配置
2.SYS配置
3.I2C2配置
4.TIM1配置
5.时钟树配置
6.工程配置
温湿度传感器
AHT20官方函数
参考链接:https://www.cnblogs.com/ppqppl/articles/16899912.html
主要代码
int main(void)
{
/* USER CODE BEGIN 1 */
uint32_t CT_data[2]={0,0};
volatile int c1,t1;
Delay_1ms(500);
HAL_Init();
SystemClock_Config();
MX_I2C2_Init();
MX_GPIO_Init();
MX_DMA_Init();
MX_USART1_UART_Init();
u8g2_t u8g2;
u8g2Init(&u8g2);
//ԵʼۯAHT20
AHT20_Init();
Delay_1ms(500);
while (1)
{
AHT20_Read_CTdata(CT_data);
c1 = CT_data[0]*1000/1024/1024;
t1 = CT_data[1]*2000/1024/1024-500;
printf("ֽ՚ݬӢ");
HAL_Delay(100);
printf(".");
HAL_Delay(100);
printf(".");
HAL_Delay(100);
printf(".");
HAL_Delay(100);
printf(".");
HAL_Delay(100);
printf(".");
HAL_Delay(100);
printf(".");
HAL_Delay(100);
printf(".");
HAL_Delay(100);
printf(".");
HAL_Delay(100);
printf(".");
HAL_Delay(100);
printf(".");
printf("\r\n");
HAL_Delay(1000);
printf("ς:%d%d.%d",t1/100,(t1/10)%10,t1%10);
printf("ʪ:%d%d.%d",c1/100,(c1/10)%10,c1%10);
printf("\r\n");
printf("ֈս");
HAL_Delay(100);
printf(".");
HAL_Delay(100);
printf(".");
HAL_Delay(100);
printf(".");
HAL_Delay(100);
printf(".");
HAL_Delay(100);
printf(".");
HAL_Delay(100);
printf(".");
HAL_Delay(100);
printf(".");
HAL_Delay(100);
printf(".");
HAL_Delay(100);
printf(".");
HAL_Delay(100);
printf(".");
printf("\r\n");
HAL_Delay(1000);
}
}
四、实验结果:
经过本次实验,我进一步学习了I2C协议通信的使用和功能,并通过AHT20(实际为)DHT20温湿度传感器检测室温并将数据发送,使我受益匪浅。