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

2023-11-23 07:21

本文主要是介绍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:20ready################################################

看到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服务器

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'){ //连接失败,FALLfor(i=0;i<5;i++){D5 = 0;Delay1000ms();D5 = 1;Delay1000ms();}sendString(RESET);// 重启esp8226memset(buffer,'\0',SIZE);}if(buffer[0] == 'L' && buffer[2] == '0'){D5 = 0;//点亮D5memset(buffer,'\0',SIZE);}if(buffer[0] == 'L' && buffer[2] == '1'){D5 = 1;//熄灭D5memset(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是数据

② 断开连接

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;//点亮D5D6 = 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 IPif(buffer[0] == 'O' && buffer[1] == 'K'){//反馈:OKAT_OK_Flag = 1;memset(buffer,'\0',SIZE);}//客户端连接,返回:0,CONNECTif(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: opD5 = 0;//点亮D5memset(buffer,'\0',SIZE);}if(buffer[0] == ':' && buffer[1] == 'c' && buffer[2] == 'l'){//客服端发送cl,esp返回:+IPD, 0, n: clD5 = 1;//熄灭D5memset(buffer,'\0',SIZE);}if(i == 12) i = 0;}
}

这篇关于ESP8226 无法入网路由器(已解决)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/416306

相关文章

三国地理揭秘:为何北伐之路如此艰难,为何诸葛亮无法攻克陇右小城?

俗话说:天时不如地利,不是随便说说,诸葛亮六出祁山,连关中陇右的几座小城都攻不下来,行军山高路险,无法携带和建造攻城器械,是最难的,所以在汉中,无论从哪一方进攻,防守方都是一夫当关,万夫莫开;再加上千里运粮,根本不需要打,司马懿只需要坚守城池拼消耗就能不战而屈人之兵。 另一边,洛阳的虎牢关,一旦突破,洛阳就无险可守,这样的进军路线,才是顺势而为的用兵之道。 读历史的时候我们常常看到某一方势

如何解决线上平台抽佣高 线下门店客流少的痛点!

目前,许多传统零售店铺正遭遇客源下降的难题。尽管广告推广能带来一定的客流,但其费用昂贵。鉴于此,众多零售商纷纷选择加入像美团、饿了么和抖音这样的大型在线平台,但这些平台的高佣金率导致了利润的大幅缩水。在这样的市场环境下,商家之间的合作网络逐渐成为一种有效的解决方案,通过资源和客户基础的共享,实现共同的利益增长。 以最近在上海兴起的一个跨行业合作平台为例,该平台融合了环保消费积分系统,在短

pip-tools:打造可重复、可控的 Python 开发环境,解决依赖关系,让代码更稳定

在 Python 开发中,管理依赖关系是一项繁琐且容易出错的任务。手动更新依赖版本、处理冲突、确保一致性等等,都可能让开发者感到头疼。而 pip-tools 为开发者提供了一套稳定可靠的解决方案。 什么是 pip-tools? pip-tools 是一组命令行工具,旨在简化 Python 依赖关系的管理,确保项目环境的稳定性和可重复性。它主要包含两个核心工具:pip-compile 和 pip

【VUE】跨域问题的概念,以及解决方法。

目录 1.跨域概念 2.解决方法 2.1 配置网络请求代理 2.2 使用@CrossOrigin 注解 2.3 通过配置文件实现跨域 2.4 添加 CorsWebFilter 来解决跨域问题 1.跨域概念 跨域问题是由于浏览器实施了同源策略,该策略要求请求的域名、协议和端口必须与提供资源的服务相同。如果不相同,则需要服务器显式地允许这种跨域请求。一般在springbo

速盾高防cdn是怎么解决网站攻击的?

速盾高防CDN是一种基于云计算技术的网络安全解决方案,可以有效地保护网站免受各种网络攻击的威胁。它通过在全球多个节点部署服务器,将网站内容缓存到这些服务器上,并通过智能路由技术将用户的请求引导到最近的服务器上,以提供更快的访问速度和更好的网络性能。 速盾高防CDN主要采用以下几种方式来解决网站攻击: 分布式拒绝服务攻击(DDoS)防护:DDoS攻击是一种常见的网络攻击手段,攻击者通过向目标网

ORACLE 11g 创建数据库时 Enterprise Manager配置失败的解决办法 无法打开OEM的解决办法

在win7 64位系统下安装oracle11g,在使用Database configuration Assistant创建数据库时,在创建到85%的时候报错,错误如下: 解决办法: 在listener.ora中增加对BlueAeri-PC或ip地址的侦听,具体步骤如下: 1.启动Net Manager,在“监听程序”--Listener下添加一个地址,主机名写计

Jenkins 插件 地址证书报错问题解决思路

问题提示摘要: SunCertPathBuilderException: unable to find valid certification path to requested target...... 网上很多的解决方式是更新站点的地址,我这里修改了一个日本的地址(清华镜像也好),其实发现是解决不了上述的报错问题的,其实,最终拉去插件的时候,会提示证书的问题,几经周折找到了其中一遍博文

Redis中使用布隆过滤器解决缓存穿透问题

一、缓存穿透(失效)问题 缓存穿透是指查询一个一定不存在的数据,由于缓存中没有命中,会去数据库中查询,而数据库中也没有该数据,并且每次查询都不会命中缓存,从而每次请求都直接打到了数据库上,这会给数据库带来巨大压力。 二、布隆过滤器原理 布隆过滤器(Bloom Filter)是一种空间效率很高的随机数据结构,它利用多个不同的哈希函数将一个元素映射到一个位数组中的多个位置,并将这些位置的值置

linux 下Time_wait过多问题解决

转自:http://blog.csdn.net/jaylong35/article/details/6605077 问题起因: 自己开发了一个服务器和客户端,通过短连接的方式来进行通讯,由于过于频繁的创建连接,导致系统连接数量被占用,不能及时释放。看了一下18888,当时吓到了。 现象: 1、外部机器不能正常连接SSH 2、内向外不能够正常的ping通过,域名也不能正常解析。

使用Qt编程QtNetwork无法使用

使用 VS 构建 Qt 项目时 QtNetwork 无法使用的问题 - 摘叶飞镖 - 博客园 (cnblogs.com) 另外,强烈建议在使用QNetworkAccessManager之前看看这篇文章: Qt 之 QNetworkAccessManager踏坑记录-CSDN博客 C++ Qt开发:QNetworkAccessManager网络接口组件 阅读目录 1.1 通用API函数