定制化可能性
定制化可能性
本节介绍如何根据不同买家需求定制工厂显示项目。作为售前工程师,你需要快速评估哪些定制化可行,估算所需工作量,并提供准确指导。完成本节后,你将能够:
- 识别电子纸显示项目的常见定制化路径
- 估算每种定制化的工作量和复杂度
- 引导买家选择可行的定制化方案
- 确定何时定制化需要根本不同的解决方案
常见定制化路径
Section titled “常见定制化路径”快速参考矩阵
Section titled “快速参考矩阵”| 定制化 | 工作量 | 复杂度 | 成本影响 | 可行性 |
|---|---|---|---|---|
| 不同显示尺寸 | 低 | 简单 | +$5-30 | ✅ 容易 |
| 自定义背景图像 | 低 | 简单 | 无 | ✅ 容易 |
| 不同数据源 | 中 | 中等 | 无 | ✅ 可行 |
| 多页面显示 | 中 | 中等 | 无 | ✅ 可行 |
| 触摸输入集成 | 高 | 复杂 | +$10-20 | ⚠️ 有条件 |
| 三色显示屏 | 中 | 中等 | +$5-10 | ✅ 可行 |
| 更大文本/更高对比度 | 低 | 简单 | 无 | ✅ 容易 |
| 防水防尘外壳 | 中 | 中等 | +$20-50 | ✅ 可行 |
| 太阳能充电 | 高 | 复杂 | +$15-30 | ⚠️ 需要规划 |
| 实时更新(< 1 分钟) | ⚠️ | 不适用 | 不适用 | ❌ 不可能 |
| 视频播放 | ⚠️ | 不适用 | 不适用 | ❌ 不可能 |
1. 不同显示尺寸
Section titled “1. 不同显示尺寸”买家需求:“我需要更大的显示屏,让工人在 10 米外也能阅读。”
选项:
| 尺寸 | 分辨率 | 可读性 | 成本 | 最适合 |
|---|---|---|---|---|
| 1.54” | 200×200 | 近距离(1-2m) | $10-12 | 台式状态指示器 |
| 2.13” | 250×122 | 中等(2-3m) | $12-18 | 推荐——均衡 |
| 2.9” | 296×128 | 可读(3-4m) | $15-22 | 货架标签 |
| 4.2” | 400×300 | 良好(4-6m) | $25-35 | 工厂 KPI 看板 |
| 5.83” | 648×480 | 很好(6-8m) | $35-45 | 会议室日程表 |
| 7.5” | 800×480 | 极好(8-10m) | $40-55 | 大型公告板 |
实现变更:
// 仅更改构造函数——其余代码保持不变// 对于 4.2" 显示屏:GxEPD2_BW<GxEPD2_420, GxEPD2_420::HEIGHT> display( GxEPD2_420(EPD_CS, EPD_DC, EPD_RST, EPD_BUSY));
// 调整可读性的字体大小// 4.2" 可以使用更大字体display.setFont(&FreeMonoBold24pt7b); // 24pt 替代 18pt工作量:~1 小时——更新构造函数、调整位置、重新测试
2. 自定义背景和品牌
Section titled “2. 自定义背景和品牌”买家需求:“我们希望在显示屏上显示公司标志和自定义布局。”
选项:
- 头部公司标志
- 自定义配色方案(限于黑白/红)
- 品牌边框设计
- 带公司颜色的分区布局
实现:
// 1. 使用公司标志 + 布局创建背景图像// 2. 转换为 XBM 格式(参见 02-05)// 3. 作为背景显示一次// 4. 在上面叠加动态文本
void setup() { display.fillScreen(GxEPD_WHITE);
// 绘制品牌背景(每次部署只需一次) display.drawInvertedBitmap(0, 0, company_background, display.width(), display.height(), GxEPD_BLACK);
// 叠加动态数据 display.setFont(&FreeMonoBold12pt7b); display.setCursor(BRANDED_X, BRANDED_Y); display.print(sensorValue);
display.display();}工作量:2-4 小时——需要设计工作、图像转换、布局调整
3. 多页面显示
Section titled “3. 多页面显示”买家需求:“我们想要循环显示不同的数据页面——一个用于生产、一个用于质量、一个用于安全。”
实现:
// 每个页面是不同的屏幕布局// 显示屏在每次刷新时循环切换页面
RTC_DATA_ATTR int currentPage = 0; // 跨深度睡眠持久化
void setup() { // ... WiFi 和 MQTT 设置 ...
// 显示当前页面 switch (currentPage) { case 0: showProductionPage(); break; case 1: showQualityPage(); break; case 2: showSafetyPage(); break; }
// 推进到下一次唤醒周期的下一页 currentPage = (currentPage + 1) % 3; // 3 个页面
// 存储在 RTC 内存中——可跨深度睡眠存活}
void showProductionPage() { display.fillScreen(GxEPD_WHITE); display.setFont(&FreeMonoBold12pt7b); display.setCursor(5, 20); display.print("生产"); display.setFont(&FreeMonoBold24pt7b); display.setCursor(5, 60); display.print(unitsProduced); display.display();}工作量:4-8 小时——设计每个页面布局、实现循环逻辑、测试切换
4. 三色显示屏升级
Section titled “4. 三色显示屏升级”买家需求:“我们想要警报或超阈值时显示红色文本。”
实现:
硬件变更:
WaveShare 2.13" 黑白 → WaveShare 2.13" 黑白/红软件变更:
// 包含三色库#include <GxEPD2_3C.h>
// 使用三色构造函数GxEPD2_3C<GxEPD2_213_Z19c, GxEPD2_213_Z19c::HEIGHT> display( GxEPD2_213_Z19c(EPD_CS, EPD_DC, EPD_RST, EPD_BUSY));
void setup() { display.init(115200);
// 使用三种颜色绘制 display.fillScreen(GxEPD_WHITE);
display.setTextColor(GxEPD_RED); // 警报值用红色 display.setCursor(10, 30); display.print("严重");
display.setTextColor(GxEPD_BLACK); // 正常值用黑色 display.setCursor(10, 60); display.print("温度:25.5°C");
display.display();}权衡警告:
⚠️ 三色显示屏具有: - 3-5 倍更慢的刷新(15 秒 vs 3 秒) - 黑白区域对比度较低 - 每次刷新功耗更高 - 不支持局部刷新(仅全刷新)
建议仅在红色高亮至关重要时使用三色显示屏。工作量:~2 小时——硬件更换、库更改、颜色逻辑更新
5. 使用 Node-RED 的警报触发
Section titled “5. 使用 Node-RED 的警报触发”买家需求:“当某个值超过阈值时,显示屏应显示警报。”
Node-RED 中的实现:
// Function 节点——阈值检测const temperature = parseFloat(msg.payload.temperature);
if (temperature > 30) { // 发送警报载荷 msg.payload = JSON.stringify({ alert: true, message: "高温警报:" + temperature + "°C", bg_color: "RED", timestamp: new Date().toISOString() });} else { // 发送正常载荷 msg.payload = JSON.stringify({ alert: false, temperature: temperature, humidity: msg.payload.humidity, timestamp: new Date().toISOString() });}
return msg;ESP32 端:
void processMQTTMessage(const char* json) { JsonDocument doc; deserializeJson(doc, json);
bool alert = doc["alert"] | false;
if (alert) { // 显示警报屏幕 display.fillScreen(GxEPD_WHITE); display.setFont(&FreeMonoBold12pt7b); display.setTextColor(GxEPD_BLACK);
// 绘制警报边框 display.drawRect(2, 2, display.width()-4, display.height()-4, GxEPD_BLACK);
const char* message = doc["message"] | "警报"; display.setCursor(10, 40); display.print(message); } else { // 显示正常显示 showNormalDisplay(doc); }}工作量:2-4 小时——Node-RED 逻辑 + 显示处理器
6. 数据历史显示
Section titled “6. 数据历史显示”买家需求:“显示过去 24 小时温度数据的小型图表。”
实现:由于电子墨水无法很好地渲染复杂图表,使用简化方法:
// 简化的迷你条形图void drawMiniChart(int x, int y, int width, int height, float* values, int count) { float minVal = 20, maxVal = 30; // 温度已知范围
int barWidth = width / count;
for (int i = 0; i < count; i++) { int barHeight = map((values[i] - minVal) * 10, 0, (maxVal - minVal) * 10, 0, height); int barX = x + i * barWidth; int barY = y + height - barHeight;
display.fillRect(barX, barY, barWidth - 1, barHeight, GxEPD_BLACK); }}工作量:4-8 小时——Node-RED 中的数据聚合、图表渲染、显示优化
7. 安全 IoT 配置(MQTT with TLS)
Section titled “7. 安全 IoT 配置(MQTT with TLS)”买家需求:“我们需要加密通信以确保数据安全。”
请参考第 16 章(MQTT 安全与 TLS)了解完整实现。
电子纸上下文摘要:
- 基于 TLS 的 MQTT 增加约 2-3 秒连接时间
- 固件中需要约 5KB 额外空间存储证书
- TLS 握手导致活动功耗略微增加
- ESP32 原生支持 TLS——无需额外硬件
工作量:4-8 小时——证书生成、固件更新、测试
成本影响分析
Section titled “成本影响分析”| 定制化 | 硬件成本变化 | 开发工作量 | 维护变化 |
|---|---|---|---|
| 2.13” → 7.5” 显示屏 | +$30-40 | 低 | 无 |
| 黑白 → 三色 | +$5-10 | 低 | 无 |
| 触摸屏附加 | +$15-25 | 高 | 更高 |
| 太阳能充电 | +$15-30 | 中 | 年度电池检查 |
| 防水 IP65 | +$20-50 | 中 | 密封检查 |
| TLS 加密 | 无 | 中 | 证书续期 |
| 多页面显示 | 无 | 中 | 无 |
| 定制外壳 | +$10-50+ | 高 | 定制零件 |
何时推荐替代方案
Section titled “何时推荐替代方案”有时电子墨水不是正确选择。在以下情况下推荐替代方案:
| 需求 | 更好替代方案 | 原因 |
|---|---|---|
| 实时更新(< 1 分钟) | LCD + 有线电源 | 电子墨水刷新太慢 |
| 全彩、视频、动画 | 平板电脑(Android/iPad) | 电子墨水限于 2-3 色 |
| 触摸交互 | 电容触摸 LCD | 电子墨水缺乏响应式触摸 |
| 超大显示屏(> 32”) | 商用显示屏 | 电子墨水大尺寸太贵 |
| 音频警报 | 添加蜂鸣器模块 | 电子墨水显示屏无音频 |
| 摄像头图像显示 | 安防监控系统 | 电子墨水无法显示摄像头画面 |
- 大多数定制化是可行的——显示尺寸、品牌、数据源、多页面
- 三色升级可行但刷新速度有显著权衡
- 实时更新和视频在电子墨水上根本不可能——推荐替代方案
- 定制外壳设计通常是周期最长的项目——提前规划
- TLS 和 MQTT 安全在 ESP32 上完全支持但会增加连接开销
- 在承诺前始终在目标环境中测试定制化