(一)STM32串口实验基础上移植oled和dht11

最终要实现的功能:
1、STM32采集温湿度通过串口1发送至AIR800,然后通过AIR800将温湿度上传至阿里云
2、阿里云物联网云平台下发命令通过AIR800控制STM32的LED亮灭(打开或关闭功能,或者定时 自动打开和自动关闭)
3、通过nrf24l01实现点对点通信,阿里云下发数据至air800,STM32(A)串口2接收数据之后进行判断,如果需要控制另一个STM32的LED灯,则会将数据发送至另外一个STM32(B),STM32(B)通过数据判断执行相应的功能

此模块主要功能:在串口实验基础上添加OLED显示温湿度

(一)STM32串口实验基础上移植oled和dht11_第1张图片

一、实现程序移植

1、我是在正点原子实验程序上进行移植和修改的
首先在HARDWARE文件夹新建DHT11和OLED两个文件件,里面存放的是对应的C文件和H文件,去例程中找来如果引脚不合适在程序中进行修改即可,
如果修改DHT11引脚切记不要只修改引脚,还需要修改其他的,我修改时一脸懵逼,看了一个博客介绍的方法之后才修改正确,
https://blog.csdn.net/book_drabit/article/details/84847318
(一)STM32串口实验基础上移植oled和dht11_第2张图片

2、将添加的DHT11和OLED的C文件添加到工作组中
(一)STM32串口实验基础上移植oled和dht11_第3张图片

3、这是大多数人容易忘记的一步,配置路径
如果不配置路径,必然会报错的,把两个文件夹的路径添加进来即可,如果没有新建文件夹分别存放,而是都放在了同一个文件夹中,添加路径时添加存放C文件和H文件的路径即可
(一)STM32串口实验基础上移植oled和dht11_第4张图片

4、可以看到,在工程位置已经把两个文件添加进来了
(一)STM32串口实验基础上移植oled和dht11_第5张图片

5、在主函数文件中调用两个头文件,虽然是报错的,但是实际上没错,是编译器的问题
(一)STM32串口实验基础上移植oled和dht11_第6张图片

6、初始化
切记千万不要忘了对OLED和DHT1初始化,否则不管怎么写都是没用的,有很多人也是这里除了问题,检查来检查去居然是忘了初始化
(一)STM32串口实验基础上移植oled和dht11_第7张图片

7、在主函数中添加DHT11和OLED显示部分代码
DHT11代码部分我用的 是老师上课发的一部分程序,数据处理部分直接拿过来用了,没有再去自己写,正点原子中例程的方法也是一样的,也是处理好的,修改一下即可直接使用
(一)STM32串口实验基础上移植oled和dht11_第8张图片

	//这是添加的DHT11部分代码(在oled进行显示温湿度)
	if( Read_DHT11(&DHT11_Data)==SUCCESS)										
	{
		printf("temp %d hum %d",DHT11_Data.temp_int,DHT11_Data.humi_int);
		delay_ms(1000);
		delay_ms(1000);
		hh1='0';hh2='0';HL1='0';HL2='0';th1='0';th2='0';TL1='0';TL2='0';
		hh1+=DHT11_Data.humi_int/10;
		hh2+=DHT11_Data.humi_int%10;
		HL1+=DHT11_Data.humi_deci/10;
		HL2+=DHT11_Data.humi_deci%10;
		th1+=DHT11_Data.temp_int/10;
		th2+=DHT11_Data.temp_int%10;
		TL1+=DHT11_Data.temp_deci/10;
		TL2+=DHT11_Data.temp_deci%10;
	}
	OLED_ShowString(8,4,"TEMP:"); 
	OLED_ShowChar(48,4,th1); 
	OLED_ShowChar(56,4,th2);	
	OLED_ShowChar(64,4,'.');
	OLED_ShowString(8,2,"HUM:"); 
	OLED_ShowChar(48,2,hh1); 
	OLED_ShowChar(56,2,hh2);
	OLED_ShowChar(64,2,'.'); 
	OLED_ShowChar(72,2,HL1);
	OLED_ShowChar(80,2,HL2);	
	OLED_ShowChar(88,2,'%'); 
	if(TL1>'0')
	{
		OLED_ShowChar(72,6,TL1);
		OLED_ShowChar(80,6,TL2);
	}
	else 
	{
		OLED_ShowChar(72,4,TL2);
		OLED_ShowChar(80,4,'0');
	}
	OLED_ShowCHinese(88,4,4);

8、下面是编译结果,是没有错误的,现在可以直接烧写程序了
(一)STM32串口实验基础上移植oled和dht11_第9张图片

9、温湿度可以在OLED上进行显示了,大功告成,如果只是简单地移植程序还是比较简单的
(一)STM32串口实验基础上移植oled和dht11_第10张图片

下一步是新增一个串口2和添加RTC部分并且在oled上显示时间日期

你可能感兴趣的:(STM32学习)