一个ESP8266-01S温度湿度采集程序,将数据上传到MQTT服务器,并带有中文注释

使用时在程序中替换自己的WIFI和mqtt信息

```c++
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <DHT.h>

// 定义WIFI信息
#define WIFI_SSID "你的WiFi名称"
#define WIFI_PASSWORD "你的WiFi密码"

// 定义MQTT服务器信息
#define MQTT_BROKER "Your_MQTT_Broker_IP"
#define MQTT_PORT 1883
#define MQTT_USERNAME "你的MQTT用户名"
#define MQTT_PASSWORD "你的MQTT密码"
#define MQTT_CLIENTID "ESP8266_Client"

// 定义DHT传感器信息
#define DHT_PIN 2                // 传感器连接到GPIO2 
#define DHT_TYPE DHT11           // 使用DHT11

// 初始化对象
WiFiClient espClient;
PubSubClient client(espClient);
DHT dht(DHT_PIN, DHT_TYPE);

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

  // 连接WIFI网络
  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Connecting to WiFi...");
  }

  // 连接到MQTT服务器
  client.setServer(MQTT_BROKER, MQTT_PORT);
  while (!client.connected()) {
    if (client.connect(MQTT_CLIENTID, MQTT_USERNAME, MQTT_PASSWORD)) {
      Serial.println("Connected to MQTT Broker!");
    } else {
      Serial.println("Failed to connect to MQTT Broker");
      delay(5000);
    }
  }
}

void loop() {
  
  float hum = dht.readHumidity();     // 读取湿度值
  float temp = dht.readTemperature(); // 读取温度值

  if (isnan(hum) || isnan(temp)) {   // 如果传感器没有获取到正确的值
    Serial.println("Failed to read from DHT sensor!");
    return;
  }

  String msg = "温度: " + String(temp) + " ℃" + ", 湿度: " + String(hum) +"%";   // 创建要发布的消息

  Serial.println(msg);              // 打印消息到串口
  client.publish("temphumid", msg.c_str());   // 将消息发布到MQTT Broker上的temphumid主题中
  delay(5000);                      // 延时5秒后再次获取数据并发布到MQTT服务器上。
}
```

在该程序中,我们首先定义了WIFI信息和MQTT服务器信息。然后,我们初始化了一个DHT对象,指定了DHT传感器连接的引脚和使用的传感器类型。在setup()函数中,我们连接到WIFI网络并订阅MQTT服务器。

在loop()函数中,我们读取DHT传感器的湿度和温度值,并使用String构建要发布的MQTT消息。接下来,我们使用client.publish()函数将消息发布到“temphumid”主题中,并设置延迟五秒钟以便下一次读取数据。

需要注意:如果您运行此程序时出现错误,请确保您已正确配置WIFI信息、MQTT服务器信息和DHT传感器信息。还要确保您已正确安装了ESP8266 core和DHT库。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
ESP8266-01S模块是一种Wi-Fi模块,可用于连接Wi-Fi网络并与服务器进行通信。它可以作为独立的Wi-Fi模块使用,也可以与其他微控制器(如STM32)配合使用,实现无线通信。 以下是将STM32与ESP8266-01S模块配合使用,将数据发送MQTT服务器的步骤: 1. 首先需要连接ESP8266-01S模块和STM32。ESP8266-01S模块有四个引脚:VCC(接5V电源)、GND(接地)、TX(串口发送)、RX(串口接收)。将它们与STM32相应的引脚连接即可。 2. 在STM32上配置串口,使其能够与ESP8266-01S模块进行通信。一般来说,ESP8266-01S模块的波特率为115200,数据位为8位,无校验位,停止位为1位。 3. 配置ESP8266-01S模块,使其能够连接Wi-Fi网络。可以使用AT指令来配置ESP8266-01S模块。例如,可以使用以下指令连接到Wi-Fi网络: ``` AT+CWJAP="SSID","PASSWORD" ``` 其中,SSID是Wi-Fi网络的名称,PASSWORD是Wi-Fi网络的密码。 4. 连接MQTT服务器。可以使用MQTT客户端库来连接MQTT服务器。例如,可以使用PubSubClient库连接MQTT服务器。在连接前需要设置MQTT服务器IP地址和端口号,以及MQTT客户端的ID、用户名和密码。例如,可以使用以下代码连接MQTT服务器: ``` #include <PubSubClient.h> WiFiClient wifiClient; PubSubClient mqttClient(wifiClient); void setup() { // 设置Wi-Fi网络 WiFi.begin("SSID", "PASSWORD"); // 等待Wi-Fi网络连接 while (WiFi.status() != WL_CONNECTED) { delay(1000); } // 连接MQTT服务器 mqttClient.setServer("MQTT_SERVER_IP", MQTT_SERVER_PORT); mqttClient.connect("CLIENT_ID", "USERNAME", "PASSWORD"); } void loop() { // 发送数据MQTT服务器 mqttClient.publish("TOPIC", "MESSAGE"); } ``` 其中,MQTT_SERVER_IPMQTT_SERVER_PORT分别是MQTT服务器IP地址和端口号,CLIENT_ID是MQTT客户端的ID,USERNAME和PASSWORD是MQTT服务器的用户名和密码,TOPIC是MQTT消息的主题,MESSAGE是要发送的消息。 5. 在loop()函数中,使用mqttClient.publish()函数将数据发送MQTT服务器。例如,可以将STM32的ADC采样值发送MQTT服务器: ``` void loop() { // 读取ADC采样值 int adcValue = analogRead(A0); // 将ADC采样值转换为字符串 char message[16]; sprintf(message, "%d", adcValue); // 发送数据MQTT服务器 mqttClient.publish("adc", message); // 等待1秒钟 delay(1000); } ``` 以上就是将STM32与ESP8266-01S模块配合使用,将数据发送MQTT服务器的步骤。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值