搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
煮酒与君饮
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
基于web的校园二手物品交易系统的设计与实现_期刊论文: “design and implementation of campus second-
2
GPT实战系列-LangChain构建自定义Agent_langchain 自定义agent
3
支持向量机smo算法C语言,支持向量机(SVM)的SMO算法详解
4
PulsarRPAPro-AI高速采集并自动提取网页数据
5
【动态规划】【字符串】【行程码】1531. 压缩字符串_行程编码是一种简单有效的压缩算法,它可将连续的重复字符 压缩成“重复次数+字符
6
用 OpenCV 实现图像中水平线检测与校正_opencv 基于最长水平横线对扫描表格进行纠偏
7
一个技巧轻松实现复杂逻辑bug-free_测试过程逻辑比较复杂的bug
8
“区块链+供应链”的应用案例_区块链技术应用案例
9
头歌数据结构——二叉树及其应用_第1关:实现二叉树的创建
10
万象奥科携手RT-Thread,线下体验RK3568混合部署!_开发板 openamp
当前位置:
article
> 正文
1-基本控制篇(阿里云物联网平台)-C#,网页,android,微信小程序,单片机等使用MQTT接入阿里云物联网平台_微信小程序与阿里云物联网的mqtt连接
作者:煮酒与君饮 | 2024-06-24 21:21:01
赞
踩
微信小程序与阿里云物联网的mqtt连接
前言
这节测试下使用STM32+EC800 和 Android 和 微信小程序 和 网页端 接入阿里云物联网平台
当前的各种物联网平台整体思想是提供一个网页端让用户去注册设备
这个设备就对应一个MQTT客户端,然后把这个设备的信息放到单片机/APP/微信小程序上使用.
单片机/APP/微信小程序等就作为了客户端接入了物联网平台.
物联网平台应该说是对设备进行管理的平台.
开通阿里云物联网平台
https://www.aliyun.com/
1.搜索阿里云物联网平台(如果没有开通请自行开通)
创建产品(并在产品下面添加设备)
1.咱们做产品的时候,一般都是有个产品.
2.设置下产品的名称
3.产品弄好了,就要在产品下面挂上设备
4.设置下添加的设备的名字
注意:看看自己的这里是那个区域的,后面会用到
提示:后面咱就会使用下面三个参数(三元组)组合MQTT参数
"ProductKey": "a1m7er1nJbQ",
"DeviceName": "Mqtt",
"DeviceSecret": "7GUrQwgDUcXWV3EIuLwdEvmRPWcl7VsU"
如何使用MQTT协议模拟设备快速接入物联网平台_物联网平台(IoT)-阿里云帮助中心
阿里云的说明文档
现在看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.安装好模组
注意: 单片机都是使用串口2和模组通信,所以需要拆掉ESP8266
3.打开这节的单片机程序
5.修改为阿里云的设备参数.
6.使用单片机串口1打印串口日志(115200)
7.然后下载程序到单片机,查看日志
单片机程序说明
1,串口2接收模组数据的时候,单独使用一个缓存,缓存了TCP接收的数据
2.整体概况
①:控制模块连接TCP服务器(MQTT服务器)
②:计算MQTT密码
③:MQTT消息处理封装包(缓存管理,支持消息等级0,1,2)
④:使用Mbedtls里面的sha1或者md5 计算密码文件
3.初始化MQTT,注册相应的回调函数
我编写的包是以注册回调函数的形式使用.
4.先使用TCP连接上TCP服务器(MQTT服务器就是TCP服务器嘛)
这个里面还有使用模组的唯一码作为ClientID
5.连接上TCP以后,发送连接MQTT协议
(关于组合计算密码在最后面会有详细说明)
6.发送连接协议给服务器以后,如果服务器返回连接成功消息,便会调用MQTT连接成功回调函数
7.连接上了以后就轮训mqtt_send_function函数
咱们后面调用订阅,发布的函数的时候, 数据都会存储在缓存里面, 然后通过轮训 mqtt_send_function函数,把MQTT的数据发送出去
关于
mqtt->timer_out_cnt 等待模块返回 >
mqtt->timer_out_send 等待发送完成
当前我设置的为3000ms
串口里面有相应的处理
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客户端)上报数据在云平台显示,见后面章节.
声明:
本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:
https://www.wpsshop.cn/w/煮酒与君饮/article/detail/754027
推荐阅读
article
【
MQTT
】基于
阿里
云
物
联网
平台实现两
设备
间相互
订阅
及
发布
消息_
阿里
云
多台
设备
订阅
...
2.流程说明:规则引擎-》
云
产品流转 创建解析器、数据源、数据目的。device1
发布
topic为:/hjmeMtd96...
赞
踩
article
[杂谈]-
ESP32
中的
无线通信
协议
_
esp32
mqtt
sokect
wiff
...
ESP32
是一个基于微控制器的物联网平台,集成了Wi-Fi和蓝牙模块可用。和所有其他微控制器板一样,
ESP32
也有可以发...
赞
踩
article
阿里
物联网套件-
设备
端
SDK
学习实践(C版-
Linux
-
MQTT
)_
linux
c
树莓派
mqtt
...
设备
端快速接入(
MQTT
)准备工作1.一个运行
Linux
系统的
设备
(或者虚拟机),本人使用raspbian系统的树莓派B...
赞
踩
article
AWS
IOT
接入及
测试
_
aws
iot
mqtt
在线调试...
AWS
IoT 能够通过 MQTT 和 HTTP 在连接 Internet 的设备 (如传感器、执行器、嵌入式设备或智能...
赞
踩
article
【
MQTT
】
SpringBoot
整合
MQTT
(
EMQX
)
_
springboot
emqx
...
最近在做
MQTT
对接,然后发送消息,然后参考网上的实战文章进行了一下整理。文章主要参考自(https://www.cod...
赞
踩
article
uni
-
app
使用
plus
本地推送
通知
栏信息,不
使用
第三方个推实现
消息
在线统一推送、
消息
通知
(MQT...
uni
-
app
使用
plus
本地推送
通知
栏信息,不
使用
第三方个推实现
消息
在线统一推送、
消息
通知
(
MQTT
、WebSocke...
赞
踩
相关标签
阿里云
物联网
云计算
硬件
ESP32
单片机
通信协议
阿里
aws
iot
device
spring boot
后端
java
mqtt
uni-app
websocket
消息通知