Installing ESPHome on new Smart Weather Clock (Wifi Weather Station Display)

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. :nerd_face:

Now let’s get to the most important part: the yaml-code for ESPHome. :partying_face:

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. :sunglasses:

1 Like

What would be the actual application of such a device?

Things like these are essentially freely programmable dedicated status displays. Clock, weather data, stock values, etc. Anything (entity state) your homeassistant installation knows about is at your disposal, but yes getting all that into a nice design according to your very own desires is not particularly easy. Look a bit through the options this GitHub - RealDeco/xiaozhi-esphome: Alternative code to use xiaozhi ai devices in esphome/home assistant. · GitHub or voice-assistant/Mini-Clock-DeepSeek-XiaoZhi at main · thekiwismarthome/voice-assistant · GitHub (on slightly more versatile) hardware (esp32-s3, microphone, speaker) can give you.