基于C51单片机的ESP8266Wifi模块(ESP

您所在的位置:网站首页 esp01s程序烧录教程 基于C51单片机的ESP8266Wifi模块(ESP

基于C51单片机的ESP8266Wifi模块(ESP

2024-07-04 13:23| 来源: 网络整理| 查看: 265

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指令,控制类都要加回车,数据传输时不加回车。 在这里插入图片描述 (3)通过命令配置成9600波特率 在这里插入图片描述 5、入网设置

(1)设置工作模式 在这里插入图片描述

(2)连接外网 在这里插入图片描述

(3)查询IP地址 在这里插入图片描述 6、连接TCP server,发送数据 (1)打开网络调试助手,设立TCP服务器 在这里插入图片描述

(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