zoukankan      html  css  js  c++  java
  • esp8266(0) AT指令

    http://www.shaoguoji.cn/2017/01/15/ESP8266-usage/

    注意事项

    使用WiFi模块的一些细节及注意事项

    1. 模块使用3.3V供电,一定注意电源的稳定,一些USB转串口模块电源不能满足要求。

    2. 模块在连接WiFi后若断电,则会在下一次上电后自动重连。同理,模块在透传模式下断电后,下次上电仍会进入透传模式,不响应AT指令,很容易误以为模块坏了

    3. 如果断开TCP连接时没有实现完整的TCP退出流程,ESP8266 会判断为异常开,对TCP server 进行重连。

    4. AT指令一定以回车换行符” ”结尾,但退出透传模式需发送不带回车换行的 +++

     AT指令有三:基础指令; wifi功能指令; TCP/IP工具箱指令;
    *      基础指令; 
    *              AT         测试指令
    *              AT+RST     重启模块
    *              AT+GMR     查看版本信息 
    *      wifi功能指令:
    *              AT+CWMODE  选择WIFI应用模式
    *              AT+CWJAP   加入AP
    *              AT+CWLAP   列出当前可用AP
    *              AT+CWQAP   退出与AP的连接
    *              AT+CWSAP   设置AP模式下的参数
    *              AT+CWLIF   查看已接入设备的IP
    *      TCP/IP工具箱指令
    *              AT+ CIPSTATUS   获得连接状态
    *              AT+CIPSTART     建立TCP连接或注册UDP端口号
    *              AT+CIPSEND      发送数据
    *              AT+CIPCLOSE     关闭TCP或UDP
    *              AT+CIFSR        获取本地IP地址
    *              AT+CIPMUX       启动多连接
    *              AT+CIPSERVER    配置为服务器
    *              AT+CIPMODE      设置模块传输模式
    *              AT+CIPSTO       设置服务器超时时间
    

      

    1sta模式连接WiFi演示

    连接到路由器, arduino 结尾选择,

     普通串口软件注意勾选“发送新行”

    1. 发送 AT+CWMODE=1 指令配置模块为sta模式(参数1,2,3分别对应模式sta,AP和sta/AP)。

    2. 发送 AT+CWLAP 指令扫描当前附近WiFi,模块会返回可用AP列表。

    3. 使用 AT+CWJAP="WiFi名称","WiFi密码" 连接到指定的路由器,比如我在图书馆的WiFi是 “lib-free-wlan01”,密码是“zhku-lib”,实际连接WiFi发送的指令就是 AT+CWJAP="lib-free-wlan01","zhku-lib" 

    4. 返回的“WIFI CONNECTED”说明连接成功,“WIFI GOT IP”代表模块分配到了IP。

    5. 最后可使用 AT+CWQAP 断开当前连接的WiFi。

    2AP模式参数设置演示

    连完WiFi那接下来就“开WiFi”吧!AP模式和手机开热点一样,只需设置WiFi名称和密码即可。

    1. 先使用 AT+CWMODE=2 指令配置模块为AP模式
    2. 发送 AT+CWSAP="ESP8266","12345678",3,4 设置AP的ssid为“ESP8266”,密码12345678,最后两个参数3和4分别表示信道和加密方式。
    3. 手机连上模块的WiFi,使用 AT+CWLIF 可查看当前连接到AP的客户端列表。

    3透传模式下WiFi模块与服务器TCP网络通讯演示

    指令描述
    AT+CIPSTATUS 查询网络连接信息
    AT+CIPMUX 设置多连接模式
    AT+CIPSTART 建立TCP连接UDP传输或者SSL连接
    AT+CIPCLOSE 关闭TCP/UDP/SSL传输
    AT+CIPMODE 设置透传模式
    AT+CIPSEND 发送数据

    打开“网络调试助手”,左侧选择“TCP服务器”,输入自定的端口号(1024-65535),点击“连接”按钮开始监听本机TCP连接请求。在进行下一步之前,请确保电脑和WiFi模块连接到同一个路由器

    把WiFi模块和电脑连接,在sscom确定AT指令能正常使用后,就可以开始配置TCP连接了,具体步骤如下:

    1. 根据上面“sta模式连接WiFi演示”一节把模块连上WiFi

    2. 输入指令 AT+CIPMUX=0 设置单连接

    3. 从“网络调试助手”得知本机IP和端口,输入指令 AT+CIPSTART="TCP","192.168.43.140",1234 (指令参数分别为连接类型、目标IP地址和端口号)向服务器发起TCP连接请求,握手成功并建立连接后,服务器端的“网络调试助手”就会显示客户端IP和端口信息,此时双方已做好收发数据的准备

    4. 输入指令 AT+CIPMODE=1 开启透传模式

    5. 输入命令 AT+CIPSEND 进入透传模式,此时模块会把所有串口收到的数据都从TCP端口发送至服务器,同样的,从服务器收到的数据也会从模块串口发送出去打印到sscom上。这样WiFi模块就真正成为了连接硬件与网络的桥梁,实现了串口到TCP的协议转换

    6. 若要退出透传模式返回AT指令模式,需发送不带回车换行的 +++ (取消勾选sscom的“发送新行”再发送指令即可)

    7. 手机,ESP8266,电脑无线连接路由器账户 dongdong 密码 dongdong
    8. 电脑网线连接路由器 网页192.168.1.1 查询路由器当前状态,可看到三个设备分配的地址

    4、手机做客户端-client,模块做服务端-server  

    http://www.yfrobot.com/thread-11791-1-1.html

    AT+CWMODE=2                                                              //   将模块配置到 AP 模式

    AT+CWSAP="YFRobot_ESP","12345678",11,0             //     设置模块 AP 模式下的参数 

    •     YFRobot_ESP      ----    接入点名称
    •     12345678           ----    密码
    •     11                       ----    通道号  (通道修改后需要+RST重启模块)
    •     0                         ----    加密模式  0 - OPEN 1 - WEP 2 - WPA_PSK 3 - WPA2_PSK 4 - WPA_WPA2_PSK

    AT+RST :复位

    AT+CIFSR :查询模块IP端口

    AT+CIPMUX=1 :多连接

    AT+CIPSERVER=1,6000 :建立服务器的同时顺便设端口号
    注:AT+CIPMUX=1 情况下才能开启服务器。
    前两条AT指令,配置一次即可,模块重启不会改变,第三条为查询指令;也就是说当模块下次重启时,只需配置最后两条AT指令!

    手机连接到该模块

     

    可用AT指令 查询已连入的设备
    AT+CWLIF                                               查询已连入设备
    •     192.168.4.2,38:bc:1a:c7:18:47 -- 返回 IP 地址,MAC 地址

    手机向ESP8266发送命令 

    • 参数 
    •     0  --  连接的 id 号 (范围 0~4)
    •     TCP -- 连接类型
    •     192.168.4.2  -- 手机客户端IP地址
    •   43188- 端口号
    •     1 -- 本模块做 server 的连接(0 -- client)

    ESP8266向手机发送命令 

    ESP模块做为服务端想要给手机客户端发送数据,必须申请(不然不知道发给谁了):

    原理:

    AT+CIPSEND=0,15                                  申请发送15个字符数据 至 0 号客户端(客户端号按连接顺命名)
                                                                      请求成功后,会显示符号“>”,这时直接发送已申请大小的数据即可:
    hello client-0!
    注:若输入数据大小大于申请大小,则数据不能完整发送
          若输入数据大小小于申请大小,则等待输入数据输入满大小才进行发送

    所以需要为单片机写程序,每次把上述过程,通过串口命令发送给esp8266,然后由此转发:

    这里以Arduino单片机为例;  

    两点重要:

    1软串口从esp8266 收到的是乱码, 重新设置下波特率就解决了。   

    AT+UART=9600,8,1,0,0

    2 Arduio设置的波特率实际的2倍。  

    我们期望 9600, 但是你的设置成9600*2(见程序),我也不知道为什么这样,估计是版本和库文件的问题。

    #include <SoftwareSerial.h>

    #define DEBUG true

    SoftwareSerial esp8266(2,3); // make RX Arduino line is pin 2, make TX Arduino line is pin 3.
                                 // This means that you need to connect the TX line from the esp to the Arduino's pin 2
                                 // and the RX line from the esp to the Arduino's pin 3
    void setup()
    {
      Serial.begin(19200);
      esp8266.begin(19200); // your esp's baud rate might be different
      
      sendCommand("AT+CWMODE=2 ",2000,DEBUG); // reset module
     // delay(20000);
     String s="AT+CWSAP="DDD","12345678",11,0 ";
     sendCommand(s,2000,DEBUG);// reset module
        Serial.println("1");
     // delay(30000);
      sendCommand("AT+RST ",2000,DEBUG); // reset module
      delay(3000);
      sendCommand("AT+CIPMUX=1 ",1000,DEBUG); // configure for multiple connections
    //   delay(20000);
      sendCommand("AT+CIPSERVER=1,6000 ",1000,DEBUG); // turn on server on port 80
      Serial.println("Server Ready");
    }

    void loop() { // run over and over
      if (esp8266.available()) {
        Serial.write(esp8266.read());
      }
       if (Serial.available()) {
        esp8266.write(Serial.read());
      }
    }
    String sendCommand(String command, const int timeout, boolean debug)
    {
        String response = "";

        esp8266.print(command); // send the read character to the esp8266

        long int time = millis();

        while( (time+timeout) > millis())
        {
          while(esp8266.available())
          {

            // The esp has data so display its output to the serial window
            char c = esp8266.read(); // read the next character.
            response+=c;
          } 
        }

        if(debug)
        {
          Serial.print(response);
        }

        return response;
    }

      

    5、模块做客户端-client,手机做服务端-server

    wifi连接不变按照上面的步骤连接即可,然后手机端开启服务,模块连接手机!连接完成,即可进行数据通信,具体操作如图:

    模块配置指令如下:
    TCP 连接 -----
    ● 单路连接
    AT+CIPMUX=0                                                         单路连接设置(只有当连接都断开才可更改,可先AT+RST)
    AT+CIPSTART="TCP","192.168.4.2",5000              建立 TCP 连接(类型,IP,端口号由手机开启服务决定,上图可见)
    AT+CIPSEND=17                                                     申请发送字符大小,回显字符 ">"
    hello tcp server!                                                        发送申请大小的字符串
    手机端成功接收字符串:“hello tcp server!”   手机发送字符,ESP也同样可以接收到!
    ● 多路连接
    AT+CIPMUX=1                                                         多路连接设置(只有当连接都断开才可更改,可先AT+RST)
    AT+CIPSTART=0,"TCP","192.168.4.2",5000           建立 TCP 连接(和单路区别,需要参数 ID 号,范围0~4
    AT+CIPSEND=0,17                                                  申请发送字符大小,回显字符 ">"
    hello tcp server!                                                        发送申请大小的字符串
    手机端成功接收字符串:“hello tcp server!”   手机发送字符,ESP也同样可以接收到!

    5 一键配置原理(smartconfig)

    先来说smartconfig吧 也就是所谓的一键配置,速度比AP模式快,为什么呢?请看下面分解。

    所谓的smartconfig就是  

    手机APP端发送包含WIFI 用户名 WIFI密码的 UDP 广播包或者组播包,

    智能终端的WIFI芯片可以接收到该UDP包,只要知道UDP的组织形式,就可以通过接收到的UDP包解密 出WIFI 用户名 密码,

    然后智能硬件 配置受到的WIFI 用户名 密码到指定的WIFI AP 上。

    6 WIFI修改波特率

    AT+UART=4800,8,1,0,0

    其他常用指令

    除了上面列举的主要功能指令,ESP8266 模块还有一些常用的指令:

    AT+CIOBAUD 指令用于设置串口波特率,示例: AT+CIOBAUD=9600 (设置波特率为9600)。 设置好TCP连接信息后通过 AT+SAVETRANSLINK 指令把TCP连接透传保存到Flash,掉电不丢失。重新上电后模块会自动联网建立TCP连接后进入透传模式,实现了真正意义上的透传,示例: AT+SAVETRANSLINK=1,"192.168.43.140",1234,"TCP" 。而 AT+CWSTARTSMART 和 AT+CWSTOPSMART 则时用来实现智能配置(Smart Config)的。

    指令描述
    AT+CIOBAUD 设置串口波特率
    AT+SAVETRANSLINK 保存透传到 Flash
    AT+CWSTARTSMART 开启 SmartConfig
    AT+CWSTOPSMART 停止 SmartConfig 
  • 相关阅读:
    3090显卡(CUDA11.1)安装Pytorch
    ros环境搭建
    github设置仓库可见性 私人仓库设置他人协作/可见
    安全可靠国产系统下的应用怎么搭建?
    燕山大学操作系统课程设计计划书
    flink 1.9.0 编译:flink-fs-hadoop-shaded 找不到
    产品经理面试——简历填写
    什么是可串行化MVCC
    fatal: early EOF fatal: index-pack failed
    Maven 初学+http://mvnrepository.com/
  • 原文地址:https://www.cnblogs.com/kekeoutlook/p/8260104.html
Copyright © 2011-2022 走看看