使用JavaScript和MQTT开发物联网应用示例解析

下面是关于“使用JavaScript和MQTT开发物联网应用示例解析”的完整攻略,以及其中的两个示例说明。

什么是MQTT

MQTT(Message Queuing Telemetry Transport)是一种基于发布/订阅的消息协议,常用于物联网设备和服务器之间的通信。MQTT协议的特点在于轻量和易于使用。在MQTT中,客户端可以订阅某个主题,并收到与此主题相关联的消息。当某个设备发送一条消息时,它会发布到特定的主题。所有订阅此主题的客户端都会收到这条消息。因此,MQTT协议在物联网应用中非常受欢迎。

使用MQTT进行通信

在JavaScript应用中使用MQTT,需要使用一个MQTT客户端库。常见的MQTT客户端库有MQTT.jspaho-mqtt,它们都提供了在JavaScript中进行MQTT通信的API。

首先,需要创建一个MQTT客户端实例,然后使用它来连接到MQTT代理。连接成功后,可以将客户端订阅到一个或多个主题,也可以将消息发布到一个或多个主题。以下是使用MQTT.js库的示例代码:

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

client.on('connect', () => {
  console.log('MQTT Connected!');
  client.subscribe('my/topic');
});

client.on('message', (topic, message) => {
  console.log(`Received message on topic "${topic}": ${message.toString()}`);
});

client.publish('my/topic', 'Hello, MQTT!');

示例1:使用MQTT控制LED灯

下面是一种使用MQTT控制LED灯的示例。我们可以使用MQTT.js库并结合一些硬件来实现这个示例。

硬件要求

  • 一块WiFi开发板,例如ESP8266或ESP32
  • 一个LED灯
  • 一块面包板和一些杜邦线

程序设计

首先,需要将电路连接好。我们需要将LED连接到开发板的引脚,并使用一个电阻器来限制电流,这样可以避免LED烧坏。接下来,需要使用MQTT.js库创建一个MQTT客户端实例,并连接到MQTT代理。当设备连接成功并订阅了某个主题时,它可以从MQTT代理接收消息。如果代理接收了一个控制LED的消息,设备将点亮或关闭LED。

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

const ledPin = D2; // 下面会说到如何定义引脚
let ledState = 0;

function setup() {
  pinMode(ledPin, OUTPUT);
  client.on('connect', () => {
    console.log('MQTT Connected!');
    client.subscribe('led/control');
  });

  client.on('message', (topic, message) => {
    console.log(`Received message on topic "${topic}": ${message.toString()}`);

    if (message.toString() === 'on') {
      ledState = 1;
      digitalWrite(ledPin, HIGH);
      client.publish('led/status', 'on');
    } else if (message.toString() === 'off') {
      ledState = 0;
      digitalWrite(ledPin, LOW);
      client.publish('led/status', 'off');
    }
  });
}

function loop() {

}

board.on('ready', () => {
  console.log('Board ready!');
  setup();
});

可以看到,当设备订阅了名为“led/control”的主题后,设备将可以从MQTT代理接收到控制指令。如果接收到的指令是“on”,设备将点亮LED,并发布一条名为“led/status”的消息到MQTT代理。如果指令是“off”,设备将关闭LED,并发布一条值为“off”的消息。

如何定义引脚

不同的WiFi开发板,如ESP8266和ESP32,可能有不同的引脚编号和名称。如果您使用的是NodeMCU开发板,可以使用下面的代码定义引脚:

const D0 = 16;
const D1 = 5;
const D2 = 4;
const D3 = 0;
const D4 = 2;
const D5 = 14;
const D6 = 12;
const D7 = 13;
const D8 = 15;
const RX = 3;
const TX = 1;

示例2:使用MQTT发送传感器数据

以下是一种将传感器数据发送到MQTT代理的示例。设备将连接到一个DHT11温湿度传感器,并使用MQTT发送传感器数据。

硬件要求

  • 一块WiFi开发板,例如ESP8266或ESP32
  • 一个DHT11温湿度传感器
  • 一块面包板和一些杜邦线

程序设计

首先需要连接DHT11传感器到开发板的引脚。接下来,需要使用MQTT.js库创建一个MQTT客户端实例,并连接到MQTT代理。在设备连接到代理并订阅了一个主题之后,可以使用setInterval函数来定期读取传感器数据,并将数据作为JSON格式的消息发送到MQTT代理。

以下是示例代码:

const mqtt = require('mqtt');
const DHT = require('dht-sensor');

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

const sensorPin = D4; // 下面会说到如何定义引脚

function setup() {
  client.on('connect', () => {
    console.log('MQTT Connected!');
    setInterval(sendSensorData, 3000);
  });
}

function sendSensorData() {
  const data = DHT.read(DHT.DHT11, sensorPin);
  const message = JSON.stringify({
    temperature: data.temperature.toFixed(1),
    humidity: data.humidity.toFixed(1)
  });
  console.log('Sending message:', message);
  client.publish('sensors/dht11', message);
}

function loop() {

}

board.on('ready', () => {
  console.log('Board ready!');
  setup();
});

由于DHT11温湿度传感器的数据采样速度较慢(一般是2-3秒钟),因此在程序中使用了setInterval函数来定期读取传感器数据,并将数据作为JSON格式的消息发送到MQTT代理。在此例中,设备将传感器数据发布到名为“sensors/dht11”的主题。

如何定义引脚

同样,不同的WiFi开发板,如ESP8266和ESP32,可能有不同的引脚编号和名称。如果您使用的是NodeMCU开发板,可以使用以下代码定义引脚:

const D0 = 16;
const D1 = 5;
const D2 = 4;
const D3 = 0;
const D4 = 2;
const D5 = 14;
const D6 = 12;
const D7 = 13;
const D8 = 15;
const RX = 3;
const TX = 1;

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:使用JavaScript和MQTT开发物联网应用示例解析 - Python技术站

(0)
上一篇 2023年5月22日
下一篇 2023年5月22日

相关文章

  • Redis设置生存时间或过期时间的相关命令

    一.前言    本文简单地记录一下Redis中设置key的生存时间或过期时间的方式。 二.设置key的生存时间   通过EXPIRE命令和PEXPIRE命令,可以给key设置生存时间(Time To Live,TTL),EXPIRE设置的时间单位为秒,PEXPIRE设置的时间单位为毫秒,在经过指定的生存时间后,Redis服务器会自动删除生存时间为0的key。…

    Redis 2023年4月12日
    00
  • windows下mysql5.7安装及配置

    装完msi后,复制my-default.ini文件,黏贴为my.ini文件,内容修改如下: # For advice on how to change settings please see# http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html# *** DO N…

    MySQL 2023年4月13日
    00
  • NoSQL数据库的分布式算法详解

    NoSQL数据库的分布式算法详解 什么是NoSQL数据库 NoSQL指的是非关系型数据库,其的特点是非结构化数据、高可扩展性、灵活性、高性能和可靠性。和传统关系型数据库相比NoSQL数据库在大数据处理和分布式系统上具有更好的表现。 NoSQL数据库的分布式算法 为了支持大规模数据处理,NoSQL数据库通常使用分布式系统。而分布式系统涉及到数据的分散存储和计算…

    database 2023年5月21日
    00
  • 数据库测试 实用技巧及测试方法

    数据库测试实用技巧及测试方法 前言 在软件测试中,数据库测试是非常重要的一环。因为数据库是存储数据的核心,如果数据库出现问题,将会对整个应用造成严重影响。因此,本文将分享数据库测试的实用技巧及测试方法,帮助测试人员更好地进行数据库测试。 数据库测试的目的 数据库测试的主要目的是验证数据库的正确性、有效性、可靠性、安全性和性能等方面的要求是否满足。数据库测试需…

    database 2023年5月21日
    00
  • Navicat Premium 15 工具自动被杀毒防护软件删除的两种解决方法

    下面详细讲解“Navicat Premium 15 工具自动被杀毒防护软件删除的两种解决方法”。 问题描述 最近有用户反映,使用 Navicat Premium 15 工具时被杀毒防护软件自动删除了该工具。这可能影响用户的正常使用,因此我们需要解决该问题。 解决方法 方法一:添加信任项 一些杀毒防护软件会将一些软件当作病毒或威胁,因此将其删除。这时我们可以添…

    database 2023年5月18日
    00
  • 优化 SQL Server 索引的小技巧

    优化SQL Server索引是优化数据库性能的关键之一。以下是一些小技巧可以帮助您更好地优化SQL Server索引。 1. 执行索引维护 对于经常更新的表,索引可能会变得损坏或不完整。执行索引维护可回收空间,优化索引,并且可以提高查询性能。SQL Server提供了内置的过程,例如“sp_msforeachtable”,可以为数据库中的所有表执行索引维护。…

    database 2023年5月19日
    00
  • SQL Server字符串切割函数

    下面是关于SQL Server字符串切割函数的完整攻略。 什么是SQL Server字符串切割函数 SQL Server字符串切割函数指的是用于将一个字符串拆分成多个子字符串的函数。 SQL Server字符串切割函数的类型 SQL Server字符串切割函数有以下两种类型: 内置字符串切割函数:包括SUBSTRING函数和CHARINDEX函数。SUBST…

    database 2023年5月21日
    00
  • 详解Oracle隐式游标和显式游标

    详解Oracle隐式游标和显式游标 Oracle数据库中的游标是一种可重复访问SQL查询结果集的数据类型。Oracle数据库中有两种类型的游标:隐式游标和显式游标。 隐式游标 隐式游标是自动创建的游标,数据库会在执行每个SQL语句时隐式地为其创建游标。隐式游标简单易用,而且可以节省编写PL/SQL程序时的大量工作。 下面是一个隐式游标的示例。该示例中,SEL…

    database 2023年5月21日
    00
合作推广
合作推广
分享本页
返回顶部