ESP8226 无法入网路由器(已解决)

这篇具有很好参考价值的文章主要介绍了ESP8226 无法入网路由器(已解决)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

ESP82226 作为客户端

一、入网设置

在调试之前,注意 串口,波特率(9600)以及 AT指令(指令后添加新行)。

1.重启模块

AT+RST        //指令

OK
0$n荡`llM?x蟄鴃???i:?
################################################
arch:ESP8266, 1
compile_time:Ai-Thinker|B&T
wifi_mac:4c75250dF348
sdk_version:v3.4-22-g967752e2
firmware_version:2.2.0
compile_time:Jun 30 2021 11:28:20

ready

################################################

看到ready,证明模块重启成功。

2.设置工作模式

AT+CWMODE=3     //1. 是station(设备)模式 2.是AP(路由)模式 3.是双模

OK

建议设置成 双模 。

3.以设备模式接入家中路由器

AT+CWJAP="TP-LINK_3E30","123456789"         //指令

WIFI CONNECTED 
WIFI GOT IP         //结果

注意:esp8226 的频段是2.4Ghz,若路由器的频段是5Ghz,需要修改路由器频段,否则会报错。

4.查询IP地址

AT+CIFSR         //指令

+CIFSR:APIP,"192.168.4.1"            //网关
+CIFSR:APMAC,"4e:75:25:0d:ae:2f"
+CIFSR:STAIP,"192.168.0.148"        //esp8226作为客户端的ip地址
+CIFSR:STAMAC,"4c:75:25:0d:ae:2f"
OK

二、连接到 TCP server

1. 开关网络助手,设立TCP服务器

esp8266连不上wifi,c语言,单片机,stm32

2. 连接服务器 

AT+CIPSTART="TCP","192.168.0.113",8888     //指令,注意双引号逗号都要半角(英文)输入

CONNECT 
OK 

3. 发送数据

AT+CIPSEND=4           // 设置即将发送数据的长度 (这里是4个字节)
>CLCA                 // 看到大于号后,输入消息,CLCA,不要带回车
Response :SEND OK     //结果:成功

注意,这种情况下,每次发送前都要先发送AT+CIPSEND=长度 的指令,再发数据!

三、透传

上面每次发送数据都要进行字符长度设定,如果设置成透传,就能发送任意长度的数据。

1.开启透传模式

AT+CIPMODE=1         //开启透传模式
Response :OK

2.开始发送数据

AT+CIPSEND         //带回车
Response: >        //这个时候随意发送接收数据咯

3.退出透传模式

  • 发送 +++ 这三个字符,值得注意的是该命令没有换行符,不然会失败。
  • 接着发送 AT+CIPMODE=0 命令即可退出透传模式,即回到正常的模式。

四、单片机实现

#include "reg52.h"
#include "intrins.h"
#include "string.h"
#include "stdio.h"

#define SIZE 12
sfr AUXR = 0x8E;
sbit D5 = P3^7;
sbit D6 = P3^6;
char cmd[SIZE] = {0};
char buffer[SIZE] = {0};
 
code char LJWL[] = "AT+CWJAP=\"TP-LINK_D089\",\"123456789\"\r\n";//入网指令
code char LJFWQ[] = "AT+CIPSTART=\"TCP\",\"192.168.0.113\",8880\r\n";//连接服务器指令
char TCMS[] = "AT+CIPMODE=1\r\n"; //透传指令
char SJCS[] = "AT+CIPSEND\r\n"; //数据传输开始指令
char RESET[] = "AT+RST\r\n"; //重启模块指令

char AT_OK_Flag = 0; //OK返回值的标志位
char AT_Connect_Net_Flag = 0; //WIFI GOT IP返回值的标志位

void UartInit(void)		//9600bps@11.0592MHz
{
	AUXR = 0x01;//提升单片机的抗干扰能力
	SCON = 0x50;//配置串口工作方式1,REN接收
	TMOD &= 0x0F;
	TMOD |= 0x20;//定时器1工作方式,8位自动重载
	
	TH1 = 0xFD;
	TL1 = 0xFD;//9600波特率的初值                  
	TR1 = 1;//启动定时器
	
	EA = 1;//开启CPU总中断
	ES = 1;//开启串口中断
}

void Delay1000ms()		//@11.0592MHz
{
	unsigned char i, j, k;

	_nop_();
	i = 8;
	j = 1;
	k = 243;
	do
	{
		do
		{
			while (--k);
		} while (--j);
	} while (--i);
}

void sendByte(char data_msg)
{
	SBUF = data_msg;	
	
	//TI判断是否发送数据:TI=1,发送成功;TI=0,发送失败
	while(!TI);//字符未发送成功一直循环。
	TI = 0;//TI重新赋值
}

void sendString(char* str)
{
	while(*str != '\0'){
		sendByte(*str);
		str++;
	}
}

void main()
{
		int mark = 0;
		D5 = 1;
	
		UartInit();//配置C51串口通信方式
		Delay1000ms();//给esp8226模块上电时间
		
		sendString(LJWL);//连接网络
		while(!AT_Connect_Net_Flag);

		sendString(LJFWQ);//连接服务器
		while(!AT_OK_Flag);	
		AT_OK_Flag = 0;

		sendString(TCMS);//透传模式
		while(!AT_OK_Flag);
		AT_OK_Flag = 0;

		sendString(SJCS);//数据传输
		while(!AT_OK_Flag);
	
		if(AT_Connect_Net_Flag){
			D5 = 0;//点亮D5,代表入网成功
		}
		
		if(AT_OK_Flag){
			D6 = 0;//点亮D6,代表连接服务器并打开透传成功
		}

		while(1){
			if(mark == 0) mark = 1;
			else{
					sendString("xiaobai handsome\r\n");
					Delay1000ms();
			}	
		}	

}

void Uart_Handler() interrupt 4
{
	static int i = 0;//静态变量,被初始化一次
	char tmp;
	if(RI)//中断处理函数中,对于接收中断的处理的响应
	{
		RI = 0;//清楚接收中断标志位
		tmp = SBUF;
		if(tmp == 'W' || tmp == 'O' || tmp == 'L'){
			i = 0;
		}
		
		buffer[i++] = tmp;
		
		if(buffer[0] == 'W' && buffer[5] == 'G'){
			AT_Connect_Net_Flag = 1;
			memset(buffer,'\0',SIZE);
		}
		
		if(buffer[0] == 'O' && buffer[1] == 'K'){
			AT_OK_Flag = 1;
			memset(buffer,'\0',SIZE);
		}
		
		if(buffer[0] == 'F' && buffer[1] == 'A'){ //连接失败,FALL
			for(i=0;i<5;i++){
				D5 = 0;
				Delay1000ms();
				D5 = 1;
				Delay1000ms();
			}
			sendString(RESET);// 重启esp8226
			memset(buffer,'\0',SIZE);
		}
		
		if(buffer[0] == 'L' && buffer[2] == '0'){
			D5 = 0;//点亮D5
			memset(buffer,'\0',SIZE);
		}
		if(buffer[0] == 'L' && buffer[2] == '1'){
			D5 = 1;//熄灭D5
			memset(buffer,'\0',SIZE);
		}
		if(i == 12) i = 0;
		
	}
	if(TI);
}

ESP82226 作为服务器

USB转TTL插入电脑,TX--RX,RX-TX,VCC-3.3V,GDN-GND

一、向串口助手发送AT指令

1.配置成双模

AT+CWMODE=2 

Response :OK

2.使能多链接

AT+CIPMUX=1 

Response :OK

3.建立TCPServer

AT+CIPSERVER=1         // default port = 333 

Response :OK

4.发送数据

AT+CIPSEND=0,4         // 发送4个字节在连接0通道上

>abcd                 //输入数据,不带回车 
Response :SEND OK

① 接收数据

+IPD, 0, n: xxxxxxxxxx     //+IPD是固定字符串 0是通道,n是数据长度,xxx是数据

② 断开连接文章来源地址https://www.toymoban.com/news/detail-753895.html

AT+CIPCLOSE=0 

Response :0, CLOSED OK

二、单片机实现

#include "reg52.h"
#include "intrins.h"
#include "string.h"
#include "stdio.h"

#define SIZE 12
sfr AUXR = 0x8E;
sbit D5 = P3^7;
sbit D6 = P3^6;
char cmd[SIZE] = {0};
char buffer[SIZE] = {0};

//1.工作在双模
char LYMS[] = "AT+CWMODE=3\r\n";
//2.使能多链接
char DLJ[] = "AT+CIPMUX=1\r\n";
//3.建立TCPServer
char LJFWQ[] = "AT+CIPSERVER=1\r\n"; // default port = 333
//4.发送数据
char FSSJ[] = "AT+CIPSEND=0,5\r\n";

char AT_OK_Flag = 0;
char AT_Connect_Net_Flag =0;
char Client_Connect_Flag = 0;

void UartInit(void)		//9600bps@11.0592MHz
{
	AUXR = 0x01;//提升单片机的抗干扰能力
	SCON = 0x50;//配置串口工作方式1,REN接收
	TMOD &= 0x0F;
	TMOD |= 0x20;//定时器1工作方式,8位自动重载
	
	TH1 = 0xFD;
	TL1 = 0xFD;//9600波特率的初值                  
	TR1 = 1;//启动定时器
	
	EA = 1;//开启CPU总中断
	ES = 1;//开启串口中断
}

void Delay1000ms()		//@11.0592MHz
{
	unsigned char i, j, k;

	_nop_();
	i = 8;
	j = 1;
	k = 243;
	do
	{
		do
		{
			while (--k);
		} while (--j);
	} while (--i);
}

void sendByte(char data_msg)
{
	SBUF = data_msg;	
	
	//TI判断是否发送数据:TI=1,发送成功;TI=0,发送失败
	while(!TI);//字符未发送成功一直循环。
	TI = 0;//TI重新赋值
}

void sendString(char* str)
{
	while(*str != '\0'){
		sendByte(*str);
		str++;
	}
}

void main()
{
	int mark = 0;
	D5 = 1;

	UartInit();//配置C51串口通信方式
	Delay1000ms();//给esp8226模块上电时间

	sendString(LYMS);//路由器模式指令
	while(!AT_OK_Flag);
	AT_OK_Flag = 0;

	sendString(DLJ);//多连接指令
	while(!AT_OK_Flag);
	AT_OK_Flag = 0;

	sendString(LJFWQ);//连接服务器指令
	while(!Client_Connect_Flag);
	AT_OK_Flag = 0;

	if(Client_Connect_Flag){
		D5 = 0;//点亮D5
		D6 = 0;//点亮D6,有客户连接
	}
	
	while(1){
		//4 发送数据
		sendString(FSSJ);//发送数据指令
		Delay1000ms();
		Delay1000ms();
		sendString("Hello");//发送数据"Hello"
		Delay1000ms();
		Delay1000ms();	
	}	

}

void Uart_Handler() interrupt 4
{
	static int i = 0;//静态变量,被初始化一次
	char tmp;
	if(RI)//中断处理函数中,对于接收中断的处理的响应
	{
		RI = 0;//清楚接收中断标志位
		tmp = SBUF;//SBUF:串口缓存
		if(tmp == 'O' || tmp == '0' || tmp == ':'){
			i = 0;
		}
		
		buffer[i++] = tmp;//数组移位
		//入网成功的判断依据WIFI GOT IP
		if(buffer[0] == 'O' && buffer[1] == 'K'){//反馈:OK
			AT_OK_Flag = 1;
			memset(buffer,'\0',SIZE);
		}
		//客户端连接,返回:0,CONNECT
		if(buffer[0] == '0' && buffer[2] == 'C'){
			Client_Connect_Flag = 1;
			memset(buffer,'\0',SIZE);
		}

		//灯控指令
		if(buffer[0] == ':' && buffer[1] == 'o' && buffer[2] == 'p'){//客服端发送op,esp返回:+IPD, 0, n: op
			D5 = 0;//点亮D5
			memset(buffer,'\0',SIZE);
		}
		if(buffer[0] == ':' && buffer[1] == 'c' && buffer[2] == 'l'){//客服端发送cl,esp返回:+IPD, 0, n: cl
			D5 = 1;//熄灭D5
			memset(buffer,'\0',SIZE);
		}
		if(i == 12) i = 0;
		
	}
}

到了这里,关于ESP8226 无法入网路由器(已解决)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 磊科路由器无法过滤故障的解决方法

      一、组网环境 网络环境中,路由器A、路由器B和路由器C三台路由器之间运行OSPF路由协议,均在area0中,路由器A的借口IP地址为10.1.1.1/24,路由器B接口serial1/0/1的IP地址为10.1.1.2/24,接口2的IP地址为20.1.1.1/24,路由器C的接口IP地址为20.1.1.2/24,Loopback口的地址分别为100.1.1.1/24和

    2024年02月05日
    浏览(45)
  • 路由器不能拨号致使您无法上网的解决方法

    您可能会经常性的遇到PPPoE拨不上号的问题,致使您无法上网,遇到这样的问题您可以参考下面的文章来查找原因: 一、无法获取WAN口IP 1、帐号错误: 2、运营商绑定了电脑网卡的MAC地址: 3、用户接入方式为非标准的PPPoE 二、上网过程中断线 1 、无法获取WAN口IP 当你设置了PP

    2024年02月05日
    浏览(56)
  • 华为路由器组网部分功能无法使用的解决办法

    遇到路由器组网部分功能无法使用怎么办?其实使用路由器组网后会遇到网络中各种功能无法实现的问题,其实这大多是由于路由器的设置问题造成的,yii666的小编带大家一起看看以华为路由器为实例的解决办法。 一、组网环境 1、在华为路由的组网环境中,华为A和华为B为

    2024年02月07日
    浏览(108)
  • 如何解决路由器无法指派IP地址的问题

    在现在生活中,路由器担当了很多要的作用,兼职较多服务器功能,这样的规划确实方便了管理和维护,但也为网络的安全、稳定运行埋下了隐患,一旦网络发生故障,对整个局域网的影响几乎是毁灭性的,本篇介绍如何解决路由器无法分配IP地址。 一 、如果发现客户端大部

    2024年02月05日
    浏览(52)
  • 360安全路由无法升级固件?360安全路由器固件升级下载失败解决办法

     360安全路由无法升级固件失败怎么办?才买的360路由器,想升级固件但每次都才升级了一点就显示升级失败了这可如何是好,其实这很正常新东西嘛,还是首批,没关系下面小编就来为大家解决这一棘手的问题。 360安全路由无法升级固件解决办法 其实很简单,在上网设置

    2024年02月06日
    浏览(54)
  • 贝尔金路由器备份接口无法开启故障的解决方法

        所谓的ATM是一项数据传输技术,以信元为基础的一种分组交换和复用技术,为了多种业务设计的通用的面向连接的传输模式,具有高速数据传输率和支持许多种类型,它采用面向连接的传输方式,将数据分割成固定长度的信元,通过虚连接进行交换。 ATM集交换、复用、传

    2024年02月05日
    浏览(44)
  • wayos路由器WEB管理界面无法登陆解决方法

    为什么我无法登陆路由器WEB管理界面? 答:这样的情况大致上分为四种: 一、内部IP与路由器IP冲突导致。此时,我们需要将PC单独与路由器连接,脱离局域网来登陆路由器。登陆之后修改LAN口IP地址并保存,然后再接入到局域网中。 二、浏览器自身问题。这样的典型就是别

    2024年02月05日
    浏览(43)
  • 路由器广域网地址无法获取原因分析及解决

    出现 路由器广域网地址 无法获取,即路由器页面上一直显示连接状态,IP地址无法的登录,导致无法正常上网。出现这种情况该如何解决呢?下面小编分享的是 路由器广域网地址无法获取 的解决方法。 首先你需要检查网吧路由器的WAN口指示灯是否已经亮起,如果WAN口指示灯

    2024年02月05日
    浏览(56)
  • 输入192.168.1.1却无法登陆路由器的解决办法

    有时候我们登陆路由器进行设置时,偶尔会遇到在IE浏览器地址栏输入192.168.1.1路由器地址,无法弹出用户名和密码对话框,针对此类路由器问题那如何解决呢? 1、检查电脑是否和LAN口(1,2,3,4口中任意一口)连好,路由器上对应的指示灯是否是亮的。 2、如果是拨号上网

    2024年02月05日
    浏览(48)
  • 阿尔法路由器无法启用规则的原因及解决方法

        一、组网环境 用户在阿尔法 A的GE1/0/0端口下使能ACL,希望将流量规则路由到阿尔法 B,在实际使用中,阿尔法 A配置的规则不生效,报文依然按照路由表的最长匹配原则转发。 二、故障分析 1、规则路由指定的下一跳不可达,规则路由指定的下一跳可达,排除第一种可能性

    2024年02月05日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包