跳转到内容

定制化可能性

定制化可能性

本节介绍如何根据不同买家需求定制工厂显示项目。作为售前工程师,你需要快速评估哪些定制化可行,估算所需工作量,并提供准确指导。完成本节后,你将能够:

  • 识别电子纸显示项目的常见定制化路径
  • 估算每种定制化的工作量和复杂度
  • 引导买家选择可行的定制化方案
  • 确定何时定制化需要根本不同的解决方案
定制化工作量复杂度成本影响可行性
不同显示尺寸简单+$5-30✅ 容易
自定义背景图像简单✅ 容易
不同数据源中等✅ 可行
多页面显示中等✅ 可行
触摸输入集成复杂+$10-20⚠️ 有条件
三色显示屏中等+$5-10✅ 可行
更大文本/更高对比度简单✅ 容易
防水防尘外壳中等+$20-50✅ 可行
太阳能充电复杂+$15-30⚠️ 需要规划
实时更新(< 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 小时——更新构造函数、调整位置、重新测试

买家需求:“我们希望在显示屏上显示公司标志和自定义布局。”

选项

  • 头部公司标志
  • 自定义配色方案(限于黑白/红)
  • 品牌边框设计
  • 带公司颜色的分区布局

实现

// 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 小时——需要设计工作、图像转换、布局调整

买家需求:“我们想要循环显示不同的数据页面——一个用于生产、一个用于质量、一个用于安全。”

实现

// 每个页面是不同的屏幕布局
// 显示屏在每次刷新时循环切换页面
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 小时——设计每个页面布局、实现循环逻辑、测试切换

买家需求:“我们想要警报或超阈值时显示红色文本。”

实现

硬件变更

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 小时——硬件更换、库更改、颜色逻辑更新

买家需求:“当某个值超过阈值时,显示屏应显示警报。”

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 逻辑 + 显示处理器

买家需求:“显示过去 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 中的数据聚合、图表渲染、显示优化

买家需求:“我们需要加密通信以确保数据安全。”

请参考第 16 章(MQTT 安全与 TLS)了解完整实现。

电子纸上下文摘要

  • 基于 TLS 的 MQTT 增加约 2-3 秒连接时间
  • 固件中需要约 5KB 额外空间存储证书
  • TLS 握手导致活动功耗略微增加
  • ESP32 原生支持 TLS——无需额外硬件

工作量:4-8 小时——证书生成、固件更新、测试

定制化硬件成本变化开发工作量维护变化
2.13” → 7.5” 显示屏+$30-40
黑白 → 三色+$5-10
触摸屏附加+$15-25更高
太阳能充电+$15-30年度电池检查
防水 IP65+$20-50密封检查
TLS 加密证书续期
多页面显示
定制外壳+$10-50+定制零件

有时电子墨水不是正确选择。在以下情况下推荐替代方案:

需求更好替代方案原因
实时更新(< 1 分钟)LCD + 有线电源电子墨水刷新太慢
全彩、视频、动画平板电脑(Android/iPad)电子墨水限于 2-3 色
触摸交互电容触摸 LCD电子墨水缺乏响应式触摸
超大显示屏(> 32”)商用显示屏电子墨水大尺寸太贵
音频警报添加蜂鸣器模块电子墨水显示屏无音频
摄像头图像显示安防监控系统电子墨水无法显示摄像头画面
  1. 大多数定制化是可行的——显示尺寸、品牌、数据源、多页面
  2. 三色升级可行但刷新速度有显著权衡
  3. 实时更新和视频在电子墨水上根本不可能——推荐替代方案
  4. 定制外壳设计通常是周期最长的项目——提前规划
  5. TLS 和 MQTT 安全在 ESP32 上完全支持但会增加连接开销
  6. 在承诺前始终在目标环境中测试定制化