大家好,我是张二浩,一名全栈工程师。日常工作中,硬件开发总是让我头疼——芯片、电阻、电容这些小元件散落在各种盒子里,找起来像大海捞针。闲着无聊,我就决定自己动手做一个项目,命名为“魔盒”。这个项目功能简单却实用:通过智能感应和指示灯,帮助我快速定位盒子里的物品。它虽小,却涉及物联网、3D打印、服务端、前端等软硬件知识,麻雀虽小,五脏俱全。

在这个专题博客中,我将记录整个开发过程,从需求分析到上线部署。希望对初学者有参考价值。如果你也对IoT项目感兴趣,欢迎关注后续更新!

项目背景与需求分析

为什么要做“魔盒”?

  • 痛点:元件存储混乱,查找效率低。传统盒子缺乏智能定位机制。
  • 核心功能:用户通过APP或网页输入元件名称,系统同步到所有盒子;盒子检测到查找状态后,点亮对应格子的LED灯,引导用户快速找到物品。
  • 扩展性:初期个人使用,后期可扩展到多人协作(如团队共享库存)。

技术栈概述

硬件:

  • 主控:ESP32-C3(低功耗WiFi模块;高端可升级ESP32-C5支持WiFi6)。
  • 传感器:AM312红外人体感应模块(体积小、成本低,用于唤醒系统) 或者微波雷达人体存在传感器(待定)。
  • 指示灯:WS2812 RGB LED(每个格子一个,支持颜色指示)。
  • 电源:锂电池供电,支持低功耗休眠。
  • 外壳:3D打印定制盒子(多格设计,便于扩展)。

软件:

  • 嵌入式:ESP-IDF框架开发固件,实现MQTT通信和低功耗管理。
  • 服务端:Golang(高并发、轻量),SQLite数据库(个人使用,简单高效)。
  • 前端:Vue3 + TypeScript + Element Plus(Web管理页面)。
  • 移动端:Flutter(跨平台APP,支持iOS/Android)。

项目预计周期:4-6周,预算控制在500元以内(硬件为主)。

系统架构与流程图

“魔盒”系统采用分布式架构:多个盒子节点通过MQTT协议与云端服务端通信。用户端(Web/APP)发起查询,服务端广播状态,盒子本地响应。

整体架构图

使用Mermaid绘制简单架构图:

软件层
硬件层
用户端: Web/APP
服务端: Golang + SQLite
MQTT Broker: 广播查找状态
魔盒节点: ESP32-C3 + WS2812
红外传感器: AM312或者微波雷达 唤醒
锂电池供电 + 低功耗休眠

核心工作流程图

查找元件时的交互流程(修正版:服务端负责库存匹配,通知特定盒子):

用户 Web/APP 服务端 数据库 MQTT Broker 魔盒 输入元件名称查询 API请求保存查找状态 查询匹配库存(盒子ID + 格子位置) 返回匹配结果(e.g., box_01/grid_3) 发布MQTT到特定盒子主题: "light/{box_id}/{grid_id}" 返回"未找到" alt [有匹配] [无匹配] 魔盒默认休眠 红外感应(AM312)唤醒ESP32 连接MQTT, 检查/拉取pending消息 返回"light/grid_3"命令(若有) 匹配命令, 点亮对应WS2812灯 视觉引导(灯亮) 立即deep sleep休眠 alt [感应到用户接近] [无感应] 超时( e.g., 5min)后清除查找状态 广播MQTT: "clear_all_lights" 接收清除命令 灯灭, 进入deep sleep 用户 Web/APP 服务端 数据库 MQTT Broker 魔盒

这个流程确保低功耗:盒子默认休眠,仅在有人接近且有查找任务时激活。服务端集中管理库存,避免盒子端重复计算。

开发计划书

为了确保项目有序推进,我制定了详细的开发计划。采用敏捷式迭代,每周一个里程碑,结合GitHub仓库管理代码(后续分享链接)。

总体时间表

阶段 持续时间 主要任务 预期输出 风险点
准备阶段 第1周 需求细化、硬件采购、环境搭建 BOM清单、开发环境就绪 供应链延误
硬件开发 第2-3周 ESP32固件编写、传感器集成、3D建模 打印原型盒子、测试固件 功耗超标
服务端开发 第3-4周 Golang API、SQLite schema、MQTT集成 后端服务上线 数据库迁移
前端开发 第4-5周 Vue Web页面、Flutter APP UI原型、移动端Demo 跨端兼容
集成测试 第5周 端到端测试、低功耗优化 系统集成版 网络不稳
部署与优化 第6周 上线个人服务器、文档编写 完整项目、博客更新 安全漏洞

详细任务分解

准备阶段(Week 1)

  • 采购硬件:ESP32-C3开发板(20元)、AM312(5元/个)、WS2812灯条(10元/米)、锂电池模块(30元)、3D打印耗材。
  • 搭建环境:安装ESP-IDF v5.0、Golang 1.21、Vue CLI、Flutter 3.16。
  • 设计数据库Schema:表包括items(元件信息)、boxes(盒子库存)、searches(查找历史)。

硬件开发(Week 2-3)

  • ESP-IDF项目初始化:实现WiFi连接、MQTT订阅。
  • 低功耗逻辑:AM312 GPIO中断唤醒ESP32,任务完成后deep sleep。
  • LED控制:WS2812驱动,颜色编码(e.g., 绿色=找到,红色=无库存)。
  • 3D打印:使用Tinkercad设计多格盒子(10x10cm),打印外壳并组装。

服务端开发(Week 3-4)

  • Golang框架:使用Gin路由,SQLite via GORM ORM。
  • API设计:POST /search (保存查找)、GET /inventory (库存查询)。
  • MQTT集成:使用paho.mqtt.golang客户端,发布主题如box/{box_id}/command。

前端开发(Week 4-5)

  • Web:Vue3 Composition API,Element Plus组件(表格、搜索框)。
  • 移动:Flutter页面(Dart语言),集成HTTP客户端调用API。
  • 功能:元件分类浏览、实时查找、库存编辑。

集成测试(Week 5)

  • 场景测试:模拟多人查找、断网恢复、低电量警报。
  • 优化:功耗测试(目标<10uA休眠)、响应时间<1s。

部署与优化(Week 6)

  • 部署:服务端跑在Raspberry Pi或云VPS,盒子接入家庭WiFi。
  • 文档:API文档、硬件图纸、代码注释。
  • 未来扩展:添加RFID标签自动识别、云同步多设备。

资源与预算

  • 人力:个人开发,预计每周10-15小时。
  • 预算:硬件~500元,软件工具免费。
  • 工具:VS Code、Arduino IDE(辅助)、Mosquitto(MQTT测试)。

开发心得与展望

这个项目不仅是解决问题,更是技术练手。ESP32的低功耗设计让我学到不少嵌入式技巧,而Golang的简洁让我服务端开发如鱼得水。初学者可以从硬件原型起步,逐步叠加软件层。

后续博客将更新具体代码片段、遇到的问题及解决方案。欢迎留言讨论:你会如何优化这个项目?是加AI图像识别,还是集成语音控制?

项目仓库:(未开始代码设计,后期补充)

关注我,下一期见!🚀

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐