最终要实现的功能:
1、STM32采集温湿度通过串口1发送至AIR800,然后通过AIR800将温湿度上传至阿里云
2、阿里云物联网云平台下发命令通过AIR800控制STM32的LED亮灭(打开或关闭功能,或者定时 自动打开和自动关闭)
3、通过nrf24l01实现点对点通信,阿里云下发数据至air800,STM32(A)串口2接收数据之后进行判断,如果需要控制另一个STM32的LED灯,则会将数据发送至另外一个STM32(B),STM32(B)通过数据判断执行相应的功能
本模块实现的功能:
串口2发送“led on”“ledoff”打开和关闭LED
串口2发送“set21232334”格式类型字符串进行指定时间打开和关闭LED
串口2发送的字符串"set12401241"中设置12点40分打开led,到达1241自动关闭,时间长短自己定
串口2发送的字符串"set12401241"中1240代表12点40分打开led
串口2发送的字符串"set12401241"中1241代表12点41分关闭led
一 :程序编写
1、在串口2的中断函数中添加数据处理部分
//对接收到的数据做判断
if(USART2_RX_BUF[0]=='l'&&USART2_RX_BUF[4]=='o')//接收到ledon
{
recv_flag=1;
}
else if(USART2_RX_BUF[0]=='l'&&USART2_RX_BUF[5]=='f')//接收到ledoff
{
recv_flag=2;
}
//这是设置定时模式
if(USART2_RX_BUF[0]=='s'&&USART2_RX_BUF[1]=='e'&&USART2_RX_BUF[2]=='t')
{
memset(set_time,0,sizeof(set_time));//将数组清零
strcpy(set_time,USART2_RX_BUF);//将定时数据copy到另外一个数组中,防止再次接受数据时清空
}
2、在主函数中添加执行操作
//这是开启时间
if(set_time[3]-0x30==calendar.hour/10&&set_time[4]-0x30==calendar.hour%10&&set_time[5]-0x30==calendar.min/10&&set_time[6]-0x30==calendar.min%10)
{
settime_flag=1;
}
//这是关闭时间
else if(set_time[7]-0x30==calendar.hour/10&&set_time[8]-0x30==calendar.hour%10&&set_time[9]-0x30==calendar.min/10&&set_time[10]-0x30==calendar.min%10)
{
settime_flag=2;
}
//这是执行定时功能时执行的操作
if(settime_flag==1)
{
LED0=0;
}
if(settime_flag==2)
{
LED0=1;
}
//这是开关执行的操作
if(recv_flag==1)
{
LED1=0;
}
if(recv_flag==2)
{
LED1=1;
}
3、下面是我用串口2发送数据,转发到串口1中,已验证的确发出去了,实验效果前面已经看到了
如果想要同时在OLED上显示温湿度和时间日期,可以添加按键换页操作进行显示,毕竟一个屏幕显示不开