返回

MQTT助力温湿度传感器数据Onenet上传

后端

在物联网应用中,实时监测与存储环境温湿度数据是一项重要的需求。MQTT是一种轻量级、低功耗的物联网消息传递协议,非常适合在资源受限的设备上使用。Onenet是阿里云推出的一个物联网平台,提供了一套完整的物联网解决方案。

本文将介绍如何使用MQTT协议将DHT11温湿度传感器获取的数据上传到Onenet物联网平台。该项目使用Arduino Uno作为主控器,DHT11作为温湿度传感器,ESP8266作为WiFi模块,MQTT作为消息传递协议,Onenet作为物联网平台。

项目材料

  • Arduino Uno
  • DHT11温湿度传感器
  • ESP8266 WiFi模块
  • 面包板
  • 跳线
  • USB数据线

项目步骤

  1. 连接硬件

将DHT11温湿度传感器、ESP8266 WiFi模块、面包板和跳线连接起来,具体连接方式如下图所示:

[图片1: DHT11温湿度传感器、ESP8266 WiFi模块和Arduino Uno的连接图]

  1. 编写代码

使用Arduino IDE编写代码,代码如下:

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

// DHT11温湿度传感器引脚定义
#define DHTPIN 7

// ESP8266 WiFi模块引脚定义
#define RST_PIN 5
#define CH_PD_PIN 4
#define GPIO0_PIN 16

// MQTT服务器地址
#define MQTT_SERVER "mqtt.beebotte.com"

// MQTT端口号
#define MQTT_PORT 1883

// MQTT客户端ID
#define MQTT_CLIENT_ID "YOUR_CLIENT_ID"

// MQTT用户名
#define MQTT_USERNAME "YOUR_USERNAME"

// MQTT密码
#define MQTT_PASSWORD "YOUR_PASSWORD"

// MQTT主题
#define MQTT_TOPIC "YOUR_TOPIC"

// DHT11温湿度传感器对象
DHT dht(DHTPIN, DHT11);

// ESP8266 WiFi模块对象
ESP8266WiFi esp8266(RST_PIN, CH_PD_PIN, GPIO0_PIN);

// MQTT客户端对象
PubSubClient client(esp8266);

void setup() {
  // 初始化串口
  Serial.begin(9600);

  // 连接WiFi
  esp8266.begin("YOUR_WIFI_SSID", "YOUR_WIFI_PASSWORD");

  // 等待WiFi连接成功
  while (esp8266.status() != WL_CONNECTED) {
    delay(100);
  }

  // 打印连接成功的提示信息
  Serial.println("WiFi连接成功");

  // 连接MQTT服务器
  client.setServer(MQTT_SERVER, MQTT_PORT);

  // 设置MQTT客户端ID、用户名和密码
  client.setClientId(MQTT_CLIENT_ID);
  client.setUsername(MQTT_USERNAME);
  client.setPassword(MQTT_PASSWORD);

  // 连接MQTT服务器
  while (!client.connect()) {
    delay(100);
  }

  // 打印连接成功的提示信息
  Serial.println("MQTT连接成功");

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

void loop() {
  // 读取温湿度数据
  float temperature = dht.readTemperature();
  float humidity = dht.readHumidity();

  // 打印温湿度数据
  Serial.print("温度:");
  Serial.print(temperature);
  Serial.print("°C ");
  Serial.print("湿度:");
  Serial.print(humidity);
  Serial.println("%");

  // 发布温湿度数据到MQTT主题
  client.publish(MQTT_TOPIC, String(temperature).c_str());
  client.publish(MQTT_TOPIC, String(humidity).c_str());

  // 等待1秒
  delay(1000);
}
  1. 上传代码

将代码上传到Arduino Uno中。

  1. 配置Onenet物联网平台

登录Onenet物联网平台,创建一个产品,并在产品中创建一个设备。

  1. 配置MQTT服务器地址和端口号

在Onenet物联网平台的设备详情页面,找到MQTT服务器地址和端口号,并将它们填入代码中。

  1. 配置MQTT客户端ID、用户名和密码

在Onenet物联网平台的设备详情页面,找到MQTT客户端ID、用户名和密码,并将它们填入代码中。

  1. 配置MQTT主题

在Onenet物联网平台的设备详情页面,找到MQTT主题,并将它填入代码中。

  1. 运行程序

运行程序,程序会连接WiFi,连接MQTT服务器,并订阅MQTT主题。当DHT11温湿度传感器获取到数据后,程序会将数据发布到MQTT主题。Onenet物联网平台会接收MQTT消息,并将数据存储在数据库中。

结语

至此,我们已经成功地将温湿度传感器获取的数据上传到Onenet物联网平台。我们可以通过Onenet物联网平台的Web界面或API来查看数据。