admin管理员组

文章数量:1574959

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实验:

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

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

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

  2. 服务器发送指令
    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

  1. 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
<remote_ip>字符串参数,
连接远端的 IP 地址
响应
返回当前模块的拦截状态和连接参数
STATUS:
+CIPSTATUS:,,<remote_ip>,, <local_port>,

OK

  1. 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.

  1. 上一次正常运行,断电之后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出来

本文标签: 模块日记ESP8266WiFi