【从零搭建物联网智能充电桩系统】系列导读:从硬件到小程序的完整链路

【从零搭建物联网智能充电桩系统】系列导读:从硬件到小程序的完整链路

本文是这个系列的总纲。我从零开始,用 Java + Spring Boot + Netty + MQTT + IoTDB 逐步搭建了一套智能充电桩系统,覆盖「硬件设备 → 云端 → 小程序/管理后台」全链路。没有现成团队和代码可抄,每一步都是自己查资料、写代码、踩坑、重构走过来的。这里整理了项目全景、模块划分与一条由浅入深的学习路线,后续每篇详解一个模块,把每个环节"为什么这么做、怎么落地的"讲清楚。


一、项目是什么

一套从「硬件设备 → 云端 → 小程序/管理后台」全链路的智能充电桩系统,单人全栈开发。

业务闭环:用户在小程序发起充电 → 云端下发指令给充电桩 → 桩上报实时状态 → 云端三路分发(实时推送小程序 / Redis 缓存 / IoTDB 历史存储)→ 充电结束结算扣费。


二、模块地图(代码仓库结构)

复制代码
yeseesion-smart-charge-station/
├── pom.xml                        Maven 父工程(聚合 6 个 Java 模块)
├── charge-protocol/               私有二进制协议(24 字节定长帧)
├── charge-mqtt-client/            MQTT 客户端(对接 EMQX,消息分发核心)
├── charge-netty-server/           Netty WebSocket 服务(对接小程序)
├── charge-user/                   用户/订单/钱包/管理后台 API(MySQL)
├── charge-iotdb/                  时序数据存储(IoTDB)
├── charge-demo/                   学习示例(非生产,端口与生产冲突)
├── charge-admin/                  Vue 3 + Element Plus 管理后台
├── Yeseesion-ClientSide-MiniApp/  uni-app 微信小程序
└── yeseesion-ESP8266-ACS712/      ESP8266 硬件固件(接入真实桩)

端口分配:

服务 HTTP 端口 其他端口
charge-mqtt-client 8080 MQTT over WS: 8083
charge-netty-server 8085 WebSocket: 8989
charge-user 8086 ---
charge-iotdb 8087 IoTDB Session: 6667
charge-demo 8085(仅调试用) Netty 1919

三、两条核心数据链路

链路 1:上行(设备 → 云端 → 用户)

复制代码
ESP8266 充电桩
   │ MQTT 发布 charge/stat(24 字节 hex 报文)
   ▼
EMQX Broker
   │ MQTT 订阅
   ▼
charge-mqtt-client (InBoundMessageRev)
   │ ChargeStatData.fromHexString() 解析 24 字节帧
   │ buildStatJson() 组装业务 JSON
   ▼
RabbitMQ Fanout 广播 (charge.stat.exchange)
   ├─→ 队列① TTL 10s  → charge-netty-server /netty/push → 小程序 WebSocket
   ├─→ 队列② TTL 30s  → Redis SET charge:stat:{id} (TTL 24h)
   └─→ 队列③ TTL 60s  → charge-iotdb /iotdb/charge/stat → IoTDB

链路 2:下行(用户 → 设备)

复制代码
小程序 WebSocket JSON 指令 (START/STOP/RESUME)
   │ ws://netty:8989/ws
   ▼
charge-netty-server (JsonCmdHandler)
   │ ChargeStatPushRegistry 注册 chargeId→Channel 映射
   │ RabbitMQ Topic (charge.cmd.exchange)
   ▼
charge-mqtt-client (ChargeCmdConsumer)
   │ MQTT publish charge/cmd
   ▼
EMQX → 充电桩执行

注意:上下行协议刻意采用两套方案 ------上行(设备→云端)用 24 字节真·二进制省流量;下行(用户→设备)从小程序发起,用「对象 JSON 序列化 → hex」的格式,是为了前端调试时能直接看清请求参数(若用二进制,小程序侧很难直观看到发出去的是什么)。这是"按场景选技术"的设计取舍,不是失误(真实代码如此)。


四、数据库(10 张 MySQL 表)

表名 用途 关键点
cs_user 用户(openid/手机号) 微信登录
cs_wallet 钱包 @Version 乐观锁字段
cs_wallet_log 钱包流水 冻结/解冻/充值
cs_order 充电订单 生命周期
cs_recharge_order 充值订单 支付
cs_charge_record 充电记录 与协议 chargeRecordId 对应
cs_station 充电站 列表
cs_station_price 分时电价 单价
cs_connector 充电枪 站点从属
cs_alarm 告警 运营监控

五、系列学习路线(按依赖顺序,共 8 篇)

顺序 主题 对应文章 读完能掌握
0 技术选型篇 00-技术选型篇-为什么用这些技术.md 每项技术"为什么选/不用会怎样"
1 系统架构与数据链路 01-系统架构与两条数据链路.md 画清两条链路
2 私有二进制协议 02-24字节二进制协议详解.md 24 字节帧字段布局
3 MQTT 客户端 03-MQTT客户端设备接入.md InBoundMessageRev 分发逻辑
4 Netty WebSocket 04-Netty实时推送服务.md ChannelPipeline 装配
5 消息架构(RabbitMQ) 05-RabbitMQ消息分发架构.md 三路 TTL 设计 & 毒药消息
6 用户服务与钱包 06-用户服务与钱包系统.md 乐观锁 + 事务
7 IoTDB 与前端 07-IoTDB时序库与双端前端.md schema 膨胀问题

每篇末尾都有「常见问题与解答」小结,覆盖该模块读者最关心的疑问。


相关推荐
Quanqiucard3 小时前
电价 15 分钟一调,光伏物联网卡选错,断一次就没依据
物联网
MuMuMu12234 小时前
越华环保集团碳惠小屋:存量场景终端选型,全生命周期成本分析方案
物联网
考拉讲支付8 小时前
延迟分账 / 核销分账的技术实现方案:服务完成后再分钱,到底怎么设计?
大数据·运维·人工智能·微信小程序·小程序·系统架构
数字新视界9 小时前
信创认证动环监控在提升机房环境安全与效率中的关键作用
物联网·数据可视化·数据中心基础设施管理·dcim管理系统·数据中心dcim
GIS数据转换器9 小时前
基于CIM的城市智慧供热监管服务平台
java·大数据·开发语言·人工智能·后端·物联网·struts
螺蛳粉 螺蛳粉12 小时前
CDH第七篇:CDH 集成 Kafka 实战:CSD + Parcel 组合拳,先装 ZooKeeper 是铁律
物联网·zookeeper·kafka·消息队列·parcel·cdh集成·csd
Newway32113 小时前
便利店小程序商城如何打通总部、门店与会员
小程序·小程序商城·会员运营·连锁便利店·门店订货·o2o系统
Strawberry9613 小时前
小程序视频播放官方方案
小程序
weixin_4043806313 小时前
MQTT 上云验收:ESP32-S3 从局域网控灯到远程网页控制
物联网·mqtt·esp32
阿乔外贸日记14 小时前
外贸风控|美国市场7大类欺诈模式解析与风控框架
大数据·人工智能·物联网·microsoft·智能手机