Node.js MQTT 初探

一、MQTT 簡介

MQTT (Message Queuing Telemetry Transport,消息隊列遙測傳輸協議) 是一種輕量級的物聯網(IoT)通信協議。它使用 TCP/IP 協議棧構建,能夠在不可靠的網路中實現可靠的消息傳遞。

二、Node.js MQTT 初探

Node.js MQTT 是一個輕量級的 MQTT 客戶端庫,使用 JavaScript 編寫並可以在 Node.js 中運行。它具有高性能、可靠性、可擴展性等特點,可用於處理感測器的數據、物聯網設備的狀態變化等場景。
下面是一個簡單的 Node.js MQTT 客戶端代碼示例:

const mqtt = require('mqtt')

const client = mqtt.connect('mqtt://test.mosquitto.org')

client.on('connect', function () {
  client.subscribe('presence', function (err) {
    if (!err) {
      client.publish('presence', 'Hello mqtt')
    }
  })
})

client.on('message', function (topic, message) {
  // message is Buffer
  console.log(message.toString())
  client.end()
})

三、使用 Node.js MQTT 進行數據通信

下面是一個使用 Node.js MQTT 進行數據通信的場景示例:

場景:在一個智能家居場景中,使用 Node.js MQTT 客戶端與一個溫度感測器進行通信。

步驟:

1. 配置並啟動 MQTT 代理伺服器。

2. 編寫 Node.js MQTT 客戶端代碼,與溫度感測器進行通信。

// MQTT 代理伺服器地址
const MQTT_SERVER = 'mqtt://test.mosquitto.org'
// 溫度感測器主題
const SENSOR_TOPIC = 'sensor/temperature'

// 創建 MQTT 客戶端
const client = mqtt.connect(MQTT_SERVER)

// 監聽連接事件
client.on('connect', () => {
  console.log(`Connected to MQTT server: ${MQTT_SERVER}`)
  // 訂閱溫度感測器主題
  client.subscribe(SENSOR_TOPIC, (err) => {
    if (err) {
      console.error(`Failed to subscribe to ${SENSOR_TOPIC}: ${err}`)
    } else {
      console.log(`Subscribed to ${SENSOR_TOPIC}`)
    }
  })
})

// 監聽消息事件
client.on('message', (topic, message) => {
  if (topic === SENSOR_TOPIC) {
    const temperature = parseFloat(message.toString())
    console.log(`Temperature: ${temperature}`)
  }
})

3. 部署溫度感測器,並向 MQTT 代理伺服器發布溫度數據。

const mqtt = require('mqtt')

const client = mqtt.connect('mqtt://test.mosquitto.org')

client.on('connect', function () {
  setInterval(() => {
    const temperature = Math.floor(Math.random() * 100) / 10
    client.publish('sensor/temperature', temperature.toString())
  }, 1000)
})

在步驟 3 中,我們使用 setInterval() 函數模擬溫度感測器定時向 MQTT 代理伺服器發布數據,數據的發布通過 client.publish() 方法實現。

四、使用 Node.js MQTT 進行狀態訂閱

下面是一個使用 Node.js MQTT 進行狀態訂閱的場景示例:

場景:在一個智能家居場景中,使用 Node.js MQTT 客戶端進行智能插座狀態的訂閱與控制。

步驟:

1. 配置並啟動 MQTT 代理伺服器。

2. 編寫 Node.js MQTT 客戶端代碼,進行智能插座狀態的訂閱。

// MQTT 代理伺服器地址
const MQTT_SERVER = 'mqtt://test.mosquitto.org'
// 智能插座狀態主題
const SOCKET_STATE_TOPIC = 'socket/state'

// 創建 MQTT 客戶端
const client = mqtt.connect(MQTT_SERVER)

// 監聽連接事件
client.on('connect', () => {
  console.log(`Connected to MQTT server: ${MQTT_SERVER}`)
  // 訂閱智能插座狀態主題
  client.subscribe(SOCKET_STATE_TOPIC, (err) => {
    if (err) {
      console.error(`Failed to subscribe to ${SOCKET_STATE_TOPIC}: ${err}`)
    } else {
      console.log(`Subscribed to ${SOCKET_STATE_TOPIC}`)
    }
  })
})

// 監聽消息事件
client.on('message', (topic, message) => {
  if (topic === SOCKET_STATE_TOPIC) {
    const state = message.toString()
    console.log(`Socket state: ${state}`)
  }
})

3. 向 MQTT 代理伺服器發布智能插座狀態更新。

const mqtt = require('mqtt')

const client = mqtt.connect('mqtt://test.mosquitto.org')

client.on('connect', function () {
  setInterval(() => {
    const state = Math.round(Math.random())
    client.publish('socket/state', state.toString())
  }, 1000)
})

在步驟 3 中,我們使用 setInterval() 函數模擬智能插座定時更新狀態,更新狀態通過 client.publish() 方法實現。

五、Node.js MQTT 應用案例

Node.js MQTT 可以應用於許多 IoT 場景中,比如智能家居、智能農業、智能城市等。下面是一個基於 Node.js MQTT 的智慧園區應用案例:

場景:在一個園區中,使用 Node.js MQTT 客戶端進行智能路燈的狀態訂閱與控制。

步驟:

1. 配置並啟動 MQTT 代理伺服器。

2. 編寫 Node.js MQTT 客戶端代碼,進行智能路燈狀態的訂閱。

// MQTT 代理伺服器地址
const MQTT_SERVER = 'mqtt://test.mosquitto.org'
// 智能路燈狀態主題
const LAMP_STATE_TOPIC = 'lamp/state'

// 創建 MQTT 客戶端
const client = mqtt.connect(MQTT_SERVER)

// 監聽連接事件
client.on('connect', () => {
  console.log(`Connected to MQTT server: ${MQTT_SERVER}`)
  // 訂閱智能路燈狀態主題
  client.subscribe(LAMP_STATE_TOPIC, (err) => {
    if (err) {
      console.error(`Failed to subscribe to ${LAMP_STATE_TOPIC}: ${err}`)
    } else {
      console.log(`Subscribed to ${LAMP_STATE_TOPIC}`)
    }
  })
})

// 監聽消息事件
client.on('message', (topic, message) => {
  if (topic === LAMP_STATE_TOPIC) {
    const state = message.toString()
    console.log(`Lamp state: ${state}`)
  }
})

3. 架設智能路燈節點,向 MQTT 代理伺服器發布智能路燈狀態更新。

const mqtt = require('mqtt')

const client = mqtt.connect('mqtt://test.mosquitto.org')

client.on('connect', function () {
  setInterval(() => {
    const state = Math.round(Math.random())
    client.publish('lamp/state', state.toString())
  }, 1000)
})

在步驟 3 中,我們使用 setInterval() 函數模擬智能路燈定時更新狀態,更新狀態通過 client.publish() 方法實現。

六、總結

本文介紹了 Node.js MQTT 的基本概念及應用場景,並提供了相關代碼示例。Node.js MQTT 具有輕量級、高性能、可靠性、可擴展性等特點,可用於處理感測器的數據、物聯網設備的狀態變化等場景。在實際應用中,我們可以通過 Node.js MQTT 來實現數據通信和狀態訂閱等功能,從而構建出更加智能和高效的 IoT 系統。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/192744.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-01 10:29
下一篇 2024-12-01 10:29

相關推薦

  • JS Proxy(array)用法介紹

    JS Proxy(array)可以說是ES6中非常重要的一個特性,它可以代理一個數組,監聽數據變化並進行攔截、處理。在實際開發中,使用Proxy(array)可以方便地實現數據的監…

    編程 2025-04-29
  • MQTT使用教程

    MQTT是一種輕量級的消息傳輸協議,適用於物聯網領域中的設備與雲端、設備與設備之間的數據傳輸。本文將介紹使用MQTT實現設備與雲端數據傳輸的方法和注意事項。 一、準備工作 在使用M…

    編程 2025-04-29
  • 解析js base64並轉成unit

    本文將從多個方面詳細介紹js中如何解析base64編碼並轉成unit格式。 一、base64編碼解析 在JavaScript中解析base64編碼可以使用atob()函數,它會將b…

    編程 2025-04-29
  • Node.js使用Body-Parser處理HTTP POST請求時,特殊字元無法返回的解決方法

    本文將解決Node.js使用Body-Parser處理HTTP POST請求時,特殊字元無法返回的問題。同時,給出一些相關示例代碼,以幫助讀者更好的理解並處理這個問題。 一、問題解…

    編程 2025-04-29
  • t3.js:一個全能的JavaScript動態文本替換工具

    t3.js是一個非常流行的JavaScript動態文本替換工具,它是一個輕量級庫,能夠很容易地實現文本內容的遞增、遞減、替換、切換以及其他各種操作。在本文中,我們將從多個方面探討t…

    編程 2025-04-28
  • JS圖片沿著SVG路徑移動實現方法

    本文將為大家詳細介紹如何使用JS實現圖片沿著SVG路徑移動的效果,包括路徑製作、路徑效果、以及實現代碼等內容。 一、路徑製作 路徑的製作,我們需要使用到SVG,SVG是可縮放矢量圖…

    編程 2025-04-27
  • 如何解決Node.js中jwt.sign()響應過慢的問題

    本文將從多個方面探討如何解決Node.js中jwt.sign()響應過慢的問題,給出完整的代碼示例與最佳實踐,幫助開發者更好地處理這個問題。 一、問題概述 在使用Node.js編寫…

    編程 2025-04-27
  • 如何使用JS調用Python腳本

    本文將詳細介紹通過JS調用Python腳本的方法,包括使用Node.js、Python shell、child_process等三種方法,以及在Web應用中的應用。 一、使用Nod…

    編程 2025-04-27
  • 如何反混淆美團slider.js

    本文將從多個方面詳細闡述如何反混淆美團slider.js。在開始之前,需要明確的是,混淆是一種保護JavaScript代碼的方法,其目的是使代碼難以理解和修改。因此,在進行反混淆操…

    編程 2025-04-27
  • Python要學JS嗎?

    Python和JavaScript都是非常受歡迎的編程語言。然而,你可能會問,既然我已經學了Python,是不是也需要學一下JS呢?在本文中,我們將圍繞這個問題進行討論,並從多個角…

    編程 2025-04-27

發表回復

登錄後才能評論