最终要实现的功能:
1、STM32采集温湿度通过串口1发送至AIR800,然后通过AIR800将温湿度上传至阿里云
2、阿里云物联网云平台下发命令通过AIR800控制STM32的LED亮灭(打开或关闭功能,或者定时 自动打开和自动关闭)
3、通过nrf24l01实现点对点通信,阿里云下发数据至air800,STM32(A)串口2接收数据之后进行判断,如果需要控制另一个STM32的LED灯,则会将数据发送至另外一个STM32(B),STM32(B)通过数据判断执行相应的功能
此模块主要功能:在串口实验基础上添加OLED显示温湿度
一、实现程序移植
1、我是在正点原子实验程序上进行移植和修改的
首先在HARDWARE文件夹新建DHT11和OLED两个文件件,里面存放的是对应的C文件和H文件,去例程中找来如果引脚不合适在程序中进行修改即可,
如果修改DHT11引脚切记不要只修改引脚,还需要修改其他的,我修改时一脸懵逼,看了一个博客介绍的方法之后才修改正确,
https://blog.csdn.net/book_drabit/article/details/84847318
2、将添加的DHT11和OLED的C文件添加到工作组中
3、这是大多数人容易忘记的一步,配置路径
如果不配置路径,必然会报错的,把两个文件夹的路径添加进来即可,如果没有新建文件夹分别存放,而是都放在了同一个文件夹中,添加路径时添加存放C文件和H文件的路径即可
4、可以看到,在工程位置已经把两个文件添加进来了
5、在主函数文件中调用两个头文件,虽然是报错的,但是实际上没错,是编译器的问题
6、初始化
切记千万不要忘了对OLED和DHT1初始化,否则不管怎么写都是没用的,有很多人也是这里除了问题,检查来检查去居然是忘了初始化
7、在主函数中添加DHT11和OLED显示部分代码
DHT11代码部分我用的 是老师上课发的一部分程序,数据处理部分直接拿过来用了,没有再去自己写,正点原子中例程的方法也是一样的,也是处理好的,修改一下即可直接使用
//这是添加的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、下面是编译结果,是没有错误的,现在可以直接烧写程序了
9、温湿度可以在OLED上进行显示了,大功告成,如果只是简单地移植程序还是比较简单的