一、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
微信掃一掃
支付寶掃一掃