Merge pull request #2037 from weebl2000/fix-heltec-E213-E290-eink

Fix Heltec E213 and E290 e-ink board builds
This commit is contained in:
ripplebiz
2026-03-16 13:46:05 +11:00
committed by GitHub
10 changed files with 142 additions and 37 deletions

View File

@@ -59,44 +59,58 @@ bool E213Display::begin() {
} }
void E213Display::powerOn() { void E213Display::powerOn() {
if (_periph_power) {
_periph_power->claim();
} else {
#ifdef PIN_VEXT_EN #ifdef PIN_VEXT_EN
pinMode(PIN_VEXT_EN, OUTPUT); pinMode(PIN_VEXT_EN, OUTPUT);
#ifdef PIN_VEXT_EN_ACTIVE #ifdef PIN_VEXT_EN_ACTIVE
digitalWrite(PIN_VEXT_EN, PIN_VEXT_EN_ACTIVE); digitalWrite(PIN_VEXT_EN, PIN_VEXT_EN_ACTIVE);
#else #else
digitalWrite(PIN_VEXT_EN, LOW); // Active low digitalWrite(PIN_VEXT_EN, LOW); // Active low
#endif #endif
#endif
}
delay(50); // Allow power to stabilize delay(50); // Allow power to stabilize
#endif
} }
void E213Display::powerOff() { void E213Display::powerOff() {
if (_periph_power) {
_periph_power->release();
} else {
#ifdef PIN_VEXT_EN #ifdef PIN_VEXT_EN
#ifdef PIN_VEXT_EN_ACTIVE #ifdef PIN_VEXT_EN_ACTIVE
digitalWrite(PIN_VEXT_EN, !PIN_VEXT_EN_ACTIVE); digitalWrite(PIN_VEXT_EN, !PIN_VEXT_EN_ACTIVE);
#else #else
digitalWrite(PIN_VEXT_EN, HIGH); // Turn off power digitalWrite(PIN_VEXT_EN, HIGH); // Turn off power
#endif #endif
#endif #endif
}
} }
void E213Display::turnOn() { void E213Display::turnOn() {
if (!_init) begin(); if (!_init) begin();
powerOn(); else if (!_isOn) {
powerOn();
display->fastmodeOn(); // Reinitialize display controller after power was cut
}
_isOn = true; _isOn = true;
} }
void E213Display::turnOff() { void E213Display::turnOff() {
powerOff(); if (_isOn) {
_isOn = false; powerOff();
_isOn = false;
}
} }
void E213Display::clear() { void E213Display::clear() {
display->clear(); display->clear();
} }
void E213Display::startFrame(Color bkg) { void E213Display::startFrame(Color bkg) {
display_crc.reset();
// Fill screen with white first to ensure clean background // Fill screen with white first to ensure clean background
display->fillRect(0, 0, width(), height(), WHITE); display->fillRect(0, 0, width(), height(), WHITE);
@@ -107,31 +121,50 @@ void E213Display::startFrame(Color bkg) {
} }
void E213Display::setTextSize(int sz) { void E213Display::setTextSize(int sz) {
display_crc.update<int>(sz);
// The library handles text size internally // The library handles text size internally
display->setTextSize(sz); display->setTextSize(sz);
} }
void E213Display::setColor(Color c) { void E213Display::setColor(Color c) {
display_crc.update<Color>(c);
// implemented in individual display methods // implemented in individual display methods
} }
void E213Display::setCursor(int x, int y) { void E213Display::setCursor(int x, int y) {
display_crc.update<int>(x);
display_crc.update<int>(y);
display->setCursor(x, y); display->setCursor(x, y);
} }
void E213Display::print(const char *str) { void E213Display::print(const char *str) {
display_crc.update<char>(str, strlen(str));
display->print(str); display->print(str);
} }
void E213Display::fillRect(int x, int y, int w, int h) { void E213Display::fillRect(int x, int y, int w, int h) {
display_crc.update<int>(x);
display_crc.update<int>(y);
display_crc.update<int>(w);
display_crc.update<int>(h);
display->fillRect(x, y, w, h, BLACK); display->fillRect(x, y, w, h, BLACK);
} }
void E213Display::drawRect(int x, int y, int w, int h) { void E213Display::drawRect(int x, int y, int w, int h) {
display_crc.update<int>(x);
display_crc.update<int>(y);
display_crc.update<int>(w);
display_crc.update<int>(h);
display->drawRect(x, y, w, h, BLACK); display->drawRect(x, y, w, h, BLACK);
} }
void E213Display::drawXbm(int x, int y, const uint8_t *bits, int w, int h) { void E213Display::drawXbm(int x, int y, const uint8_t *bits, int w, int h) {
display_crc.update<int>(x);
display_crc.update<int>(y);
display_crc.update<int>(w);
display_crc.update<int>(h);
display_crc.update<uint8_t>(bits, w * h / 8);
// Width in bytes for bitmap processing // Width in bytes for bitmap processing
uint16_t widthInBytes = (w + 7) / 8; uint16_t widthInBytes = (w + 7) / 8;
@@ -160,5 +193,9 @@ uint16_t E213Display::getTextWidth(const char *str) {
} }
void E213Display::endFrame() { void E213Display::endFrame() {
uint32_t crc = display_crc.finalize();
if (crc != last_display_crc_value) {
display->update(); display->update();
last_display_crc_value = crc;
}
} }

View File

@@ -5,15 +5,20 @@
#include <SPI.h> #include <SPI.h>
#include <Wire.h> #include <Wire.h>
#include <heltec-eink-modules.h> #include <heltec-eink-modules.h>
#include <CRC32.h>
#include <helpers/RefCountedDigitalPin.h>
// Display driver for E213 e-ink display // Display driver for E213 e-ink display
class E213Display : public DisplayDriver { class E213Display : public DisplayDriver {
BaseDisplay* display=NULL; BaseDisplay* display=NULL;
bool _init = false; bool _init = false;
bool _isOn = false; bool _isOn = false;
RefCountedDigitalPin* _periph_power;
CRC32 display_crc;
uint32_t last_display_crc_value = 0;
public: public:
E213Display() : DisplayDriver(250, 122) {} E213Display(RefCountedDigitalPin* periph_power = NULL) : DisplayDriver(250, 122), _periph_power(periph_power) {}
~E213Display(){ ~E213Display(){
if(display!=NULL) { if(display!=NULL) {
delete display; delete display;
@@ -39,4 +44,4 @@ private:
BaseDisplay* detectEInk(); BaseDisplay* detectEInk();
void powerOn(); void powerOn();
void powerOff(); void powerOff();
}; };

View File

@@ -21,28 +21,41 @@ bool E290Display::begin() {
} }
void E290Display::powerOn() { void E290Display::powerOn() {
if (_periph_power) {
_periph_power->claim();
} else {
#ifdef PIN_VEXT_EN #ifdef PIN_VEXT_EN
pinMode(PIN_VEXT_EN, OUTPUT); pinMode(PIN_VEXT_EN, OUTPUT);
digitalWrite(PIN_VEXT_EN, PIN_VEXT_EN_ACTIVE); digitalWrite(PIN_VEXT_EN, PIN_VEXT_EN_ACTIVE);
delay(50); // Allow power to stabilize
#endif #endif
}
delay(50); // Allow power to stabilize
} }
void E290Display::powerOff() { void E290Display::powerOff() {
if (_periph_power) {
_periph_power->release();
} else {
#ifdef PIN_VEXT_EN #ifdef PIN_VEXT_EN
digitalWrite(PIN_VEXT_EN, !PIN_VEXT_EN_ACTIVE); // Turn off power digitalWrite(PIN_VEXT_EN, !PIN_VEXT_EN_ACTIVE); // Turn off power
#endif #endif
}
} }
void E290Display::turnOn() { void E290Display::turnOn() {
if (!_init) begin(); if (!_init) begin();
powerOn(); else if (!_isOn) {
powerOn();
display.fastmodeOn(); // Reinitialize display controller after power was cut
}
_isOn = true; _isOn = true;
} }
void E290Display::turnOff() { void E290Display::turnOff() {
powerOff(); if (_isOn) {
_isOn = false; powerOff();
_isOn = false;
}
} }
void E290Display::clear() { void E290Display::clear() {
@@ -50,6 +63,8 @@ void E290Display::clear() {
} }
void E290Display::startFrame(Color bkg) { void E290Display::startFrame(Color bkg) {
display_crc.reset();
// Fill screen with white first to ensure clean background // Fill screen with white first to ensure clean background
display.fillRect(0, 0, width(), height(), WHITE); display.fillRect(0, 0, width(), height(), WHITE);
if (bkg == LIGHT) { if (bkg == LIGHT) {
@@ -59,31 +74,50 @@ void E290Display::startFrame(Color bkg) {
} }
void E290Display::setTextSize(int sz) { void E290Display::setTextSize(int sz) {
display_crc.update<int>(sz);
// The library handles text size internally // The library handles text size internally
display.setTextSize(sz); display.setTextSize(sz);
} }
void E290Display::setColor(Color c) { void E290Display::setColor(Color c) {
display_crc.update<Color>(c);
// implemented in individual display methods // implemented in individual display methods
} }
void E290Display::setCursor(int x, int y) { void E290Display::setCursor(int x, int y) {
display_crc.update<int>(x);
display_crc.update<int>(y);
display.setCursor(x, y); display.setCursor(x, y);
} }
void E290Display::print(const char *str) { void E290Display::print(const char *str) {
display_crc.update<char>(str, strlen(str));
display.print(str); display.print(str);
} }
void E290Display::fillRect(int x, int y, int w, int h) { void E290Display::fillRect(int x, int y, int w, int h) {
display_crc.update<int>(x);
display_crc.update<int>(y);
display_crc.update<int>(w);
display_crc.update<int>(h);
display.fillRect(x, y, w, h, BLACK); display.fillRect(x, y, w, h, BLACK);
} }
void E290Display::drawRect(int x, int y, int w, int h) { void E290Display::drawRect(int x, int y, int w, int h) {
display_crc.update<int>(x);
display_crc.update<int>(y);
display_crc.update<int>(w);
display_crc.update<int>(h);
display.drawRect(x, y, w, h, BLACK); display.drawRect(x, y, w, h, BLACK);
} }
void E290Display::drawXbm(int x, int y, const uint8_t *bits, int w, int h) { void E290Display::drawXbm(int x, int y, const uint8_t *bits, int w, int h) {
display_crc.update<int>(x);
display_crc.update<int>(y);
display_crc.update<int>(w);
display_crc.update<int>(h);
display_crc.update<uint8_t>(bits, w * h / 8);
// Width in bytes for bitmap processing // Width in bytes for bitmap processing
uint16_t widthInBytes = (w + 7) / 8; uint16_t widthInBytes = (w + 7) / 8;
@@ -112,5 +146,9 @@ uint16_t E290Display::getTextWidth(const char *str) {
} }
void E290Display::endFrame() { void E290Display::endFrame() {
display.update(); uint32_t crc = display_crc.finalize();
if (crc != last_display_crc_value) {
display.update();
last_display_crc_value = crc;
}
} }

View File

@@ -5,15 +5,20 @@
#include <SPI.h> #include <SPI.h>
#include <Wire.h> #include <Wire.h>
#include <heltec-eink-modules.h> #include <heltec-eink-modules.h>
#include <CRC32.h>
#include <helpers/RefCountedDigitalPin.h>
// Display driver for E290 e-ink display // Display driver for E290 e-ink display
class E290Display : public DisplayDriver { class E290Display : public DisplayDriver {
EInkDisplay_VisionMasterE290 display; EInkDisplay_VisionMasterE290 display;
bool _init = false; bool _init = false;
bool _isOn = false; bool _isOn = false;
RefCountedDigitalPin* _periph_power;
CRC32 display_crc;
uint32_t last_display_crc_value = 0;
public: public:
E290Display() : DisplayDriver(296, 128) {} E290Display(RefCountedDigitalPin* periph_power = NULL) : DisplayDriver(296, 128), _periph_power(periph_power) {}
bool begin(); bool begin();
bool isOn() override { return _isOn; } bool isOn() override { return _isOn; }
@@ -34,4 +39,4 @@ public:
private: private:
void powerOn(); void powerOn();
void powerOff(); void powerOff();
}; };

View File

@@ -40,7 +40,7 @@ lib_deps =
${esp32_base.lib_deps} ${esp32_base.lib_deps}
https://github.com/Quency-D/heltec-eink-modules/archive/563dd41fd850a1bc3039b8723da4f3a20fe1c800.zip https://github.com/Quency-D/heltec-eink-modules/archive/563dd41fd850a1bc3039b8723da4f3a20fe1c800.zip
[env:Heltec_E213_companion_radio_ble_] [env:Heltec_E213_companion_radio_ble]
extends = Heltec_E213_base extends = Heltec_E213_base
build_flags = build_flags =
${Heltec_E213_base.build_flags} ${Heltec_E213_base.build_flags}
@@ -48,6 +48,7 @@ build_flags =
-D MAX_CONTACTS=350 -D MAX_CONTACTS=350
-D MAX_GROUP_CHANNELS=40 -D MAX_GROUP_CHANNELS=40
-D DISPLAY_CLASS=E213Display -D DISPLAY_CLASS=E213Display
-D AUTO_OFF_MILLIS=0
-D BLE_PIN_CODE=123456 ; dynamic, random PIN -D BLE_PIN_CODE=123456 ; dynamic, random PIN
-D BLE_DEBUG_LOGGING=1 -D BLE_DEBUG_LOGGING=1
-D OFFLINE_QUEUE_SIZE=256 -D OFFLINE_QUEUE_SIZE=256
@@ -59,8 +60,9 @@ build_src_filter = ${Heltec_E213_base.build_src_filter}
lib_deps = lib_deps =
${Heltec_E213_base.lib_deps} ${Heltec_E213_base.lib_deps}
densaugeo/base64 @ ~1.4.0 densaugeo/base64 @ ~1.4.0
bakercp/CRC32 @ ^2.0.0
[env:Heltec_E213_companion_radio_usb_] [env:Heltec_E213_companion_radio_usb]
extends = Heltec_E213_base extends = Heltec_E213_base
build_flags = build_flags =
${Heltec_E213_base.build_flags} ${Heltec_E213_base.build_flags}
@@ -68,6 +70,7 @@ build_flags =
-D MAX_CONTACTS=350 -D MAX_CONTACTS=350
-D MAX_GROUP_CHANNELS=40 -D MAX_GROUP_CHANNELS=40
-D DISPLAY_CLASS=E213Display -D DISPLAY_CLASS=E213Display
-D AUTO_OFF_MILLIS=0
-D OFFLINE_QUEUE_SIZE=256 -D OFFLINE_QUEUE_SIZE=256
build_src_filter = ${Heltec_E213_base.build_src_filter} build_src_filter = ${Heltec_E213_base.build_src_filter}
+<helpers/ui/E213Display.cpp> +<helpers/ui/E213Display.cpp>
@@ -77,8 +80,9 @@ build_src_filter = ${Heltec_E213_base.build_src_filter}
lib_deps = lib_deps =
${Heltec_E213_base.lib_deps} ${Heltec_E213_base.lib_deps}
densaugeo/base64 @ ~1.4.0 densaugeo/base64 @ ~1.4.0
bakercp/CRC32 @ ^2.0.0
[env:Heltec_E213_repeater_] [env:Heltec_E213_repeater]
extends = Heltec_E213_base extends = Heltec_E213_base
build_flags = build_flags =
${Heltec_E213_base.build_flags} ${Heltec_E213_base.build_flags}
@@ -94,8 +98,9 @@ build_src_filter = ${Heltec_E213_base.build_src_filter}
lib_deps = lib_deps =
${Heltec_E213_base.lib_deps} ${Heltec_E213_base.lib_deps}
${esp32_ota.lib_deps} ${esp32_ota.lib_deps}
bakercp/CRC32 @ ^2.0.0
; [env:Heltec_E213_repeater_bridge_rs232_] ; [env:Heltec_E213_repeater_bridge_rs232]
; extends = Heltec_E213_base ; extends = Heltec_E213_base
; build_flags = ; build_flags =
; ${Heltec_E213_base.build_flags} ; ${Heltec_E213_base.build_flags}
@@ -118,8 +123,9 @@ lib_deps =
; lib_deps = ; lib_deps =
; ${Heltec_E213_base.lib_deps} ; ${Heltec_E213_base.lib_deps}
; ${esp32_ota.lib_deps} ; ${esp32_ota.lib_deps}
; bakercp/CRC32 @ ^2.0.0
[env:Heltec_E213_repeater_bridge_espnow_] [env:Heltec_E213_repeater_bridge_espnow]
extends = Heltec_E213_base extends = Heltec_E213_base
build_flags = build_flags =
${Heltec_E213_base.build_flags} ${Heltec_E213_base.build_flags}
@@ -140,8 +146,9 @@ build_src_filter = ${Heltec_E213_base.build_src_filter}
lib_deps = lib_deps =
${Heltec_E213_base.lib_deps} ${Heltec_E213_base.lib_deps}
${esp32_ota.lib_deps} ${esp32_ota.lib_deps}
bakercp/CRC32 @ ^2.0.0
[env:Heltec_E213_room_server_] [env:Heltec_E213_room_server]
extends = Heltec_E213_base extends = Heltec_E213_base
build_flags = build_flags =
${Heltec_E213_base.build_flags} ${Heltec_E213_base.build_flags}
@@ -157,3 +164,4 @@ build_src_filter = ${Heltec_E213_base.build_src_filter}
lib_deps = lib_deps =
${Heltec_E213_base.lib_deps} ${Heltec_E213_base.lib_deps}
${esp32_ota.lib_deps} ${esp32_ota.lib_deps}
bakercp/CRC32 @ ^2.0.0

View File

@@ -18,7 +18,7 @@ AutoDiscoverRTCClock rtc_clock(fallback_clock);
SensorManager sensors; SensorManager sensors;
#ifdef DISPLAY_CLASS #ifdef DISPLAY_CLASS
DISPLAY_CLASS display; DISPLAY_CLASS display(&board.periph_power);
MomentaryButton user_btn(PIN_USER_BTN, 1000, true); MomentaryButton user_btn(PIN_USER_BTN, 1000, true);
#endif #endif

View File

@@ -10,7 +10,7 @@ class HeltecE290Board : public ESP32Board {
public: public:
RefCountedDigitalPin periph_power; RefCountedDigitalPin periph_power;
HeltecE290Board() : periph_power(PIN_VEXT_EN) { } HeltecE290Board() : periph_power(PIN_VEXT_EN, PIN_VEXT_EN_ACTIVE) { }
void begin(); void begin();
void enterDeepSleep(uint32_t secs, int pin_wake_btn = -1); void enterDeepSleep(uint32_t secs, int pin_wake_btn = -1);

View File

@@ -34,7 +34,7 @@ lib_deps =
${esp32_base.lib_deps} ${esp32_base.lib_deps}
https://github.com/Quency-D/heltec-eink-modules/archive/563dd41fd850a1bc3039b8723da4f3a20fe1c800.zip https://github.com/Quency-D/heltec-eink-modules/archive/563dd41fd850a1bc3039b8723da4f3a20fe1c800.zip
[env:Heltec_E290_companion_ble_] [env:Heltec_E290_companion_ble]
extends = Heltec_E290_base extends = Heltec_E290_base
build_flags = build_flags =
${Heltec_E290_base.build_flags} ${Heltec_E290_base.build_flags}
@@ -42,6 +42,7 @@ build_flags =
-D MAX_CONTACTS=350 -D MAX_CONTACTS=350
-D MAX_GROUP_CHANNELS=40 -D MAX_GROUP_CHANNELS=40
-D DISPLAY_CLASS=E290Display -D DISPLAY_CLASS=E290Display
-D AUTO_OFF_MILLIS=0
-D BLE_PIN_CODE=123456 ; dynamic, random PIN -D BLE_PIN_CODE=123456 ; dynamic, random PIN
-D BLE_DEBUG_LOGGING=1 -D BLE_DEBUG_LOGGING=1
-D OFFLINE_QUEUE_SIZE=256 -D OFFLINE_QUEUE_SIZE=256
@@ -53,8 +54,9 @@ build_src_filter = ${Heltec_E290_base.build_src_filter}
lib_deps = lib_deps =
${Heltec_E290_base.lib_deps} ${Heltec_E290_base.lib_deps}
densaugeo/base64 @ ~1.4.0 densaugeo/base64 @ ~1.4.0
bakercp/CRC32 @ ^2.0.0
[env:Heltec_E290_companion_usb_] [env:Heltec_E290_companion_usb]
extends = Heltec_E290_base extends = Heltec_E290_base
build_flags = build_flags =
${Heltec_E290_base.build_flags} ${Heltec_E290_base.build_flags}
@@ -62,6 +64,7 @@ build_flags =
-D MAX_CONTACTS=350 -D MAX_CONTACTS=350
-D MAX_GROUP_CHANNELS=40 -D MAX_GROUP_CHANNELS=40
-D DISPLAY_CLASS=E290Display -D DISPLAY_CLASS=E290Display
-D AUTO_OFF_MILLIS=0
-D BLE_PIN_CODE=123456 ; dynamic, random PIN -D BLE_PIN_CODE=123456 ; dynamic, random PIN
-D BLE_DEBUG_LOGGING=1 -D BLE_DEBUG_LOGGING=1
-D OFFLINE_QUEUE_SIZE=256 -D OFFLINE_QUEUE_SIZE=256
@@ -73,8 +76,9 @@ build_src_filter = ${Heltec_E290_base.build_src_filter}
lib_deps = lib_deps =
${Heltec_E290_base.lib_deps} ${Heltec_E290_base.lib_deps}
densaugeo/base64 @ ~1.4.0 densaugeo/base64 @ ~1.4.0
bakercp/CRC32 @ ^2.0.0
[env:Heltec_E290_repeater_] [env:Heltec_E290_repeater]
extends = Heltec_E290_base extends = Heltec_E290_base
build_flags = build_flags =
${Heltec_E290_base.build_flags} ${Heltec_E290_base.build_flags}
@@ -90,8 +94,9 @@ build_src_filter = ${Heltec_E290_base.build_src_filter}
lib_deps = lib_deps =
${Heltec_E290_base.lib_deps} ${Heltec_E290_base.lib_deps}
${esp32_ota.lib_deps} ${esp32_ota.lib_deps}
bakercp/CRC32 @ ^2.0.0
; [env:Heltec_E290_repeater_bridge_rs232_] ; [env:Heltec_E290_repeater_bridge_rs232]
; extends = Heltec_E290_base ; extends = Heltec_E290_base
; build_flags = ; build_flags =
; ${Heltec_E290_base.build_flags} ; ${Heltec_E290_base.build_flags}
@@ -114,8 +119,9 @@ lib_deps =
; lib_deps = ; lib_deps =
; ${Heltec_E290_base.lib_deps} ; ${Heltec_E290_base.lib_deps}
; ${esp32_ota.lib_deps} ; ${esp32_ota.lib_deps}
; bakercp/CRC32 @ ^2.0.0
[env:Heltec_E290_repeater_bridge_espnow_] [env:Heltec_E290_repeater_bridge_espnow]
extends = Heltec_E290_base extends = Heltec_E290_base
build_flags = build_flags =
${Heltec_E290_base.build_flags} ${Heltec_E290_base.build_flags}
@@ -136,8 +142,9 @@ build_src_filter = ${Heltec_E290_base.build_src_filter}
lib_deps = lib_deps =
${Heltec_E290_base.lib_deps} ${Heltec_E290_base.lib_deps}
${esp32_ota.lib_deps} ${esp32_ota.lib_deps}
bakercp/CRC32 @ ^2.0.0
[env:Heltec_E290_room_server_] [env:Heltec_E290_room_server]
extends = Heltec_E290_base extends = Heltec_E290_base
build_flags = build_flags =
${Heltec_E290_base.build_flags} ${Heltec_E290_base.build_flags}
@@ -153,3 +160,4 @@ build_src_filter = ${Heltec_E290_base.build_src_filter}
lib_deps = lib_deps =
${Heltec_E290_base.lib_deps} ${Heltec_E290_base.lib_deps}
${esp32_ota.lib_deps} ${esp32_ota.lib_deps}
bakercp/CRC32 @ ^2.0.0

View File

@@ -18,7 +18,7 @@ AutoDiscoverRTCClock rtc_clock(fallback_clock);
SensorManager sensors; SensorManager sensors;
#ifdef DISPLAY_CLASS #ifdef DISPLAY_CLASS
DISPLAY_CLASS display; DISPLAY_CLASS display(&board.periph_power);
MomentaryButton user_btn(PIN_USER_BTN, 1000, true); MomentaryButton user_btn(PIN_USER_BTN, 1000, true);
#endif #endif

View File

@@ -60,6 +60,7 @@ build_src_filter = ${Heltec_Wireless_Paper_base.build_src_filter}
lib_deps = lib_deps =
${Heltec_Wireless_Paper_base.lib_deps} ${Heltec_Wireless_Paper_base.lib_deps}
densaugeo/base64 @ ~1.4.0 densaugeo/base64 @ ~1.4.0
bakercp/CRC32 @ ^2.0.0
[env:Heltec_Wireless_Paper_repeater] [env:Heltec_Wireless_Paper_repeater]
extends = Heltec_Wireless_Paper_base extends = Heltec_Wireless_Paper_base
@@ -77,6 +78,7 @@ build_src_filter = ${Heltec_Wireless_Paper_base.build_src_filter}
lib_deps = lib_deps =
${Heltec_Wireless_Paper_base.lib_deps} ${Heltec_Wireless_Paper_base.lib_deps}
${esp32_ota.lib_deps} ${esp32_ota.lib_deps}
bakercp/CRC32 @ ^2.0.0
; [env:Heltec_Wireless_Paper_repeater_bridge_rs232] ; [env:Heltec_Wireless_Paper_repeater_bridge_rs232]
; extends = Heltec_Wireless_Paper_base ; extends = Heltec_Wireless_Paper_base
@@ -123,6 +125,7 @@ build_src_filter = ${Heltec_Wireless_Paper_base.build_src_filter}
lib_deps = lib_deps =
${Heltec_Wireless_Paper_base.lib_deps} ${Heltec_Wireless_Paper_base.lib_deps}
${esp32_ota.lib_deps} ${esp32_ota.lib_deps}
bakercp/CRC32 @ ^2.0.0
[env:Heltec_Wireless_Paper_room_server] [env:Heltec_Wireless_Paper_room_server]
extends = Heltec_Wireless_Paper_base extends = Heltec_Wireless_Paper_base
@@ -140,3 +143,4 @@ build_src_filter = ${Heltec_Wireless_Paper_base.build_src_filter}
lib_deps = lib_deps =
${Heltec_Wireless_Paper_base.lib_deps} ${Heltec_Wireless_Paper_base.lib_deps}
${esp32_ota.lib_deps} ${esp32_ota.lib_deps}
bakercp/CRC32 @ ^2.0.0