esp8266(0) AT指令
http://www.shaoguoji.cn/2017/01/15/ESP8266-usage/


注意事项
使用WiFi模块的一些细节及注意事项
模块使用3.3V供电,一定注意电源的稳定,一些USB转串口模块电源不能满足要求。
模块在连接WiFi后若断电,则会在下一次上电后自动重连。同理,模块在透传模式下断电后,下次上电仍会进入透传模式,不响应AT指令,很容易误以为模块坏了。
如果断开TCP连接时没有实现完整的TCP退出流程,ESP8266 会判断为异常开,对TCP server 进行重连。
AT指令一定以回车换行符”\r\n”结尾,但退出透传模式需发送不带回车换行的
+++
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 结尾选择,

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

发送
AT+CWMODE=1指令配置模块为sta模式(参数1,2,3分别对应模式sta,AP和sta/AP)。发送
AT+CWLAP指令扫描当前附近WiFi,模块会返回可用AP列表。
使用
AT+CWJAP="WiFi名称","WiFi密码"连接到指定的路由器,比如我在图书馆的WiFi是 “lib-free-wlan01”,密码是“zhku-lib”,实际连接WiFi发送的指令就是AT+CWJAP="lib-free-wlan01","zhku-lib"。返回的“WIFI CONNECTED”说明连接成功,“WIFI GOT IP”代表模块分配到了IP。
最后可使用
AT+CWQAP断开当前连接的WiFi。
2AP模式参数设置演示
连完WiFi那接下来就“开WiFi”吧!AP模式和手机开热点一样,只需设置WiFi名称和密码即可。
- 先使用
AT+CWMODE=2指令配置模块为AP模式 - 发送
AT+CWSAP="ESP8266","12345678",3,4设置AP的ssid为“ESP8266”,密码12345678,最后两个参数3和4分别表示信道和加密方式。 - 手机连上模块的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连接了,具体步骤如下:
根据上面“sta模式连接WiFi演示”一节把模块连上WiFi
输入指令
AT+CIPMUX=0设置单连接从“网络调试助手”得知本机IP和端口,输入指令
AT+CIPSTART="TCP","192.168.43.140",1234(指令参数分别为连接类型、目标IP地址和端口号)向服务器发起TCP连接请求,握手成功并建立连接后,服务器端的“网络调试助手”就会显示客户端IP和端口信息,此时双方已做好收发数据的准备输入指令
AT+CIPMODE=1开启透传模式输入命令
AT+CIPSEND进入透传模式,此时模块会把所有串口收到的数据都从TCP端口发送至服务器,同样的,从服务器收到的数据也会从模块串口发送出去打印到sscom上。这样WiFi模块就真正成为了连接硬件与网络的桥梁,实现了串口到TCP的协议转换若要退出透传模式返回AT指令模式,需发送不带回车换行的
+++(取消勾选sscom的“发送新行”再发送指令即可)
- 手机,ESP8266,电脑无线连接路由器账户 dongdong 密码 dongdong
- 电脑网线连接路由器 网页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指令!

手机连接到该模块

- 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\r\n",2000,DEBUG); // reset module
// delay(20000);
String s="AT+CWSAP=\"DDD\",\"12345678\",11,0\r\n";
sendCommand(s,2000,DEBUG);// reset module
Serial.println("1");
// delay(30000);
sendCommand("AT+RST\r\n",2000,DEBUG); // reset module
delay(3000);
sendCommand("AT+CIPMUX=1\r\n",1000,DEBUG); // configure for multiple connections
// delay(20000);
sendCommand("AT+CIPSERVER=1,6000\r\n",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=,"TCP","192.168.4.2",5000 建立 TCP 连接(和单路区别,需要参数 ID 号,范围0~4)
AT+CIPSEND=,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 |
esp8266(0) AT指令的更多相关文章
- ESP8266 使用AT指令
ESP8266 使用AT指令 问题:串口调试工具输入AT指令没返回结果 分析板子有两种模式 下载模式(默认) 运行模式 解决办法: 方法一:按下板子上的 RST 键位 方法二:使用 [安信可串口调试工 ...
- 1-51单片机ESP8266学习-AT指令(开发板介绍)
51单片机+ESP8266开发教程(AT指令篇) 开发板资源分布: 开发板部分原理图: 1--通信下载 2--51单片机 3--ESP8266(WIFI模块) 4--DHT11(温湿度传感器) 5-- ...
- vue2.0自定义指令的使用方法
感觉2.0好坑啊,自定义指令和1.0完全不一样,并且文档写得也不太清晰,下面是我写得一个demo,希望帮助大家更好地理解自定义指令 <!DOCTYPE html> <html lan ...
- 11-51单片机ESP8266学习-AT指令(ESP8266作为TCP客户端,连接TCP服务器,用串口调试助手和手机TCP调试助手测试)
写完题目刚想起来一件事情,如果手机作为客户端(不连接路由器的情况下),手机连接模块的无线会分配一个IP地址,,,这个IP地址事先我也不知道....我先看看AT指令里面有没有一个指令可以打印一下连接自己 ...
- 10-51单片机ESP8266学习-AT指令(ESP8266连接路由器,建立TCP服务器,分别和C#TCP客户端和AndroidTCP客户端通信+花生壳远程通信)
http://www.cnblogs.com/yangfengwu/p/8871464.html 先把源码和资料链接放到这里 源码链接:https://pan.baidu.com/s/1wT8KAOI ...
- 8-51单片机ESP8266学习-AT指令(单片机采集温湿度数据通过8266发送给C#TCP客户端显示)
http://www.cnblogs.com/yangfengwu/p/8785516.html 先写单片机端的程序 先把源码和资料链接放到这里 链接: https://pan.baidu.com/s ...
- vue2.0自定义指令
前面一片文章说了vue2.0过滤器,其实自定义指令跟过滤器非常相似,单就定义方式而言,其与过滤器完全一致,分为局部指令,和全局指令.不过就是filter改为directive的区别. 过滤器一般用于对 ...
- 5-51单片机ESP8266学习-AT指令(8266TCP服务器--用手机TCP调试助手发信息给单片机控制小灯的亮灭)
http://www.cnblogs.com/yangfengwu/p/8759294.html 源码链接:https://pan.baidu.com/s/1wT8KAOIzvkOXXNpkDI7E8 ...
- 3-51单片机ESP8266学习-AT指令(学会刷固件)
前言:体验一下刷固件(给单片机更新程序) 上一篇链接 http://www.cnblogs.com/yangfengwu/p/8757036.html 源码链接:https://pan.baidu. ...
随机推荐
- [日常] C语言中指针变量
CPU 访问内存时需要的是地址,而不是变量名和函数名!变量名和函数名只是地址的一种助记符,当源文件被编译和链接成可执行程序后,它们都会被替换成地址.编译和链接过程的一项重要任务就是找到这些名称所对应的 ...
- JavaSE-基础语法(二)-系统类(java.lang.*)和工具类(java.util.*)
系统类(java.lang.*)和工具类(java.util.*) 一.系统类(java.lang.*) 这个包下包含java语言的核心类,如String.Math.System和Thread类等,使 ...
- PATH、CLASSPATH、CLASSPATH
PATH: 说明: 环境变量中的path,意在在向计算机发出指令时的一个指向路径,如 一般会在path里加上:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin 其中:%JAVA_ ...
- 怎么在ReactNative里面使用Typescript
今天来搞一搞怎么搭建一个可以使用Typescript的ReactNative环境好吧,一句废话不多说,直接开始好吧 1.全局安装create-react-native-app yarn global ...
- loadrunner 脚本开发-int型变量和字符串的相互转换
脚本开发-int型变量和字符串的相互转换 by:授客 QQ:1033553122 字符串转化为int型变量 Action2() { int j = 0; j = atoi("12345&qu ...
- Android 震动模式
震动类 public class VibratorUtil { private static final long DEFAULT_VIBRATOR = 100; private static Vib ...
- python同步原语--线程锁
多线程锁是python多种同步原语中的其中一种.首先解析一下什么是同步原语,python因为GIL(全局解析锁)的缘故,并没有真正的多线性.另外python的多线程存在一个问题,在多线程编程时,会出现 ...
- (后端)Java跨域过滤器
private FilterConfig config = null; @Override public void init(FilterConfig config) throws ServletEx ...
- android recovery 升级之USB设备挂载
Recovery升级过程,通常会从两个地方获取升级包update.zip升级,一般在线升级,会把升级包下载到cache分区,本地升级会从usb或者tf卡中升级.本文讨论下,本地USB升级时,无法挂载U ...
- Android、IOS文字居中偏离的解决方案
前言 移动端开发,经常会遇到的问题,就是文字居中.一般都只能往css方向去fix这个问题. 自己以前也用过position:relative;top:-*px的方式去解决.