Arduino IDE实现ESP8266上传DHT11测量数据至MQTT服务器

一、硬件准备
ESP8266一块
温度传感器DHT11一块

二、软件准备
Arduino IDE
MQTTBox
下载地址在这里
emqX服务器
emqx服务器搭建方法见这里

三、编辑代码

#include 
#include 
#include 
int pinDHT11 = 2;         //esp8266用gpio2脚
const char* ssid="XXX";  //家里wifi账号
const char* password="xxxxxxxx"; //wifi密码
const char* mqtt_server = "xxx.xxx.xxx.xxx";//mqtt服务地址
const char* clientID ="xxxx-id"; // 设备id

WiFiClient espClient;
PubSubClient client(espClient);
SimpleDHT11 dht11(pinDHT11);

void setup() {
  Serial.begin(115200);
  setup_wifi();
  client.setServer(mqtt_server,1883);
  client.setCallback(callback);
}

void setup_wifi(){
  delay(10);
  WiFi.begin(ssid,password); //连接WiFi
  while(WiFi.status()!=WL_CONNECTED){ //连接不上延迟0.5秒再连
      delay(500);
    }  
    Serial.println("WiFi connected");
}
//设置反馈
void callback(char* topic,byte* payload, unsigned int length){
  Serial.print("Message arrived ["); Serial.print(topic);   Serial.print("] ");
 
  for (int i = 0; i < length; i++) {
    Serial.print((char)payload[i]);
   }  
  }

  
void reconnect() {
  // 循环重新连接,直到连上
  while (!client.connected()) {
    
    if (client.connect(clientID)) {               
      Serial.print("MQTT连接成功");                 // 连接mqtt成功
      client.subscribe("dhtll");               // 一旦连接,订阅主题
    } else {
      delay(5000);                                
    }
  }
}
  

void loop() {
if(!client.connected()){
  reconnect();
  }
  client.loop();
  // start working...
  Serial.println("=================================");
  Serial.println("Sample DHT11...");
  
  // read without samples.
  byte temperature = 0;
  byte humidity = 0;
  int err = SimpleDHTErrSuccess;
  if ((err = dht11.read(&temperature, &humidity, NULL)) != SimpleDHTErrSuccess) {
    Serial.print("Read DHT11 failed, err="); Serial.println(err);delay(1000);
    return;
  }
   String tmp = "temp:";            //字符串拼接
   tmp += String(temperature);
   tmp += String("humi:");
   tmp += String(humidity);
  
  Serial.print("Sample OK: ");
  Serial.print((int)temperature); Serial.print(" *C, "); 
  Serial.print((int)humidity); Serial.println(" H");

  client.publish("dht11",tmp.c_str()); //发送主题和内容
  
  delay(3000);
}

四、烧板查看结果
这时候代开串口可以看到:
Arduino IDE实现ESP8266上传DHT11测量数据至MQTT服务器_第1张图片
能看到这样的结果表示运行已经正常,
然后打开MQTTBox看看mqtt服务器的接收情况:
先来设置MQTTBox:
Arduino IDE实现ESP8266上传DHT11测量数据至MQTT服务器_第2张图片
设置完后点击最下面的确定:
Arduino IDE实现ESP8266上传DHT11测量数据至MQTT服务器_第3张图片
这样我们的工作就完成了。

你可能感兴趣的:(Arduino IDE实现ESP8266上传DHT11测量数据至MQTT服务器)