跳转到内容

技术栈组件详解

技术栈组件详解

本节详细检查物联网解决方案技术栈中的每个组件。通过本节学习,你将能够:

  • 解释每个技术组件的功能和配置
  • 理解组件之间如何交互和相互依赖
  • 描述商业替代方案以及何时推荐使用
  • 回答客户关于组件选择和权衡的问题

下图展示了各技术组件如何连接及其数据流方向:

┌─────────────────────────────────────────────────────────────────────┐
│ Grafana仪表板 │
│ (可视化与告警) │
└───────────────────────────┬─────────────────────────────────────────┘
│ 查询(Flux/SQL)
┌───────────────────────────▼─────────────────────────────────────────┐
│ InfluxDB + MariaDB │
│ (时序 + 关系型存储) │
└───────────────────────────┬─────────────────────────────────────────┘
│ 写入(Node-RED节点)
┌───────────────────────────▼─────────────────────────────────────────┐
│ Node-RED │
│ (流程引擎、数据处理、集成) │
└───────────────────────────┬─────────────────────────────────────────┘
│ 订阅(MQTT)
┌───────────────────────────▼─────────────────────────────────────────┐
│ MQTT Broker(Mosquitto / EMQX) │
│ (消息路由) │
└───────────────────────────┬─────────────────────────────────────────┘
│ 发布(MQTT)
┌───────────────────────────▼─────────────────────────────────────────┐
│ ESP32 │
│ (微控制器 + 传感器/执行器) │
└─────────────────────────────────────────────────────────────────────┘

ESP32是直接与传感器和执行器交互的边缘设备。它将物理测量值(温度、湿度、运动等)转换为数字数据进行传输。

规格详情
处理器Xtensa LX6双核(S3上为LX7),最高240 MHz
RAM520 KB SRAM(部分型号最高8 MB PSRAM)
闪存4-16 MB
WiFi802.11 b/g/n,2.4 GHz
蓝牙BLE 4.2(原版支持经典蓝牙,C3/S3仅支持BLE)
GPIO因型号而异:16-34个可编程引脚
ADC12位,最多18通道
DAC8位,2通道(C3/S3不支持)
深度睡眠~10 µA 电流消耗
工作电压3.3V(部分引脚可容忍5V)
型号关键特性最佳用途价格范围
ESP32 DevKit(原版)完整GPIO、经典蓝牙通用原型设计$5-8
ESP32-S3AI加速器、更多PSRAMLVGL显示屏、边缘ML$6-10
ESP32-C3RISC-V内核、成本更低简单传感器、成本敏感型$3-5
ESP32-CAM摄像头接口、PSRAM图像采集、监控$7-12
ESP32-XIAO(Seeed)超紧凑(21x17.5mm)可穿戴、空间受限$4-7
ESP32-Tower(Olimex)工业连接器、LiPo外设原型设计$12-18

与客户讨论能力时,使用此边界评估:

能力:

  • 同时读取最多18个模拟传感器(通过ADC多路复用)
  • 控制继电器、LED、电机(通过驱动IC)
  • 处理JSON、执行计算、应用逻辑
  • 通过WiFi通信,室内约50m,室外约100m
  • 在电池上运行数周至数月(通过深度睡眠优化)
  • 提供简单的网页或REST API端点

限制:

  • 无法处理高分辨率视频(限于JPEG拍摄,不支持流媒体)
  • 浮点运算性能有限(尽量使用整数运算)
  • WiFi范围受限;无外部模块不支持蜂窝/LTE
  • 无原生以太网;需要SPI以太网模块(W5500、ENC28J60)
  • 闪存写入寿命限制(SPI闪存约100,000次写入)
  • 原版ESP32无硬件加密加速(S3有改进支持)

组件2:MQTT Broker(Mosquitto / EMQX)

Section titled “组件2:MQTT Broker(Mosquitto / EMQX)”

MQTT Broker是中央消息路由器。所有设备向Broker发布数据,所有后端服务通过它订阅。Broker将发送者与接收者解耦——设备无需互相了解。

特性MosquittoEMQX
许可证Eclipse Public License(开源)Apache 2.0(开源核心,有企业版)
语言CErlang
最大连接数(单节点)~10,000~1,000,000
集群支持有限(桥接模式)原生集群(水平扩展)
MQTT 5.0支持支持
规则引擎无(需要外部集成)内置类SQL规则引擎
Web管理面板最小化(命令行为主)丰富的Web UI
资源占用~10 MB RAM~50 MB RAM(最低)
配置方式文本文件(mosquitto.conf管理面板 + 配置文件
TLS支持支持支持
插件系统支持(认证、日志)支持(认证钩子、扩展)

推荐Mosquitto的情况:

  • 设备数低于1,000的部署
  • 资源受限的服务器(如树莓派)
  • 简单设置,无需集群
  • 客户偏好最小开销

推荐EMQX的情况:

  • 设备数超过1,000的部署
  • 需要高可用性和集群
  • 需要内置规则引擎进行数据预处理
  • 客户想要管理仪表板

Node-RED是自动化和集成引擎。它接收MQTT数据,进行处理、存储并触发操作。它承载了大部分业务逻辑。

  • 流程式编程:可视化连接节点,消除样板代码
  • 1,000+社区节点:通过npm包扩展功能
  • 内置编辑器:基于浏览器的IDE,带调试控制台和节点检查器
  • 上下文存储:跨消息保持状态(流、全局、基于文件)
  • HTTP端点:可作为Web服务器或REST API
  • Function节点:编写自定义JavaScript实现复杂逻辑
  • 子流程:将可复用逻辑封装到单个节点中
部署规模RAM使用备注
演示/单个项目50-100 MB最小流程、少量节点
小型生产(10-50台设备)100-300 MB多个流程、数据库节点
中型生产(50-500台设备)300-500 MB复杂流程、HTTP端点
大型(500+设备、重处理)500 MB - 2 GB考虑水平扩展

InfluxDB以时序数据点的形式存储传感器数据。每个数据点有测量名称、标签(索引元数据)和字段(数值)。这种结构针对物联网工作负载进行了优化。

measurement: "environment"
tags: location="factory_zone1", sensor_id="esp32_01"
fields: temperature=26.5, humidity=62.3
timestamp: 2026-05-17T10:30:00Z
  • 连续查询:自动降采样和聚合数据
  • 保留策略:自动删除超过可配置时长的数据
  • Flux查询语言:强大的数据转换和分析
  • HTTP API:通过REST端点写入和查询数据
  • 批量导入:从CSV或其他来源回填历史数据
采样间隔设备数点数/天存储量/天
10秒1086,400~5 MB
1分钟5072,000~4 MB
5分钟10028,800~1.5 MB
1小时50012,000~0.7 MB
版本状态推荐建议
InfluxDB 1.x稳定、长期最适合中小型部署。类SQL查询语言。
InfluxDB 2.x / OSS当前、活跃Flux语言、新UI,但资源占用更高。
InfluxDB Cloud托管服务适合希望零维护的客户。

Grafana是可视化层,将存储的数据转化为可操作的仪表板。它连接到InfluxDB(和MariaDB),提供实时图形显示。

  • 仪表板模板:跨客户演示导出和复用
  • 告警引擎:电子邮件、Telegram、Slack、Webhook通知
  • 注释:标记事件(如”设备离线”、“阈值被突破”)
  • 变量:创建交互式仪表板,客户可选择时间范围、设备、位置
  • 面板:时序图、柱状图、仪表盘、表格、热力图、统计等
  1. 从关键指标开始:温度、湿度、能耗——客户最关心的数据
  2. 使用颜色编码:绿色(正常)、黄色(警告)、红色(告警)以便即时理解
  3. 包含时间范围选择器:让客户切换1小时、24小时、7天、30天视图
  4. 添加阈值线:在图表上直接显示可接受范围
  5. 保持简洁:避免信息过载——演示时每个仪表板3-5个面板为佳

Docker容器将每个服务(Mosquitto、Node-RED、InfluxDB、Grafana)打包成独立的、可移植的单元。Docker Compose将它们编排成一个整体技术栈。

  • 可重复性:在任何机器上相同环境(Windows、Mac、Linux)
  • 隔离性:每个服务独立运行;一个服务故障不会级联影响其他服务
  • 简化更新:替换容器而不影响其他服务
  • 演示可移植性:打包并部署整个技术栈到客户的服务器
  • 资源效率:容器共享主机操作系统内核(相比虚拟机)

该技术栈的典型 docker-compose.yml 包括:

服务镜像端口数据卷
Mosquittoeclipse-mosquitto:21883、8883配置、数据、日志
Node-REDnodered/node-red:41880用户数据
InfluxDBinfluxdb:28086数据存储
Grafanagrafana/grafana:113000仪表板、配置

当客户询问替代方案时,此参考表在咨询中很有用:

组件选用方案主要替代方案关键区别
微控制器ESP32Arduino Due、STM32内置WiFi + BLE、成本
通信协议MQTTHTTP、CoAP、Zigbee轻量级、发布-订阅、QoS
BrokerMosquitto/EMQXVerneMQ、HiveMQ CE开源、MQTT 5.0
自动化Node-REDHome Assistant、n8n可视化流程、面向IoT
时序数据库InfluxDBTimescaleDB、Prometheus写入性能、保留策略
可视化GrafanaKibana、Chronograf多数据源、告警
容器化DockerPodman、Kubernetes行业标准、简单易用

技术栈中的每个组件都有特定用途,理解它们的作用有助于有效的客户沟通:

  • ESP32 在边缘端处理传感器数据采集和设备控制
  • MQTT Broker 提供设备和服务器之间的可靠消息路由
  • Node-RED 处理数据、应用业务逻辑和集成系统
  • InfluxDB 以高写入吞吐量存储时序数据
  • Grafana 在实时仪表板中以告警功能可视化数据
  • Docker 使整个技术栈可移植、可扩展且易于部署