完整的Laravel 12+STM32远程开关控制系统实现方案

以下是一个完整的 Laravel 12 + STM32 远程开关控制系统 实现方案,涵盖 Web 后端、前端、硬件固件、通信协议、安全机制和部署方案


1. 系统架构

1.1 整体架构

用户Web/App → Laravel API → MQTT Broker → STM32 → 继电器控制
  • 前端:Vue.js / React 管理界面(可扩展移动端)
  • 后端:Laravel 12(RESTful API + WebSocket 实时通信)
  • 通信协议:MQTT(轻量级物联网协议)
  • 硬件
    • STM32F103/STM32F407(带 FreeRTOS)
    • ESP8266/ESP32(WiFi 模块)
    • 继电器模块(控制开关)

2. Laravel 后端实现

2.1 数据库迁移(关键表)

php artisan make:migration create_devices_table
// database/migrations/2025_05_16_create_devices_table.php
Schema::create('devices', function (Blueprint $table) {
    $table->id();
    $table->string('name');
    $table->string('mac_address')->unique();  // STM32设备唯一标识
    $table->enum('status', ['ON', 'OFF'])->default('OFF');
    $table->foreignId('user_id')->constrained()->cascadeOnDelete();
    $table->timestamps();
});
php artisan migrate

2.2 API 路由

// routes/api.php
use App\Http\Controllers\DeviceController;

Route::middleware('auth:sanctum')->group(function () {
    Route::get('/devices', [DeviceController::class, 'index']);
    Route::post('/devices/{device}/control', [DeviceController::class, 'control']);
});

2.3 设备控制逻辑

// app/Http/Controllers/DeviceController.php
public function control(Device $device, Request $request)
{
    $request->validate(['command' => 'required|in:ON,OFF']);
    
    // 发布MQTT消息
    MQTT::publish("devices/{$device->mac_address}/control", $request->command);
    
    // 更新数据库状态
    $device->update(['status' => $request->command]);
    
    return response()->json(['status' => 'success']);
}

2.4 MQTT 集成

composer require php-mqtt/laravel-client
// config/mqtt.php
return [
    'host' => env('MQTT_HOST', 'mqtt.example.com'),
    'port' => env('MQTT_PORT', 1883),
    'username' => env('MQTT_USERNAME'),
    'password' => env('MQTT_PASSWORD'),
];

3. STM32 固件开发

3.1 硬件连接

  • STM32ESP8266(UART 通信)
  • STM32继电器模块(GPIO 控制)

3.2 FreeRTOS + MQTT 实现

// main.c
#include "stm32f4xx_hal.h"
#include "esp8266.h"
#include "mqtt.h"

void MQTT_Callback(char* topic, uint8_t* payload) {
    if (strstr(topic, "control")) {
        if (strcmp(payload, "ON") == 0) {
            HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_SET); // 继电器开
        } else {
            HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_RESET); // 继电器关
        }
    }
}

int main(void) {
    HAL_Init();
    SystemClock_Config();
    
    ESP8266_Init();  // 初始化WiFi
    ESP8266_Connect("WIFI_SSID", "WIFI_PASSWORD");
    
    MQTT_Connect("mqtt.example.com", 1883, "client-id", "username", "password");
    MQTT_Subscribe("devices/+/control");
    
    while (1) {
        MQTT_Loop();  // 保持MQTT连接
        HAL_Delay(100);
    }
}

4. 前端实现(Vue.js)

<template>
  <div>
    <h1>设备控制</h1>
    <button @click="sendCommand('ON')">开启</button>
    <button @click="sendCommand('OFF')">关闭</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      deviceId: 1,
    };
  },
  methods: {
    async sendCommand(command) {
      await axios.post(`/api/devices/${this.deviceId}/control`, { command });
    },
  },
};
</script>

5. 安全机制

  1. API 认证(Laravel Sanctum)
  2. MQTT TLS 加密
  3. 设备唯一标识(MAC 地址绑定)
  4. 操作日志记录
  5. STM32 固件签名(防止篡改)

6. 部署方案

组件推荐方案
LaravelNginx + PHP 8.2 + MySQL
MQTTMosquitto(Docker 部署)
STM32烧录固件 + 继电器模块
前端Vercel / Netlify 托管

7. 测试流程

  1. 硬件测试:STM32 + ESP8266 连接测试
  2. MQTT 测试mosquitto_pub/sub 手动测试
  3. API 测试:Postman 模拟请求
  4. 前端测试:Vue.js 控制界面验证

8. 扩展功能

  • 定时任务(Laravel Scheduler 控制设备)
  • WebSocket 实时状态(Laravel Echo + Pusher)
  • OTA 固件升级(STM32 远程更新)

最终效果

用户通过 Web/App 控制 STM32 继电器
实时状态同步到数据库
安全认证 + 日志记录
可扩展至多设备管理

这个方案完整覆盖了 Laravel + STM32 物联网远程控制 的所有关键环节,可直接用于实际项目开发。 🚀

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值