返回

将传感数据畅游云端——基于NodeMCU的MQTT之旅

见解分享

物联网中的MQTT:一个轻量级的沟通桥梁

在当今的互联世界中,物联网(IoT)技术正在蓬勃发展。通过传感器和网络将物理设备连接起来,实现信息的无缝交换,从而实现对设备的远程监控和管理。在这个过程中,MQTT协议扮演着不可或缺的角色,它以其轻量级、低功耗、易于实现的特点,成为物联网领域最受欢迎的通信协议之一。

NodeMCU:一扇通往物联网世界的窗口

NodeMCU是一块基于ESP8266芯片的开发板,因其价格低廉、易于使用、功能强大而受到广大用户的喜爱。它集成了Wi-Fi模块和丰富的I/O接口,可以轻松地与各种传感器和设备连接。借助NodeMCU,您可以轻松构建各种物联网项目,让您的创意在物联网世界中闪耀。

云端MQTT服务:数据的中转站

在物联网系统中,云端MQTT服务充当着数据的中转站,负责接收、存储和处理来自设备的数据。您可以选择使用免费的MQTT云服务,也可以搭建自己的私有MQTT服务器。在本文中,我们将使用免费的MQTT云服务来演示如何将传感器数据发送到云端。

将NodeMCU与DHT11传感器连接

在开始之前,您需要准备以下硬件:

  • NodeMCU开发板
  • DHT11温湿度传感器
  • 连接线
  • 面包板

按照以下步骤将NodeMCU与DHT11传感器连接:

  1. 将DHT11传感器的数据引脚连接到NodeMCU的D1引脚。
  2. 将DHT11传感器的电源引脚连接到NodeMCU的3.3V引脚。
  3. 将DHT11传感器的接地引脚连接到NodeMCU的GND引脚。

使用MQTT协议发送传感器数据

连接好硬件后,就可以开始编写代码了。您可以使用Arduino IDE来编写NodeMCU的代码。在Arduino IDE中,打开一个新的项目,并将以下代码复制进去:

#include <ESP8266WiFi.h>
#include <PubSubClient.h>

// MQTT服务器地址
const char* mqtt_server = "mqtt.eclipse.org";

// MQTT端口
const int mqtt_port = 1883;

// MQTT用户名
const char* mqtt_user = "username";

// MQTT密码
const char* mqtt_pass = "password";

// MQTT主题
const char* mqtt_topic = "my/topic";

// WiFi名称
const char* ssid = "your_ssid";

// WiFi密码
const char* password = "your_password";

// 创建MQTT客户端
WiFiClient espClient;
PubSubClient client(espClient);

void setup() {
  // 连接WiFi
  Serial.begin(9600);
  WiFi.begin(ssid, password);

  // 等待WiFi连接
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.println("Waiting for WiFi connection...");
  }

  // 打印连接信息
  Serial.println("Connected to WiFi");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());

  // 连接MQTT服务器
  client.setServer(mqtt_server, mqtt_port);
  client.setCallback(callback);

  // 等待MQTT连接
  while (!client.connected()) {
    if (client.connect(clientID, mqtt_user, mqtt_pass)) {
      Serial.println("Connected to MQTT server");
    } else {
      Serial.print("Failed to connect to MQTT server, rc=");
      Serial.print(client.state());
      Serial.println("Trying again in 5 seconds...");
      delay(5000);
    }
  }

  // 订阅主题
  client.subscribe(mqtt_topic);
}

void loop() {
  // 处理MQTT消息
  client.loop();
}

void callback(char* topic, byte* payload, unsigned int length) {
  // 打印收到的消息
  Serial.print("Received message: ");
  Serial.println((char*)payload);
}

将代码上传到NodeMCU后,打开串口监视器,您可以看到NodeMCU已经连接到WiFi和MQTT服务器。

应用端订阅传感器数据

接下来,您需要在应用端订阅传感器数据。您可以使用MQTT客户端库来订阅传感器数据,这里我们推荐使用MQTT.js。

在应用端安装MQTT.js后,您可以使用以下代码订阅传感器数据:

const mqtt = require('mqtt');

// MQTT服务器地址
const mqtt_server = "mqtt.eclipse.org";

// MQTT端口
const mqtt_port = 1883;

// MQTT主题
const mqtt_topic = "my/topic";

// 创建MQTT客户端
const client = mqtt.connect({
  host: mqtt_server,
  port: mqtt_port
});

// 连接MQTT服务器
client.on('connect', () => {
  console.log('Connected to MQTT server');
});

// 订阅主题
client.subscribe(mqtt_topic, { qos: 1 });

// 处理收到的消息
client.on('message', (topic, message) => {
  console.log('Received message: ' + message.toString());
});

运行代码后,您就可以在应用端看到传感器数据了。