如何用ESP32 Mini和PHP从零搭建MySQL数据采集系统?

引言

在物联网(IoT)项目中,数据采集是核心环节。ESP32 Mini作为一款体积小巧、性能强大的微控制器,凭借其内置Wi-Fi和蓝牙功能,成为DIY项目的热门选择。然而,很多初学者在将ESP32 Mini采集的数据存储到数据库时常常遇到困难。本文将回答一个具体问题:如何用ESP32 Mini和PHP从零搭建MySQL数据采集系统?我们将从硬件连接、固件编写、PHP后端开发到数据库配置,提供完整的解决方案。

硬件准备与连接

首先,你需要以下硬件:

  • ESP32 Mini开发板(如NodeMCU-32S)
  • 传感器(例如DHT11温湿度传感器)
  • 面包板和杜邦线
  • Micro USB数据线
连接传感器:将DHT11的VCC引脚连接到ESP32 Mini的3.3V,GND连接到GND,DATA引脚连接到GPIO4(可根据需要调整)。

ESP32 Mini固件开发

使用Arduino IDE编写固件。首先安装ESP32开发板支持包,然后编写代码读取传感器数据并通过HTTP POST发送到PHP服务器。关键代码如下:

#include <WiFi.h>
#include <HTTPClient.h>
#include <DHT.h>

#define DHTPIN 4
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);

const char* ssid = "你的WiFi名称";
const char* password = "你的WiFi密码";
const char* serverUrl = "http://你的服务器地址/insert.php";

void setup() {
  Serial.begin(115200);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("连接WiFi...");
  }
  dht.begin();
}

void loop() {
  float temp = dht.readTemperature();
  float hum = dht.readHumidity();
  if (isnan(temp) || isnan(hum)) {
    Serial.println("传感器读取失败");
    return;
  }
  HTTPClient http;
  http.begin(serverUrl);
  http.addHeader("Content-Type", "application/x-www-form-urlencoded");
  String postData = "temperature=" + String(temp) + "&humidity=" + String(hum);
  int httpCode = http.POST(postData);
  if (httpCode > 0) {
    Serial.println("数据发送成功");
  } else {
    Serial.println("数据发送失败");
  }
  http.end();
  delay(60000); // 每分钟发送一次
}

PHP后端与MySQL数据库

在服务器上创建MySQL数据库和表。例如,数据库名为sensor_data,表名为readings,包含字段id(自增主键)、temperaturehumiditytimestamp。SQL语句如下:

CREATE DATABASE sensor_data;
USE sensor_data;
CREATE TABLE readings (
  id INT AUTO_INCREMENT PRIMARY KEY,
  temperature FLOAT NOT NULL,
  humidity FLOAT NOT NULL,
  timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

然后编写PHP文件insert.php接收数据并写入数据库:

<?php
$servername = "localhost";
$username = "数据库用户名";
$password = "数据库密码";
$dbname = "sensor_data";

$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
    die("连接失败: " . $conn->connect_error);
}

$temp = $_POST['temperature'];
$hum = $_POST['humidity'];

$sql = "INSERT INTO readings (temperature, humidity) VALUES ('$temp', '$hum')";
if ($conn->query($sql) === TRUE) {
    echo "数据插入成功";
} else {
    echo "错误: " . $sql . "
" . $conn->error; } $conn->close(); ?>

测试与调试

上传固件到ESP32 Mini,打开串口监视器观察连接状态。确保WiFi连接成功且数据发送无错误。然后通过浏览器访问PHP文件或使用Postman测试POST请求。如果一切正常,MySQL中会持续添加新记录。

常见问题解决

1. ESP32 Mini无法连接WiFi:检查SSID和密码是否正确,确保路由器允许设备连接。 2. 数据发送失败:检查服务器地址是否可达,PHP文件是否有写入权限。 3. 数据库插入失败:检查SQL语句语法,确保字段名匹配。 4. 传感器读数异常:检查接线,尝试更换传感器。

扩展与优化

你可以进一步优化系统:

  • 添加数据验证和清洗,防止SQL注入(建议使用预处理语句)。
  • 使用JSON格式传输数据,提高可扩展性。
  • 添加Web界面实时显示数据(基于PHP和Chart.js)。
  • 集成MQTT协议实现更高效的数据传输。

总结

通过本文,你学会了如何用ESP32 Mini、PHP和MySQL构建一个完整的数据采集系统。整个过程门槛低,适合DIY爱好者实践。希望你能在此基础上发挥创意,打造更多有趣的物联网应用。

上一篇
如何轻松实现SX1262与ESP32的无线通信?源码实战教程
下一篇
如何用ESP32 UNO和Webman框架打造智能家居控制中心?手把手教你从零开始

评论 (0)

暂无评论,快来抢沙发吧~