如何用ESP32与Laravel构建智能家居数据采集系统?

引言

在物联网时代,将硬件设备与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框架,原理类似,只需调整路由和请求处理方式即可。动手实践吧,物联网的世界等待你去探索!

上一篇
没有更多了
下一篇
如何用LVGL在ESP32上打造炫酷嵌入式UI?从零开始的实战指南

评论 (0)

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