返回
将传感数据畅游云端——基于NodeMCU的MQTT之旅
见解分享
2024-02-09 10:12:36
物联网中的MQTT:一个轻量级的沟通桥梁
在当今的互联世界中,物联网(IoT)技术正在蓬勃发展。通过传感器和网络将物理设备连接起来,实现信息的无缝交换,从而实现对设备的远程监控和管理。在这个过程中,MQTT协议扮演着不可或缺的角色,它以其轻量级、低功耗、易于实现的特点,成为物联网领域最受欢迎的通信协议之一。
NodeMCU:一扇通往物联网世界的窗口
NodeMCU是一块基于ESP8266芯片的开发板,因其价格低廉、易于使用、功能强大而受到广大用户的喜爱。它集成了Wi-Fi模块和丰富的I/O接口,可以轻松地与各种传感器和设备连接。借助NodeMCU,您可以轻松构建各种物联网项目,让您的创意在物联网世界中闪耀。
云端MQTT服务:数据的中转站
在物联网系统中,云端MQTT服务充当着数据的中转站,负责接收、存储和处理来自设备的数据。您可以选择使用免费的MQTT云服务,也可以搭建自己的私有MQTT服务器。在本文中,我们将使用免费的MQTT云服务来演示如何将传感器数据发送到云端。
将NodeMCU与DHT11传感器连接
在开始之前,您需要准备以下硬件:
- NodeMCU开发板
- DHT11温湿度传感器
- 连接线
- 面包板
按照以下步骤将NodeMCU与DHT11传感器连接:
- 将DHT11传感器的数据引脚连接到NodeMCU的D1引脚。
- 将DHT11传感器的电源引脚连接到NodeMCU的3.3V引脚。
- 将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());
});
运行代码后,您就可以在应用端看到传感器数据了。