当前位置: 首页 > news >正文

微信小程序连接到阿里云物联网平台

目录

    • 准备阶段
    • 阿里云配置
    • 下载mqtt.min.js文件
    • 小程序实现
      • 注意
    • 小程序配置服务器域名

概述:介绍使用微信小程序连接到阿里云平台的快捷方法和完整过程。
阿里云平台建立设备,提供mqtt连接参数,小程序借助mqtt.min.js,也就是基于Github下的MQTT.js 库,实现mqtt通信连接到阿里云,过程简单清晰。

https://github.com/mqttjs/MQTT.js

准备阶段

1.需要有阿里云物联网平台账号,已注册。
2.需要下载好微信开发者工具。
3.下载mqtt.min.js文件。

阿里云配置

阿里云上创建设备获取相关连接信息的参数,相关操作可参考物联网平台配置(MQTT)

需要用到的参数如下图所示:

在这里插入图片描述

下载mqtt.min.js文件

这个的话,确实也是网上找的资源,链接:源代码
但是需要自己保存为文件。
我也保存了文件,大家可以直接免费下载使用。
通过网盘分享的文件:mqtt.min.js
链接: https://pan.baidu.com/s/1IXoG50OWMruQ6I4iYeNtWg?pwd=wbs9 提取码: wbs9

小程序实现

首先创建项目
在这里插入图片描述
选用测试号即可,这里不用选云服务,看个人需求吧,模板选js 基础模板即可。

界面控件什么的就不多说了,自己随便弄个开关什么,按钮什么的即可。
或者直接就是登录到该界面就直接后台自动连接到阿里云平台。

先说下目录结构

vx-app-test/
├── app.js                  # 小程序全局逻辑
├── app.json                # 全局配置
├── app.wxss                # 全局样式
├── project.config.json     # 项目配置文件
├── pages/
│   └── index/              # 首页
│       ├── index.js
│       ├── index.json
│       ├── index.wxml
│       └── index.wxss
└── utils/└── mqtt-client.js       # 封装的MQTT连接模块

index.js是json源码,控制逻辑实现,index.wxml和 index.wxss这个是界面配置文件,login.json和页面也有关联,默认即可。mqtt-client.js 可以理解为接口库。
index.js的详细源码:

const mqtt = require('../../utils/mqtt.min.js');
const subTopic = "" //订阅的topic,接收订阅信息
const publishTopic = "" //发布的topic,用来向平台传递信息
Page({
//定义全局变量data: {userInfo: null,          // 用户信息mqttStatus: '未连接',     // MQTT连接状态mqttConnected: false,    // MQTT连接标识mqttClient: null,		//MQTT连接},onLoad() {  // 初始化MQTT连接this.initMQTT()},onUnload() {// 页面卸载时断开MQTT连接this.data.mqttClient.disconnect()},initMQTT(){const options = {keepalive: 60, //60sclean: true, //cleanSession不保持持久会话protocolVersion: 4 //MQTT v3.1.1}//将前面阿里云平台获取到的连接信息,复制到下面对应变量中即可。options.clientId =""options.username =""options.password = ""const mqtt_url = "wxs:/{ProductKey}.iot-as-mqtt.{Region ID}.aliyuncs.com"const client = mqtt.connect(mqtt_url ,options)//连接事件client.on('connect', function () {console.log('连接服务器成功')//连接后可进行订阅// 订阅多个主题// client.subscribe(['topic1', 'topic2'], {qos: 0}, function(err)/*QoS级别说明:0:最多一次,发送者只发送一次消息,不进行重试1:至少一次,确保消息到达Broker2:恰好一次,使用两阶段确认保证消息不丢失不重复*/client.subscribe(subTopic, {qos: 1}, function (err) {if (!err) {console.log('订阅成功!');}})});//接收消息监听client.on('message', function (topic, message) {// message is Buffer  // message 是 Buffer 类型,需要转换为字符串let msg = message.toString();console.log('收到消息:'+ msg);//关闭连接 client.end()});//理论上有这两个就够了,订阅后,接收消息,处理消息。//错误事件client.on('error', function(error) {console.error('连接错误:', error);});    this.data.mqttClient = client; // 保存到全局},//举例一个开关触发接口,实现消息上报。
// 开关状态变化onPowerChange(e) {const powerOn = e.detail.value//获取开关值this.setData({ powerOn })    // 发送控制命令 构建msg消息,字符或者整型,自行处理,最终需要转为json// const msg = {staus: powerOn ? '1' : '0' };const message = JSON.stringify({cmd: 'status',value: powerOn ? 1 : 0})this.data.mqttClient.publish(publishTopic , message, {qos: 1});},
})

一些其他接口

//重连事件
client.on('reconnect', function() {console.log('正在尝试重新连接...');
});//断开连接事件
client.on('close', function() {console.log('连接已关闭');
});

注意

这里有几个需要注意的地方

mqtt链接域名问题

const mqtt_url = "wxs:/{ProductKey}.iot-as-mqtt.{Region ID}.aliyuncs.com"

这里的{ProductKey},要替换为你的产品key,来自阿里云平台,这里的{Region ID}也需要替换为你的地域。

物联网平台中的地域是什么,如何查询?

在这里插入图片描述

常用地域对照表

地域名称所在城市Region ID
华北 2北京cn-beijing
华东 2上海cn-shanghai
华南 1深圳cn-shenzhen

官网地域对照表链接

综上:一个案例,ProductKey : h6xxxxxwI , Region ID:cn-shanghai

const mqtt_url = "wxs:h6xxxxxwI.iot-as-mqtt.cn-shanghai.aliyuncs.com"

小程序配置服务器域名

此外小程序需要设置服务器域名,才能访问,不然无法访问阿里云物联网平台。
登录微信公众平台-》扫码登录(用开发者助手同一个vx)
登录的时候会有一个选项,需要根据开发者助手中的信息选择登录。

在这里插入图片描述

登录后可以找到下面的页面,修改并在对应栏下添加域名即可。

注意一个关键的地方,这里输入的域名是wss:的,而实际代码中使用的是wssd :

const mqtt_url = "wxs:h6xxxxxwI.iot-as-mqtt.cn-shanghai.aliyuncs.com"

注意将代码中的mqtt_url进行替换为:

wss:h6xxxxxwI.iot-as-mqtt.cn-shanghai.aliyuncs.com

这不会影响连接。

在这里插入图片描述

完成以上操作,编译后,观察控制台输出正常,就可以观察阿里云设备在线就说明成功登录,建立连接了。

以上就是小程序连接阿里云的全部过程了,看了下网上一些其他的博客,有点乱,还要用上加密方法,实际上是不需要的,可以直接使用阿里云中的连接参数就可以了,当然这可能是不安全的,其他考虑就需要各位自己考虑了,有啥问题欢迎评论区留言。

http://www.xdnf.cn/news/1330021.html

相关文章:

  • Java I/O 模型精讲:从传统BIO到高性能NIO与AIO
  • TDengine IDMP 运维指南(4. 使用 Docker 部署)
  • HarmonyOS 实战:学会在鸿蒙中使用第三方 JavaScript 库(附完整 Demo)
  • 实现自己的AI视频监控系统-第一章-视频拉流与解码1
  • Orange的运维学习日记--47.Ansible进阶之异步处理
  • [Git] 如何拉取 GitHub 仓库的特定子目录
  • Qt——文件操作
  • word如何转换为pdf
  • 关于物理世界、感知世界、认知世界与符号世界统一信息结构的跨领域探索
  • 算法——快速幂
  • mycat分库分表实验
  • iOS App 混淆工具实战,教育培训类 App 的安全保护方案
  • [激光原理与应用-308]:光学设计 - 266皮秒深紫外激光器设计图纸示例解析(基于工程实现与专利技术)
  • 网络聚合链路与软件网桥配置指南
  • 从一个ctf题中学到的多种php disable_functions bypass 姿势
  • CNN 在故障诊断中的应用:原理、案例与优势
  • 机器人控制基础:串级 PID 和模糊 PID介绍与对比(干货总结)
  • Transformer十问
  • java17学习笔记-Deprecate the Applet API for Removal
  • LCC-LCC谐振式无线充电系统控制技术研究的复现
  • 期权小故事:王安石变法与期权
  • 前端本地模糊搜索1.0 按照匹配位置加权
  • 土地财政历史探寻
  • Diamond开发经验(1)
  • RabbitMQ:SpringAMQP Direct Exchange(直连型交换机)
  • 走进数字时代,融入数字生活,构建数字生态
  • Arthas 全面使用指南:离线安装 + Docker/K8s 集成 + 集中管理
  • 开源 C++ QT Widget 开发(一)工程文件结构
  • 猫头虎AI分享|字节开源了一款具备长期记忆能力的多模态智能体:M3-Agent 下载、安装、配置、部署教程
  • Java NIO 核心精讲(上):Channel、Buffer、Selector 详解与 ByteBuffer 完全指南