Skip to content

物联网项目笔记(速查) ​

位置:工业数字化 · 速查。主线请看 工业数字化实验室 / Mini MES。本文偏早期整理,作补充材料。

结合自身经历(智能垃圾桶、远程设备监控、小程序后台等),整理 Java 后端 + Web + 小程序 场景下 IoT 常见拼图,便于对照,不作系统课。


一、整体目标:从“能看懂”到“能独立搭一套” ​

学习这部分,主要想达成两个目标:

  1. 能听懂/看懂常见 IoT 项目架构
    • 设备端、大量数据上报、MQ/缓存、数据库、告警、可视化这些组件如何协作。
  2. 能独立实现一个简化版的物联网平台
    • 支持设备注册/绑定、心跳上报、数据查看、简单告警、小程序/前端展示。

二、基础知识补齐(1~2 周) ​

目标:先懂“物联网和普通 Web 项目到底多了什么/不一样什么”,再上手项目。

  • 1. 通信协议与连接方式

    • HTTP / WebSocket:适合 Web 管理端 & 简单设备上报。
    • MQTT:高并发、小数据量上报常用协议(QoS、主题、客户端 ID 等概念)。
    • 你可以先用 HTTP / WebSocket 入门,理解流程后再了解 MQTT。
    • 补充(跨服务 / 工控):跨语言调用方式总览见 跨语言调用(选型);Node 与 Python 用 HTTP 协作、Node 读 PLC(Modbus TCP)见 HTTP 协作 与 Modbus TCP。
  • 2. 设备与平台的基本概念

    • 设备(Device) vs 设备类型(Device Type / Product)。
    • 设备属性(属性上报/设置)、事件(Event)、遥测数据(Telemetry)。
    • 设备状态:在线/离线、心跳、最后上报时间。
  • 3. 常见组件

    • 消息中间件:如 RabbitMQ / Kafka,用于解耦设备上报与后端处理。
    • 缓存:用 Redis 存储设备在线状态、最新数据快照。
    • 数据库:MySQL 存结构化数据(设备、用户、规则),时序数据可先存在普通表里。

建议:可自行查阅 ThingsBoard 等开源 IoT 平台的架构图与模块划分,对照自己的简化版。


三、核心项目骨架设计(1~2 周) ​

这里以你熟悉的 Java + Spring Boot + Vue/小程序 为例,设计一个“简化版物联网云平台”。

3.1 后端服务模块划分 ​

  • 设备接入模块

    • 提供 HTTP / WebSocket 接口,模拟设备上报数据:
      • 设备注册:/api/device/register
      • 心跳上报:/api/device/heartbeat
      • 数据上报:/api/device/telemetry
    • 设备认证:简单可以用 deviceId + secret 形式。
  • 设备管理模块

    • 设备 CRUD:添加设备、批量导入、启用/停用。
    • 设备分组:按项目、小区、楼栋、区域等分组。
    • 设备状态:统计在线/离线数量、最近上报时间。
  • 数据存储与查询模块

    • 结构化表:设备表、设备类型表、用户表。
    • 数据表:设备数据表(如:device_telemetry,字段包含 device_id、metric、value、timestamp)。
    • 查询 API:按设备、时间范围查询数据,返回给前端图表展示。
  • 告警与规则模块(入门版可选)

    • 简单规则:如“垃圾桶满载 > 90% 触发告警”。
    • 告警记录:记录告警时间、原因、处理状态。

3.2 前端 / 小程序功能规划 ​

  • 平台管理端(Web / Vue)

    • 设备列表页:查看设备状态、最后上报时间。
    • 设备详情页:折线图展示某一设备的历史数据(如容量、温度、电量)。
    • 告警列表页:显示未处理告警。
  • 简单展示端(小程序 / H5)

    • 展示某个区域的设备运行状态总览。
    • 查看附近设备的状态(结合地理位置可选)。

四、分阶段实现建议 ​

不要求一次性做完,而是拆成“每一阶段都能跑”的小目标,方便你写到简历/面试里。

阶段 1:最小可用 Demo(1 周) ​

  • 后端:
    • 用 Spring Boot 建一个最小项目:
      • /api/device/register:写入设备表。
      • /api/device/telemetry:把上报的数据写入 device_telemetry 表。
    • 使用 Postman / 脚本模拟设备上报。
  • 前端:
    • 一个简单页面展示设备列表 + 最近一条数据。

面试可讲亮点:
“支持设备注册和数据上报,能在后台看到每个设备最近一次上报的数据和时间。”

阶段 2:状态 & 可视化(1~2 周) ​

  • 增强点:
    • 使用 Redis 记录设备在线状态(心跳超时时间判断在线/离线)。
    • 提供接口返回某段时间的历史数据,用前端折线图展示。
    • 增加简单告警规则(如数值阈值超限)。

面试可讲亮点:
“通过心跳 + Redis 维护设备在线状态,并用折线图展示设备的历史指标曲线,支持简单阈值告警。”

阶段 3:项目包装与拓展(按需) ​

  • 拓展方向:
    • 权限与多租户:不同客户看到自己的设备。
    • 任务调度:定时检查离线设备、发送告警。
    • 与已有系统集成:比如将数据推送到现有 CRM/运维平台。

面试可讲亮点:
“在原有 CRUD 业务基础上,引入了设备在线状态、告警、时序数据查询等物联网特性,并预留了多租户和扩展能力。”


五、如何和你现有技术栈结合复习 ​

  • Java / Spring Boot:
    • Controller/Service/Repository 分层设计。
    • 定时任务(检查离线设备、清理历史数据)。
  • 数据库 / MySQL:
    • 设备数据表的索引设计(按 device_id + 时间 建联合索引)。
    • 历史数据归档策略(按月/按设备拆表可作为进阶思考)。
  • Redis:
    • 在线状态缓存:key = device:online:{deviceId},value 存最后心跳时间。
    • 简单的限流/防刷策略(可选)。
  • 前端 / Vue / 小程序:
    • 列表 + 图表展示。
    • 与后端的接口约定与鉴权。

六、下一步可以做的事 ​

  • 选一个开源 IoT 平台(如 ThingsBoard),参考它的模块划分,和你自己的简化版对比。
  • 在简历和面试话术中,把这个物联网项目作为重点项目来讲:
    • 强调:设备接入、数据上报、在线状态、告警、可视化,而不仅仅是 CRUD。