一、ESP8266连线方式

1、ESP8266引脚定义

image-20200613150457590
81028683567b087f56647b7b5bbfd99e_20200228114215425

2、ESP8266通过串口连接电脑

image-20200613150508621

3、ESP8266烧录连线图

SouthEast

4、ESP8266连接单片机

image-20200613150508621

二、ESP8266的三种模式

1、Station 模式:

ESP8266 模块通过路由器连接互联网,手机或电脑通过互联网实现对设备的远程控制。

AT+CWMODE=1                     //1是Station模式
AT+RST                     //重新启动wifi模块
AT+CWJAP="所要连接的局域网WIFI名称","WiFi密码"          //连接WiFi
AT+CIPMUX=1                   //开启多连接模式,允许多个客户端接入 
AT+CIPSERVER=1,5000                //启动TCP/IP 实现基于网络//控制,我自己设置服务器的端口号为5000,可以设置其他端口号
AT+CIPSTO=0                //服务永远不超时

但是手机需要验证模块自身的IP地址和端口号才能连接成功,因为自己只知道设置的端口号,不确定模块自身IP地址,所以需要查询模块IP,就要用下边的命令来查询模块自身的IP地址。

AT+CIFSR

串口助手会返回模块的IP地址

+CIFSR:STAIP,"192.168.0.105"
+CIFSR:STAMAC,"5c:cf:7f:03:22:46"

不同模块不同模式下的IP地址是不确定的,所以在操作时候要多次查询模块的IP地址,以防止模块IP地址发生变化,同时在验证IP和端口号前,手机连接的WIFI和模块连接的WiFi相同。

2、AP 模式:

ESP8266 模块作为热点,手机或电脑直接与模块连接,实现局域网无线控制。

AT+CWMODE=2                     //2是AP模式
AT+RST                     //重新启动wifi模块
AT+CWSAP="WIFI名称","WIFI密码",11,0          //AP模式设置模块WIFI名称及密码和加密方式,0代表开放,不需要密码
AT+CIPMUX=1                   //设置多客户端连接
AT+CIPSERVER=1,5000                //设置服务器的端口号为5000
AT+CIPSTO=0                //服务不超时

3、STA+AP 模式:

两种模式的共存模式,即可以通过互联网控制可实现无缝切换,方便操作。ESP8266有几种不同的使用方式,适用于不同水平的开发工作者。

三、ESP8266基础网络通信

1、TCP服务器(AP 模式 热点)

使用环境:手机或电脑连接ESP8266的AP热点,正确填写服务器参数

//RST引脚复位,复位IO拉低电平,延时500ms,拉高电平,收到ok则复位成功
AT+CWMODE=2;//准备设置AP模式,收到ok则设置成功
AT+CIPAP="192.168.10.1"//设置AP热点IP,收到ok则设置成功
AT+CWSAP="ESP8266-AP","123456789",4;//设置AP参数,WiFi名称,密码,加密方式,收到ok则设置成功
AT+CIPMODE=0;//关闭透传,收到ok则设置成功
AT+CIPMUX=1;//开启多路连接,收到ok则设置成功
AT+CIPSERVER=1,5050;//开启AP服务器,收到ok则设置成功,端口号5050

2、TCP客户端(AP 模式 热点)

使用环境:手机或电脑连接ESP8266的AP热点,正确配置服务器参数

//RST引脚复位,复位IO拉低电平,延时500ms,拉高电平,收到ok则复位成功
AT+CWMODE=2;//准备设置AP模式,收到ok则设置成功
AT+CIPAP="192.168.10.1"//设置AP热点IP,收到ok则设置成功
AT+CWSAP="ESP8266-AP","123456789",4,4;//设置AP参数,WiFi名称,密码,信道,加密方式,收到ok则设置成功
AT+CIPMODE=1;//开启透传,收到ok则设置成功
AT+CIPMUX=0;//关闭多路连接,收到ok则设置成功
AT+CIPSTART="TCP","192.168.10.2",5050;//协议,服务器IP或是域名,端口
//如果接受到CONNECT表示连接成功
//如果接受到CLOSED表示服务器未开启
//如果接受到ALREADY CONNECTED已经建立连接

3、UDP模式(AP 模式 热点)

使用环境:手机或电脑连接ESP8266的AP热点,正确配置服务器参数

//RST引脚复位,复位IO拉低电平,延时500ms,拉高电平,收到ok则复位成功
AT+CWMODE=2;//准备设置AP模式,收到ok则设置成功
AT+CIPAP="192.168.10.1";//设置AP热点IP,收到ok则设置成功
AT+CWSAP="ESP8266-AP-UPD","123456789",4,4;//设置AP参数,WiFi名称,密码,信道,加密方式,收到ok则设置成功
AT+CIPMODE=1;//开启透传,收到ok则设置成功
AT+CIPMUX=0;//关闭多路连接,收到ok则设置成功
AT+CIPSTART="UDP","192.168.10.2",5050,5050;//协议,服务器IP或是域名,端口
//如果接受到CONNECT表示连接成功
//如果接受到CLOSED表示服务器未开启
//如果接受到ALREADY CONNECTED已经建立连接

4、TCP服务器(station模式 必须接路由器)

使用环境:ESP8266与电脑(手机)在同一个局域网内

(1)WIFI与密码在代码中

上电后自动连接固定的WIFI

mode=0;//代码写死在代码中
//RST引脚复位,复位IO拉低电平,延时500ms,拉高电平,收到ready则复位成功
AT+CWMODE=1;//准备设置station模式,收到ok则设置成功
AT+CWAUTOCONN=0;//上电不自动连接AP,默认上电自动连接路由器
AT+CWJAP="king","12344321";//连接路由器
AT+CIFSR;//查询本地 IP 地址,ESP8266的地址
AT+CIPMODE=0;//关闭透传,收到ok则设置成功
AT+CIPMUX=1;//开启多路连接,收到ok则设置成功
AT+CIPSERVER=1,5050;//开启服务器,打开ESP8266的5050端口

(2)手机APP配网

上电后自动连接WIFI,按住KEY2后重启,等待APP配网,不按住KEY2自动连接上次连接的WIFI

//RST引脚复位,复位IO拉低电平,延时500ms,拉高电平,收到ready则复位成功
AT+CWMODE=1;//准备设置station模式,收到ok则设置成功
AT+CWAUTOCONN=0;//上电不自动连接AP,默认上电自动连接路由器
/*********************/
AT+CWAUTOCONN=1;//打开自动连接
AT+CWSTARTSMART;//开启Smartconfig
//获取到SSID和password后将尝试自动连接AP
AT+CWSTOPSMART;//关闭Smartconfig
//等待WiFi连接成功,提示WIFI CONNECTED
//WIFI GOT IP
/*********************/
AT+CIFSR;//查询本地 IP 地址,ESP8266的地址
AT+CIPMODE=0;//关闭透传,收到ok则设置成功
AT+CIPMUX=1;//开启多路连接,收到ok则设置成功
AT+CIPSERVER=1,5050;//开启服务器,打开ESP8266的5050端口

5、TCP客户端(station模式 必须接路由器)

使用环境:ESP8266与电脑(手机)在同一个局域网内

//RST引脚复位,复位IO拉低电平,延时500ms,拉高电平,收到ready则复位成功
AT+CWMODE=1;//准备设置station模式,收到ok则设置成功
AT+CWAUTOCONN=0;//上电不自动连接路由器,默认上电自动连接路由器
AT+CWJAP="king","12344321";//连接路由器
AT+CIFSR;//查询本地 IP 地址,ESP8266的地址
AT+CIPMODE=1;//开启透传,收到ok则设置成功
AT+CIPMUX=0;//关闭多路连接,收到ok则设置成功
AT+CIPSTART="TCP","192.168.43.210",5050;//协议,服务器IP或是域名,端口

6、UDP客户端(station模式 必须接路由器)

使用环境:ESP8266与电脑(手机)在同一个局域网内

//RST引脚复位,复位IO拉低电平,延时500ms,拉高电平,收到ready则复位成功
AT+CWMODE=1;//准备设置station模式,收到ok则设置成功
AT+CWAUTOCONN=0;//上电不自动连接路由器,默认上电自动连接路由器
AT+CWJAP="nice","12344321";//连接路由器
AT+CIFSR;//查询本地 IP 地址,ESP8266的地址
AT+CIPMODE=1;//开启透传,收到ok则设置成功
AT+CIPMUX=0;//关闭多路连接,收到ok则设置成功
AT+CIPSTART="UDP","192.168.43.210",5050,5050;//协议,服务器IP或是域名,服务器端口,本地端口

四、一般物联网的远程控制的通信方案

1、要实现远程控制就必须得租用一个服务器,可以租用云服务器,比如阿里云的ECS

2、手机与服务器建立tcp长连接

3、esp8266与服务器建立tcp长连接

4、手机发送数据到云服务器,使用json数据的网络通信,云服务器接收到手机发的数据后,继续把手机发送过来数据转发给esp8266

5、esp8266发送数据到云服务器,云服务器接收到esp8266发过来的数据后,继续把数据推送给手机app

6、如上所述方式,实现手机+esp8266的双向通信的远程控制。

以小米智能台灯为例:

有一台自己的服务器:小米云服务器 终端设备:小米台灯 自身带有wifi,作为tcp客户端可以连接小米云服务器 手机APP 该APP作为tcp 客户端能够连接小米云服务器 通信过程概述:小米智能台灯和app同时接入小米云服务器,用户在app上选择要执行的功能,如开灯,则当用户触发按键时,app会向小米云服务器发送该消息,小米云服务器会对这条消息进行转发(或者在服务器中做解析处理),解析知道了用户想要执行开灯动作,则有小米云服务器向小米智能台灯发送开灯指令,电亮台灯,即app和小米智能台灯之间的通信,由小米云服务器来中转完成,app、小米智能台灯与小米云服务器之间均为tcp长连接通信。

五、OneNet云服务器 HTTP协议

1、ESP8266 开关控制

OneNet网站:https://open.iot.10086.cn/

开发者中心-------->多协议接入---------->HTTP-------->添加产品

进入创建的产品------>设备列表--------->添加设备

进入数据流模板-------->添加数据流模板

进入应用管理----------->添加应用----->编辑应用

//RST引脚复位,复位IO拉低电平,延时500ms,拉高电平,收到ready则复位成功
AT+CWMODE=1;//准备设置station模式,收到ok则设置成功
AT+CWAUTOCONN=0;//上电不自动连接路由器,默认上电自动连接路由器
AT+CWJAP="nice","12344321";//连接路由器
AT+CIFSR;//查询本地 IP 地址,ESP8266的地址
AT+CIPMODE=1;//开启透传,收到ok则设置成功
AT+CIPMUX=0;//关闭多路连接,收到ok则设置成功
AT+CIPSTART="TCP","183.230.40.33",80;//OneNet服务器IP地址,端口号,固定不变
AT+CIPSEND;//进入透传指令
/*********获取状态报文***********/
GET /devices/608231432/datapoints HTTP/1.1//设备ID
api-key:0sjroaCBwqV9Vnz3qjRptlMkLV8=//Master-APIkey
Host:api.heclouds.com
/*********报文后面需要接两个换行符,表示发送完毕************/
/*********返回报文************/
HTTP/1.1 200 OK
Date: Fri, 03 Jul 2020 08:38:22 GMT
Content-Type: application/json
Content-Length: 137
Connection: keep-alive
Server: Apache-Coyote/1.1
Pragma: no-cache

{"errno":0,"data":{"count":1,"datastreams":[{"datapoints":[{"at":"2020-07-03 16:27:20.000","value":0}],"id":"switch_1"}]},"error":"succ"}
/*********************/

2、数据上传

/*********POST报文***********/
POST /devices/608297654/datapoints?type=3 HTTP/1.1
api-key:0sjroaCBwqV9Vnz3qjRptlMkLV8=
Host:api.heclouds.com
Content-Length:32//后面接两个回车换行

{"temp_data":43,"humi_data":132}
/*********************/
/*********返回报文***********/
HTTP/1.1 200 OK
Date: Sat, 04 Jul 2020 04:17:06 GMT
Content-Type: application/json
Content-Length: 26
Connection: keep-alive
Server: Apache-Coyote/1.1
Pragma: no-cache

{"errno":0,"error":"succ"}AT+CIPCLOSE
/*********************/

六、阿里智能生活平台 云智能APP

MQTT介绍

MQTT报文
MQTT服务等级
/***************************************************************************/
{
  "ProductKey": "a125Pav0yBM",
  "DeviceName": "D001",
  "DeviceSecret": "c13e04cc8e7e93ed441f2435893bbfd1"
}
/***************************************************************************/
阿里云服务器IP地址(华东2:  *.iot-as-mqtt.cn-shanghai.aliyuncs.com    *表示自己账号的ProductKey注意替换
阿里云服务器端口号(华东2:  1883

a125Pav0yBM.iot-as-mqtt.cn-shanghai.aliyuncs.com 
/***************************************************************************/
hmacsha1加密在线计算网站:http://encode.chahuo.com/
客户端ID :  *|securemode=3,signmethod=hmacsha1|   *设备名称              注意替换
 
用户名   :  *&#             *设备名称 #ProductKey  注意替换                 

密码:  用DeviceSecret做为秘钥对clientId*deviceName*productKey#进行hmacsha1加密后的结果
*设备名称 #ProductKey  注意替换
/***************************************************************************/

1.CONNECT -------- 16进制

/***************************************************************************/
固定报头:10 负载
可变报头:00 04 4D 51 54 54 04 C2 00 64 
CONNECT = 固定报头 + 可变报头 + 客户端ID + 用户名 + 密码

10 6E 00 04 4D 51 54 54 04 C2 00 64 00 26 44 30 30 31 7C 73 65 63 75 72 65 6D 6F 64 65 3D 33 2C 73 69 67 6E 6D 65 74 68 6F 64 3D 68 6D 61 63 73 68 61 31 7C 00 10 44 30 30 31 26 61 31 32 35 50 61 76 30 79 42 4D 00 28 61 33 38 31 64 30 39 38 34 61 61 33 36 64 38 65 33 35 61 34 32 30 32 64 38 64 63 33 32 35 36 62 37 38 37 31 66 37 33 63
/***************************************************************************/
客户端ID :D001|securemode=3,signmethod=hmacsha1|
44 30 30 31 7C 73 65 63 75 72 65 6D 6F 64 65 3D 33 2C 73 69 67 6E 6D 65 74 68 6F 64 3D 68 6D 61 63 73 68 61 31 7C  
    
用户名   :D001&a125Pav0yBM
44 30 30 31 26 61 31 32 35 50 61 76 30 79 42 4D

密码: a381d0984aa36d8e35a4202d8dc3256b7871f73c
61 33 38 31 64 30 39 38 34 61 61 33 36 64 38 65 33 35 61 34 32 30 32 64 38 64 63 33 32 35 36 62 37 38 37 31 66 37 33 63
    
远程服务器地址:a125Pav0yBM.iot-as-mqtt.cn-shanghai.aliyuncs.com:1883
/***************************************************************************/

14.DISCONNECT -------- 16进制

E0 00

12.PING -------- 16进制

C0 00

8.SUBSCRIBE -------- 16进制

按照报文标识符来区分是谁发送的数据

//订阅
//82 ?? 00 0A + 主题(00 0A 为报文标识符)--->有效载荷 + 00
/sys/a125Pav0yBM/D001/thing/service/property/set
2F 73 79 73 2F 61 31 32 35 50 61 76 30 79 42 4D 2F 44 30 30 31 2F 74 68 69 6E 67 2F 73 65 72 76 69 63 65 2F 70 72 6F 70 65 72 74 79 2F 73 65 74
//订阅报文 等级0----->    
82 35 00 0A 00 30 2F 73 79 73 2F 61 31 32 35 50 61 76 30 79 42 4D 2F 44 30 30 31 2F 74 68 69 6E 67 2F 73 65 72 76 69 63 65 2F 70 72 6F 70 65 72 74 79 2F 73 65 74 00
//响应------>
90 03 00 0A 01(0x80 - Failure 失败)
固定报头(90) + 剩余长度 + 可变报头(报文标识符)

8.SUBSCRIBE 等级1 ------- 16进制

按照报文标识符来区分是谁发送的数据

//订阅
//82 ?? 00 0A(00 0A 为报文标识符) + 主题--->有效载荷 + 01
/sys/a125Pav0yBM/D001/thing/service/property/set
2F 73 79 73 2F 61 31 32 35 50 61 76 30 79 42 4D 2F 44 30 30 31 2F 74 68 69 6E 67 2F 73 65 72 76 69 63 65 2F 70 72 6F 70 65 72 74 79 2F 73 65 74
//订阅报文 等级0----->    
82 35 00 0A 00 30 2F 73 79 73 2F 61 31 32 35 50 61 76 30 79 42 4D 2F 44 30 30 31 2F 74 68 69 6E 67 2F 73 65 72 76 69 63 65 2F 70 72 6F 70 65 72 74 79 2F 73 65 74 01
//响应------>
90 03 00 0A 01(0x80 - Failure 失败)
固定报头(90) + 剩余长度 + 可变报头(报文标识符)

10.UNSUBSCRIBE ------- 16进制

改变报头和负载------>A2 负载,去除等级,负载应该减一

A2 34 00 0A 00 30 2F 73 79 73 2F 61 31 32 35 50 61 76 30 79 42 4D 2F 44 30 30 31 2F 74 68 69 6E 67 2F 73 65 72 76 69 63 65 2F 70 72 6F 70 65 72 74 79 2F 73 65 74

3.发布 等级0 ------- 16进制

------>开关<--------
//0
30 95 01 00 2F 2F 73 79 73 2F 61 31 32 35 50 61 76 30 79 42 4D 2F 44 30 30 31 2F 74 68 69 6E 67 2F 65 76 65 6E 74 2F 70 72 6F 70 65 72 74 79 2F 70 6F 73 74 7B 22 6D 65 74 68 6F 64 22 3A 22 74 68 69 6E 67 2E 65 76 65 6E 74 2E 70 72 6F 70 65 72 74 79 2E 70 6F 73 74 22 2C 22 69 64 22 3A 22 30 30 30 30 30 30 30 30 31 22 2C 22 70 61 72 61 6D 73 22 3A 7B 22 50 6F 77 65 72 53 77 69 74 63 68 22 3A 30 7D 2C 22 76 65 72 73 69 6F 6E 22 3A 22 31 2E 30 2E 30 22 7D 
//1
30 95 01 00 2F 2F 73 79 73 2F 61 31 32 35 50 61 76 30 79 42 4D 2F 44 30 30 31 2F 74 68 69 6E 67 2F 65 76 65 6E 74 2F 70 72 6F 70 65 72 74 79 2F 70 6F 73 74 7B 22 6D 65 74 68 6F 64 22 3A 22 74 68 69 6E 67 2E 65 76 65 6E 74 2E 70 72 6F 70 65 72 74 79 2E 70 6F 73 74 22 2C 22 69 64 22 3A 22 30 30 30 30 30 30 30 30 31 22 2C 22 70 61 72 61 6D 73 22 3A 7B 22 50 6F 77 65 72 53 77 69 74 63 68 22 3A 31 7D 2C 22 76 65 72 73 69 6F 6E 22 3A 22 31 2E 30 2E 30 22 7D

固定报头 + 负载 + 发布主题 + 数据 
//发布主题
/sys/a125Pav0yBM/D001/thing/event/property/post
//数据
{"method":"thing.event.property.post","id":"000000001","params":{"PowerSwitch":0},"version":"1.0.0"}
------>温湿度<--------
30 B5 01 00 2F 2F 73 79 73 2F 61 31 32 35 50 61 76 30 79 42 4D 2F 44 30 30 31 2F 74 68 69 6E 67 2F 65 76 65 6E 74 2F 70 72 6F 70 65 72 74 79 2F 70 6F 73 74 7B 22 6D 65 74 68 6F 64 22 3A 22 74 68 69 6E 67 2E 65 76 65 6E 74 2E 70 72 6F 70 65 72 74 79 2E 70 6F 73 74 22 2C 22 69 64 22 3A 22 30 30 30 30 30 30 30 30 31 22 2C 22 70 61 72 61 6D 73 22 3A 7B 22 43 75 72 72 65 6E 74 48 75 6D 69 64 69 74 79 22 3A 33 32 2C 22 43 75 72 72 65 6E 74 54 65 6D 70 65 72 61 74 75 72 65 22 3A 32 35 2E 36 35 7D 2C 22 76 65 72 73 69 6F 6E 22 3A 22 31 2E 30 2E 30 22 7D
固定报头 + 负载 + 发布主题 + 数据 
//发布主题
/sys/a125Pav0yBM/D001/thing/event/property/post
//数据  
{"method":"thing.event.property.post","id":"000000001","params":{"CurrentHumidity":32,"CurrentTemperature":25.65},"version":"1.0.0"}