Here’s a new version of the “Geekmagic” smart weather clock. Since this is a completely new circuit board and a different ESP, I thought a new thread would be appropriate. You can find the smart weather clock on AliExpress for around 8-9€.
Here’s a picture of the circuit board from both sides. It uses an ESP32-C2 (ESP8684), which is an updated version of the ESP32-C2 (revision 2.0) with slightly more SRAM and flash memory.
The display is our old friend, the ST7789V, connected via SPI.
On the ESPHome components page, you’ll still find the old method for using the ST7789V display via SPI. Instead, use the new method with the “mipi_spi” driver; see the YAML code.
Finding the correct SPI pins was really tricky and involved soldering under a microscope, but I finally figured it out.
+-----------+-----------+----------------------------------+
| Your Pin | SPI Name | Function / Description |
+-----------+-----------+----------------------------------+
| GPIO 04 | SCK | Serial Clock |
| GPIO 06 | MOSI | Master Out Slave In (Data) |
| GPIO 05 | DC | Data / Command (Your "RS" pin) |
| GND | CS | Chip Select (Hardwired to Ground)|
| GPIO 01 | RST | Reset |
| GPIO 18 | LED / BL | Backlight Control (Inverted) |
+-----------+-----------+----------------------------------+
To flash the device with ESPHome, you don’t need to open it! You just need to create the binary first and upload it via ESPHome webflasher.
…but if you want to see what’s inside or upgrade it with, e.g., a touch sensor, here are the pictures. You just need to unscrew two small screws hidden under the rubber strip, and the board with the display slides out like a drawer.
If you find usable I2C pins and easily accessible points to solder, pls let us know. ![]()
Now let’s get to the most important part: the yaml-code for ESPHome. ![]()
esphome:
name: esp8684-default
friendly_name: ESP8684 Default
esp32:
board: esp32-c2-devkitm-1
variant: esp32c2
flash_size: 4MB
framework:
type: esp-idf
sdkconfig_options:
CONFIG_XTAL_FREQ_26: y
logger:
level: DEBUG
api:
ota:
- platform: esphome
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
ap:
web_server:
captive_portal:
font:
- file: "gfonts://Roboto"
id: roboto
size: 42
output:
- platform: ledc
pin: GPIO18
id: backlight_pwm
frequency: 1000Hz
inverted: true
light:
- platform: monochromatic
output: backlight_pwm
name: "Display Backlight"
id: display_light
restore_mode: ALWAYS_ON
spi:
clk_pin: GPIO4
mosi_pin: GPIO6
display:
- id: disp
platform: mipi_spi
model: ST7789V
dc_pin: GPIO05
reset_pin: GPIO1
buffer_size: 25%
invert_colors: true
color_depth: 16
color_order: BGR
spi_mode: mode3
data_rate: 40MHz
dimensions:
height: 240
width: 240
offset_height: 0
offset_width: 0
lambda: |-
it.fill(Color(0,0,0));
it.printf(0, 90, id(roboto), "Hello World!");
Have phun. ![]()






