有关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
-
3.CTP与UDP区别的理解:
网上有很多说明:(我只是谈谈我浅显的理解)
- CTP:需要等待对方回复,才可以正常开始通信(所以有了著名的”三次握手“,“四次挥手”),格式开销大,传输速度慢,但数据完整性高;
- UDP:不需要等待对方回复,只要给个IP号和端口号,就会一股脑的数据往那儿发(因此,可以不用区分Server和Client 在ESP8266的AT操作中可以看到这一点 ),格式开销小,传输速度快,但数据完整性低,已丢失数据;
4.ESP8266的AT指令简单使用:
无特殊说明,指令后都需\r\n (勾选发送新行) ;
1)物理WIFI层:
AT+CWMODE? //查询当前WIFI模式:1=STA,2=Ap,3=STA+AP;
AT+CWMODE=1 / 2 / 3 //设置当前WIFI模式:1=STA,2=Ap,3=STA+AP;
- 作为STA时,即CWMODE=1 / 3;
AT+CWJAP="SSID","PassWord" //加入哪个AP,(连接那个WIFI)
AT+CWLAP //列出当前可⽤的 AP(="SSID"可筛选)
AT+CWQAP //断开与 AP 的连接
AT+CIPSTA?//查询STA模式下自己的IP地址(把?换=...可设置)
-
作为AP时,即CWMODE=2 / 3;
注意AP模式下没有指令可断开STA的连接。
AT+CWSAP?//查询AP的参数
AT+CWSAP="SSID","PASSWORD",<CHL(通道号)>,<ecn(加密方式)>,<max_conn(最多连接的STA数,默认最多5个)>,<ssid_hidden(ap是否不广播)>
//设置AP的参数
AT+CIPAP?//查询AP模式下自己的IP地址(把?换=...可设置)
2)使用TCP协议时:
-
作Server时:
AT+CWMUX=1 AT+CIPSERVER=1,<端口号>//进入服务器模式,必须先允许多连接 //有Client接入时会有提示,并为其分配一个IPD号:0-4,最多5个 AT+CIPSEND=<PID号>,<发送字节数>//向接入Server的第IPD个Client发多少字节的消息,出现>开始输入消息,原则:《少不多退》 //Client有消息发来时,会自动监听 AT+CIPCLOSE=<IPD>//断开与第IPD个Client的连接 AT+CIPSERVER=0//退出服务器模式
-
作Client时:
如果没有进入Server模式的话,就默认是Client的,只需要建立跟Server的连接就好,但在建立连接前,Client时有两种模式可供选择的
AT+CIPMODE?//查询当前说正常,发送模式还是透传模式; AT+CIPMODE=0//正常模式,不改动的话,默认就是这个 AT+CIPSTART="TCP","<ID号>",<端口号> //这里先只说作TCP的CLient,第一参数事实是可选UDP,下面再说,@记住,端口号不用“”(踩过的坑),这样就与Server建立了连接,工作在TCP的Client模式了 AT+CIPSEND=<要发送的字节数>//开始发送,出现>后输入发送内容,原则:《少不多退》 AT+CIPCLOSE//断开与服务器的连接,也就退出Client,可以重新选择是否要作服务器,或者是作为Client去连接其他服务器 AT+CWMUX=0//注意开启透传模式前,必须保证连接数限制为单链接,否则Error AT+CIPMODE=1//开启透传模式, AT+CIPSTART="<TCP>","<ID号>",<端口号>//同样地与一个服务器建立连接,成为Client AT+CIPSEND//直接开始传输,不需要参数,开始透传; //出现 > 开始输入传输数据 (可以不限字数传输) +++//(@千万注意这个不用\r\n换行),退出透传模式 AT+CIPLOSE//断开与Server的连接,即退出Client,可以重新选择是否要作服务器,或者是作为Client去连接其他服务器
3)UDP协议:
根据CIPMODE的不同,UDP也分为透传和不透传两种
根据我在ESP8266上的实验,UDP的透传模式,只对发送有影响(透传时只能向一个目标发送东西),对接收无影响(透传时,仍可有接收来自多个IP的消息,不过,没有区分时那个ID发来的 ESP8266,AT指令下显示区分 )
AT+CIPMODE=0//正常模式,不改动的话,默认就是这个
AT+CIPSTART="UDP","<ID号>",<端口号>//建立UDP的连接,也就进入了U使用DP协议发送模式
//发送消息的方式有两种,
/*1*/
AT+CIPSEND=<字节数>//向刚刚建立连接的对象发送消息,出现>输入内容,同样《少不退,但不存》
/*2*/
AT+CIPSEND=<字节数>,<"ID">,<端口号>//向在同一个wifi下的指定ID发送消息,用此方法可以给多个不同ID,@注意:!!!不用断开连接(AT+CIPCLOSE),重新连接新ID,因为在UDP协议模式下,只要有ID,就能往那个ID发消息,
AT+CIPCLOSE//退出UDP的连接,也就退出了UDP协议模式
//注意:UDP协议中没有区分Server和Client,所以在普通模式(非透传)下,可以实现多点任意互联
AT+CWMUX=0//注意开启透传模式前,必须保证连接数限制为单链接,否则Error
AT+CIPMODE=1//开启透传模式,
AT+CIPSTART="<UDP>","<ID号>",<端口号>//建立UDP连接
AT+CIPSEND//直接开始传输,不需要参数,开始透传;
//出现 > 开始输入传输数据 (可以不限字数传输),
//此时无法向指定的ID发消息,所以被限制为只能向上述ID的消息
//需要给其他ID发消息,需要断开重新进行UDP连接,但此时可以收到多个ID的消息
+++//(@千万注意这个不用\r\n换行),退出透传模式
AT+CIPLOSE//断开连接,即退出UDP协议模式,可以选择是否重连以UDP其他ID
写在最后,因为本人不是互联网/物联网专业的学生(电子),对esp8266也只是刚刚接触,如果有理解错误的地方希望大家指出,未来有时间会尝试使用SDK去开发ESP8266.