Arduino 传感器数据上传 MySQL 数据库:PHPMyAdmin 完整指南
零部件与物料
| 零部件 | 数量 | 备注 |
|---|---|---|
| Arduino UNO | 1 | 主控板 |
| Arduino Ethernet Shield 2 | 1 | 有线网络连接 |
| DHT11 温湿度传感器(3 针) | 1 | 数字输出 |
项目简介
本教程详细演示如何将 Arduino 采集的传感器数据通过以太网上传至 MySQL 数据库,并使用 PHPMyAdmin 进行可视化管理。适合物联网入门者快速掌握「设备 → 网关 → 数据库」的完整数据链路。
软件准备
1. Arduino IDE
下载最新版:https://www.arduino.cc/en/Main/Software
2. 本地服务器环境搭建
Windows 推荐 XAMPP(含 Apache、MySQL、PHP、PHPMyAdmin):
- 下载地址:apachefriends.org
- 安装后启动 Apache 与 MySQL 服务
- 浏览器访问
https://localhost/phpmyadmin进入管理界面
Linux (Ubuntu) 推荐 LAMP 栈:
sudo apt-get update
sudo apt-get install apache2
sudo apt-get install mysql-server
sudo apt-get install php libapache2-mod-php php-mysql
sudo systemctl restart apache2
sudo apt-get install phpmyadmin
安装过程中需配置 MySQL root 密码、选择 Apache2 作为 Web 服务器。完成后访问 https://localhost/phpmyadmin 验证。
硬件连接
- 将 Ethernet Shield 2 直接堆叠在 Arduino UNO 上
- 用 RJ45 网线连接路由器/交换机
- DHT11 接线:VCC→5V、GND→GND、DATA→Digital Pin 2
数据库准备
在 PHPMyAdmin 中创建数据库 arduino_data,建表 sensor_log:
CREATE TABLE sensor_log (
id INT AUTO_INCREMENT PRIMARY KEY,
temperature FLOAT,
humidity FLOAT,
recorded_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
PHP 接收脚本 (save_data.php)
放置在 Web 服务器根目录(如 /var/www/html/ 或 XAMPP 的 htdocs/):
<?php
$host = "localhost";
$user = "root";
$pass = "your_mysql_password";
$db = "arduino_data";
$conn = new mysqli($host, $user, $pass, $db);
if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
}
$temp = $_GET["temp"] ?? "";
$humi = $_GET["humi"] ?? "";
if ($temp !== "" && $humi !== "") {
$stmt = $conn->prepare("INSERT INTO sensor_log (temperature, humidity) VALUES (?, ?)");
$stmt->bind_param("dd", $temp, $humi);
$stmt->execute();
echo "OK";
} else {
echo "参数缺失";
}
$conn->close();
?>
Arduino 代码
#include <SPI.h>
#include <Ethernet.h>
#include <DHT.h>
#define DHTPIN 2
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress server(192, 168, 1, 100); // 你的服务器局域网 IP
EthernetClient client;
unsigned long lastSend = 0;
const unsigned long interval = 30000; // 30 秒上传一次
void setup() {
Serial.begin(9600);
dht.begin();
if (Ethernet.begin(mac) == 0) {
Serial.println("DHCP 失败,使用静态 IP");
IPAddress ip(192, 168, 1, 177);
Ethernet.begin(mac, ip);
}
delay(1000);
Serial.print("本机 IP: ");
Serial.println(Ethernet.localIP());
}
void loop() {
if (millis() - lastSend > interval) {
float h = dht.readHumidity();
float t = dht.readTemperature();
if (isnan(h) || isnan(t)) {
Serial.println("读取 DHT11 失败");
return;
}
if (client.connect(server, 80)) {
String url = "/save_data.php?temp=" + String(t) + "&humi=" + String(h);
client.print(String("GET ") + url + " HTTP/1.1\r\n" +
"Host: " + server.toString() + "\r\n" +
"Connection: close\r\n\r\n");
Serial.println("数据已发送: " + url);
} else {
Serial.println("连接服务器失败");
}
client.stop();
lastSend = millis();
}
}
验证与进阶
- 在 PHPMyAdmin 中查看
sensor_log表,确认数据写入 - 可扩展为 HTTPS、JSON API、多传感器节点、Grafana 可视化大盘
- 生产环境建议加入 API Key 验证、预处理语句防注入、异常重试机制
原理图
制造工艺
- 打造低成本家庭无线传感器网络:Arduino + 树莓派 + Xively 物联网平台
- 两块 Arduino 通过 Firebase 传递温湿度数据
- 基于 Infineon 3D 磁传感器的 Arduino 无线磁通讯实验
- K30 CO₂ 传感器:室内空气质量实时监测
- Arduino + DHT11 + 以太网盾板温湿度数据记录仪
- DIY 数字身高仪:Arduino Nano + VL53L0X 激光测距 + OLED 显示
- 自制简易红外避障传感器:IR LED + 光电二极管 + Arduino
- DFRobot 电容指纹传感器 (ID809) 接入 Arduino/ESP8266 完整教程
- Arduino Cloud 传感器塔:温度、动作与气体监测
- 基于 Arduino Nano 的智能运动感应水枪
- 紧凑型Arduino雷达系统:HC-SR04超声波传感器配1.8英寸显示屏
- Arduino 传感器数据上传 MySQL 数据库:PHPMyAdmin 完整指南