单片机
返回首页

ESP8266+51单片机WIFI控制多路遥控开关程序设计

2019-11-15 来源:51hei

这是一个基于单片机WIFI多路遥控开关设计,里面有文档,程序,图片等资料

制作出来的实物图如下:
 

电路原理图如下:

Wifi开关元件清单

1)    9*15万用板
2)    STC89C52单片机
3)    40脚IC座
4)    11.0592MHz晶振
5)    30pF瓷片电容*2
6)    10uF电解电容
7)    ESP8266模块
8)    2*4P排母
9)    2P排母*2
10)    3.3V稳压模块
11)    2P接线端子*3
12)    继电器*3
13)    3MM LED灯*3(红、绿、蓝)
14)    8550三极管*3
15)    按键
16)    1k电阻*6
17)    10k电阻
18)    自锁开关
19)    DC电源插座
20)    USB电源线
21)    导线
22)    手机APP(赠送)

1、单片机是通用的无论51还是52、无论stc还是at都一样,引脚功能都一样。
   程序也是一样的。
2、原理图中的.ddb、.Bkp等格式是要用protelse打开的,没有软件的不要紧,
   我已帮您转换成word格式和pdf格式的了。
3、程序中的.c文件可以用记事本(文本文档)打开,就是程序了。其他的是写程序是自动
   生成的,没什么用的。
4、可以按照正面布局,不要按照实物的背面焊接,要按照原理图焊接。

单片机多路遥控开关源程序如下:

/********************************************************************/ 

#include

#define uint unsigned int 

#define uchar unsigned char   

sbit LED0=P2^0;          //红灯

sbit LED1=P2^3;                //黄灯

sbit LED2=P2^6;            //绿灯


/*****************相关变量**************/ 

uchar Receive,i,qj,yz,zz,ht;                              

uint n;  

uchar Recive_table[40];                  //用于接收wifi模块反馈到MCU上的数据  


/******************************************************************* 

名称:延时函数  作用:毫秒级延时,微妙级延时函数,为数据收发完成作等待.......  

********************************************************************/ 

void ms_delay(uint t) 

{  

        uint i,j;  

        for(i=t;i>0;i--)   

        for(j=110;j>0;j--); 

}   


void us_delay(uchar t) 

{  

        while(t--); 

}         


void Uart_Init()                                //使用定时器1作为波特率发生器(STC89C52、STC89C51、AT89C51等均可) 

{  

    TMOD = 0x20;

    SCON = 0x50;                                 //设置串行方式

    TH1 = 0xFD;                                         //波特率9600

    TL1 = TH1;

    PCON = 0x00;

    EA = 1;                                                //总中断打开 

    ES = 1;                                                //开串口中断  

    TR1 = 1;                                        //启动定时器1


/******************************************************************** 

名称:串口发送函数  功能:MCU向无线WIFI模块ESP8266发送数据  

********************************************************************/ 

void Send_Uart(uchar value) 

{  

        ES=0;                                                  //关闭串口中断  

        TI=0;                                           //清发送完毕中断请求标志位   

        SBUF=value;                                 //发送  

        while(TI==0);                                 //等待发送完毕   

        TI=0;                                           //清发送完毕中断请求标志位   

        ES=1;                                                  //允许串口中断  

}  


/******************************************************************** 

名称:WIFI模块设置函数  作用: 启动模块,以便可以实现无线接入和控制  

********************************************************************/ 


void ESP8266_Set(uchar *puf)         // 数组指针*puf指向字符串数组                

{    

        while(*puf!='')                    //遇到空格跳出循环  

        {   

                Send_Uart(*puf);                  //向WIFI模块发送控制指令。   

                us_delay(5);   

                puf++;    

        }  

        us_delay(5);  

        Send_Uart('r');                         //回车  

        us_delay(5);  

        Send_Uart('n');                           //换行  


/******************************************************************** 

名称:主函数  作用:程序的执行入口  

********************************************************************/ 


void main() 

{          

        Uart_Init();                                                                                        //波特率发生器 

        ms_delay(2000);

        ESP8266_Set('AT+CWMODE=2');                                                         //设置路由器模式1 station,模式2 AP,模式3 station+AP混合模式   

        ms_delay(2000);

//        ESP8266_Set('AT+RST');                                                                         //重新启动wifi模块            

//  ms_delay(2000);

        ESP8266_Set('AT+CWSAP='wifi_yuan','123456789',11,4');          //AT+CWSAP='wifi_yuan','123456789',11,4  设置模块SSID:WIFI, PWD:密码 及安全类型加密模式(WPA2-PSK) 

        ms_delay(2000);

        ESP8266_Set('AT+CIPMUX=1');                                                                //开启多连接模式,允许多个各客户端接入 

        ms_delay(2000);

        ESP8266_Set('AT+CIPSERVER=1,5000');                                          //启动TCP/IP 实现基于网络//控制         ESP8266_Set('AT+CIPSERVER=1,5000');  

        ms_delay(2000);

        ESP8266_Set('AT+CIPSTO=0');                                                         //永远不超时

        ES=1;                                                                                           //允许串口中断                 

        qj=1;

        zz=1;

        yz=1;

        ht=1;

        LED0=1;

        LED1=1;

        LED2=1;

        while(1)   

        {    

                if((Recive_table[0]=='+')&&(Recive_table[1]=='I')&&(Recive_table[2]=='P'))//MCU接收到的数据为+IPD时进入判断控制01来使小灯亮与灭    

                {           

                        if((Recive_table[9]=='G')&&(Recive_table[10]=='P'))            

                        {      

                                if(Recive_table[15]=='0')      

                                {       

                                        LED0=0;                         //红灯亮                          

                                }                                

                                else 

                                if (Recive_table[15]=='1')      

                                {              

                                        LED0=1;                         //红灯灭

                                } 

                                else 

                                if (Recive_table[15]=='2')      

                                {              

                    LED1=0;            //黄灯亮           

                                } 

                                else 

                                if (Recive_table[15]=='3')      

                                {              

                        LED1=1;                    //黄灯灭

                                }

                                else 

                                if (Recive_table[15]=='4')      

                                {              

                        LED2=0;                       //绿灯亮

                                }  

                                else 

                                if (Recive_table[15]=='5')      

                                {              

                        LED2=1;                       //绿灯灭

                                }                                                                                                                                                             

                        }  

                }

          }    

}    


/*********************************************************************  

名称:串行通讯中断  作用:发送或接收结束后进入该函数,对相应的标志位软件清0,实现模块对数据正常的收发。  

********************************************************************/ 


void Uart_Interrupt() interrupt 4         

{    

        static uchar i=0;  

        if(RI==1)  

        {   

                RI=0;   

                Receive=SBUF;                                                        //MCU接收wifi模块反馈回来的数据       

                Recive_table[i]=Receive;   

                if((Recive_table[i]=='n'))

                {                     

                        i=0;

                }    

                else i++;                                                                                  //遇到换行 重新装值  

        }   

        else TI=0;   

}  

进入单片机查看更多内容>>
相关视频
  • RISC-V嵌入式系统开发

  • SOC系统级芯片设计实验

  • 云龙51单片机实训视频教程(王云,字幕版)

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

精选电路图
  • 单稳态控制电路设计与分析

  • IGBT模块通过控制门极阻断过电流

  • 开关电源的基本组成及工作原理

  • 比较常见的功率整流器和滤波电路

  • 基于CA3193的热电偶放大器电路

  • 基于TDA1554的立体声放大器电路

    相关电子头条文章