Skip to content

Customization Possibilities

Customization Possibilities

This section covers how the factory display project can be customized for different buyer requirements. As a pre-sales engineer, you need to quickly assess which customizations are feasible, estimate the effort involved, and provide accurate guidance to buyers. After completing this section, you will be able to:

  • Identify common customization paths for the e-paper display project
  • Estimate effort and complexity for each customization
  • Guide buyers toward feasible customizations
  • Identify when a customization requires a fundamentally different solution
CustomizationEffortComplexityCost ImpactFeasibility
Different display sizeLowSimple+$5-30✅ Easy
Custom background imageLowSimpleNone✅ Easy
Different data sourceMediumModerateNone✅ Feasible
Multi-page displayMediumModerateNone✅ Feasible
Touch input integrationHighComplex+$10-20⚠️ Conditional
Tri-color displayMediumModerate+$5-10✅ Feasible
Larger text / higher contrastLowSimpleNone✅ Easy
Weatherproof enclosureMediumModerate+$20-50✅ Feasible
Solar chargingHighComplex+$15-30⚠️ Requires planning
Real-time updates (< 1 min)⚠️N/AN/A❌ Not possible
Video playback⚠️N/AN/A❌ Impossible

Buyer Request: “I need a larger display that workers can read from 10 meters away.”

Options:

SizeResolutionReadabilityCostBest For
1.54”200×200Close range (1-2m)$10-12Desktop status indicators
2.13”250×122Moderate (2-3m)$12-18Recommended — balanced
2.9”296×128Readable (3-4m)$15-22Shelf labels
4.2”400×300Good (4-6m)$25-35Factory KPI boards
5.83”648×480Very good (6-8m)$35-45Meeting room schedules
7.5”800×480Excellent (8-10m)$40-55Large notice boards

Implementation Changes:

// Change only the constructor — the rest of the code stays the same
// For 4.2" display:
GxEPD2_BW<GxEPD2_420, GxEPD2_420::HEIGHT> display(
GxEPD2_420(EPD_CS, EPD_DC, EPD_RST, EPD_BUSY)
);
// Adjust font sizes for readability
// 4.2" can use larger fonts
display.setFont(&FreeMonoBold24pt7b); // 24pt instead of 18pt

Effort: ~1 hour — update constructor, adjust positions, re-test

Buyer Request: “We want our company logo and a custom layout on the display.”

Options:

  • Company logo in the header
  • Custom color scheme (limited to black/white/red)
  • Branded border design
  • Sectioned layout with company colors

Implementation:

// 1. Create background image with company logo + layout
// 2. Convert to XBM format (see 02-05)
// 3. Display once as background
// 4. Overlay dynamic text on top
void setup() {
display.fillScreen(GxEPD_WHITE);
// Draw branded background (only needs to happen once per deployment)
display.drawInvertedBitmap(0, 0, company_background,
display.width(), display.height(),
GxEPD_BLACK);
// Overlay dynamic data
display.setFont(&FreeMonoBold12pt7b);
display.setCursor(BRANDED_X, BRANDED_Y);
display.print(sensorValue);
display.display();
}

Effort: 2-4 hours — requires design work, image conversion, layout adjustments

Buyer Request: “We want to cycle through different data pages — one for production, one for quality, one for safety.”

Implementation:

// Each page is a different screen layout
// The display cycles through pages on each refresh
RTC_DATA_ATTR int currentPage = 0; // Persists across deep sleep
void setup() {
// ... WiFi and MQTT setup ...
// Display current page
switch (currentPage) {
case 0:
showProductionPage();
break;
case 1:
showQualityPage();
break;
case 2:
showSafetyPage();
break;
}
// Advance to next page for next wake cycle
currentPage = (currentPage + 1) % 3; // 3 pages
// Store in RTC memory — survives deep sleep
}
void showProductionPage() {
display.fillScreen(GxEPD_WHITE);
display.setFont(&FreeMonoBold12pt7b);
display.setCursor(5, 20);
display.print("PRODUCTION");
display.setFont(&FreeMonoBold24pt7b);
display.setCursor(5, 60);
display.print(unitsProduced);
display.display();
}

Effort: 4-8 hours — design each page layout, implement cycling logic, test transitions

Buyer Request: “We want red text for alerts or exceeding thresholds.”

Implementation:

Hardware Change:

Wavehare 2.13" B/W → Wavehare 2.13" B/W/R (black/white/red)

Software Change:

// Include tri-color library
#include <GxEPD2_3C.h>
// Use tri-color constructor
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);
// Draw using three colors
display.fillScreen(GxEPD_WHITE);
display.setTextColor(GxEPD_RED); // Alert values in red
display.setCursor(10, 30);
display.print("CRITICAL");
display.setTextColor(GxEPD_BLACK); // Normal values in black
display.setCursor(10, 60);
display.print("Temperature: 25.5C");
display.display();
}

Trade-off Warning:

⚠️ Tri-color displays have:
- 3-5x slower refresh (15 seconds vs 3 seconds)
- Lower contrast in black/white areas
- Higher power consumption per refresh
- No partial refresh support (full refresh only)
Recommend using tri-color only if red highlighting is essential.

Effort: ~2 hours — hardware swap, library change, color logic update

Buyer Request: “When a value exceeds a threshold, the display should show an alert.”

Implementation in Node-RED:

// Function node — threshold detection
const temperature = parseFloat(msg.payload.temperature);
if (temperature > 30) {
// Send alert payload
msg.payload = JSON.stringify({
alert: true,
message: "HIGH TEMP ALERT: " + temperature + "°C",
bg_color: "RED",
timestamp: new Date().toISOString()
});
} else {
// Send normal payload
msg.payload = JSON.stringify({
alert: false,
temperature: temperature,
humidity: msg.payload.humidity,
timestamp: new Date().toISOString()
});
}
return msg;

On ESP32 side:

void processMQTTMessage(const char* json) {
JsonDocument doc;
deserializeJson(doc, json);
bool alert = doc["alert"] | false;
if (alert) {
// Show alert screen
display.fillScreen(GxEPD_WHITE);
display.setFont(&FreeMonoBold12pt7b);
display.setTextColor(GxEPD_BLACK);
// Draw alert border
display.drawRect(2, 2, display.width()-4, display.height()-4, GxEPD_BLACK);
const char* message = doc["message"] | "ALERT";
display.setCursor(10, 40);
display.print(message);
} else {
// Show normal display
showNormalDisplay(doc);
}
}

Effort: 2-4 hours — Node-RED logic + display handler

Buyer Request: “Show a mini chart of the last 24 hours of temperature data.”

Implementation: Since e-ink cannot render complex charts well, use a simplified approach:

// Simplified mini bar chart
void drawMiniChart(int x, int y, int width, int height, float* values, int count) {
float minVal = 20, maxVal = 30; // Known range for temperatures
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);
}
}

Effort: 4-8 hours — data aggregation in Node-RED, chart rendering, display optimization

7. Secure IoT Configuration (MQTT with TLS)

Section titled “7. Secure IoT Configuration (MQTT with TLS)”

Buyer Request: “We need encrypted communication for data security.”

Refer to Chapter 16 (MQTT Security with TLS) for complete implementation.

Summary for e-paper context:

  • MQTT over TLS adds ~2-3 seconds to connection time
  • Requires ~5KB additional firmware space for certificates
  • Increases active power consumption slightly due to TLS handshake
  • ESP32 supports TLS natively — no additional hardware needed

Effort: 4-8 hours — certificate generation, firmware update, testing

CustomizationHardware Cost ΔDev EffortMaintenance Δ
2.13” → 7.5” display+$30-40LowNone
B/W → Tri-color+$5-10LowNone
Touch screen add-on+$15-25HighHigher
Solar charging+$15-30MediumAnnual battery check
Weatherproof IP65+$20-50MediumSeal inspection
TLS encryptionNoneMediumCertificate renewal
Multi-page displayNoneMediumNone
Custom enclosure+$10-50+HighCustom parts

Sometimes e-ink is not the right choice. Recommend alternatives when:

RequirementBetter AlternativeReason
Real-time updates (< 1 min)LCD + wired powerE-ink refresh too slow
Full color, video, animationTablet (Android/iPad)E-ink limited to 2-3 colors
Touch interactionCapacitive touch LCDE-ink lacks responsive touch
Very large display (> 32”)Commercial display screenE-ink too expensive at large sizes
Audio alarmsAdd buzzer moduleE-ink displays no audio
Camera image displaySecurity monitor systemE-ink cannot show camera feeds
  1. Most customizations are feasible — display size, branding, data sources, multi-page
  2. Tri-color upgrade is possible but has significant refresh speed trade-offs
  3. Real-time updates and video are fundamentally impossible on e-ink — recommend alternatives
  4. Custom enclosure design is often the longest-lead-time item — plan ahead
  5. TLS and MQTT security are fully supported on ESP32 but add connection overhead
  6. Always test customizations in the target environment before committing to a buyer

Target Audience: Alibaba.com IoT Pre-sales Engineers
Status: ✅ Completed