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

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

创建单个设备

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

总结

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

36f0d7c253cc4ac6a50e0a4337f3d4f1.png

图3.3 创建单个设备

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

ade4d9fe1c9640d6ae0689547e58d406.png

图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所示:

f7ba623d4f2e45c79b0d12c26355333e.png

图20.2.1 MQTT.fx设置图标


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

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


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


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


6ef288d4d80f4c238b8c6213f2ebbd27.png

图20.2.2 设置基本信息


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


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

参数

说明

Profile Name

输入您的自定义名称。

Profile Type

选择为 MQTT Broker

Broker Port

设置为:1883

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

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

5f403b3336b3407380dd4f72b5ccff5b.png

图20.2.3设置用户名和密码

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

表20.2.2用户相关信息说明

参数

说明

User Name

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

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

完整示例如:device&alxxxxxxxxxx

  • Password生成工具

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

b8a1b09223e24feb858a691c23391a15.png

图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所示:

76d322c50aed474393918c479ea9d74d.png

           图20.2.5 设置TCP直连模式

填写完成后,单击OK

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

a96d003a28f94983a2732ac0fd004b31.png

图20.2.6 连接示意图

4.3下行通信测试

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

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

e696d1f243d94ccb91fd37d10d2d25a3.png

图20.3.1订阅Topic

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

1b7c6749220a4d0a8d1d7c165617aabc.png

图20.3.2 查看一订阅的Topic

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

bdedbfc66bb74069aa11c1f35d27cb2d.png

图20.3.3 下行发送消息示例

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

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

4.4上行通信测试

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

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

d44149c95e9145d1b7961cf12e327602.png

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

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

4.5查看日志

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

image.png

图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. 【实验现象】

ca3dc364b9de410181409cf805c4cf65.png

ef09b52b6dfa4dc6bf00fab2007cf86c.png


相关实践学习
钉钉群中如何接收IoT温控器数据告警通知
本实验主要介绍如何将温控器设备以MQTT协议接入IoT物联网平台,通过云产品流转到函数计算FC,调用钉钉群机器人API,实时推送温湿度消息到钉钉群。
阿里云AIoT物联网开发实战
本课程将由物联网专家带你熟悉阿里云AIoT物联网领域全套云产品,7天轻松搭建基于Arduino的端到端物联网场景应用。 开始学习前,请先开通下方两个云产品,让学习更流畅: IoT物联网平台:https://iot.console.aliyun.com/ LinkWAN物联网络管理平台:https://linkwan.console.aliyun.com/service-open
目录
相关文章
|
2天前
|
监控 安全 网络安全
网络安全与信息安全:保护数据的重要性与方法
网络安全和信息安全是当今社会中不可或缺的话题。本文旨在探讨网络安全漏洞、加密技术和安全意识等方面的知识,以帮助读者更好地理解如何保护个人和机构的数据安全。
12 1
|
11天前
|
网络架构
|
12天前
|
机器学习/深度学习 算法 TensorFlow
【视频】神经网络正则化方法防过拟合和R语言CNN分类手写数字图像数据MNIST|数据分享
【视频】神经网络正则化方法防过拟合和R语言CNN分类手写数字图像数据MNIST|数据分享
|
19天前
|
Python
自动下载网络图片的方法
自动下载网络图片的方法
|
19天前
|
机器学习/深度学习 存储 人工智能
一阶优化算法启发,北大林宙辰团队提出具有万有逼近性质的神经网络架构的设计方法
【4月更文挑战第19天】北京大学林宙辰团队在深度学习领域取得突破,提出基于一阶优化算法的神经网络设计方法,构建具有万有逼近性质的模型,提升训练速度和泛化能力。该方法利用一阶导数信息,高效处理大规模问题。虽然面临非光滑优化和收敛速度挑战,但团队通过正则化和自适应学习率等策略进行改进,相关研究在多个标准数据集上表现出色。
11 1
|
21天前
|
机器学习/深度学习 算法 测试技术
PYTHON用LSTM长短期记忆神经网络的参数优化方法预测时间序列洗发水销售数据
PYTHON用LSTM长短期记忆神经网络的参数优化方法预测时间序列洗发水销售数据
|
21天前
|
机器学习/深度学习 数据采集 数据可视化
SARIMA,神经网络,RNN-LSTM,SARIMA和RNN组合方法预测COVID-19每日新增病例
SARIMA,神经网络,RNN-LSTM,SARIMA和RNN组合方法预测COVID-19每日新增病例
|
21天前
|
数据采集 存储 数据安全/隐私保护
拓展网络技能:利用lua-http库下载www.linkedin.com信息的方法
本文介绍如何使用Lua和lua-http库抓取LinkedIn信息,强调了Lua在爬虫开发中的应用。通过配置亿牛云爬虫代理解决IP封锁问题,实现步骤包括安装库、配置代理、发送HTTP请求、解析响应及提取信息。提供的Lua代码示例展示了下载和存储LinkedIn信息的过程。实验成功展示了Lua爬虫的可行性,但也指出需考虑反爬虫策略以应对实际挑战。
拓展网络技能:利用lua-http库下载www.linkedin.com信息的方法
|
22天前
|
Python
python隶属关系图模型:基于模型的网络中密集重叠社区检测方法
python隶属关系图模型:基于模型的网络中密集重叠社区检测方法
|
25天前
|
机器学习/深度学习 人工智能 自然语言处理