Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions src/drivers/devices/esp322432s028r.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
#define LED_PIN 4 // Red pin
#define LED_PIN_G 16 // Green pin
#define LED_PIN_B 17 // Green pin
#define LDR_PIN 34 // Light sensor (LDR) pin for auto-brightness

// Pin defines for the SD card interface
// This is working for both, ESP32 2432S028R and ESP 2432S028_2USB boards
Expand Down
87 changes: 78 additions & 9 deletions src/drivers/displays/esp23_2432s028r.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,20 @@ extern bool invertColors;
extern TSettings Settings;
bool hasChangedScreen = true;

// LDR auto-brightness on GPIO 34
const unsigned long LDR_READ_INTERVAL = 500;
const uint16_t LDR_MIN = 0; // Minimum LDR reading (brightest - no resistance)
const uint16_t LDR_MAX = 500; // Maximum LDR reading (darkest - high resistance)
const uint8_t BRIGHTNESS_MIN = 20; // Minimum screen brightness
const uint8_t BRIGHTNESS_TRANSITION_STEP = 2; // Smooth transition step size
const unsigned long BRIGHTNESS_TRANSITION_DELAY = 20; // ms between steps

unsigned long lastLdrRead = 0;
unsigned long lastBrightnessTransition = 0;
uint8_t currentBrightnessLevel = 250;
uint8_t targetBrightnessLevel = 250;
uint8_t savedBrightnessLevel = 250;

void getChipInfo(void){
Serial.print("Chip: ");
Serial.println(ESP.getChipModel());
Expand Down Expand Up @@ -75,12 +89,6 @@ void esp32_2432S028R_Init(void)

TFT_eTouchBase::Calibation calibation = { 233, 3785, 3731, 120, 2 };
touch.setCalibration(calibation);

// Configuring screen backlight brightness using ledcontrol channel 0.
// Using 5000Hz in 8bit resolution, which gives 0-255 possible duty cycle setting.
ledcSetup(0, 5000, 8);
ledcAttachPin(TFT_BL, 0);
ledcWrite(0, Settings.Brightness);

//background.createSprite(WIDTH, HEIGHT); // Background Sprite
//background.setSwapBytes(true);
Expand All @@ -101,6 +109,31 @@ void esp32_2432S028R_Init(void)
digitalWrite(LED_PIN, LOW);
digitalWrite(LED_PIN_B, HIGH);
digitalWrite(LED_PIN_G, HIGH);

// Setup LDR auto-brightness on GPIO 34
pinMode(LDR_PIN, INPUT);
adcAttachPin(LDR_PIN);
analogSetAttenuation(ADC_0db); // 0-1.1V range for maximum sensitivity
analogSetWidth(12);

// Configuring screen backlight brightness using ledcontrol channel 0
// Using 5000Hz in 8bit resolution, which gives 0-255 possible duty cycle setting
ledcSetup(0, 5000, 8);
ledcAttachPin(TFT_BL, 0);

// Set initial brightness based on LDR setting
if (Settings.useLDR) {
// LDR enabled: map LDR value to brightness range (min to Settings.Brightness as max)
int ldrValue = constrain(analogRead(LDR_PIN), LDR_MIN, LDR_MAX);
currentBrightnessLevel = map(ldrValue, LDR_MIN, LDR_MAX, Settings.Brightness, BRIGHTNESS_MIN);
} else {
// LDR disabled: use Settings.Brightness as fixed value
currentBrightnessLevel = Settings.Brightness;
}
targetBrightnessLevel = currentBrightnessLevel;
savedBrightnessLevel = currentBrightnessLevel;
ledcWrite(0, currentBrightnessLevel);

pData.bestDifficulty = "0";
pData.workersHash = "0";
pData.workersCount = 0;
Expand All @@ -113,9 +146,16 @@ void esp32_2432S028R_AlternateScreenState(void)
int screen_state_duty = ledcRead(0);
// Switching the duty cycle for the ledc channel, where the TFT_BL pin is attached.
if (screen_state_duty > 0) {
// Save current brightness before turning off
savedBrightnessLevel = currentBrightnessLevel;
currentBrightnessLevel = 0;
targetBrightnessLevel = 0;
ledcWrite(0, 0);
} else {
ledcWrite(0, Settings.Brightness);
// Restore saved brightness or use Settings.Brightness as fallback
currentBrightnessLevel = savedBrightnessLevel ? savedBrightnessLevel : Settings.Brightness;
targetBrightnessLevel = currentBrightnessLevel;
ledcWrite(0, currentBrightnessLevel);
}
}

Expand Down Expand Up @@ -534,8 +574,37 @@ char currentScreen = 0;

void esp32_2432S028R_DoLedStuff(unsigned long frame)
{
unsigned long currentMillis = millis();
// / Check the touch coordinates 110x185 210x240
unsigned long currentMillis = millis();

// Smooth brightness transition
if (currentBrightnessLevel != targetBrightnessLevel && currentMillis - lastBrightnessTransition >= BRIGHTNESS_TRANSITION_DELAY)
{
lastBrightnessTransition = currentMillis;

if (currentBrightnessLevel < targetBrightnessLevel) {
currentBrightnessLevel = min((uint8_t)(currentBrightnessLevel + BRIGHTNESS_TRANSITION_STEP), targetBrightnessLevel);
} else {
currentBrightnessLevel = max((uint8_t)(currentBrightnessLevel - BRIGHTNESS_TRANSITION_STEP), targetBrightnessLevel);
}
ledcWrite(0, currentBrightnessLevel);
}

// LDR auto-brightness adjustment (only when enabled and screen is on)
if (Settings.useLDR && currentMillis - lastLdrRead >= LDR_READ_INTERVAL)
{
lastLdrRead = currentMillis;

int ldrValue = constrain(analogRead(LDR_PIN), LDR_MIN, LDR_MAX);
uint8_t newTargetBrightness = map(ldrValue, LDR_MIN, LDR_MAX, Settings.Brightness, BRIGHTNESS_MIN);

// Only update if brightness changed and screen is on
if (newTargetBrightness != savedBrightnessLevel && currentBrightnessLevel > 0) {
savedBrightnessLevel = newTargetBrightness;
targetBrightnessLevel = newTargetBrightness;
}
}

// Check the touch coordinates 110x185 210x240
if (currentMillis - previousTouchMillis >= 500)
{
int16_t t_x , t_y; // To store the touch coordinates
Expand Down
5 changes: 5 additions & 0 deletions src/drivers/storage/SDCard.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,11 @@ bool SDCard::loadConfigFile(TSettings* Settings)
} else {
Settings->invertColors = false;
}
if (json.containsKey(JSON_KEY_USELDR)) {
Settings->useLDR = json[JSON_KEY_USELDR].as<bool>();
} else {
Settings->useLDR = false;
}
if (json.containsKey(JSON_KEY_BRIGHTNESS)) {
Settings->Brightness = json[JSON_KEY_BRIGHTNESS].as<int>();
} else {
Expand Down
6 changes: 6 additions & 0 deletions src/drivers/storage/nvMemory.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ bool nvMemory::saveConfig(TSettings* Settings)
json[JSON_SPIFFS_KEY_TIMEZONE] = Settings->Timezone;
json[JSON_SPIFFS_KEY_STATS2NV] = Settings->saveStats;
json[JSON_SPIFFS_KEY_INVCOLOR] = Settings->invertColors;
json[JSON_SPIFFS_KEY_USELDR] = Settings->useLDR;
json[JSON_SPIFFS_KEY_BRIGHTNESS] = Settings->Brightness;

// Open config file
Expand Down Expand Up @@ -104,6 +105,11 @@ bool nvMemory::loadConfig(TSettings* Settings)
} else {
Settings->invertColors = false;
}
if (json.containsKey(JSON_SPIFFS_KEY_USELDR)) {
Settings->useLDR = json[JSON_SPIFFS_KEY_USELDR].as<bool>();
} else {
Settings->useLDR = false;
}
if (json.containsKey(JSON_SPIFFS_KEY_BRIGHTNESS)) {
Settings->Brightness = json[JSON_SPIFFS_KEY_BRIGHTNESS].as<int>();
} else {
Expand Down
4 changes: 4 additions & 0 deletions src/drivers/storage/storage.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
#define DEFAULT_SAVESTATS false
#define DEFAULT_INVERTCOLORS false
#define DEFAULT_BRIGHTNESS 250
#define DEFAULT_USELDR false

// JSON config files
#define JSON_CONFIG_FILE "/config.json"
Expand All @@ -35,6 +36,7 @@
#define JSON_KEY_STATS2NV "SaveStats"
#define JSON_KEY_INVCOLOR "invertColors"
#define JSON_KEY_BRIGHTNESS "Brightness"
#define JSON_KEY_USELDR "useLDR"

// JSON config file SPIFFS (different for backward compatibility with existing devices)
#define JSON_SPIFFS_KEY_POOLURL "poolString"
Expand All @@ -45,6 +47,7 @@
#define JSON_SPIFFS_KEY_STATS2NV "saveStatsToNVS"
#define JSON_SPIFFS_KEY_INVCOLOR "invertColors"
#define JSON_SPIFFS_KEY_BRIGHTNESS "Brightness"
#define JSON_SPIFFS_KEY_USELDR "useLDR"

// settings
struct TSettings
Expand All @@ -59,6 +62,7 @@ struct TSettings
bool saveStats{ DEFAULT_SAVESTATS };
bool invertColors{ DEFAULT_INVERTCOLORS };
int Brightness{ DEFAULT_BRIGHTNESS };
bool useLDR{ DEFAULT_USELDR };
};

#endif // _STORAGE_H_
94 changes: 11 additions & 83 deletions src/wManager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -253,10 +253,17 @@ void init_WifiManager()
wm.addParameter(&invertColors);
#endif
#if defined(ESP32_2432S028R) || defined(ESP32_2432S028_2USB)
char brightnessConvValue[2];
char checkboxParams3[24] = "type=\"checkbox\"";
if (Settings.useLDR)
{
strcat(checkboxParams3, " checked");
}
WiFiManagerParameter useLDR("useLDR", "Auto-brightness", "T", 2, checkboxParams3, WFM_LABEL_AFTER);
wm.addParameter(&useLDR);
char brightnessConvValue[4];
sprintf(brightnessConvValue, "%d", Settings.Brightness);
// Text box (Number) - 3 characters maximum
WiFiManagerParameter brightness_text_box_num("Brightness", "Screen backlight Duty Cycle (0-255)", brightnessConvValue, 3);
WiFiManagerParameter brightness_text_box_num("Brightness", "0-255 (max when auto, fixed when manual)", brightnessConvValue, 3);
wm.addParameter(&brightness_text_box_num);
#endif

Expand All @@ -283,8 +290,7 @@ void init_WifiManager()
Settings.saveStats = (strncmp(save_stats_to_nvs.getValue(), "T", 1) == 0);
#if defined(ESP32_2432S028R) || defined(ESP32_2432S028_2USB)
Settings.invertColors = (strncmp(invertColors.getValue(), "T", 1) == 0);
#endif
#if defined(ESP32_2432S028R) || defined(ESP32_2432S028_2USB)
Settings.useLDR = (strlen(useLDR.getValue()) > 0);
Settings.Brightness = atoi(brightness_text_box_num.getValue());
#endif
nvMem.saveConfig(&Settings);
Expand Down Expand Up @@ -316,8 +322,7 @@ void init_WifiManager()
Settings.saveStats = (strncmp(save_stats_to_nvs.getValue(), "T", 1) == 0);
#if defined(ESP32_2432S028R) || defined(ESP32_2432S028_2USB)
Settings.invertColors = (strncmp(invertColors.getValue(), "T", 1) == 0);
#endif
#if defined(ESP32_2432S028R) || defined(ESP32_2432S028_2USB)
Settings.useLDR = (strlen(useLDR.getValue()) > 0);
Settings.Brightness = atoi(brightness_text_box_num.getValue());
#endif
nvMem.saveConfig(&Settings);
Expand All @@ -329,89 +334,12 @@ void init_WifiManager()

//Conectado a la red Wifi
if (WiFi.status() == WL_CONNECTED) {
//tft.pushImage(0, 0, MinerWidth, MinerHeight, MinerScreen);
Serial.println("");
Serial.println("WiFi connected");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());


// Lets deal with the user config values

// Copy the string value
Settings.PoolAddress = pool_text_box.getValue();
//strncpy(Settings.PoolAddress, pool_text_box.getValue(), sizeof(Settings.PoolAddress));
Serial.print("PoolString: ");
Serial.println(Settings.PoolAddress);

//Convert the number value
Settings.PoolPort = atoi(port_text_box_num.getValue());
Serial.print("portNumber: ");
Serial.println(Settings.PoolPort);

// Copy the string value
strncpy(Settings.PoolPassword, password_text_box.getValue(), sizeof(Settings.PoolPassword));
Serial.print("poolPassword: ");
Serial.println(Settings.PoolPassword);

// Copy the string value
strncpy(Settings.BtcWallet, addr_text_box.getValue(), sizeof(Settings.BtcWallet));
Serial.print("btcString: ");
Serial.println(Settings.BtcWallet);

//Convert the number value
Settings.Timezone = atoi(time_text_box_num.getValue());
Serial.print("TimeZone fromUTC: ");
Serial.println(Settings.Timezone);

#if defined(ESP32_2432S028R) || defined(ESP32_2432S028_2USB)
Settings.invertColors = (strncmp(invertColors.getValue(), "T", 1) == 0);
Serial.print("Invert Colors: ");
Serial.println(Settings.invertColors);
#endif

#if defined(ESP32_2432S028R) || defined(ESP32_2432S028_2USB)
Settings.Brightness = atoi(brightness_text_box_num.getValue());
Serial.print("Brightness: ");
Serial.println(Settings.Brightness);
#endif

}

// Lets deal with the user config values

// Copy the string value
Settings.PoolAddress = pool_text_box.getValue();
//strncpy(Settings.PoolAddress, pool_text_box.getValue(), sizeof(Settings.PoolAddress));
Serial.print("PoolString: ");
Serial.println(Settings.PoolAddress);

//Convert the number value
Settings.PoolPort = atoi(port_text_box_num.getValue());
Serial.print("portNumber: ");
Serial.println(Settings.PoolPort);

// Copy the string value
strncpy(Settings.PoolPassword, password_text_box.getValue(), sizeof(Settings.PoolPassword));
Serial.print("poolPassword: ");
Serial.println(Settings.PoolPassword);

// Copy the string value
strncpy(Settings.BtcWallet, addr_text_box.getValue(), sizeof(Settings.BtcWallet));
Serial.print("btcString: ");
Serial.println(Settings.BtcWallet);

//Convert the number value
Settings.Timezone = atoi(time_text_box_num.getValue());
Serial.print("TimeZone fromUTC: ");
Serial.println(Settings.Timezone);

#ifdef ESP32_2432S028R
Settings.invertColors = (strncmp(invertColors.getValue(), "T", 1) == 0);
Serial.print("Invert Colors: ");
Serial.println(Settings.invertColors);
#endif

// Save the custom parameters to FS
if (shouldSaveConfig)
{
Expand Down