有关ESP8266的AT指令的一些理解
1.几个名词的区别
-
AP (AccessPoint) 与STA (Station) 是WIFI通信中物理层的概念,可以理解为热点和连接热点手机。而STA+AP就是同时开热点又连着WIFI的电脑。 -
TCP (Transmission Control Protocol) 和UDP (User Datagram Protocol) 是WIFI通讯中传输层的概念。 而其中 服务器 (Server) 与客户端 (Client) 是 TCP传输协议中的两个概念,和AP与STA无关。 不知道有没有小白会像我一样搞混😢 ,再次提醒一下自己: AP=服务器,STA=客户端?
2.图示
以下,用图示表示我对这几个名词的理解:
(图中,?表示作AP,矩形表示作STA,使用TCP传输协议)
-
AP:就是一个能够形成场(一个?)的点; -
STA:没有办法形成场(?)的点; -
服务器:在一个场内,能够连接多条线的点; -
客户端:在一个场内,只能连接一个线的点;
换句话说,
-
AP,STA决定是谁做WIFI,谁去连谁的事儿,(识别是靠SSID WIFI名称 通行是靠PassWord WIFI密码 ) -
Server,Client决定的是进入同个WIFI这个场后,谁要连接谁,谁作基地、中转站(Server)的事儿,(识别是靠 IP地址和端口号) -
??顺便介绍一下:IP地址和端口号
-
IP地址:是同一个网络下,用来区分不同电脑的的身份证明 ,可以理解为像电话号码; -
端口号:在同一个电脑中时时刻刻有很多进程(因为有很多程序在运行),而端口号,就是这些程序的区分标志 -
在这儿需要特别注意两个IP 0.0.0.0 (本机IP) 和 127.0.0.1*(本机回环地址)* 端口号的查看,可在windos命令行下使用如下指令查看: cd c:\WINDOWS\system32
netstat -ano
B作为AP形成的场
A作为AP的形成的场
作为Client的B
作为Server的A
作为Client的C
作为Client的D
作为Client的B
作为Server的A
作为Client的C
作为Client的D
3.CTP与UDP区别的理解:
网上有很多说明:(我只是谈谈我浅显的理解)
- CTP:需要等待对方回复,才可以正常开始通信(所以有了著名的”三次握手“,“四次挥手”),格式开销大,传输速度慢,但数据完整性高;
- UDP:不需要等待对方回复,只要给个IP号和端口号,就会一股脑的数据往那儿发(因此,可以不用区分Server和Client 在ESP8266的AT操作中可以看到这一点 ),格式开销小,传输速度快,但数据完整性低,已丢失数据;
4.ESP8266的AT指令简单使用:
无特殊说明,指令后都需\r\n (勾选发送新行) ;
1)物理WIFI层:
AT+CWMODE?
AT+CWMODE=1 / 2 / 3
AT+CWJAP="SSID","PassWord"
AT+CWLAP
AT+CWQAP
AT+CIPSTA?
-
作为AP时,即CWMODE=2 / 3; 注意AP模式下没有指令可断开STA的连接。
AT+CWSAP?
AT+CWSAP="SSID","PASSWORD",<CHL(通道号)>,<ecn(加密方式)>,<max_conn(最多连接的STA数,默认最多5个)>,<ssid_hidden(ap是否不广播)>
AT+CIPAP?
2)使用TCP协议时:
-
作Server时: AT+CWMUX=1
AT+CIPSERVER=1,<端口号>
AT+CIPSEND=<PID号>,<发送字节数>
AT+CIPCLOSE=<IPD>
AT+CIPSERVER=0
-
作Client时: 如果没有进入Server模式的话,就默认是Client的,只需要建立跟Server的连接就好,但在建立连接前,Client时有两种模式可供选择的 AT+CIPMODE?
AT+CIPMODE=0
AT+CIPSTART="TCP","<ID号>",<端口号>
AT+CIPSEND=<要发送的字节数>
AT+CIPCLOSE
AT+CWMUX=0
AT+CIPMODE=1
AT+CIPSTART="<TCP>","<ID号>",<端口号>
AT+CIPSEND
+++
AT+CIPLOSE
3)UDP协议:
根据CIPMODE的不同,UDP也分为透传和不透传两种
根据我在ESP8266上的实验,UDP的透传模式,只对发送有影响(透传时只能向一个目标发送东西),对接收无影响(透传时,仍可有接收来自多个IP的消息,不过,没有区分时那个ID发来的 ESP8266,AT指令下显示区分 )
AT+CIPMODE=0
AT+CIPSTART="UDP","<ID号>",<端口号>
AT+CIPSEND=<字节数>
AT+CIPSEND=<字节数>,<"ID">,<端口号>
AT+CIPCLOSE
AT+CWMUX=0
AT+CIPMODE=1
AT+CIPSTART="<UDP>","<ID号>",<端口号>
AT+CIPSEND
+++
AT+CIPLOSE
写在最后,因为本人不是互联网/物联网专业的学生(电子),对esp8266也只是刚刚接触,如果有理解错误的地方希望大家指出,未来有时间会尝试使用SDK去开发ESP8266.
|