ESP8266-Arduino网络编程实例-DHT11传感器数据上传到ThingSpeak物联网平台

DHT11传感器数据上传到ThingSpeak物联网平台

1、DHT11简单介绍及ThingSpeak平台配置

DHT11数字温湿度传感器是一种复合传感器,包含一个经过校准的温湿度数字信号输出。 应用了专用的数字模块采集技术和温湿度传感技术,确保产品具有高可靠性和优异的长期稳定性。 该传感器包括一个电阻感湿元件和一个 NTC 温度测量装置,并与一个高性能 8 位微控制器相连。

ThingSpeak 是一种物联网分析平台服务,可以聚合、可视化和分析云中的实时数据流。 可以将数据从设备发送到 ThingSpeak™,创建实时数据的即时可视化,并使用 Twitter® 和 Twilio® 等 Web 服务发送警报。 借助 ThingSpeak 中的 MATLAB® 分析,可以编写和执行 MATLAB 代码来执行预处理、可视化和分析。 ThingSpeak 使工程师和科学家能够在不设置服务器或开发 Web 软件的情况下对物联网系统进行原型设计和构建。

您现在需要在 thingspeak 创建一个新帐户 – https://thingspeak.com。 完成后,创建一个新通道并添加两个新字段,一个将保存温度读数,另一个将保存我们 DHT11 的湿度读数。

在这里插入图片描述

在前面的文章中,对DHT11做了详细的介绍,请参考:

2、硬件准备

  • ESP8266 NodeMCU开发板一块
  • DHT11温度湿度传感器模块一个
  • 面板板一个
  • 杜邦线若干
  • 数据线一条

硬件接线图如下:

在这里插入图片描述

3、软件准备

  • Arduino IDE或VSCode + PlatformIO

在前面的文章中,对如何搭建ESP8266开发环境做了详细的介绍,请参考:

ESP8266 NodeMCU的引脚介绍在前面的文章中做了详细的介绍,请参考:

4、代码实现

1)导入头文件

1
2
3
#include <DHT.h>
#include <ESP8266WiFi.h>

本次使用DHT11驱动库为:

2)定义WiFi及ThingSpeak配置参数

1
2
3
4
5
String apiKey = "你的API密钥";
const char\* ssid = "\*\*\*\*\*";
const char\* ssd_pwd= "\*\*\*\*";
const char\* server = "api.thingspeak.com";

3)定义DHT11传感器对象及Web客户端对象

1
2
3
4
5
6
#define DHTPIN D7
#define DHTTYPE DHT11

DHT dht(DHTPIN, DHTTYPE);
WiFiClient client;

4)在setup函数中,初始化各项配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
void setup() 
{
// 初始化串口
Serial.begin(115200);
delay(10);
// 启动传感器
dht.begin();
// 启动WiFi连接
WiFi.begin(ssid, ssd_pwd);

Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
// 等待WiFi连接完成
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");

}

5)在loop函数中,读取DHT11传感器温度和湿度数据并上传到ThingSpeak平台

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
void loop() 
{
// 读取传感器湿度数据
float h = dht.readHumidity();
// 读取传感器温度数据
float t = dht.readTemperature();
if (isnan(h) || isnan(t))
{
Serial.println("Failed to read from DHT sensor!");
return;
}

// 连接ThingSpeak平台
if (client.connect(server,80)) {
// 构造请求参数
String postStr = apiKey;
postStr +="&field1=";
postStr += String(t);
postStr +="&field2=";
postStr += String(h);
postStr += "\r\n\r\n";

// 构造POST请求头
client.print("POST /update HTTP/1.1\n");
client.print("Host: api.thingspeak.com\n");
client.print("Connection: close\n");
client.print("X-THINGSPEAKAPIKEY: "+apiKey+"\n");
client.print("Content-Type: application/x-www-form-urlencoded\n");
client.print("Content-Length: ");
// 发送传感器数据
client.print(postStr.length());
client.print("\n\n");
client.print(postStr);

Serial.print("Temperature: ");
Serial.print(t);
Serial.print(" degrees Celsius Humidity: ");
Serial.print(h);
Serial.println("Sending data to Thingspeak");
}
// 关闭连接
client.stop();

Serial.println("Waiting 15 secs");
// thingspeak 在更新之间需要至少 15 秒的延迟
delay(15000);
}

运行结果:

在这里插入图片描述

ThingSpeak平台接收到数据结果:

在这里插入图片描述

文章来源: https://iotsmart.blog.csdn.net/article/details/127240428