ESP8266连接MySQL数据库上传传感器数据

2025-06发布3次浏览

ESP8266是一款功能强大的Wi-Fi模块,广泛应用于物联网项目中。通过ESP8266,我们可以将传感器数据上传到云端或本地数据库进行存储和分析。本文将详细介绍如何使用ESP8266连接MySQL数据库,并实现传感器数据的上传。

1. 环境准备

1.1 硬件需求

  • ESP8266开发板(如NodeMCU)
  • 温度传感器或其他传感器(例如DHT11)
  • 面包板和跳线

1.2 软件需求

  • Arduino IDE(支持ESP8266开发)
  • MySQL服务器(可以是本地安装的MySQL或远程云服务器)
  • PHP脚本(用于处理来自ESP8266的数据并写入MySQL)

1.3 工具安装

在Arduino IDE中配置ESP8266开发环境:

  1. 打开Arduino IDE,进入文件 -> 偏好设置
  2. 在“附加开发板管理器网址”中添加:http://arduino.esp8266.com/stable/package_esp8266com_index.json
  3. 进入工具 -> 开发板 -> 开发板管理器,搜索“esp8266”,安装对应的开发包。

确保MySQL服务器已正确安装并运行。如果使用远程MySQL服务器,请确保防火墙规则允许外部访问。

2. 数据库设计

首先,在MySQL中创建一个数据库和表来存储传感器数据。

CREATE DATABASE IF NOT EXISTS sensor_data;
USE sensor_data;

CREATE TABLE IF NOT EXISTS temperature (
    id INT AUTO_INCREMENT PRIMARY KEY,
    temp FLOAT NOT NULL,
    humidity FLOAT NOT NULL,
    timestamp DATETIME DEFAULT CURRENT_TIMESTAMP
);

上述SQL语句创建了一个名为sensor_data的数据库,并在其中创建了一个名为temperature的表,用于存储温度、湿度和时间戳。

3. 后端PHP脚本

为了将数据从ESP8266传输到MySQL数据库,我们需要一个中间层——PHP脚本来接收HTTP请求并将数据写入数据库。

以下是一个简单的PHP脚本示例:

<?php
$servername = "localhost";
$username = "your_username";
$password = "your_password";
$dbname = "sensor_data";

// 创建连接
$conn = new mysqli($servername, $username, $password, $dbname);

// 检查连接
if ($conn->connect_error) {
    die("连接失败: " . $conn->connect_error);
}

$temp = $_GET['temp'];
$humidity = $_GET['humidity'];

$sql = "INSERT INTO temperature (temp, humidity) VALUES ('$temp', '$humidity')";

if ($conn->query($sql) === TRUE) {
    echo "数据插入成功";
} else {
    echo "Error: " . $sql . "<br>" . $conn->error;
}

$conn->close();
?>

将此PHP脚本保存为insert.php,并上传到你的Web服务器上。

4. ESP8266代码实现

接下来,我们将编写ESP8266的代码,用于读取传感器数据并通过HTTP请求发送到PHP脚本。

4.1 安装库

在Arduino IDE中安装必要的库:

  • ESP8266WiFi库(已包含在ESP8266开发环境中)
  • DHT库(用于读取DHT11传感器数据)

可以通过工具 -> 库管理搜索并安装这些库。

4.2 示例代码

#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <DHT.h>

#define DHTPIN 2     // DHT11连接到GPIO2
#define DHTTYPE DHT11   // 使用DHT11型号

const char* ssid = "Your_SSID";      // WiFi名称
const char* password = "Your_PASSWORD";  // WiFi密码
const char* server = "your_server_ip_or_domain";  // Web服务器地址

DHT dht(DHTPIN, DHTTYPE);
WiFiClient client;

void setup() {
  Serial.begin(115200);
  dht.begin();

  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");
}

void loop() {
  float h = dht.readHumidity();
  float t = dht.readTemperature();

  if (isnan(h) || isnan(t)) {
    Serial.println("Failed to read from DHT sensor!");
    return;
  }

  if (client.connect(server, 80)) {
    String url = "/insert.php?temp=" + String(t) + "&humidity=" + String(h);
    client.println("GET " + url + " HTTP/1.1");
    client.println("Host: " + String(server));
    client.println("Connection: close");
    client.println();

    while (client.connected()) {
      if (client.available()) {
        String line = client.readStringUntil('\r');
        Serial.print(line);
      }
    }
    client.stop();
  } else {
    Serial.println("connection failed");
  }
  delay(10000); // 每10秒发送一次数据
}

4.3 代码说明

  • DHT初始化:通过DHT库读取温度和湿度数据。
  • WiFi连接:ESP8266连接到指定的WiFi网络。
  • HTTP请求:通过GET请求将传感器数据发送到PHP脚本。

5. 测试与验证

完成所有步骤后,上传代码到ESP8266,并确保其正常工作。打开串口监视器查看输出信息。检查MySQL数据库中的temperature表,确认数据是否正确插入。

6. 总结

本文介绍了如何使用ESP8266连接MySQL数据库并上传传感器数据。通过ESP8266、PHP脚本和MySQL数据库的结合,我们可以轻松实现物联网数据的采集和存储。