有关ESP8266的AT指令的一些理解(2021-08-15)

有关ESP8266的AT指令的一些理解

文章目录

  • 有关ESP8266的AT指令的一些理解
    • 1.几个名词的区别
    • 2.图示
    • 3.CTP与UDP区别的理解:
    • 4.ESP8266的AT指令简单使用:
      • 1)物理WIFI层:
      • 2)使用TCP协议时:
      • 3)UDP协议:

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
    注:AP虽然是B形成的,但B可以作Client。此时,A作Server,只要Client B/C/D都在同一个场(B的场)内,就可连接作为Server的A

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","",<端口号>
        //这里先只说作TCP的CLient,第一参数事实是可选UDP,下面再说,@记住,端口号不用“”(踩过的坑),这样就与Server建立了连接,工作在TCP的Client模式了
    
            AT+CIPSEND=<要发送的字节数>//开始发送,出现>后输入发送内容,原则:《少不多退》
    
        AT+CIPCLOSE//断开与服务器的连接,也就退出Client,可以重新选择是否要作服务器,或者是作为Client去连接其他服务器    
        
        
    
    AT+CWMUX=0//注意开启透传模式前,必须保证连接数限制为单链接,否则Error
    AT+CIPMODE=1//开启透传模式,
        AT+CIPSTART="","",<端口号>//同样地与一个服务器建立连接,成为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","",<端口号>//建立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连接
    	AT+CIPSEND//直接开始传输,不需要参数,开始透传;
    	//出现 > 开始输入传输数据 (可以不限字数传输),
    	//此时无法向指定的ID发消息,所以被限制为只能向上述ID的消息
    	//需要给其他ID发消息,需要断开重新进行UDP连接,但此时可以收到多个ID的消息
    	+++//(@千万注意这个不用\r\n换行),退出透传模式
	AT+CIPLOSE//断开连接,即退出UDP协议模式,可以选择是否重连以UDP其他ID

写在最后,因为本人不是互联网/物联网专业的学生(电子),对esp8266也只是刚刚接触,如果有理解错误的地方希望大家指出,未来有时间会尝试使用SDK去开发ESP8266.

你可能感兴趣的:(ESP8266,socket)