Skip to content

Commit 62faf31

Browse files
authored
Merge pull request #545 from mrthiti/feature/add-esp32-c3-0.42-oled
feat: support ESP32-C3 and ESP32-S3 0.42 OLED
2 parents b94c5f7 + 3b18355 commit 62faf31

8 files changed

+289
-0
lines changed

boards/esp32-s3-0.42oled.json

+38
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
{
2+
"build": {
3+
"arduino": {
4+
"ldscript": "esp32s3_out.ld",
5+
"partitions": "default.csv"
6+
},
7+
"core": "esp32",
8+
"extra_flags": [
9+
"-DARDUINO_ESP32S3_DEV",
10+
"-DARDUINO_USB_MODE=1",
11+
"-DARDUINO_RUNNING_CORE=1",
12+
"-DARDUINO_EVENT_RUNNING_CORE=1"
13+
],
14+
"f_cpu": "240000000L",
15+
"f_flash": "80000000L",
16+
"flash_mode": "qio",
17+
"hwids": [["0x239A", "0x811B"]],
18+
"mcu": "esp32s3",
19+
"variant": "esp32s3"
20+
},
21+
"connectivity": ["bluetooth", "wifi"],
22+
"debug": {
23+
"default_tool": "esp-builtin",
24+
"onboard_tools": ["esp-builtin"],
25+
"openocd_target": "esp32s3.cfg"
26+
},
27+
"frameworks": ["arduino", "espidf"],
28+
"name": "ESP32 S3 0.42 OLED (4 MB QD, 2MB PSRAM)",
29+
"upload": {
30+
"flash_size": "4MB",
31+
"maximum_ram_size": 532480,
32+
"maximum_size": 4194304,
33+
"require_upload_port": true,
34+
"speed": 460800
35+
},
36+
"url": "https://docs.espressif.com/projects/esp-idf/en/latest/esp32s3/hw-reference/esp32s3/user-guide-devkitc-1.html",
37+
"vendor": "Espressif"
38+
}

platformio.ini

+58
Original file line numberDiff line numberDiff line change
@@ -378,6 +378,64 @@ lib_ignore =
378378

379379
;--------------------------------------------------------------------
380380

381+
[env:ESP32-C3-042-OLED]
382+
platform = espressif32@6.6.0
383+
board = esp32-c3-devkitm-1
384+
framework = arduino
385+
monitor_filters =
386+
esp32_exception_decoder
387+
time
388+
log2file
389+
monitor_speed = 115200
390+
upload_speed = 115200
391+
board_build.partitions = huge_app.csv
392+
build_flags =
393+
-D ARDUINO_USB_MODE=1
394+
-D ARDUINO_USB_CDC_ON_BOOT=1
395+
-D ESP32_C3_042_OLED
396+
-D PIN_BUTTON_1=9
397+
lib_deps =
398+
https://github.com/takkaO/OpenFontRender#v1.2
399+
bblanchon/ArduinoJson@^6.21.5
400+
https://github.com/tzapu/WiFiManager.git#v2.0.17
401+
mathertel/oneButton@^2.6.1
402+
arduino-libraries/NTPClient@^3.2.1
403+
olikraus/U8g2@^2.34.17
404+
lib_ignore =
405+
TFT_eSPI
406+
HANSOLOminerv2
407+
408+
;--------------------------------------------------------------------
409+
410+
[env:ESP32-S3-042-OLED]
411+
platform = espressif32@6.6.0
412+
board = esp32-s3-0.42oled
413+
framework = arduino
414+
monitor_filters =
415+
esp32_exception_decoder
416+
time
417+
log2file
418+
monitor_speed = 115200
419+
upload_speed = 115200
420+
board_build.partitions = huge_app.csv
421+
build_flags =
422+
-D ARDUINO_USB_MODE=1
423+
-D ARDUINO_USB_CDC_ON_BOOT=1
424+
-D ESP32_S3_042_OLED
425+
-D PIN_BUTTON_1=0
426+
lib_deps =
427+
https://github.com/takkaO/OpenFontRender#v1.2
428+
bblanchon/ArduinoJson@^6.21.5
429+
https://github.com/tzapu/WiFiManager.git#v2.0.17
430+
mathertel/oneButton@^2.6.1
431+
arduino-libraries/NTPClient@^3.2.1
432+
olikraus/U8g2@^2.34.17
433+
lib_ignore =
434+
TFT_eSPI
435+
HANSOLOminerv2
436+
437+
;--------------------------------------------------------------------
438+
381439
[env:ESP32-S3-devKitv1]
382440
platform = espressif32@6.6.0
383441
board = esp32-s3-devkitc-1

src/drivers/devices/device.h

+4
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,10 @@
99
#include "M5Stick-C-Plus2.h"
1010
#elif defined(DEVKITV1)
1111
#include "esp32DevKit.h"
12+
#elif defined(ESP32_C3_042_OLED)
13+
#include "esp32C3042OLED.h"
14+
#elif defined(ESP32_S3_042_OLED)
15+
#include "esp32S3042OLED.h"
1216
#elif defined(TDISPLAY)
1317
#include "lilygoS3TDisplay.h"
1418
#elif defined(NERDMINER_S3_AMOLED)

src/drivers/devices/esp32C3042OLED.h

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
#ifndef _ESP32_C3_042_OLED_H
2+
#define _ESP32_C3_042_OLED_H
3+
4+
#ifndef SDA_PIN
5+
#define SDA_PIN 5
6+
#endif
7+
8+
#ifndef SCL_PIN
9+
#define SCL_PIN 6
10+
#endif
11+
12+
#define OLED_042_DISPLAY
13+
14+
#endif

src/drivers/devices/esp32S3042OLED.h

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
#ifndef _ESP32_S3_042_OLED_H
2+
#define _ESP32_S3_042_OLED_H
3+
4+
#ifndef SDA_PIN
5+
#define SDA_PIN 41
6+
#endif
7+
8+
#ifndef SCL_PIN
9+
#define SCL_PIN 40
10+
#endif
11+
12+
#define OLED_042_DISPLAY
13+
14+
#endif

src/drivers/displays/display.cpp

+4
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,10 @@ DisplayDriver *currentDisplayDriver = &wt32DisplayDriver;
1616
DisplayDriver *currentDisplayDriver = &ledDisplayDriver;
1717
#endif
1818

19+
#ifdef OLED_042_DISPLAY
20+
DisplayDriver *currentDisplayDriver = &oled042DisplayDriver;
21+
#endif
22+
1923
#ifdef T_DISPLAY
2024
DisplayDriver *currentDisplayDriver = &tDisplayDriver;
2125
#endif

src/drivers/displays/displayDriver.h

+1
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ extern DisplayDriver m5stackDisplayDriver;
3232
extern DisplayDriver wt32DisplayDriver;
3333
extern DisplayDriver noDisplayDriver;
3434
extern DisplayDriver ledDisplayDriver;
35+
extern DisplayDriver oled042DisplayDriver;
3536
extern DisplayDriver tDisplayDriver;
3637
extern DisplayDriver amoledDisplayDriver;
3738
extern DisplayDriver dongleDisplayDriver;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,156 @@
1+
2+
#include "displayDriver.h"
3+
4+
#ifdef OLED_042_DISPLAY
5+
6+
#include <U8g2lib.h>
7+
#include "monitor.h"
8+
9+
#ifdef U8X8_HAVE_HW_SPI
10+
#include <SPI.h>
11+
#endif
12+
#ifdef U8X8_HAVE_HW_I2C
13+
#include <Wire.h>
14+
#endif
15+
16+
static uint8_t btc_icon[] = {
17+
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
18+
0x00, 0xF0, 0x03, 0x00, 0x00, 0xFE, 0x1F, 0x00, 0x00, 0xFF, 0x3F, 0x00,
19+
0x80, 0xFF, 0x7F, 0x00, 0xC0, 0xFF, 0xFF, 0x00, 0xE0, 0x3F, 0xFF, 0x01,
20+
0xF0, 0x3F, 0xFF, 0x03, 0xF0, 0x0F, 0xFC, 0x03, 0xF0, 0x0F, 0xF8, 0x03,
21+
0xF8, 0xCF, 0xF9, 0x07, 0xF8, 0xCF, 0xF9, 0x07, 0xF8, 0x0F, 0xFC, 0x07,
22+
0xF8, 0x0F, 0xF8, 0x07, 0xF8, 0xCF, 0xF9, 0x07, 0xF8, 0xCF, 0xF9, 0x07,
23+
0xF0, 0x0F, 0xF8, 0x03, 0xF0, 0x0F, 0xFC, 0x03, 0xF0, 0x3F, 0xFF, 0x03,
24+
0xE0, 0x3F, 0xFF, 0x01, 0xC0, 0xFF, 0xFF, 0x00, 0x80, 0xFF, 0x7F, 0x00,
25+
0x00, 0xFF, 0x3F, 0x00, 0x00, 0xFE, 0x1F, 0x00, 0x00, 0xF0, 0x03, 0x00,
26+
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
27+
};
28+
29+
static uint8_t setup_icon[] = {
30+
0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x01, 0x00, 0x00, 0xE0, 0x01, 0x00,
31+
0x00, 0xF0, 0x03, 0x00, 0xC0, 0xF0, 0xC3, 0x00, 0xE0, 0xF9, 0xE3, 0x01,
32+
0xF0, 0xFF, 0xFF, 0x03, 0xF0, 0xFF, 0xFF, 0x03, 0xE0, 0xFF, 0xFF, 0x01,
33+
0xC0, 0xFF, 0xFF, 0x00, 0xC0, 0xFF, 0xFF, 0x00, 0xE0, 0x1F, 0xFE, 0x00,
34+
0xF8, 0x0F, 0xFC, 0x07, 0xFE, 0x07, 0xF8, 0x1F, 0xFE, 0x07, 0xF8, 0x1F,
35+
0xFE, 0x07, 0xF8, 0x1F, 0xFE, 0x07, 0xF8, 0x1F, 0xF8, 0x0F, 0xFC, 0x07,
36+
0xE0, 0x1F, 0xFE, 0x00, 0xC0, 0xFF, 0xFF, 0x00, 0xC0, 0xFF, 0xFF, 0x00,
37+
0xE0, 0xFF, 0xFF, 0x01, 0xF0, 0xFF, 0xFF, 0x03, 0xF0, 0xFF, 0xFF, 0x03,
38+
0xE0, 0xF9, 0xE3, 0x01, 0xC0, 0xF0, 0xC3, 0x00, 0x00, 0xF0, 0x03, 0x00,
39+
0x00, 0xE0, 0x01, 0x00, 0x00, 0xE0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
40+
};
41+
42+
U8G2_SSD1306_72X40_ER_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);
43+
44+
void clearScreen(void) {
45+
u8g2.clearBuffer();
46+
u8g2.sendBuffer();
47+
}
48+
49+
void serialPrint(unsigned long mElapsed) {
50+
mining_data data = getMiningData(mElapsed);
51+
52+
// Print hashrate to serial
53+
Serial.printf(">>> Completed %s share(s), %s Khashes, avg. hashrate %s KH/s\n",
54+
data.completedShares.c_str(), data.totalKHashes.c_str(), data.currentHashRate.c_str());
55+
56+
// Print extended data to serial for no display devices
57+
Serial.printf(">>> Valid blocks: %s\n", data.valids.c_str());
58+
Serial.printf(">>> Block templates: %s\n", data.templates.c_str());
59+
Serial.printf(">>> Best difficulty: %s\n", data.bestDiff.c_str());
60+
Serial.printf(">>> 32Bit shares: %s\n", data.completedShares.c_str());
61+
Serial.printf(">>> Temperature: %s\n", data.temp.c_str());
62+
Serial.printf(">>> Total MHashes: %s\n", data.totalMHashes.c_str());
63+
Serial.printf(">>> Time mining: %s\n", data.timeMining.c_str());
64+
}
65+
66+
void oledDisplay_Init(void)
67+
{
68+
Serial.println("OLED 0.42 display driver initialized");
69+
Wire.begin(SDA_PIN, SCL_PIN);
70+
u8g2.begin();
71+
u8g2.clear();
72+
u8g2.setFlipMode(1);
73+
clearScreen();
74+
}
75+
76+
void oledDisplay_AlternateScreenState(void)
77+
{
78+
Serial.println("Switching display state");
79+
}
80+
81+
void oledDisplay_AlternateRotation(void)
82+
{
83+
}
84+
85+
void oledDisplay_Screen1(unsigned long mElapsed)
86+
{
87+
mining_data data = getMiningData(mElapsed);
88+
89+
u8g2.clearBuffer();
90+
u8g2.setFont(u8g2_font_helvB18_tf);
91+
u8g2.drawStr(0, 20, data.currentHashRate.c_str());
92+
u8g2.setFont(u8g2_font_helvB08_tf);
93+
u8g2.drawStr(45, 36, "KH/s");
94+
u8g2.sendBuffer();
95+
96+
serialPrint(mElapsed);
97+
}
98+
99+
void oledDisplay_Screen2(unsigned long mElapsed)
100+
{
101+
mining_data data = getMiningData(mElapsed);
102+
char temp[8];
103+
sprintf(temp, "%s°c", data.temp.c_str());
104+
105+
u8g2.clearBuffer();
106+
u8g2.setFont(u8g2_font_helvB18_tf);
107+
u8g2.drawUTF8(0, 20, temp);
108+
u8g2.sendBuffer();
109+
110+
serialPrint(mElapsed);
111+
}
112+
113+
void oledDisplay_LoadingScreen(void)
114+
{
115+
Serial.println("Initializing...");
116+
u8g2.clearBuffer();
117+
u8g2.drawXBMP(20,5,30,30, btc_icon);
118+
u8g2.sendBuffer();
119+
}
120+
121+
void oledDisplay_SetupScreen(void)
122+
{
123+
Serial.println("Setup...");
124+
u8g2.clearBuffer();
125+
u8g2.drawXBMP(20,0,30,30, setup_icon);
126+
u8g2.setFont(u8g2_font_helvB08_tf);
127+
u8g2.drawUTF8(20, 38, "Setup");
128+
u8g2.sendBuffer();
129+
}
130+
131+
void oledDisplay_DoLedStuff(unsigned long frame)
132+
{
133+
}
134+
135+
void oledDisplay_AnimateCurrentScreen(unsigned long frame)
136+
{
137+
}
138+
139+
CyclicScreenFunction oledDisplayCyclicScreens[] = {oledDisplay_Screen1, oledDisplay_Screen2};
140+
141+
DisplayDriver oled042DisplayDriver = {
142+
oledDisplay_Init,
143+
oledDisplay_AlternateScreenState,
144+
oledDisplay_AlternateRotation,
145+
oledDisplay_LoadingScreen,
146+
oledDisplay_SetupScreen,
147+
oledDisplayCyclicScreens,
148+
oledDisplay_AnimateCurrentScreen,
149+
oledDisplay_DoLedStuff,
150+
SCREENS_ARRAY_SIZE(oledDisplayCyclicScreens),
151+
0,
152+
0,
153+
0,
154+
};
155+
156+
#endif

0 commit comments

Comments
 (0)