View Categories

Node.js通过MQTT接入示例

概述 #

本文以Node.js为例,介绍通过MQTTS/MQTT协议接入平台,基于平台接口实现“属性上报”、“订阅接收命令”等功能。

说明:

本文中使用的代码为样例代码,仅用于体验平台通信功能,如需进行商用,可以参考资源获取获取对应语言的IoT Device SDK进行集成。

前提条件 #

  • 已安装Node.js,若未安装请参考安装Node.js
  • 已在管理控制台获取设备接入地址。获取地址的操作步骤,请参考平台对接信息。
  • 已在管理控制台创建产品和设备。创建产品和设备的具体操作细节,请参考创建产品、注册单个设备或批量注册设备。

准备工作 #

  1. 安装Node.js访问Node.js官网,选择合适系统的版本下载。(本文以windows 64-bit系统,Node.js版本v12.18.0(npm 6.14.4)为例)。Node.js通过MQTT接入示例插图
  2. 下载完成后,运行安装文件,根据界面提示安装。
  3. 检查Node.js是否安装成功。Win键 + r –>输入 cmd–>回车,进入命令行窗口。输入node –v,回车后显示Node.js版本,输入npm -v显示版本信息,即表示安装成功
const mqtt = require('mqtt')
const fs = require('fs');

// MQTT 服务器地址
const MQTT_BROKER = "iot.modbus.cn";
// MQTT 端口号
const MQTT_PORT = 1883;
// MQTT 客户端 ID
const MQTT_CLIENT_ID = "4QR8TZ9ThuL4G";
// MQTT 用户名
const MQTT_USERNAME = "ceshi";
// MQTT 密码
const MQTT_PASSWORD = "123456";
// 订阅的主题
const MQTT_TOPIC_SUBSCRIBE = "/server/coo/4QR8TZ9ThuL4G";
// 发布的主题
const MQTT_TOPIC_PUBLISH = "/dev/coo/4QR8TZ9ThuL4G";

// 创建 MQTT 客户端
const client = mqtt.connect({
    host: MQTT_BROKER,
    port: MQTT_PORT,
    clientId: MQTT_CLIENT_ID,
    username: MQTT_USERNAME,
    password: MQTT_PASSWORD
});

// 连接成功回调函数
client.on('connect', function () {
    console.log("Connected with result code " + MQTT_CLIENT_ID);
    // 订阅主题
    client.subscribe(MQTT_TOPIC_SUBSCRIBE);
});

// 接收消息回调函数
client.on('message', function (topic, message) {
    console.log(`Received message: ${topic} ${message.toString()}`);
});

// 发布消息
function publishMessage(client, topic, payload) {
    client.publish(topic, payload);
}

// 心跳函数
function sendHeartbeat() {
    console.log("Sending heartbeat");
    // 发送心跳消息
    publishMessage(client, MQTT_TOPIC_PUBLISH, "heartbeat");
    // 定时调用自身
    setTimeout(sendHeartbeat, 60 * 1000);
}

// 定时上报函数
function reportData() {
    console.log("Reporting data");
    // 待上报的数据
    const message = [
    { "sensor_device_id": 1, "port_id": 1, "sdata": 33 },
    { "sensor_device_id": 1, "port_id": 2, "sdata": 60 }
];
const payload = JSON.stringify(message);
// 发布数据
publishMessage(client, MQTT_TOPIC_PUBLISH, payload);
// 定时调用自身
setTimeout(reportData, 10 * 1000);
}

// 启动心跳定时器
sendHeartbeat();

// 启动定时上报定时器
reportData();
  • require('mqtt'):引入了 mqtt 库,用于提供 MQTT 客户端的功能。这是一个 MQTT 客户端模块,用于 Node.js 应用程序。
  • require('fs'):引入了 fs 库,用于处理文件系统操作。在本示例中,它并未使用。
  • 声明和初始化一些全局常量,比如 MQTT 服务器的地址、端口号、客户端ID、用户名、密码以及用于订阅和发布的主题。
  • 使用 mqtt.connect() 方法连接到 MQTT 服务器,这个方法需要提供服务器的地址、端口号、客户端ID、用户名和密码。
  • 使用 client.on('connect', callback) 方法设置当连接成功时的回调函数,这个函数会订阅 MQTT 服务器的一个主题。
  • 使用 client.on('message', callback) 方法设置当接收到消息时的回调函数,这个函数会打印出接收到的消息。
  • publishMessage() 函数用于发布消息到 MQTT 服务器的指定主题。
  • sendHeartbeat() 函数用于定期向 MQTT 服务器发送心跳消息,用于告知服务器客户端还在线。
  • reportData() 函数用于定期向 MQTT 服务器上报数据。
  • setTimeout(function, delay) 用于设置定时器,function 是定时器触发时需要执行的函数,delay 是触发定时器的延迟时间,单位是毫秒。

在运行该示例之前,需要确保已经安装了 mqtt 库。如果还未安装,可以使用 npm 安装,运行命令 npm install mqtt

Powered by BetterDocs

发表回复

Your email address will not be published. 必填项已用 * 标注