ESP8266是一款功能强大的Wi-Fi模块,广泛应用于物联网项目中。通过ESP8266,我们可以将传感器数据上传到云端或本地数据库进行存储和分析。本文将详细介绍如何使用ESP8266连接MySQL数据库,并实现传感器数据的上传。
在Arduino IDE中配置ESP8266开发环境:
文件 -> 偏好设置
。http://arduino.esp8266.com/stable/package_esp8266com_index.json
工具 -> 开发板 -> 开发板管理器
,搜索“esp8266”,安装对应的开发包。确保MySQL服务器已正确安装并运行。如果使用远程MySQL服务器,请确保防火墙规则允许外部访问。
首先,在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
的表,用于存储温度、湿度和时间戳。
为了将数据从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服务器上。
接下来,我们将编写ESP8266的代码,用于读取传感器数据并通过HTTP请求发送到PHP脚本。
在Arduino IDE中安装必要的库:
ESP8266WiFi
库(已包含在ESP8266开发环境中)DHT
库(用于读取DHT11传感器数据)可以通过工具 -> 库管理
搜索并安装这些库。
#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秒发送一次数据
}
DHT
库读取温度和湿度数据。完成所有步骤后,上传代码到ESP8266,并确保其正常工作。打开串口监视器查看输出信息。检查MySQL数据库中的temperature
表,确认数据是否正确插入。
本文介绍了如何使用ESP8266连接MySQL数据库并上传传感器数据。通过ESP8266、PHP脚本和MySQL数据库的结合,我们可以轻松实现物联网数据的采集和存储。