引言
在物联网时代,将硬件设备与Web应用无缝对接已成为开发者的必备技能。ESP32作为一款集成Wi-Fi和蓝牙功能的低成本微控制器,常与DHT22温湿度传感器搭配,用于环境监测。而Laravel作为PHP领域最流行的框架之一,提供了优雅的API构建能力。本文将围绕一个核心问题:如何用ESP32与Laravel构建智能家居数据采集系统?,从硬件准备到代码实现,逐步讲解完整流程。
硬件准备与连接
首先,你需要以下硬件:
- ESP32开发板(如ESP32 DevKit V1)
- DHT22温湿度传感器
- 面包板及杜邦线若干
连接方式非常简单:将DHT22的VCC引脚连接到ESP32的3.3V引脚,GND连接到GND,数据引脚(如GPIO4)连接到ESP32的数字IO口。注意DHT22需要上拉电阻,通常模块已集成,无需额外添加。
ESP32代码编写
使用Arduino IDE或PlatformIO编写ESP32固件。核心逻辑包括:读取DHT22数据、建立Wi-Fi连接、通过HTTP POST将数据发送到Laravel API。以下是一个简化示例:
#include <WiFi.h>
#include <DHT.h>
#define DHTPIN 4
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(115200);
WiFi.begin("your_SSID", "your_PASSWORD");
while (WiFi.status() != WL_CONNECTED) { delay(500); }
dht.begin();
}
void loop() {
float h = dht.readHumidity();
float t = dht.readTemperature();
if (isnan(h) || isnan(t)) { return; }
// 构造JSON并发送到Laravel
HTTPClient http;
http.begin("http://your-laravel-server.com/api/sensor");
http.addHeader("Content-Type", "application/json");
String payload = "{\"temperature\":" + String(t) + ",\"humidity\":" + String(h) + "}";
int httpCode = http.POST(payload);
http.end();
delay(60000); // 每60秒发送一次
}注意替换Wi-Fi凭据和服务器地址。实际部署时建议使用HTTPS并添加API密钥验证。
Laravel后端搭建
首先,创建一个新的Laravel项目:
composer create-project laravel/laravel iot-backend然后设计数据库迁移:
php artisan make:migration create_sensor_data_table
// 在迁移文件中添加字段:temperature (float), humidity (float), created_at (timestamp)创建模型和控制器:
php artisan make:model SensorData
php artisan make:controller Api/SensorDataController在控制器中编写接收数据的逻辑:
public function store(Request $request) {
$validated = $request->validate([
'temperature' => 'required|numeric',
'humidity' => 'required|numeric',
]);
$data = SensorData::create($validated);
return response()->json(['status' => 'success', 'data' => $data], 201);
}最后在routes/api.php中添加路由:
Route::post('/sensor', [SensorDataController::class, 'store']);数据展示与可视化
为了直观查看数据,可以创建一个简单的前端页面,使用Chart.js库绘制温湿度曲线图。在Laravel中创建路由和视图,从数据库获取最近24小时的数据点,传递给前端。示例控制器方法:
public function index() {
$data = SensorData::where('created_at', '>=', now()->subDay())->get();
return view('dashboard', compact('data'));
}在Blade模板中使用JavaScript循环数据并绘制图表。用户即可在浏览器中实时查看环境变化。
安全与优化建议
在生产环境中,务必考虑以下要点:
- 使用API令牌验证ESP32请求,避免被恶意攻击。
- 启用HTTPS加密传输,防止数据泄露。
- 对传感器数据进行缓存或分页,减轻数据库压力。
- 考虑使用队列处理高并发写入,提升响应速度。
总结
通过本文的步骤,你已经学会了如何使用ESP32 + DHT22采集环境数据,并通过Laravel构建后端API存储和展示。这套方案不仅适用于智能家居,还可扩展到农业监测、工业自动化等场景。如果你正在使用Webman或其他PHP框架,原理类似,只需调整路由和请求处理方式即可。动手实践吧,物联网的世界等待你去探索!
请先登录后再发布评论