《无线wifi模块51单片机C语言程序》由会员分享,可在线阅读,更多相关《无线wifi模块51单片机C语言程序(6页珍藏版)》请在金锄头文库上搜索。
1、无线WIFI模块ESP8266和51单片机 实现LED灯的无线控制一、关于51 单片机和无线 WIFI模块的接线方面RXD、TXD、GND 和51单片机的TXD、RXD、GND接好,模块其他引脚均为高电平,电源VCC 是3.3V左右(两节1.5v 干电池),本人由于没有稳压模块,偷懒了当时使用5V的直流源,测试结果目前没有问题(不过不建议啊!)二、关于安卓手机方面测试时可以使用,网络调试助手(下载这个app安装在手机即可)发送数字 1表示小灯亮,0 表示灯灭。后续想深入的话可以自己开发安卓app软件。三、参数设置由于参数的设置方法和步奏网上资料很全,这里提供相关的网址自行参考。Uart-WiF
2、i模块 ESP8266把玩记 http:/ 单片机无线WIFI 模块控制内容:通过MCU上位机对ESP8266wifi模块的控制和设置,实现手机端控制LED 灯的亮灭。注意:该型号单片机是普通89C51单片执行速度的12倍,内含RAM1280 字节,ROM为60K,PCA 计数器,PWM 发生模块,ADC转换模块等,晶振一定是11.0592MHz。*/#include /包含头文件#define uint unsigned int#define uchar unsigned char#define RELOAD_COUNT 0xFA /宏定义波特率发生器的载入值/define RELOAD_C
3、OUNT (256-(11520000/16)/12)/9600) 也可以或波特率9600 /256-晶振频率/波特率x16=BRT/*LED灯对应P0口的1个端口*/sbit LED0=P32;/*波特率发生器相关功能寄存器的定义*/sfr AUXR=0x8E;sfr BRT=0x9C;sfr AUXR1=0xA2;/*相关变量*/uchar Receive,i; uint n;uchar Recive_table15; /用于接收wifi模块反馈到MCU 上的数据/*名称:延时函数作用:毫秒级延时,微妙级延时函数,为数据收发完成作等待.*/void ms_delay(uint t)uint
4、 i,j;for(i=t;i0;i-)for(j=110;j0;j-);void us_delay(uchar t)while(t-);/*名称:波特率发生器函数作用:波特率发生器可以是T1定时器实现,也可以是MCU内部独立的波特率发生器,各自不同的载入值计算式,具体根据寄存器相关设置来参考计算,以实现异步串行通讯。(经测试,两种设置方式均可用,可任选一种。)*/void Uart_Init()/使用定时器 1作为波特率发生器(STC89C52、STC89C51、AT89C51或者STC12C560S2等均可)SCON=0x50; /设置为串行口以方式 1工作,8位异步通讯, 允许接收中断。/
5、一帧信息为 10位, 1位起始位,8位数据位(低位在先),1位停止位。PCON=0x80; /SMOD波特率选择位为1,SMOD=1.TMOD=0x21; /设置定时器 1为波特率发生器,工作在模式 2,8位自动装载TH1=RELOAD_COUNT;/波特率9600 ,TH1=256-FOSC/16/12/波特率TL1=TH1;EA=1; /总中断打开ES=0; /关闭串口中断TR1=1; /启动定时器 1/*void Uart_Init()/使用独立的波特率发生器(STC12C560S2 或带有独立波特率发生器/ 、/的单片机均可)SCON=0x50; /设置为串行口以方式 1工作,8位异步
6、通讯, 允许接收中断。PCON=0x80; /SMOD波特率选择位为1,SMOD=1.BRT=RELOAD_COUNT; /波特率9600 256-晶振频率/波特率x16=BRTAUXR=0xD5;/T0、T1不12分频,速度是 89C51的12倍,启动独立波特率 /发生器,每个时钟计数一次/设置串口1的波特率发生器为独立波特率发生器,AUXR1=0x80; /切换到 P1口ES=1; /开启串口中断EA=1; /开启总中断*/*名称:串口发送函数功能:MCU向其他与其连接的设备发送数据(此处是无线 WIFI模块ESP8266)*/void Send_Uart(uchar value)ES=0
7、; /关闭串口中断TI=0; /清发送完毕中断请求标志位SBUF=value; /发送while(TI=0); /等待发送完毕TI=0; /清发送完毕中断请求标志位ES=1; /允许串口中断 /*名称:WIFI模块设置函数作用: 启动模块,以便可以实现无线接入和控制*/void ESP8266_Set(uchar *puf) / 数组指针*puf指向字符串数组 while(*puf!=0) /遇到空格跳出循环Send_Uart(*puf); /向WIFI模块发送控制指令。us_delay(5);puf+;us_delay(5);Send_Uart(r); /回车us_delay(5);Send
8、_Uart(n); /换行ms_delay(1000);/*名称:ESP8266 发送数据函数功能:用于与wifi模块相连的终端发送数据*/void ESP8266_Sent(uchar *puf) / 数组指针*puf指向字符串数组 ESP8266_Set(AT+CIPSEND=0,4);while(*puf!=0) /遇到空格跳出循环Send_Uart(*puf); /向WIFI模块发送控制指令。us_delay(5);puf+;us_delay(5);Send_Uart(n); /换行ms_delay(10);/*名称:主函数作用:程序的执行入口*/void main()LED0=0;/
9、关闭LED灯Uart_Init();/使用独立的波特率发生器ESP8266_Set(AT+CWMODE=2); /设置路由器模式 1 station模式 2 AP/点 路由器模式 3 station+AP混合模式ESP8266_Set(AT+RST); /重新启动wifi模块ESP8266_Set(AT+CWSAP=WIFI,1234567890,11,4); /设置模块SSID:WIFI, PWD:密码 及安全类型加密模式(WPA2-PSK)ESP8266_Set(AT+CIPMUX=1);/开启多连接模式,允许多个各客户端接入ESP8266_Set(AT+CIPSERVER=1,5000)
10、; /启动TCP/IP 端口为8080 实现基于网络/控制ES=1;/允许串口中断while(1)if(Recive_table0=+)&(Recive_table1=I)&(Recive_table2=P)/MCU接收到的数据为+IPD时进入判断控制01来使小灯亮与灭if(Recive_table3=D)&(Recive_table6=,)if(Recive_table9=0)LED0=0; /0 灯灭ESP8266_Sent(灯灭);/wifi模块向pc端或手机端 发送 灯灭 else if (Recive_table9=1)LED0=1; /1 灯亮ESP8266_Sent(灯亮); /wifi模块向pc端或手机端 发送灯亮/*名称:串行通讯中断作用:发送或接收结束后进入该函数,对相应的标志位软件清0,实现模块对数据正常的收发。*/void Uart_Interrupt() interrupt 4 static uchar i=0;if(RI=1)RI=0;Receive=SBUF; /MCU接收wifi模块反馈回来的数据Recive_tablei=Receive;i+;if(Recive_tablei-1=n)i=0; /遇到换行 重新装值else TI=0;