物联网应用案例:使用ESP8266和DHT11传感器上传数据到阿里云,并在Web应用中进行实时显示,全部代码
时间: 2024-10-21 10:18:06 浏览: 68
物联网(IoT)应用中,ESP8266是一个常见的微控制器,常用于Wi-Fi连接功能,而DHT11是一种便宜的温湿度传感器。结合这两个设备,我们可以创建一个简单的系统来实时监测环境并上传数据到云端,如阿里云IoT平台。
首先,我们需要准备的硬件包括ESP8266、DHT11传感器、电源以及一块能连接它们的开发板(如Arduino或树莓派)。软件上需要安装相关的库,如Arduino IDE(对于ESP8266)和阿里云物联网SDK。
以下是一个基础的示例代码,注意这只是一个简化的版本,实际项目会更复杂,涉及错误处理、异常检测和配置:
```cpp
#include <ESP8266WiFi.h>
#include <DHT11.h>
#include <ESP8266HTTPClient.h>
// WiFi和阿里云IoT相关配置
const char* ssid = "your_SSID";
const char* password = "your_PASSWORD";
const char* host = "your_IoT_Host"; // 阿里云设备模板URL
const int sensorPin = D4; // DHT11的数据引脚
const char* apiKey = "your_API_KEY"; // 从阿里云获取的设备API密钥
const char* deviceName = "your_Device_Name";
// 创建DHT11实例
DHT11 dht;
void setup() {
Serial.begin(115200);
pinMode(sensorPin, INPUT);
if (!WiFi.begin(ssid, password)) {
Serial.println("Connection failed");
while (1);
}
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.print(".");
}
Serial.println("");
Serial.println("Connected to WiFi");
HTTPClient client;
}
void loop() {
float humidity, temperature;
if (!dht.read(sensorPin, &humidity, &temperature)) {
Serial.println("Failed to read from DHT11");
return;
}
String data = "{\"temp\": " + String(temperature) + ", \"humidity\": " + String(humidity) + "}";
// 发送数据到阿里云IoT平台
sendDataToCloud(data.c_str(), apiKey, host, deviceName);
delay(10 * 1000); // 每隔10秒读取一次数据
}
void sendDataToCloud(char* data, const char* apiKey, const char* host, const char* deviceName) {
HTTPClient request;
request.setHost(host);
request.setPath("/v3/devices/" + deviceName + "/data");
request.addHeader("Authorization", "Bearer " + apiKey);
request.addHeader("Content-Type", "application/json");
String response;
request.POST(request.getPath(), String(data), response);
Serial.println(response);
}
```
记得替换上述代码中的`your_XXX`为你自己的详细信息。运行这个程序,数据将定期上传到指定的阿里云设备模板,并通过API显示在Web应用中。
阅读全文