Merge pull request #545 from mrthiti/feature/add-esp32-c3-0.42-oled

feat: support ESP32-C3 and ESP32-S3 0.42 OLED
This commit is contained in:
BitMaker 2025-01-13 14:32:37 +01:00 committed by GitHub
commit 62faf313b6
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
8 changed files with 289 additions and 0 deletions

View File

@ -0,0 +1,38 @@
{
"build": {
"arduino": {
"ldscript": "esp32s3_out.ld",
"partitions": "default.csv"
},
"core": "esp32",
"extra_flags": [
"-DARDUINO_ESP32S3_DEV",
"-DARDUINO_USB_MODE=1",
"-DARDUINO_RUNNING_CORE=1",
"-DARDUINO_EVENT_RUNNING_CORE=1"
],
"f_cpu": "240000000L",
"f_flash": "80000000L",
"flash_mode": "qio",
"hwids": [["0x239A", "0x811B"]],
"mcu": "esp32s3",
"variant": "esp32s3"
},
"connectivity": ["bluetooth", "wifi"],
"debug": {
"default_tool": "esp-builtin",
"onboard_tools": ["esp-builtin"],
"openocd_target": "esp32s3.cfg"
},
"frameworks": ["arduino", "espidf"],
"name": "ESP32 S3 0.42 OLED (4 MB QD, 2MB PSRAM)",
"upload": {
"flash_size": "4MB",
"maximum_ram_size": 532480,
"maximum_size": 4194304,
"require_upload_port": true,
"speed": 460800
},
"url": "https://docs.espressif.com/projects/esp-idf/en/latest/esp32s3/hw-reference/esp32s3/user-guide-devkitc-1.html",
"vendor": "Espressif"
}

View File

@ -378,6 +378,64 @@ lib_ignore =
;--------------------------------------------------------------------
[env:ESP32-C3-042-OLED]
platform = espressif32@6.6.0
board = esp32-c3-devkitm-1
framework = arduino
monitor_filters =
esp32_exception_decoder
time
log2file
monitor_speed = 115200
upload_speed = 115200
board_build.partitions = huge_app.csv
build_flags =
-D ARDUINO_USB_MODE=1
-D ARDUINO_USB_CDC_ON_BOOT=1
-D ESP32_C3_042_OLED
-D PIN_BUTTON_1=9
lib_deps =
https://github.com/takkaO/OpenFontRender#v1.2
bblanchon/ArduinoJson@^6.21.5
https://github.com/tzapu/WiFiManager.git#v2.0.17
mathertel/oneButton@^2.6.1
arduino-libraries/NTPClient@^3.2.1
olikraus/U8g2@^2.34.17
lib_ignore =
TFT_eSPI
HANSOLOminerv2
;--------------------------------------------------------------------
[env:ESP32-S3-042-OLED]
platform = espressif32@6.6.0
board = esp32-s3-0.42oled
framework = arduino
monitor_filters =
esp32_exception_decoder
time
log2file
monitor_speed = 115200
upload_speed = 115200
board_build.partitions = huge_app.csv
build_flags =
-D ARDUINO_USB_MODE=1
-D ARDUINO_USB_CDC_ON_BOOT=1
-D ESP32_S3_042_OLED
-D PIN_BUTTON_1=0
lib_deps =
https://github.com/takkaO/OpenFontRender#v1.2
bblanchon/ArduinoJson@^6.21.5
https://github.com/tzapu/WiFiManager.git#v2.0.17
mathertel/oneButton@^2.6.1
arduino-libraries/NTPClient@^3.2.1
olikraus/U8g2@^2.34.17
lib_ignore =
TFT_eSPI
HANSOLOminerv2
;--------------------------------------------------------------------
[env:ESP32-S3-devKitv1]
platform = espressif32@6.6.0
board = esp32-s3-devkitc-1

View File

@ -9,6 +9,10 @@
#include "M5Stick-C-Plus2.h"
#elif defined(DEVKITV1)
#include "esp32DevKit.h"
#elif defined(ESP32_C3_042_OLED)
#include "esp32C3042OLED.h"
#elif defined(ESP32_S3_042_OLED)
#include "esp32S3042OLED.h"
#elif defined(TDISPLAY)
#include "lilygoS3TDisplay.h"
#elif defined(NERDMINER_S3_AMOLED)

View File

@ -0,0 +1,14 @@
#ifndef _ESP32_C3_042_OLED_H
#define _ESP32_C3_042_OLED_H
#ifndef SDA_PIN
#define SDA_PIN 5
#endif
#ifndef SCL_PIN
#define SCL_PIN 6
#endif
#define OLED_042_DISPLAY
#endif

View File

@ -0,0 +1,14 @@
#ifndef _ESP32_S3_042_OLED_H
#define _ESP32_S3_042_OLED_H
#ifndef SDA_PIN
#define SDA_PIN 41
#endif
#ifndef SCL_PIN
#define SCL_PIN 40
#endif
#define OLED_042_DISPLAY
#endif

View File

@ -16,6 +16,10 @@ DisplayDriver *currentDisplayDriver = &wt32DisplayDriver;
DisplayDriver *currentDisplayDriver = &ledDisplayDriver;
#endif
#ifdef OLED_042_DISPLAY
DisplayDriver *currentDisplayDriver = &oled042DisplayDriver;
#endif
#ifdef T_DISPLAY
DisplayDriver *currentDisplayDriver = &tDisplayDriver;
#endif

View File

@ -32,6 +32,7 @@ extern DisplayDriver m5stackDisplayDriver;
extern DisplayDriver wt32DisplayDriver;
extern DisplayDriver noDisplayDriver;
extern DisplayDriver ledDisplayDriver;
extern DisplayDriver oled042DisplayDriver;
extern DisplayDriver tDisplayDriver;
extern DisplayDriver amoledDisplayDriver;
extern DisplayDriver dongleDisplayDriver;

View File

@ -0,0 +1,156 @@
#include "displayDriver.h"
#ifdef OLED_042_DISPLAY
#include <U8g2lib.h>
#include "monitor.h"
#ifdef U8X8_HAVE_HW_SPI
#include <SPI.h>
#endif
#ifdef U8X8_HAVE_HW_I2C
#include <Wire.h>
#endif
static uint8_t btc_icon[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xF0, 0x03, 0x00, 0x00, 0xFE, 0x1F, 0x00, 0x00, 0xFF, 0x3F, 0x00,
0x80, 0xFF, 0x7F, 0x00, 0xC0, 0xFF, 0xFF, 0x00, 0xE0, 0x3F, 0xFF, 0x01,
0xF0, 0x3F, 0xFF, 0x03, 0xF0, 0x0F, 0xFC, 0x03, 0xF0, 0x0F, 0xF8, 0x03,
0xF8, 0xCF, 0xF9, 0x07, 0xF8, 0xCF, 0xF9, 0x07, 0xF8, 0x0F, 0xFC, 0x07,
0xF8, 0x0F, 0xF8, 0x07, 0xF8, 0xCF, 0xF9, 0x07, 0xF8, 0xCF, 0xF9, 0x07,
0xF0, 0x0F, 0xF8, 0x03, 0xF0, 0x0F, 0xFC, 0x03, 0xF0, 0x3F, 0xFF, 0x03,
0xE0, 0x3F, 0xFF, 0x01, 0xC0, 0xFF, 0xFF, 0x00, 0x80, 0xFF, 0x7F, 0x00,
0x00, 0xFF, 0x3F, 0x00, 0x00, 0xFE, 0x1F, 0x00, 0x00, 0xF0, 0x03, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
static uint8_t setup_icon[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x01, 0x00, 0x00, 0xE0, 0x01, 0x00,
0x00, 0xF0, 0x03, 0x00, 0xC0, 0xF0, 0xC3, 0x00, 0xE0, 0xF9, 0xE3, 0x01,
0xF0, 0xFF, 0xFF, 0x03, 0xF0, 0xFF, 0xFF, 0x03, 0xE0, 0xFF, 0xFF, 0x01,
0xC0, 0xFF, 0xFF, 0x00, 0xC0, 0xFF, 0xFF, 0x00, 0xE0, 0x1F, 0xFE, 0x00,
0xF8, 0x0F, 0xFC, 0x07, 0xFE, 0x07, 0xF8, 0x1F, 0xFE, 0x07, 0xF8, 0x1F,
0xFE, 0x07, 0xF8, 0x1F, 0xFE, 0x07, 0xF8, 0x1F, 0xF8, 0x0F, 0xFC, 0x07,
0xE0, 0x1F, 0xFE, 0x00, 0xC0, 0xFF, 0xFF, 0x00, 0xC0, 0xFF, 0xFF, 0x00,
0xE0, 0xFF, 0xFF, 0x01, 0xF0, 0xFF, 0xFF, 0x03, 0xF0, 0xFF, 0xFF, 0x03,
0xE0, 0xF9, 0xE3, 0x01, 0xC0, 0xF0, 0xC3, 0x00, 0x00, 0xF0, 0x03, 0x00,
0x00, 0xE0, 0x01, 0x00, 0x00, 0xE0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
};
U8G2_SSD1306_72X40_ER_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);
void clearScreen(void) {
u8g2.clearBuffer();
u8g2.sendBuffer();
}
void serialPrint(unsigned long mElapsed) {
mining_data data = getMiningData(mElapsed);
// Print hashrate to serial
Serial.printf(">>> Completed %s share(s), %s Khashes, avg. hashrate %s KH/s\n",
data.completedShares.c_str(), data.totalKHashes.c_str(), data.currentHashRate.c_str());
// Print extended data to serial for no display devices
Serial.printf(">>> Valid blocks: %s\n", data.valids.c_str());
Serial.printf(">>> Block templates: %s\n", data.templates.c_str());
Serial.printf(">>> Best difficulty: %s\n", data.bestDiff.c_str());
Serial.printf(">>> 32Bit shares: %s\n", data.completedShares.c_str());
Serial.printf(">>> Temperature: %s\n", data.temp.c_str());
Serial.printf(">>> Total MHashes: %s\n", data.totalMHashes.c_str());
Serial.printf(">>> Time mining: %s\n", data.timeMining.c_str());
}
void oledDisplay_Init(void)
{
Serial.println("OLED 0.42 display driver initialized");
Wire.begin(SDA_PIN, SCL_PIN);
u8g2.begin();
u8g2.clear();
u8g2.setFlipMode(1);
clearScreen();
}
void oledDisplay_AlternateScreenState(void)
{
Serial.println("Switching display state");
}
void oledDisplay_AlternateRotation(void)
{
}
void oledDisplay_Screen1(unsigned long mElapsed)
{
mining_data data = getMiningData(mElapsed);
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_helvB18_tf);
u8g2.drawStr(0, 20, data.currentHashRate.c_str());
u8g2.setFont(u8g2_font_helvB08_tf);
u8g2.drawStr(45, 36, "KH/s");
u8g2.sendBuffer();
serialPrint(mElapsed);
}
void oledDisplay_Screen2(unsigned long mElapsed)
{
mining_data data = getMiningData(mElapsed);
char temp[8];
sprintf(temp, "%s°c", data.temp.c_str());
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_helvB18_tf);
u8g2.drawUTF8(0, 20, temp);
u8g2.sendBuffer();
serialPrint(mElapsed);
}
void oledDisplay_LoadingScreen(void)
{
Serial.println("Initializing...");
u8g2.clearBuffer();
u8g2.drawXBMP(20,5,30,30, btc_icon);
u8g2.sendBuffer();
}
void oledDisplay_SetupScreen(void)
{
Serial.println("Setup...");
u8g2.clearBuffer();
u8g2.drawXBMP(20,0,30,30, setup_icon);
u8g2.setFont(u8g2_font_helvB08_tf);
u8g2.drawUTF8(20, 38, "Setup");
u8g2.sendBuffer();
}
void oledDisplay_DoLedStuff(unsigned long frame)
{
}
void oledDisplay_AnimateCurrentScreen(unsigned long frame)
{
}
CyclicScreenFunction oledDisplayCyclicScreens[] = {oledDisplay_Screen1, oledDisplay_Screen2};
DisplayDriver oled042DisplayDriver = {
oledDisplay_Init,
oledDisplay_AlternateScreenState,
oledDisplay_AlternateRotation,
oledDisplay_LoadingScreen,
oledDisplay_SetupScreen,
oledDisplayCyclicScreens,
oledDisplay_AnimateCurrentScreen,
oledDisplay_DoLedStuff,
SCREENS_ARRAY_SIZE(oledDisplayCyclicScreens),
0,
0,
0,
};
#endif