物联网项目笔记(速查)
位置:工业数字化 · 速查。主线请看 工业数字化实验室 / Mini MES。本文偏早期整理,作补充材料。
结合自身经历(智能垃圾桶、远程设备监控、小程序后台等),整理 Java 后端 + Web + 小程序 场景下 IoT 常见拼图,便于对照,不作系统课。
一、整体目标:从“能看懂”到“能独立搭一套”
学习这部分,主要想达成两个目标:
- 能听懂/看懂常见 IoT 项目架构
- 设备端、大量数据上报、MQ/缓存、数据库、告警、可视化这些组件如何协作。
- 能独立实现一个简化版的物联网平台
- 支持设备注册/绑定、心跳上报、数据查看、简单告警、小程序/前端展示。
二、基础知识补齐(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形式。
- 提供 HTTP / WebSocket 接口,模拟设备上报数据:
设备管理模块
- 设备 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 / 脚本模拟设备上报。
- 用 Spring Boot 建一个最小项目:
- 前端:
- 一个简单页面展示设备列表 + 最近一条数据。
面试可讲亮点:
“支持设备注册和数据上报,能在后台看到每个设备最近一次上报的数据和时间。”
阶段 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。