So verwenden Sie MQTT in Node.js

Node.js ist eine JavaScript-Laufzeitumgebung, die auf der V8-JavaScript-Engine von Chrome basiert. Vor dem Aufkommen von Node.js wurde JavaScript normalerweise als clientseitige Programmiersprache verwendet, und die in JavaScript geschriebenen Programme liefen oft im Browser des Benutzers. Das Erscheinen von node.js ermöglicht es, JavaScript für die serverseitige Programmierung zu verwenden.

MQTT ist ein Leichtgewicht IoT-Messaging Protokoll basierend auf dem Publish/Subscribe-Modell. Es kann zuverlässige Messaging-Dienste in Echtzeit für vernetzte Geräte mit sehr wenig Code und Bandbreite bereitstellen. Es ist weit verbreitet in Branchen wie IoT, mobiles Internet, intelligente Hardware, Internet der Fahrzeuge und Kraftenergie.

Dieser Artikel stellt hauptsächlich vor, wie MQTT im Node.js-Projekt verwendet wird, um die Funktionen zum Verbinden, Abonnieren, Abbestellen, Veröffentlichen und Empfangen von Nachrichten zwischen dem Client und dem zu realisieren MQTT-Broker.

MQTT-Client-Bibliothek

MQTT.js ist eine Clientbibliothek des MQTT-Protokolls, die in JavaScript geschrieben ist und in Node.js- und Browserumgebungen verwendet wird. Es ist derzeit das am weitesten verbreitete MQTT-Client-Bibliothek im JavaScript-Ökosystem.

Projektinitialisierung

Bestätigen Sie die Node.js-Version

Dieses Projekt verwendet Node.js v14.14.0 für Entwicklung und Tests. Leser können die Version von Node.js mit dem folgenden Befehl bestätigen

node --version

v14.14.0

Verwenden Sie npm, um die MQTT.js-Clientbibliothek zu installieren

# create a new project
npm init -y

# Install dependencies
npm install mqtt --save

Nach der Installation erstellen wir im aktuellen Verzeichnis eine neue Datei index.js als Einstiegsdatei des Projekts, in der wir die komplette Logik des MQTT-Verbindungstests implementieren können.

Node.js MQTT-Nutzung

Verbinden Sie sich mit dem MQTT-Server

Dieser Artikel wird verwendet Kostenloser öffentlicher MQTT-Server bereitgestellt von EMQX, das auf der Grundlage von EMQs erstellt wird MQTT-Cloud. Die Serverzugriffsinformationen lauten wie folgt:

  • Makler: broker.emqx.io
  • TCP-Port: 1883
  • SSL/TLS-Port: 8883

Importieren Sie die MQTT.js-Clientbibliothek

Hinweis: Verwenden Sie in der Node.js-Umgebung bitte die commonjs-Spezifikation, um Abhängigkeitsmodule zu importieren

const mqtt = require('mqtt')

Legen Sie die MQTT-Broker-Verbindungsparameter fest

Legen Sie die MQTT Broker-Verbindungsadresse, den Port und das Thema fest. Hier verwenden wir die Funktion zum Generieren von Zufallszahlen in JavaScript, um die Client-ID zu generieren.

const host="broker.emqx.io"
const port="1883"
const clientId = `mqtt_${Math.random().toString(16).slice(3)}`

Schreiben Sie die MQTT Connect-Funktion

Wir verwenden die gerade eingestellten Verbindungsparameter, um eine Verbindung herzustellen, und die URL für die Verbindung wird durch die oben definierten Host- und Port-Ports gespleißt. Dann rufen wir die eingebaute Verbindungsfunktion des MQTT-Moduls auf und sie gibt eine Client-Instanz zurück, nachdem die Verbindung erfolgreich war.

const connectUrl = `mqtt://${host}:${port}`

const client = mqtt.connect(connectUrl, {
  clientId,
  clean: true,
  connectTimeout: 4000,
  username: 'emqx',
  password: 'public',
  reconnectPeriod: 1000,
})

Wir verwenden die on-Funktion der zurückgegebenen Client-Instanz, um den Verbindungsstatus zu überwachen, und abonnieren das Thema in der Callback-Funktion, nachdem die Verbindung erfolgreich war. An diesem Punkt rufen wir die Abonnementfunktion der Clientinstanz auf, um das Thema zu abonnieren /nodejs/mqtt nachdem die Verbindung erfolgreich war.

const topic="/nodejs/mqtt"
client.on('connect', () => {
  console.log('Connected')
  client.subscribe([topic], () => {
    console.log(`Subscribe to topic '${topic}'`)
  })
})

Nach erfolgreichem Abonnieren des Themas verwenden wir dann die on Funktion, um die Funktion des Empfangs der Nachricht zu überwachen. Wenn die Nachricht empfangen wird, können wir das Thema und die Nachricht in der Callback-Funktion dieser Funktion abrufen.

Hinweis: Die Nachricht in der Callback-Funktion ist vom Typ Buffer und muss von der toString-Funktion in einen String konvertiert werden

client.on('message', (topic, payload) => {
  console.log('Received Message:', topic, payload.toString())
})

Nachrichten veröffentlichen

Nach Abschluss des obigen Themas Abonnement und Nachrichtenüberwachung werden wir eine Funktion zum Veröffentlichen von Nachrichten schreiben.

Hinweis: Die Nachricht muss veröffentlicht werden, nachdem die MQTT-Verbindung erfolgreich war, also schreiben wir sie in die Callback-Funktion, nachdem die Verbindung erfolgreich war

client.on('connect', () => {
  client.publish(topic, 'nodejs mqtt test', { qos: 0, retain: false }, (error) => {
    if (error) {
      console.error(error)
    }
  })
})

Vollständiger Code

Der Code für Serververbindung, Themenabonnement, Nachrichtenveröffentlichung und -empfang.

const mqtt = require('mqtt')

const host="broker.emqx.io"
const port="1883"
const clientId = `mqtt_${Math.random().toString(16).slice(3)}`

const connectUrl = `mqtt://${host}:${port}`
const client = mqtt.connect(connectUrl, {
  clientId,
  clean: true,
  connectTimeout: 4000,
  username: 'emqx',
  password: 'public',
  reconnectPeriod: 1000,
})

const topic="/nodejs/mqtt"
client.on('connect', () => {
  console.log('Connected')
  client.subscribe([topic], () => {
    console.log(`Subscribe to topic '${topic}'`)
  })
  client.publish(topic, 'nodejs mqtt test', { qos: 0, retain: false }, (error) => {
    if (error) {
      console.error(error)
    }
  })
})
client.on('message', (topic, payload) => {
  console.log('Received Message:', topic, payload.toString())
})

Den vollständigen Code des Projekts finden Sie unter:

Prüfen

Wir fügen dem Skriptfeld in der Datei „package.json“ eine Zeile Startskript hinzu.

"scripts": {
  "start": "node index.js"
}

Dann können wir einfach verwenden npm start um das Projekt zu leiten.

npm start

Nach dem Ausführen können wir die Ausgabeinformationen der Konsole wie folgt sehen:

NodeJS MQTT starten

Wir sehen, dass der Client sich erfolgreich mit dem verbunden hat MQTT-Broker und das Thema abonniert, Nachrichten erfolgreich empfangen und veröffentlicht. An dieser Stelle werden wir verwenden MQTT 5.0 Client-Tool – MQTT X als weiterer Client für den Nachrichtenveröffentlichungs- und -empfangstest.

MQTT 5.0 Client-Tool – MQTT X

Wir können sehen, dass die von MQTT X gesendete Nachricht in der Konsole gedruckt wird.

MQTT-Nachrichten

Bisher haben wir Node.js als MQTT-Client um sich mit dem zu verbinden öffentlicher MQTT-Brokerund realisiert die Verbindung, die Nachrichtenveröffentlichung und das Abonnement zwischen dem Testclient und dem MQTT-Server.

Ursprünglich erschienen bei

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *