使用 NodeMCU 和 DHT11 传感器通过 MQTT 上传温湿度数据
简介
本示例将演示如何通过 NodeMCU, DHT11 收集温湿度并通过 MQTT 协议将数据上报到 EMQX MQTT broker。
DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器,
Node MCU 底层集成了 ESP8266, 能提供完整且自成体系的Wi-Fi网络解决方案,
MQTT 是基于 发布(Publish)/订阅(Subscribe) 模式来进行通信及数据交换的,
EMQX 是基于 Erlang 的 MQTT broker 在开源社区中是最成熟的 MQTT 消息中间件, 它易于配置和使用,可很好地扩展。
配置
硬件配置
- NodeMCU board x 1
- DHT11 temperature/humidity sensor x 1
- Breadboard x 1
- jumper wires
- Connection Graph:
Arduino 配置
- 下载并安装 CH340G USB 驱动
- 安装 Esp8266模块
- 安装 PubSubClient 库(by Nick O’Leary)
Sketch -> Include Library -> Manage Libraries… -> Type PubSub in Search field -> Install
MQTT broker 配置
- 下载 emqx broker 3.2.5
- 运行 emqx broker
unzip emqx-macosx-v3.2.5.zip
cd emqx
./bin/emqx start
代码编写
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include "DHT.h"
#define DHTPIN D4 // what pin we're connected to
#define wifi_ssid "xxxxx"
#define wifi_password "xxxxx"
#define mqtt_server "broker.emqx.io" // emqx broker url
#define humidity_topic "humidity"
#define temperature_topic "temperature"
#define DHTTYPE DHT11 // DHT 11
WiFiClient espClient;
PubSubClient client(espClient);
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin