Arduino - ESP32使用温湿度传感器发布到MQTT

#include <WiFi.h>
#include <PubSubClient.h>
#include <ArduinoJson.h>
#include <DHT.h>

const char* ssid = "wifi名称";
const char* password = "wifi密码";
const char* mqtt_server = "127.0.0.1";
const int mqtt_port = 1883;
const char* mqtt_username = "martin";
const char* mqtt_password = "martin123";
const char* mqtt_topic = "/ceshi";

#define DHTPIN 4 //设置获取数据的引脚
#define DHTTYPE DHT11 //对应DHT的版本,DHT22 DHT21

DHT dht(DHTPIN, DHTTYPE);//创建一个DHT对象
WiFiClient espClient;
PubSubClient client(espClient);
 
void setup() {
  Serial.begin(115200);
  setup_wifi();
  client.setServer(mqtt_server, mqtt_port);
  client.setCallback(callback);
  dht.begin();
}

void setup_wifi() {
  // 连接WiFi网络
  Serial.println("开始连接wifi!");
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
  }
  Serial.println("开始连接wifi成功!");
}

void callback(char* topic, byte* payload, unsigned int length) {
  // 处理订阅到的消息
}

void reconnect() {
  // 重新连接MQTT服务器
  while (!client.connected()) {
    String client_id = "esp32-client-";
    client_id += String(WiFi.macAddress());
    Serial.printf("The client %s connects to the public MQTT broker\n", client_id.c_str());
    if (client.connect(client_id.c_str(), mqtt_username, mqtt_password)) {
      Serial.println("Public EMQX MQTT broker connected");
      client.subscribe(mqtt_topic);
    } else {
      Serial.print("failed with state ");
      Serial.print(client.state());
      delay(2000);
    }
  }
}
 
void loop() {
    if (!client.connected()) {
    reconnect();
  }
  client.loop();

  float h = dht.readHumidity();
  float t = dht.readTemperature();
  if (isnan(h) || isnan(t)) {
    Serial.println("Failed to read from DHT sensor!");
    return;
  }
  // 发布温湿度数据到MQTT主题
  // 创建JSON对象
  StaticJsonDocument<300> jsonDoc;
  jsonDoc["temperature"] = t;
  jsonDoc["humidity"] = h;
  char jsonStr[300];
  serializeJson(jsonDoc, jsonStr);

  client.publish(mqtt_topic, jsonStr);
  delay(2000);  // 发布间隔
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值