0
点赞
收藏
分享

微信扫一扫

ESP8266网络通信实验之经典方法


第一:【实验目的】

  1. 通过esp8266模块,单片机工作环境中所用到的任何传感器信息,如温湿度、光照强度、土壤湿度、水温等,过wifi上传到服务器。而且我们只需要登录服务器,我们就可以在家里或其他地方观察信息,实现单片机数据的上报。
  2. 通过esp8266模块,单片机能接收到我们在云端发送的数据,实现对单片机的远程控制功能。

第二:【实验原理】

外观尺寸                                      


ESP8266网络通信实验之经典方法_物联网


                                                                           图一

  1. 管脚定义

                                 

ESP8266网络通信实验之经典方法_物联网_02

 

                                                                           图二

  1. 应用电路

                                             

ESP8266网络通信实验之经典方法_自定义_03

                                                                          图三

  1. 通信原理

4.1建立wifi

 ESP8266 WIFI 模块工作于SoftAP+Station 模式即建立了一个 WiFi 热点并建立一个TCP SEVER,IP 地址为:192.168.4.1,端口:5000。

 安卓手机连接到 ESP8266 的热点后,通过网络调试软件,建立一个 TCP CLIENT与 ESP8266 的 TCP SEVER 进行通信。

注:简单的说TCP 协议的通信过程至少需要建立一个 TCP SEVER(TCP 服务器),然后 TCP CLIENT(TCP 客户端)与 TCP SEVER 建立连接后,即可进行数据通信。

4.2连接wifi(本实验重点)

ESP8266 WIFI 模块工作于Station 模式,在此模式下, 模块相当于一个客户端, 可以链接到其他路由器发出的 WIFI 信号。

常用指令:

1.查询指令:AT+CWMODE_CUR?   查询 ESP8266 当前 Wi-Fi 模式。

ESP8266网络通信实验之经典方法_c语言_04

2. 设置指令:AT+CWJAP_CUR=<ssid>,<pwd>,[<bssid>][,<pci_en>]    设置 ESP8266 Station 需连接的 AP

ESP8266网络通信实验之经典方法_物联网_05

  1. 【实验步骤】

1.按图完成esp8266模块与单片机的接线

ESP8266网络通信实验之经典方法_服务器_06

2.完成相应的固件烧录

  2.1  固件下载

用浏览器打开安信可公司提供的AT固件汇总(下载需要的AT固件)              

链接:​​AT固件汇总 | 安信可科技​​

  1. 烧录工具

用浏览器打开安信可公司提供的开发工具清单(下载烧录WIFI固件工具)

链接:​​开发工具清单 | 安信可科技​​

  1. 固件烧录
  1. 硬件连接成下载模式(接线方式见图二)
  2. 固件准备

下载、解压并执行 ESPFlashDownloadTool_vx.xx.xx.exe,将弹出如下界面。黑窗可以查看烧录过程的一些信息,另一个为登录界面,用来选择相应芯片的下载界面。

ESP8266网络通信实验之经典方法_服务器_07

  1. 烧录

ESP8266网络通信实验之经典方法_单片机_08

加入自己下载的固件,点击“START”按钮开始烧录:等待烧录完成。

固件烧写软件配置参数说明如下:

ESP8266网络通信实验之经典方法_单片机_09

 

ESP8266网络通信实验之经典方法_物联网_10

固件烧录完成,将接线接回运行模式

  1. 完成云平台的创建

创建产品

使用物联网平台的第一步:在控制台创建产品。产品是设备的集合,通常是一组具有相同功能定义的设备集合。例如:产品指同一个型号的产品,设备就是该型号下的某个设备。

步骤一:登录物联网平台设备

  1. 用浏览器打开阿里云首页:链接https://iot.console.aliyun.com/lk/summary/new

并点击右上方控制台。打开网页。

  1. 登录,使用自己淘宝账号登录即可
  2. 开通物联网平台并点击进去,如图3.1所示:

ESP8266网络通信实验之经典方法_自定义_11

图3.1 开通物联网平台

步骤一:在左侧导航栏,选择设备管理 > 产品,单击创建产品。

步骤二:根据页面提示填写产品信息(如图3.2所示),然后单击保存。

ESP8266网络通信实验之经典方法_服务器_12

图3.2 填写相关信息

页面参数设置如表3.1所示:

表3.1页面参数设置说明:

参数

描述

产品名称

为产品命名。产品名称在账号内具有唯一性。例如,可以填写为产品型号。支持中文、英文字母、数字、下划线(_)、连接号(-)、@符号和英文圆括号,长度限制4~30,一个中文汉字算2位。

所属品类

相当于产品模板。

标准品类:物联网平台已为标准品类预定义了功能模板。

例如,能源管理 > 电表品类已预定义用电量、电压、电流、总累积量等电表标准功能。选择该品类,创建的产品具有预定义的功能。您可以在该产品的产品详情页功能定义页签下,编辑、修改、新增功能。

自定义品类:产品创建成功后,需根据实际需要,自定义物模型。

节点类型

产品下设备的类型。

o     直连设备:直连物联网平台,且不能挂载子设备,也不能作为子设备挂载到网关下的设备。

o     网关子设备:不直接连接物联网平台,而是通过网关设备接入物联网平台的设备。网关与子设备说明,请参见网关与子设备。

o     网关设备:可以挂载子设备的直连设备。网关具有子设备管理模块,可以维持子设备的拓扑关系,将与子设备的拓扑关系同步到云端。

接入网关协议

节点类型选择为网关子设备的参数。表示该产品下的设备作为子设备与网关的通讯协议类型。

o     自定义:表示子设备和网关之间是其它标准或私有协议。

o     Modbus:表示子设备和网关之间的通讯协议是Modbus。

o     OPC UA:表示子设备和网关之间的通讯协议是OPC UA。

o     ZigBee:表示子设备和网关之间的通讯协议是ZigBee。

o     BLE:表示子设备和网关之间的通讯协议是BLE。

连网方式

直连设备和网关设备的连网方式。

o     WiFi

o     蜂窝(2G/3G/4G)

o     以太网

o     LoRaWAN

说明 首次选择LoRaWAN时,需要单击下方提示中的立即授权,前往RAM控制台授权IoT使用AliyunIOTAccessingLinkWANRole角色访问LinkWAN服务。

o     其他

入网凭证

当连网方式选择为LoRaWAN时,需提供入网凭证名称。

若无凭证,请单击创建凭证,进入阿里云物联网络管理平台,添加专用凭证,并为凭证授权用户。

使用凭证创建的产品,将作为一个节点分组,自动同步到物联网络管理平台的节点分组列表中。

数据格式

设备上下行的数据格式。

o     ICA标准数据格式(Alink JSON):是物联网平台为开发者提供的设备与云端的数据交换协议,采用JSON格式。

o     透传/自定义:如果您希望使用自定义的串口数据格式,可以选择为透传/自定义。

您需在控制台提交数据解析脚本,将上行的自定义格式的数据转换为Alink JSON格式;将下行的Alink JSON格式数据解析为设备自定义格式,设备才能与云端进行通信。

说明 使用LoRaWAN接入网关的产品仅支持透传/自定义。

认证方式

设备接入物联网平台的安全认证方式。产品创建成功后,认证方式不可变更。可选:

o     设备密钥:使用物联网平台为设备生成的DeviceSecret进行设备认证签名计算。

使用DeviceSecret签名计算,可参见MQTT-TCP连接通信。

o     ID²:ID²认证提供设备与物联网平台的双向身份认证能力,通过建立轻量化的安全链路(iTLS)来保障数据的安全性。

说明

    仅华东2(上海)地域支持ID²认证方式。

    连网方式选择为LoRaWAN的产品不支持ID²认证方式。

    选择使用ID²认证,需购买ID²服务。请参见IoT设备身份认证(ID²)用户手册。

o     X.509证书:使用X.509数字证书进行设备身份认证。

说明

    仅华东2(上海)地域支持X.509证书。

    连网方式选择为LoRaWAN的产品不支持X.509证书。

在产品下创建设备后,物联网平台为设备生成唯一的X.509证书。您可以在设备的设备详情页,查看和下载该设备的X.509证书。

使用X.509证书进行设备身份认证的设备端配置说明,请参见使用X.509证书认证。

产品描述

可输入文字,用来描述产品信息。字数限制为100。

资源组

将该产品划归为某个资源组。

通过资源组管理,可以授予指定子账号查看和操作该产品的权限,而未授权的子账号则不可以查看和操作该产品。

产品创建成功后,可以在资源管理控制台变更产品所属的资源组。

资源组相关功能说明,请参见资源隔离文档。

产品创建成功后,页面自动跳转回产品列表页面。

产品物理模型自定义(功能定义)

物模型指将物理空间中的实体数字化,并在云端构建该实体的数据模型。在物联网平台中,定义物模型即定义产品功能。完成功能定义后,系统将自动生成该产品的物模型。物模型描述产品是什么,能做什么,可以对外提供哪些服务。

物模型,简称TSL,即Thing Specification Language。是一个JSON格式的文件。它是物理空间中的实体,如传感器、车载装置、楼宇、工厂等在云端的数字化表示,从属性、服务和事件三个维度,分别描述了该实体是什么,能做什么,可以对外提供哪些信息。定义了这三个维度,即完成了产品功能的定义。

物模型将产品功能类型分为三类:属性、服务、和事件。定义了这三类功能,即完成了物模型的定义。表3.2是对相关功能类型的说明:

表3.2 功能类型说明

功能类型

说明

属性(Property)

一般用于描述设备运行时的状态,如环境监测设备所读取的当前环境温度等。属性支持GET和SET请求方式。应用系统可发起对属性的读取和设置请求。

服务(Service)

设备可被外部调用的能力或方法,可设置输入参数和输出参数。相比于属性,服务可通过一条指令实现更复杂的业务逻辑,如执行某项特定的任务。

事件(Event)

设备运行时的事件。事件一般包含需要被外部感知和处理的通知信息,可包含多个输出参数。如,某项任务完成的信息,或者设备发生故障或告警时的温度等,事件可以被订阅和推送。

ESP8266网络通信实验之经典方法_单片机_13

创建单个设备

在左侧导航栏,选择设备管理 > 设备,在产品下添加设备,操作如图3.3所示:

总结

本章主要是讲解了创建一个阿里云产品,这是为了后续MQIT接入阿里云做准备,读者只需按照步骤创建自己的阿里云产品即可。

ESP8266网络通信实验之经典方法_c语言_14

图3.3 创建单个设备

确定后弹出来的设备证书信息(ProductKey、DeviceName和DeviceSerect)后面接入该平台需要用到,请记录保存下来。不小心关闭也没关系,在产品设备中能找到。设备证书界面如图3.4所示:

ESP8266网络通信实验之经典方法_物联网_15

图3.4 查看设备证书

相关参数说明在表3.3中

表3.3 设备证书中相关参数说明

参数

说明

ProductKey

设备所隶属产品的Key,即物联网平台为产品颁发的全局唯一标识符。

DeviceName

设备在产品内的唯一标识符。DeviceName与设备所属产品的ProductKey组合,作为设备标识,用来与物联网平台进行连接认证和通信。

DeviceSecret

物联网平台为设备颁发的设备密钥,用于认证加密。需与DeviceName成对使用。

之后,可以在设备列表中,单击设备对应的查看按钮,进入设备详情页设备信息页签下,查看设备信息。

4.使用MQTT.fx接入物联网平台

4.1前提条件

已在​​物联网平台控制台​​​创建产品和设备,并获取设备证书信息(ProductKey、DeviceName和DeviceSerect)。创建产品和设备具体操作细节,请参考​​创建产品​​​、​​单个创建设备​​​和​​批量创建设备​​。

上文创建的产品设备后设备证书信息如下(下文将以此作为示例做讲解):

  "ProductKey": "a14ayJGOfy7",

  "DeviceName": "XYD_LOCK",

  "DeviceSecret": "ch4UVyPXhAOdFwWYGbfWMw6G6ztxbTir"

       4.2使用MQTT.fx接入

  1. 下载并安装MQTT.fx软件。请访问​​MQTT.fx官网​​。
  2. 打开MQTT.fx软件,单击设置图标。如图20.2.1所示:

ESP8266网络通信实验之经典方法_物联网_16

图20.2.1 MQTT.fx设置图标

  1. 设置连接参数。物联网平台目前支持两种连接模式,不同模式设置参数不同。

TCP直连:Client ID中​​securemode=3​​,无需设置SSL/TLS信息。

TLS直连:Client ID中​​securemode=2​​,需要设置SSL/TLS信息。

  • 设置基本信息,如图20.2.2所示:

ESP8266网络通信实验之经典方法_自定义_17

图20.2.2 设置基本信息

设置基本信息相关参数说明如表20.2.1所示

表20.2. 1设置基本信息相关参数说明

参数

说明

Profile Name

输入您的自定义名称。

Profile Type

选择为 MQTT Broker

MQTT Broker Profile Settings

Broker Address

连接域名。

格式:${YourProductKey}.iot-as-mqtt.${region}.aliyuncs.com。

其中,${region}需替换为您物联网平台服务所在地域的代码。地域代码,请参见地域和可用区。如:alxxxxxxxxxx.iot-as-mqtt.cn-shanghai.aliyuncs.com。

${YourProductKey}需要替换为ProductKey

示例:a1UTSkcjwld.iot-as-mqtt.cn-shanghai.aliyuncs.com

Broker Port

设置为:1883

Client ID

填写mqttClientId,用于MQTT的底层协议报文。

格式固定:${clientId}|securemode=3,signmethod=hmacsha1|。

完整示例:12345|securemode=3,signmethod=hmacsha1|。

其中,

${clientId}为设备的ID信息。可取任意值,长度在64字符以内。建议使用设备的MAC地址或SN码。

securemode为安全模式,TCP直连模式设置为securemode=3,TLS直连为securemode=2。

signmethod为算法类型,支持hmacmd5和hmacsha1。

说明 输入Client ID信息后,请勿单击Generate。

ESP32|securemode=3,signmethod=hmacsha1|

General栏目下的设置项可保持系统默认,也可以根据您的具体需求设置。

  • 单击User Credentials,设置User Name和Password。如图20.2.3所示

ESP8266网络通信实验之经典方法_物联网_18

图20.2.3设置用户名和密码

用户相关信息说明如表20.2.2所示:

表20.2.2用户相关信息说明

参数

说明

User Name

由设备名DeviceName、符号(&)和产品ProductKey组成。

固定格式:​​${YourDeviceName}&${YourPrductKey}​​。

完整示例如:​​device&alxxxxxxxxxx​​。

Password

密码由参数值拼接加密而成。

您可以使用物联网平台提供的生成工具自动生成Password。

单击下载Password生成小工具。

使用Password生成小工具的输入参数:

productKey:设备所属产品Key。可在控制台设备详情页查看。

deviceName:设备名称。可在控制台设备详情页查看。

deviceSecret:设备密钥。可在控制台设备详情页查看。

timestamp:(可选)时间戳。

clientId:设备的ID信息,与Client ID中${clientId}一致。

method:选择签名算法类型,与Client ID中signmethod确定的加密方法一致。

xxxx)

  • Password生成工具

打开“软件工具\mqttfx\mqtt签名工具\sign.html”,按照上文参数规则填入信息后点击生成,如图20.2.4所示:

ESP8266网络通信实验之经典方法_服务器_19

图20.2.4 密码生成配置

  • 最终得到

User Name:XYD_LOCK&a14ayJGOfy7

Password:9CE77B5B8E383FFEF3C0C4BE15497D5BE1A4D6D0

这两个在后面进行MQTT连接时需要用到。

  • (可选)TCP直连模式(即​​securemode=3​​)下,无需设置SSL/TLS信息,直接进入下一步。

TLS直连模式(即​​securemode=2​​)下,需要选择SSL/TLS,勾选 Enable SSL/TLS,设置Protocol。建议Protocol选择为TLSv1.2。设置如图20.2.5所示:

ESP8266网络通信实验之经典方法_自定义_20

                               图20.2.5 设置TCP直连模式

填写完成后,单击OK

  1. 设置完成后,单击Connect进行连接。如图20.2.6所示

ESP8266网络通信实验之经典方法_自定义_21

图20.2.6 连接示意图

4.3下行通信测试

从物联网平台发送消息,在MQTT.fx上接收消息,测试MQTT.fx与物联网平台连接是否成功 。

  1. 在MQTT.fx上,单击Subscribe
  2. 输入一个设备具有订阅权限的Topic,单击Subscribe,订阅这个Topic。如图20.3.1所示

ESP8266网络通信实验之经典方法_服务器_22

图20.3.1订阅Topic

订阅成功后,该Topic将显示在列表中。如图20.3.2所示

ESP8266网络通信实验之经典方法_c语言_23

图20.3.2 查看一订阅的Topic

  1. 在​​物联网平台控制台​​中,该设备的设备详情页,Topic列表下,单击已订阅的Topic对应的发布消息操作按钮。
  2. 输入消息内容,单击确认。如图20.3.3所示:

ESP8266网络通信实验之经典方法_服务器_24

图20.3.3 下行发送消息示例

  1. 回到MQTT.fx上,查看是否接收到消息。如图20.3.4所示:

ESP8266网络通信实验之经典方法_c语言_25

图20.3.4 下行通信接收消息示例

4.4上行通信测试

在MQTT.fx上发送消息,通过查看设备日志,测试MQTT.fx与物联网平台连接是否成功 。

  1. 在MQTT.fx上,单击Publish
  2. 输入一个设备具有发布权限的Topic,和要发送的消息内容,单击Publish,向这个Topic推送一条消息。如图20.4.1所示:

ESP8266网络通信实验之经典方法_自定义_26

图20.4.1 上行通信发送消息示例

  1. 在​​物联网平台控制台​​中,该设备的设备详情 > 日志服务 > 上行消息分析栏下,查看上行消息。您还可以复制MessageID,在消息内容查询中,选择原始数据查看具体消息内容。

4.5查看日志

在MQTT.fx上,单击Log查看操作日志和错误提示日志。如图20.5所示

ESP8266网络通信实验之经典方法_c语言_27

图20.5 查看日志

现在本地端如果想要连接上网页端(MQTT协议)

第一步:先让设备能联网

第二步,使用这个联网设备来发送对应的连接到阿里云平台的参数

第三步:订阅一个具有订阅权限topic,网页端就可以使用这个topic来发送数据给设备

第四步:选择一个具有发布权限的topic,再把数据上传到网页端

5.核心代码实现(STM32f407VGT6为例)

5.1 ESP8266的连接与订阅

void ESP8266_Connet(void)
{
u8 errorCode;
UART4_Init(115200);
ESP8266_TcpInit();

//修改成自己的WiFi名和WiFi密码
ESP8266_Wificonnect((uint8_t *)"Mi 10",(uint8_t*)"12345678");
//自己MQTT的broker Address

ESP8266_Severconnect((uint8_t *)"h0jpzgOH9rd.iot-as-mqtt.cn-shanghai.aliyuncs.com");
errorCode = ESP8266_SendandReceive((uint8_t *)"AT+CIPSEND\r\n",(uint8_t *)"OK");
if(!errorCode)
{
_mqtt.Init(rxbuf,0,txbuf,0);

//MQTT连接
//修改成自己MQTT的Client ID,User Name和在mqtt工具中生成的签名代码
errorCode=_mqtt.Connect("ESP8266|securemode=3,signmethod=hmacsha1|",
"HZL_BS&h0jpzgOH9rd",
"8A71EC003C918FED63578E81D5C7C02EDBAA9485");
printf("55555");
if(errorCode==1){
printf("MQTT接入成功\r\n");
//自己的Subscribe地址
errorCode=_mqtt.SubscribeTopic("/sys/h0jpzgOH9rd/HZL_BS/thing/service/property/set",0,1);//订阅
if(errorCode==1)
{
printf("MQTT订阅成功\r\n");
}
}
}
}

5.2 ESP8266数据发送

void ESP8266_Send(void)
{
uint8_t score[] = "A:97 B:122";
uint8_t foul[] = "A:6 B:9";
uint8_t win[] = "B:win";

char string[520] = {0};
//按物模型通信的结构发送信息
sprintf(string, "{\"method\":\"thing.service.property.set\",\"id\":\"1948364543\",\"params\":{\"foul\":\"%s\",\"score\":\"%s\",\"win\":\"%s\"},\"version\":\"1.0.0\"}",foul,score,win);
printf("%s\r\n",string);
//自己的Publish地址
_mqtt.PublishData("/sys/h0jpzgOH9rd/HZL_BS/thing/event/property/post",string,0);
}

5.3 ESP8266数据接收

//通过接受中断来接收云上发来的数据
void UART4_IRQHandler(void)
{
uint8_t temp;
if(USART_GetITStatus(UART4,USART_IT_RXNE))
{
//清除接收中断标志
temp = USART_ReceiveData(UART4);
if(temp == 0)
{
esp8266rec.buff[esp8266rec.len++] = ' ';
}
else
{
esp8266rec.buff[esp8266rec.len++] = temp;
}
}
else if(USART_GetITStatus(UART4,USART_IT_IDLE))//空闲中断
{
//清除空闲中断标志
temp = UART4->SR;
temp = UART4->DR;
temp = temp;

esp8266rec.buff[esp8266rec.len] = '\0';
esp8266rec.len = 0;
esp8266rec.flag= 1;
printf("%s", esp8266rec.buff);
}
}

  1. 【实验现象】

 

ESP8266网络通信实验之经典方法_物联网_28

ESP8266网络通信实验之经典方法_c语言_29

举报

相关推荐

0 条评论