基于C51单片机的ESP8266Wifi模块(ESP |
您所在的位置:网站首页 › esp01s程序烧录教程 › 基于C51单片机的ESP8266Wifi模块(ESP |
1、模块简介 ESP-01S 是由安信可科技开发的 Wi-Fi 模块,该模块核心处理器为ESP8266。ESP8266 拥有完整的且自成体系的 Wi-Fi 网络功能,既能够独立应用,也可以作为从机搭载于其他主机 MCU 运行。当 ESP8266 独立应用时,能够直接从外接flash 中启动。内置的高速缓冲存储器有利于提高系统性能,并且优化存储系统。另外⼀种情况是, ESP8266 只需通过 SPI/SDIO 接口或UART 接口即可作为Wi-Fi适配器,应用到基于任何微控制器设计中。具体介绍请参照产品官网esp8266详细介绍 2、AT指令介绍 作为一种通信模块,esp-01s同样基于AT指令设计。AT指令集是从终端设备(Terminal Equipment,TE)或数据终端设备(Data Terminal Equipment,DTE)向终端适配器(Terminal Adapter,TA)或数据电路终端设备(Data Circuit Terminal Equipment,DCE)发送的。其对所传输的数据包大小有定义:即对于AT指令的发送,除AT两个字符外,最多可以接收1056个字符的长度(包括最后的空字符)。每个AT命令行中只能包含一条AT指令;对于由终端设备主动向PC端报告的URC指示或者response响应,也要求一行最多有一个,不允许上报的一行中有多条指示或者响应。AT指令以回车作为结尾,响应或上报以回车换行为结尾。 3、调试工具 安信可串口调试助手网络调试助手4、模块波特率配置和验证 ESP-01s出厂波特率正常是115200。 (1) 上电后,通过串口输出一串系统开机信息,有的模块可能会出现乱码,以最后输出ready为准。 (2)上电后发送AT指令测试通信及模块功能是否正常。注意:AT指令,控制类都要加回车,数据传输时不加回车。 (1)设置工作模式 (2)连接外网 (3)查询IP地址 (2)连接服务器 (3)发送数据 7、透传模式 连接服务器后即可开启透传模式。 8、代码编写 功能实现:模块与电脑连接上同一WIFI,位于同一局域网内。通过透传模式,互相通信。 效果展现:刚开始时,单片机D5,D6灭,连接上电脑服务器端后,D5,D6亮,此时网络调试助手上不断出现Hello字样,通过网络调试助手发送L1时,D5亮,发送L0时,D5灭。(ps:注意不同类型C51单片机引脚定义) 代码如下: #include "reg52.h" #include "string.h" #define SIZE 12 sbit D5=P3^7; sbit D6=P3^6; sfr AUXR = 0x8E; char buffer[SIZE]; code char connect[] = "AT+CWJAP=\"WIFI名\",\"密码\"\r\n"; code char connect_server[] = "AT+CIPSTART=\"TCP\",\"联网IP\",端口号\r\n"; char mode[] = "AT+CIPMODE=1\r\n"; //开启透传模式 char send_data[] = "AT+CIPSEND\r\n"; //数据传输开始指令 char AT_OK_Flag = 0; //OK返回值的标志位 char AT_Connect_Net_Flag = 0; //WIFI GOT IP返回值的标志位 void Delay1000ms() //@11.0592MHz { unsigned char i, j, k; i = 8; j = 1; k = 243; do { do { while (--k); } while (--j); } while (--i); } void UartInit() //[email protected] { AUXR = 0x01; SCON = 0x50;//配置串口工作方式1,REN使能接收 TMOD &= 0x0F; TMOD |= 0x20;//配置定时器1工作方式8位重载 TH1=0xFD; TL1=0xFD; //9600波特率的初值 TR1=1;//启动定时器 EA = 1;//开启总中断 ES = 1;//开启串口中断 } void sendByte(char data_msg) { SBUF = data_msg; while(!TI); TI=0; } void sendString(char* str) { while(*str != '\0'){ sendByte(*str); str++; } } void Connect_service() { int i=1; while(i){ sendString(connect); while(!AT_OK_Flag); AT_OK_Flag = 0; //发送连服务器指令并等待成功 sendString(connect_server); while(!AT_OK_Flag); AT_OK_Flag = 0; //发送透传模式指令并等待成功 sendString(mode); while(!AT_OK_Flag); AT_OK_Flag = 0; //发送数据传输指令并等待成功 sendString(send_data); while(!AT_OK_Flag); if(AT_Connect_Net_Flag){ D5=0; //点亮D5,代表连接服务器并打开透传模式成功 } if(AT_OK_Flag){ D6=0; //点亮D6,代表连接服务器并打开透传模式成功 i=0; } } } void main() { D5=D6=1;//灭状态灯 UartInit(); //配置C51串口的通信方式 Delay1000ms();//给esp8266模块上电时间 //发送联网AT指令 Connect_service(); while(1){ Delay1000ms(); sendString("hello\r\n"); } } void Uart_Handler() interrupt 4 { static int i=0; //静态变量,被初始化一次 char tmp; if(RI) //中断处理函数中,对于接收中断的响应 { RI = 0;//清除接收中断标志位 tmp = SBUF; if(tmp == 'W' || tmp == 'O' || tmp == 'F' || tmp=='L' || tmp == 'E' || tmp == "?"){ i=0; } buffer[i++] = tmp; //连接服务器等OK返回值指令的判断 if(buffer[0] == 'O' && buffer[1] == 'K'){ AT_OK_Flag = 1; AT_Connect_Net_Flag = 1; memset(buffer,'\0',SIZE); } //联网失败出现FAIL字样捕获 if(buffer[0] == 'F' && buffer[1] == 'A'){ for(i=0; i |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |