esp8266

您所在的位置:网站首页 esp8266怎么接电源 esp8266

esp8266

2023-06-06 18:37| 来源: 网络整理| 查看: 265

STA配置服务器流程: 加/r/n AT+CWMODE=1 AT+RST AT+CWJAP=“ATK-ESP8266”,“12345678” AT+CIPMUX=1 AT+CIPSERVER=1,8086 AT+CIPSEND=0,2 发送2个字节

STA配置客户端流程: 加/r/n AT+CWMODE=1 AT+RST AT+CWJAP=“ATK-ESP8266”,“12345678” AT+CIPMUX=0 AT+CIPSTART=“TCP”,“192.168.5.1”,8086 AT+CIPMODE=1 AT+CIPSEND 在这里插入图片描述

CIPSTATUS

在这里插入图片描述

在这里插入图片描述

UDP配置问题.

在这里插入图片描述 在这里插入图片描述

两者都差不多,但是AP+CIPSTART的指令的意思是,别人的ip和别人端口号,最后一个是自己的端口号,写了就可以固定,不写自动分配。 AT+CIPSTART=“UDP”,“192.168.5.2”,8080,8088 在这里插入图片描述

上位机打开了本地连接,端口号也知道了。模块才可以发送。因为我连接的就是 192.168.5.2",8080 在这里插入图片描述

在这里插入图片描述

相当于服务器的模块,配置的是AP的UDP模式,然后让另一个模块以STA的UDP模式来连接AP,然后用电脑开了两个连接,类似客户端那样的。 可以看到电脑的上位机是需要设置远端的IP和端口号的, 不管是谁,都会使用AT+CIPSTART=, , [,(),()] 例如:AT+CIPSTART=“UDP”,“192.168.5.2”,8080,8088

IP是别人的IP,第一额端口号是别人的端口号,第二个端口号才是自己的端口号,不配置自己的话,会自动分配。

现在的问题就是怎么知道对方的IP地址呢。 方法1:AT+CIPSTATUS

方法2: AT+CIPDINFO=1,接收数据时 接收网络数据时是否提示对端 IP 和端口

方法3: AT+CWLIF AP下可以使用,查看接入设备的IP和MAC

有坑,这只能显示出自动分配的IP

方法4: 电脑不静态,模块使用静态IP, 电脑模块上电都需要电脑电机接入,这样模块才能接入到电脑进行点对点通信。

注意: 不是点对点的话,有时候会丢包,即用192.168.4.255

在这里插入图片描述 在这里插入图片描述

UDP模式下的AT+CIPSTATUS实验:

是可以知道自己的端口号的,连接别人的IP和端口,但不知道自己的IP。 CIFSR可以IP和MAC 在这里插入图片描述

UDP模式下的AT+CIPSTATUS,都是返回连接的别人的IP地址,别人的端口号,自己的端口号 STATUS:2是获得IP。 STATUS:5是AP下返回的。

这是192.168.5.3的8080向192.168.5.3的8082发送数据

在这里插入图片描述

这是192.168.5.3的8080向192.168.5.2的8082发送数据

在这里插入图片描述

可以看到IP地址不一样的情况下,端口号8082是可以一样的。。。

UDP的多链接问题。 这图是AP的UDP配置,STA也是一样的。 在这里插入图片描述

只需要AT+CIPMUX=1 一对多的时候,CIPSTART,第二次的时候不能指定本地端口号。 在这里插入图片描述

实验:一个模块作AP的UDP随便连接一个建立端口号先,然后其他就可以连接,因为AP的IP是192.168.5.1,端口号是8088.。

如果随便连接了192.168.5.1本身,那么就不能和别人通信,因为5.1是自己本身。 然后AP如果要和他们通信的话,就要连接他们,这时候就不能指定端口号了,需要自动分配,不然会出错。 在这里插入图片描述

还有问题: 在这里插入图片描述

如果模块接收到没有连接上的数据,而你又打开了多链接,那就默认ID是0,不打开就没有ID。

所以在实际中,从第二个连接开始,服务器是根据IP地址和随机的端口来发送数据的, 而客户端可以只发送192.168.5.1和端口号为8080来发送给服务器。 然后服务器根据接收过来的IP和端口号进行数据处理,例如判断是哪个小车。

需要搞清楚一开始连接全部小车,还是第一次接收到数据的时候再连接小车。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

TCP实验:

长时间不发数据,就会断开,这时候客户端只要使用指令重新连接 AT+CIPSTART=“TCP”,“192.168.4.1”,8086 然后服务器会返回connect OK,然后客户端再返回connect

但是UDP不会断开,因为没有服务器和客户端连接的说法,但是也是需要AT+CIPSTART的。

关于透传,客户端开启透传的意思是,不用每次都发指令后,才发数据给服务器,。并不是服务器那里没有+IPD,0,14这些前缀。但是客户端退出透传模式的话,服务器发过来的数据就会有+IPD,25:的前缀。。

服务器发送指令 sprintf((char*)p,“ATK-8266%s测试%02d\r\n”,ATK_ESP8266_WORKMODE_TBL[netpro],t/10);//测试数据 atk_8266_send_cmd(“AT+CIPSEND=0,25”,“OK”,200); //发送指定长度的数据 delay_ms(200); atk_8266_send_data(p,“OK”,100); //发送指定长度的数据

响应 发送指定长度的数据。收到此命令后先换行返 回”>”,然后开始接收串口数据,当数据长度满 length 时发送数据。如果未建立连接或连接被 断开,返回 ERROR 如果数据发送成功,返回 客户端返回SEND OK

STATUS:5和STATUS:4 当AP发送时返回5,成功时返回 AT+CIPSTATUS STATUS:5 +CIPSTATUS:0,“TCP”,“192.168.4.2”,1360,8086,1

当AP服务器发送时, 2:获得IP STATUS:2 +CIPSTATUS:0,“TCP”,“192.168.4.2”,37830,8086,1

STA客户端 3:建立连接 STATUS:3 +CIPSTATUS:0,“TCP”,“192.168.4.1”,8086,37830,0

当STA客户端发送时,如果已经连接上wifi,但是没有connect得话,返回2.,connect时返回3,成功时: STATUS:3 +CIPSTATUS:0,“TCP”,“192.168.5.1”,8086,41519,0 //这是别人AP服务器的IP地址

当AP加STA模式,就会返回全部状态。例如AP服务器+STA服务器下(192.168.4.1)(192.168.5.1) +CIPSTATUS:0,“TCP”,“192.168.4.2”,23913,8086,1 //别人连接自己AP后的别人状态 +CIPSTATUS:1,“TCP”,“192.168.5.3”,7092,8086,1 //别人连接和自己一样的AP后的别人状态,因为我是服务器。

2:获得 ip 3:建立连接 4:失去连接 连接的 id 号 0-4 字符串参数,类型 TCP 或 UDP 字符串参数, 连接远端的 IP 地址 响应 返回当前模块的拦截状态和连接参数 STATUS: +CIPSTATUS:,,,, ,

OK

ESP8266作为STA模式时的注意事项 Station模式有几个特点,以方便管理的Wi-Fi连接。 • 在连接丢失的情况下,一旦WiFi再次可用,ESP8266将自动重新连接到最近使用的接入点(Access Point,理解为热点),往往这一点容易出问题(有时路由器重启了,会发现ESP8266一直连接不上路由)。 • 模块重启也会发生同样的情况。 • 因为ESP8266将最后使用的接入点认证信息(ssid账号,psw密码)保存到Flash(非易失性)存储器中。 • 如果在Arduino IDE修改代码,但代码不更改Wi-Fi工作模式或接入点认证信息(ssid账号,psw密码),则ESP8266使用保存在Flash上数据来重新连接。 Station模式下的WiFi模块,有几个特点,以便用来管理WiFi连接: 当近使用的可接入点连接断开,但后面重新可用,那么ESP8266会自动去重新连接它(名词解析,最近使用的可接入点,就是ESP8266 最后连接的WiFi热点); 第一点说到的情况,对于ESP8266模块重新启动也一样适用; 这两点实现的原理就是:ESP8266会把最近使用的可接入点的校验信息(ssid账号和psw密码)会存到flash 存储中。使用保存在flash中的校验信息,ESP8266就可以重新连接到最近使用的可接入点,尽管你再次改变代码烧写进去,只要你不改变WiFi原来的工作模式和校验信息(说简单点就是,如果你烧写代码不擦除所有flash空间并且设置了自动连接,那么在仍然是station模式下就会自动连接wifi热点,不过在这里,博主建议大家在begin之前先调用 WiFi.disconnect(),可以避免一些奇怪的连接问题)。

上述对应的就是AT+CWJAP。设置连接到的WIFI网络名称/加密方式/密码

重连对应代码就是 如果客户端掉电了。 只需要AT+CIPSTART就好了,经过实验好像直接AT+CIPSTART=“TCP”,“192.168.4.1”,8086, 就不需要AT+CIPMUX=0,设置单连接。 否则会出现link is builded ERROR

但是先单连接再AT+CIPSTART,就不会报错,也是可以。

但是都需要设置透传模式后"AT+CIPMODE=1才能进入开始透传。AT+CIPSEND

当服务器断开时: 情况1:服务器断电。这时候如果重新连接,会返回no ip 情况2:程序重启,服务器不断电,但是重启会复位模块。这时候重新自动连接,然后还继续连接的话。会返回error,cloed。

然后当服务器设置到ap模式之后,再连接,就会返回OK和connect、这时候再连接就会返回ALREADY CONNECTED

ERROR.

上一次正常运行,断电之后wifi模块重新配置才会成功。因为芯片和wifi都断电了 可是如果只是下载程序的话,程序运行重新运行,重新配置wiif模块是不会成功,但能正常运行,因为WiFi模块并没有断电。这时候还是原来的配置, 在这里插入图片描述

不会返回ok.

查找本机IP AT+CIFSR AP模式下查看已接入设备的ip AT+CWLIF

AT+CWLAP 查询可用的APwiif, 注意,只有当STA或者AP+STA模式去才能使用,AP模式下不可以。

AT+CWJAP=“ATK-ESP8266_ap_sta”,“12345678” 成功返回WIFI CONNECTED WIFI GOT IP

如果已经连接然后再加入,就会多一个 WIFI DISCONNECT WIFI CONNECTED WIFI GOT IP

AT+CIPCLOSE和AT+CIPCLOSE=id和AT+CIPCLOSE=5

客户端的时候用AT+CIPCLOSE 服务器的时候用AT+CIPCLOSE=id和AT+CIPCLOSE=5

AP 和STA的客户端和服务器的区别;

AP的服务器模式就是开热点。

但是AP的客户端模式,则是开启了AP模式的模块作为热点,然后自己(模块)设置为客户端, 此时自己(模块)的ip就是热点的ip,等待连接同一个IP域的服务器。

接着别人(电脑或者手机或者另一个模块)需要连接上自己的热点,然后别人就会自动分配一个IP,然后配置成服务器模式。 然后自己(模块)要连接到服务器(电脑或者手机或者另一个模块)上。

STA的客户端就是需要连接到别人的WiFi热点。

STA的服务器模式 ,还是需要连接别人的wifi热点(例如手机热点),即便他是服务器模式。

然后别人(例如电脑,或者另一个模块)也要连接同样的WiFi(例如同一个手机热点),别人则要配置成客户端。

然后别人(例如电脑,或者模块)连接STA的服务器,IP地址是连接到同一个wiif后自动分配的。

这里就是要一个热点作为中转站,相当于一个热点有两个设备加入。 在这里插入图片描述

关于:AT+CIPSEND=1,=0的问题 对于AP服务器来说,谁先连接,谁就是0 对于AP服务器+STA客户端来说,谁先连接或者谁先被连接,谁就是0,例如,我客户端先连接别人,那么STA客户端就是0

自我总结:

啃瓜子的猫: Cipstatus

啃瓜子的猫: 查看

啃瓜子的猫: 如果有ip 但是发送不成功

啃瓜子的猫: 就推出

啃瓜子的猫: 退出

啃瓜子的猫: 这是客户端直接断wifi 的原因

啃瓜子的猫: 服务器如果发现有ip 但是发送不成功,

啃瓜子的猫: 就关掉发不出去的id

啃瓜子的猫: 然后让客服端重新链接

啃瓜子的猫: 客服端可以链接很多个服务器

啃瓜子的猫: 他自己有对应每个服务器的id

啃瓜子的猫: 服务器也有很多客服端链接

啃瓜子的猫: 他自己也有对应每个客服端的id

啃瓜子的猫: 他们的id 都不一样一一对应

啃瓜子的猫: 有的客户端链接了一个服务器,但是一些原因,例如断电,

啃瓜子的猫: 服务器并不知道,因为不是正常的关闭

啃瓜子的猫: 这时候客服端重新以同一个id 链接上服务器的时候,

啃瓜子的猫: 如果这个服务器没有其他人链接的情况下,服务器分配给这个客户端的id 就有可能不是0,而是1,0这个id 已经被之前不正常关闭的客户端占用了

啃瓜子的猫: 然后过一段时间,服务器会自动关闭id 0,因为长时间不通信

啃瓜子的猫: 客户端不用一直发数据维持通信

啃瓜子的猫: 由服务器来发送

啃瓜子的猫: 如果

啃瓜子的猫: 如果

啃瓜子的猫: Ap s sta c 这个先不链接Ap s sta s

啃瓜子的猫: 而是让电脑先连上wifi 而且connect 上了

啃瓜子的猫: 那么Ap s sta c 的c去链接Ap s sta s 的时候

啃瓜子的猫: 是以0的id 链接,那么会有可能会出问题,因为电脑先连上了,已经是服务器分配了id 为0给电脑

啃瓜子的猫: Ap加STA模式的id 序号是叠加的,不是分开的

啃瓜子的猫: 但是这个情况是可以避免的,而且很少发生,因为重新上电的时候,就算电脑连上了wifi ,但是重新上电模块会把id 清零的

啃瓜子的猫: 而且Ap s sta c 打开了wifi 也没用,因为他是要找到Ap s sta s 的wifi 并连接上后,才打开server 的

啃瓜子的猫: 所以电脑是不能先链接的

啃瓜子的猫: Ap s sta s也是这样

啃瓜子的猫: 如果是复位

啃瓜子的猫: 要做实验ap s sta s复位

啃瓜子的猫: 看看rst会不会导致客户端连不上

啃瓜子的猫: 预测,就算连不上,ap s sta s发现发不过去,就会关掉id0

啃瓜子的猫: 客户端就会重连

啃瓜子的猫: 预测而已

啃瓜子的猫: 要做实验

啃瓜子的猫: 现在就不知道服务器重启了客户端知不知道,会不会关掉对应服务器的id

啃瓜子的猫: 在这里插入图片描述

啃瓜子的猫: 实验显示,ap s sta s复位的时候

啃瓜子的猫: ap s sta c连接上的id会close掉。

啃瓜子的猫: //如果那边重启了。这边会0,CLOSED,不会不知道服务器重启,的 //也不会客户端的id0被占用,因为已经closed了

啃瓜子的猫: 要做实验ap s sta c复位

啃瓜子的猫: 在这里插入图片描述

啃瓜子的猫: 可以看到ap s sta c复位之后,ap s sta s这边是不知道的

啃瓜子的猫: 这时候ap s sta c重新连接的话,服务器会分配一个id=1给他

啃瓜子的猫: 但是ap s sta c是id=0连接的,

啃瓜子的猫: 但是并不会影响,在服务器的代码里

啃瓜子的猫: 是按ipd来发的。

啃瓜子的猫: 用AT+CIPSTATUS

啃瓜子的猫: 在这里插入图片描述

啃瓜子的猫: 在这里插入图片描述

啃瓜子的猫: 服务器发送失败之后会把失败的id去掉

啃瓜子的猫: //失败会自动断掉,不需要关闭,但是也会导致CIPSTATUS返回不到信息,返回busy s //然后过一会才返回CIPSTATUS:1,CONNECT FAIL //SEND FAIL //这是固件决定的

啃瓜子的猫: 但是,有一点,ap s sta c这个模块是电脑和另一个模块的中转站,意思是两个都需要ap s sta c的APWiFi,ap s sta c重启了,那么两边都是断掉

啃瓜子的猫: 在这里插入图片描述

啃瓜子的猫: 即使是这里都是亮的都没用

啃瓜子的猫: 都需要重新断开再重连

啃瓜子的猫: ap s sta c重启了,那么ap s sta S那个STA SERVE也会断开所以连接

啃瓜子的猫: 因为wifi断了

啃瓜子的猫: 在这里插入图片描述

啃瓜子的猫: 在这里插入图片描述

啃瓜子的猫: 可以看到一开始STA_S是有电脑的连接的

啃瓜子的猫: STA_C重启后,就没有了,但是会保留STA_C的客户端连接,然后STA_C重新连接的时候,就会又多了一个STA_C出来



【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3