热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

001STM32+W5500基本控制篇(阿里云物联网平台)C#,网页,android,微信小程序,单片机等使用MQTT接入阿里云物联网平台杨奉武

<p><iframename"ifd"src&

001-STM32+W5500基本控制篇(阿里云物联网平台)-C#,网页,android,微信小程序,单片机等使用MQTT接入阿里云物联网平台

 

前言

这节测试下使用STM32+W5500 和 Android 和 微信小程序 和 网页端 接入阿里云物联网平台

当前的各种物联网平台整体思想是提供一个网页端让用户去注册设备

这个设备就对应一个MQTT客户端,然后把这个设备的信息放到单片机/APP/微信小程序上使用.

单片机/APP/微信小程序等就作为了客户端接入了物联网平台.

物联网平台应该说是对设备进行管理的平台.

 

开通阿里云物联网平台

https://www.aliyun.com/

1.搜索阿里云物联网平台(如果没有开通请自行开通)

 

 

 

创建产品(并在产品下面添加设备)

1.咱们做产品的时候,一般都是有个产品.

 

 

2.设置下产品的名称

 

 

 

3.产品弄好了,就要在产品下面挂上设备

 

 

 

4.设置下添加的设备的名字

 

 

 

 

 

 

 

注意:看看自己的这里是那个区域的,后面会用到

 

提示:后面咱就会使用下面三个参数(三元组)组合MQTT参数

"ProductKey": "a1m7er1nJbQ",
"DeviceName": "Mqtt",
"DeviceSecret": "7GUrQwgDUcXWV3EIuLwdEvmRPWcl7VsU"

 

https://help.aliyun.com/document_detail/86706.html    阿里云的说明文档

 

现在看MQTT的IP地址是怎么组合的

 

"ProductKey": "a1m7er1nJbQ",
"DeviceName": "Mqtt",
"DeviceSecret": "7GUrQwgDUcXWV3EIuLwdEvmRPWcl7VsU"

 

${YourProductKey}.iot-as-mqtt.${region}.aliyuncs.com

 

1.替换ProductKey:

a1m7er1nJbQ.iot-as-mqtt.${region}.aliyuncs.com

 

2.替换 ${region}

 

 

 

 

 

 

 

最终IP地址:

a1m7er1nJbQ.iot-as-mqtt.cn-shanghai.aliyuncs.com

 

现在看MQTT的端口号是什么

 

 

现在看MQTT的Client ID是怎么组合的

 

 

 

1.我就规定我的前面的clientId是  112233445566 (这个任意)

2.咱呢先不走SSL,  所以  securemode=3 (注意:即使走SSL,端口号也是1883)

3.最后一个呢,咱就选用 hmacsha1(这个选择的是计算MQTT密码的算法)

最终MQTT的 Client ID:

112233445566|securemode=3,signmethod=hmacsha1|

 

客户端(设备)连接的MQTT的用户名

{
"ProductKey": "a1m7er1nJbQ",
"DeviceName": "Mqtt",
"DeviceSecret": "7GUrQwgDUcXWV3EIuLwdEvmRPWcl7VsU"
}

 

 

 

最终用户名: Mqtt&a1m7er1nJbQ

 

客户端(设备)连接的MQTT的密码

{
"ProductKey": "a1m7er1nJbQ",
"DeviceName": "Mqtt",
"DeviceSecret": "7GUrQwgDUcXWV3EIuLwdEvmRPWcl7VsU"
}

 

 

 

 

 

 

 

 

 

 

 

 

所以MQTT连接的密码

8B286A9E99B49E19A0964589E8F3C2DBB1C1A8DE

 

 

最终

IP地址:     a1m7er1nJbQ.iot-as-mqtt.cn-shanghai.aliyuncs.com

端口号:    1883

Client ID: 112233445566|securemode=3,signmethod=hmacsha1|

用户名:    Mqtt&a1m7er1nJbQ

密码:       8B286A9E99B49E19A0964589E8F3C2DBB1C1A8DE

 

测试

1.打开MQTT调试助手

 

 

 

 

 

 

 

 

 

2.填入相应的参数,点击连接

 

 

 

 

使用网页端调试助手连接

1.关闭测试软件

注:一开始说了,一个设备就作为一个MQTT客户端,也只能一个设备使用.

 

2.打开网页端调试助手

 

 

 

 

 

 

 

3.WS方式:

IP地址: ws://a1m7er1nJbQ.iot-as-mqtt.cn-shanghai.aliyuncs.com:443/mqtt

ClientID: 112233445566|securemode=3,signmethod=hmacsha1|

用户名: Mqtt&a1m7er1nJbQ

密码: 8B286A9E99B49E19A0964589E8F3C2DBB1C1A8DE

 

 

 

 

4.WSS方式:

IP地址: wss://a1m7er1nJbQ.iot-as-mqtt.cn-shanghai.aliyuncs.com:443/mqtt

ClientID: 112233445566|securemode=2,signmethod=hmacsha1|

用户名: Mqtt&a1m7er1nJbQ

密码: 8B286A9E99B49E19A0964589E8F3C2DBB1C1A8DE

 

 

 

 

使用单片机连接

1.关闭测试软件

注:一开始说了,一个设备就作为一个MQTT客户端,也只能一个设备使用.

 

 

2.使用网线连接路由器或者交换机

 

 

 

 

3.打开这节的单片机程序

 

 

4.使用usb口打印串口日志

 

 

5.修改为阿里云的设备参数.

 

 

 

6.然后下载程序到单片机,查看日志

 

 

 

 

 

单片机程序说明

1.整体概况

 

 

 

①:控制模块连接TCP服务器(MQTT服务器)

②:计算MQTT密码

③:MQTT消息处理封装包(缓存管理,支持消息等级0,1,2)

④:使用Mbedtls里面的sha1或者md5 计算密码文件

 

 

2.初始化MQTT,注册相应的回调函数

 

使用W5500的MAC地址作为ClientID ;  我编写的包是以注册回调函数的形式使用.

 

 

 

 

3.组合MQTT服务器的IP地址, 使用DNS解析地址

 

 

 

 

 

4.先使用TCP连接上TCP服务器(MQTT服务器就是TCP服务器嘛)

 

 

5.连接上TCP以后,发送连接MQTT协议(关于组合计算密码在最后面会有详细说明)

 

 

 

 

6.发送连接协议给服务器以后,如果服务器返回连接成功消息,便会调用MQTT连接成功回调函数

 

 

 

 

 

 

7.连接上了以后就轮训mqtt_send_function函数

咱们后面调用订阅,发布的函数的时候, 数据都会存储在缓存里面, 然后通过轮训 mqtt_send_function函数,把MQTT的数据发送出去

 

 

 

这个函数里面也实时检测发送心跳包.

 

 

 

 

8.接收消息

连接MQTT成功以后收到的服务器发送的数据需要让 mqtt_read_function函数处理, 该函数内部会处理消息并调用相应的回调函

 

 

 

 

 

 

使用Android连接

1.打开本节的Android工程

 

 

 

 

2.修改参数

注意:一开始说了,一个设备就作为一个MQTT客户端,也只能一个设备使用.

或者也可以再注册个设备,然后把参数给APP使用.

如果多个客户端用的同一个设备的参数,就会互相挤掉线.

 

 

 

 

4.安装到手机以后查看下日志

 

 

 

Android程序说明

1.整体说明

 

 

 

org.eclipse.paho.client.mqttv3-1.2.0: 使用的mqtt的jar包

MyMqttClient 是再次封装的class文件

 

2.根据参数拼接MQTT信息

 

 

 

3.计算密码

 

 

 

4.连接MQTT服务器

 

 

 

 

 

 

 

使用微信小程序连接

1.打开工程

 

 

2.修改MQTT参数

注意:一开始说了,一个设备就作为一个MQTT客户端,也只能一个设备使用.

或者也可以再注册个设备,然后把参数给小程序使用.

如果多个客户端用的同一个设备的参数,就会互相挤掉线.

 

3.如果想快速测试,可以设置软件不校验服务器域名(测试的时候这样方便点)

 

4.不过还是建议在微信小程序平台上设置域名白名单

 

 

注:wss://阿里云的域名

我的设备接入的域名是:  a1m7er1nJbQ.iot-as-mqtt.cn-shanghai.aliyuncs.com

 

 

 

 

5.正常运行以后,控制台会打印

 

 

 

微信小程序源码说明

1.整体说明

 

 

paho-mqtt.js : 底层MQTT包

mqtt.js : 在底层包之上封装的包

hmac_sha1.js : 计算MQTT密码

public.js : 公共函数

 

2.连接MQTT

 

 

 

 

 

 

 

 

关于单片机密码计算

1.密码计算需要sha1或MD5,我单片机移植了Mbedtls

 

 

 

2.密码计算的第二种方式 

 

3.按照官方说明拼接参数

 

 

 

4.使用加密算法计算密码

aly_hmac_sha1((char *)tcp_mqtt_buff,strlen((char *)tcp_mqtt_buff),DeviceSecret,strlen(DeviceSecret),(unsigned char *)mqtt_password);

这个函数是自己添加的程序

 

5.上面源码可以看出, 不是用sha1普通的计算下.

其实是阿里云平台这样规定的组合计算

 

 

 

 

 

 

 

 

 

 

用户也可以用阿里云提供的 SDK包里面的程序文件实现计算密码.

 

结语

再重复一句话,在物联网平台上面,一个产品就是一个MQTT客户端.

如果客户想多个设备连接云平台就需要自己多创建几个设备.

设备(MQTT客户端)上报数据在云平台显示,见后面章节.

 


推荐阅读
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • Monkey《大话移动——Android与iOS应用测试指南》的预购信息发布啦!
    Monkey《大话移动——Android与iOS应用测试指南》的预购信息已经发布,可以在京东和当当网进行预购。感谢几位大牛给出的书评,并呼吁大家的支持。明天京东的链接也将发布。 ... [详细]
  • C# 7.0 新特性:基于Tuple的“多”返回值方法
    本文介绍了C# 7.0中基于Tuple的“多”返回值方法的使用。通过对C# 6.0及更早版本的做法进行回顾,提出了问题:如何使一个方法可返回多个返回值。然后详细介绍了C# 7.0中使用Tuple的写法,并给出了示例代码。最后,总结了该新特性的优点。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 动态规划算法的基本步骤及最长递增子序列问题详解
    本文详细介绍了动态规划算法的基本步骤,包括划分阶段、选择状态、决策和状态转移方程,并以最长递增子序列问题为例进行了详细解析。动态规划算法的有效性依赖于问题本身所具有的最优子结构性质和子问题重叠性质。通过将子问题的解保存在一个表中,在以后尽可能多地利用这些子问题的解,从而提高算法的效率。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • 导出功能protectedvoidbtnExport(objectsender,EventArgse){用来打开下载窗口stringfileName中 ... [详细]
  • 本文介绍了前端人员必须知道的三个问题,即前端都做哪些事、前端都需要哪些技术,以及前端的发展阶段。初级阶段包括HTML、CSS、JavaScript和jQuery的基础知识。进阶阶段涵盖了面向对象编程、响应式设计、Ajax、HTML5等新兴技术。高级阶段包括架构基础、模块化开发、预编译和前沿规范等内容。此外,还介绍了一些后端服务,如Node.js。 ... [详细]
  • 小程序获取用户信息按钮返回中文地址
    1.我是根据官方文档中描述去写的按钮 可以看到button中加了zh_CNopen-typegetUserInfobindgetuserinfogetU ... [详细]
  • 本文是关于C#类型系统、值类型和引用类型的概念性笔记。介绍了C#1系统类型的三个特性,静态类型的含义,显式类型和隐式类型的区别。还讨论了类、结构、数组类型、枚举、委托类型和接口类型属于哪一种类型。同时纠正了关于结构、引用类型和对象传递的错误表述。最后提到了C#4中使用动态类型的关键字。 ... [详细]
  • 本文介绍了互联网思维中的三个段子,涵盖了餐饮行业、淘品牌和创业企业的案例。通过这些案例,探讨了互联网思维的九大分类和十九条法则。其中包括雕爷牛腩餐厅的成功经验,三只松鼠淘品牌的包装策略以及一家创业企业的销售额增长情况。这些案例展示了互联网思维在不同领域的应用和成功之道。 ... [详细]
  • 本文整理了315道Python基础题目及答案,帮助读者检验学习成果。文章介绍了学习Python的途径、Python与其他编程语言的对比、解释型和编译型编程语言的简述、Python解释器的种类和特点、位和字节的关系、以及至少5个PEP8规范。对于想要检验自己学习成果的读者,这些题目将是一个不错的选择。请注意,答案在视频中,本文不提供答案。 ... [详细]
  • 在C#中,使用关键字abstract来定义抽象类和抽象方法。抽象类是一种不能被实例化的类,它只提供部分实现,但可以被其他类继承并创建实例。抽象类可以用于类、方法、属性、索引器和事件。在一个类声明中使用abstract表示该类倾向于作为其他类的基类成员被标识为抽象,或者被包含在一个抽象类中,必须由其派生类实现。本文介绍了C#中抽象类和抽象方法的基础知识,并提供了一个示例代码。 ... [详细]
  • Unity3D引擎的体系结构和功能详解
    本文详细介绍了Unity3D引擎的体系结构和功能。Unity3D是一个屡获殊荣的工具,用于创建交互式3D应用程序。它由游戏引擎和编辑器组成,支持C#、Boo和JavaScript脚本编程。该引擎涵盖了声音、图形、物理和网络功能等主题。Unity编辑器具有多语言脚本编辑器和预制装配系统等特点。本文还介绍了Unity的许可证情况。Unity基本功能有限的免费,适用于PC、MAC和Web开发。其他平台或完整的功能集需要购买许可证。 ... [详细]
  • 微信答题小程序的设计与实现详解
    本文详细介绍了如何设计和实现一个微信答题小程序,包括题库的设计和题目的呈现。通过抽取题目编号和使用全局变量记录当前题目的信息,实现了题目的刷新和显示。同时,还介绍了题目的展示方式和容器的创建。本文适合零基础的小白学习微信答题小程序的开发。 ... [详细]
author-avatar
何其何从丶
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有