# 基于STM32F103单片机WIFI无线APP控灯亮度灭设计 **Repository Path**: leroi64/STM32F103_WIFI_LED ## Basic Information - **Project Name**: 基于STM32F103单片机WIFI无线APP控灯亮度灭设计 - **Description**: 1、stm32实时监测wifi数据,解析数据后通过pwm控制led的亮灭及亮度程度。 2、手机发送指令: OPEN1,第一个灯亮;OPEN2,第二个灯亮; CLOSE1,第一个灯灭;CLOSE2,第二个灯灭 LED1-1,第一个等处于1档,LED1-2,第1个等处于2档,LED1-3,第一个等处于3档 LED2-1,第2个等处于1档,LED2-2,第2个等处于2档,LED2-3,第2个等处于3档 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 4 - **Forks**: 0 - **Created**: 2021-11-28 - **Last Updated**: 2025-08-01 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 基于STM32F103单片机WIFI无线APP控灯亮度灭设计 ## 一、功能 由STM32F103C8T6单片机核心电路+两位白色高亮LED灯电路+WIFI模块ESP8266电路++电源电路组成。 1、stm32实时监测wifi数据,解析数据后通过pwm控制led的亮灭及亮度程度。 2、手机发送指令: OPEN1,第一个灯亮;OPEN2,第二个灯亮; CLOSE1,第一个灯灭;CLOSE2,第二个灯灭; LED1-1,第一个等处于1档,LED1-2,第1个等处于2档,LED1-3,第一个等处于3档。 LED2-1,第2个等处于1档,LED2-2,第2个等处于2档,LED2-3,第2个等处于3档, OPENALL:全亮 CLOSEALL:全灭! ## 二、材料清单 ![在这里插入图片描述](https://img-blog.csdnimg.cn/b018f0debef64848b2dde6add101812d.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5p2o5b635YW0,size_20,color_FFFFFF,t_70,g_se,x_16) ![在这里插入图片描述](https://img-blog.csdnimg.cn/4d78900d2d7947d2946404c0e345453c.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5p2o5b635YW0,size_15,color_FFFFFF,t_70,g_se,x_16) ![在这里插入图片描述](https://img-blog.csdnimg.cn/1e6fc20a87c54edf968f2ccf7e358f2d.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5p2o5b635YW0,size_20,color_FFFFFF,t_70,g_se,x_16) ## 三、流程图 ![ ](https://img-blog.csdnimg.cn/c97e1889343e4ce2af760fc02cdb7322.png) ## 四、程序 主函数 ```c #include "led.h" #include "delay.h" #include "sys.h" #include "timer.h" #include "key.h" #include "usart.h" #include unsigned char led1Count=0; //led 对比pwm值计数 unsigned char led2Count=0; unsigned char PWML_LED1=10;//led PWM 范围0-10 unsigned char PWML_LED2=10; unsigned char BufTab[10]; //wifi数据暂存 unsigned char Count; //串口数据计数 unsigned char UartBusy=0; //判断忙碌 unsigned char ReadFlag=0;//读取标志 unsigned char sendDataFlag=0; //发送数据标志 u8 rebackFalg= 0; //数据返回标志 u8 MesCount=0; //发送内容计数 unsigned char i ; int main(void) { delay_init(); //延时函数初始化 NVIC_Configuration();//设置NVIC中断分组2:2位抢占优先级,2位响应优先级 LED_Init(); //初始化与LED连接的硬件接 uart_init(9600); TIM3_Int_Init(499,7199);//10Khz的计数频率,计数到500为50ms i=50; while(i--) delay_ms(100); printf("AT+CIPMUX=1\r\n"); //允许链接 i=10; while(i--) delay_ms(100); printf("AT+CIPSERVER=1,8080\r\n"); //创建端口号8080 while(1) { if(ReadFlag== 1) //读取串口数据标志 { Count=0; //传授接收变量清零 UartBusy=0; ReadFlag=0; //读取标识清零 if((strstr((const char *)BufTab,"PEN1")!=NULL)||(strstr((const char * )BufTab,"ED1-3")!=NULL)) //接收到LPEN1 LED1-3 { PWML_LED1=10;rebackFalg=1;//设置pwm 发送标志置位 } else if(strstr((const char * )BufTab,(const char * )"LOSE1")!=NULL) //接收到CLOSE1 { PWML_LED1=0;rebackFalg=1;//设置pwm 发送标志置位 } else if(strstr((const char *)BufTab,"ED1-1")!=NULL) //接收到LED1-1 { PWML_LED1=3;rebackFalg=1;//设置pwm 发送标志置位 } else if(strstr((const char *)BufTab,"ED1-2")!=NULL) //接收到LED1-2 { PWML_LED1=6;rebackFalg=1;//设置pwm 发送标志置位 } else if((strstr((const char *)BufTab,"PEN2")!=NULL)||(strstr((const char *)BufTab,"ED2-3")!=NULL)) //接收到 OPEN2 { PWML_LED2=10;rebackFalg=1;//设置pwm 发送标志置位 } else if(strstr((const char *)BufTab,"LOSE2")!=NULL) //接收到LLOSE2 { PWML_LED2=0;rebackFalg=1;//设置pwm 发送标志置位 } else if(strstr((const char *)BufTab,"ED2-1")!=NULL) //接收到LED2-1 { PWML_LED2=3;rebackFalg=1;//设置pwm 发送标志置位 } else if(strstr((const char *)BufTab,"ED2-2")!=NULL) //接收到LED2-2 { PWML_LED2=6;rebackFalg=1;//设置pwm 发送标志置位 } } else if(strstr((const char *)BufTab,"PENALL")!=NULL) //接收OENALL { PWML_LED1=10;PWML_LED2=10;rebackFalg=1; //设置pwm 发送标志置位 } else if(strstr((const char *)BufTab,"LOSEALL")!=NULL) //接收到CLOSEALL { PWML_LED1=0;PWML_LED2=0; rebackFalg=1; } for(i=0;i<10;i++) //清空wifi数据数组 { BufTab[i]='0'; } if((sendDataFlag == 1)&&(rebackFalg != 0))//接收到数后返回ok { if(MesCount == 0) //发送信息计数 { MesCount =1; printf("AT+CIPSEND=0,2\r\n"); //发送固定字节数据的at命令 } else { if(rebackFalg ==1) //返回标志置位 {printf("OK");} //发送ok MesCount = 0; //发送信息计数 rebackFalg = 0; } sendDataFlag = 0; //定时发送数据清空 } led1Count++; //led 对比pwm值计数 led2Count++; //led 对比pwm值计数 if(led1Count=PWML_LED1)&&(led1Count<=10)) //led1 PWM对比 { LED1=1; //关灯 } else { led1Count=0; //一个周期结束 } if(led2Count=PWML_LED2)&&(led2Count<=10)) //led2 PWM对比 { LED2=1; //关灯 } else { led2Count=0; //一个周期结束 } } } ```