Geekmagic Weather Clock, not connecting to Wifi after flashing

Hi everyone,

I got some Geekmagic Weather Clocks and wanted to use them like my other displays with ESPHome. However I face a major issue. I tried to configure and flash them, both without errors, but after flashing them nothing happens. No display output and not Wifi connection. I followed Installing ESPhome on GEEKMAGIC Smart Weather Clock (smalltv/pro) and checked several other posts, but luck so far.
No issues with the other devices I have flashed till now and all working.

Any input is much apprechiated.

BR,
Chris

Yaml, logs

Hi,

Was able to make it work. Seems that actually the item I ordered was wrongly delivered. I ordered Pro and got standard. Therefore the I tried using wrong MCU. After noticing I change it and got all working.

Here my yaml for those that need it

esphome:
  name: minimonitor2
  friendly_name: MiniMonitor2

esp8266:
  board: esp01_1m

external_components:
  - source:
      type: git
      url: https://github.com/rletendu/esphome.git
      ref: st7789_nobuffer_202312
    # refresh: 0s
    components: [st7789v]

# Enable logging
logger:

#web_server:
#  port: 80

# Enable Home Assistant API
api:
  encryption:
    key: "iwLC0gi1RnqBDbU5xP17esXJtnWBNMEE8e7pcP9h5qc="

ota:
  password: "9228f9283cb422f5969ea917e4488bb2"

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  fast_connect: true

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "weatherdisplaym Fallback Hotspot"
    password: "NOtnhLeYNfPB"    

# captive_portal:

spi:
  clk_pin: GPIO14
  mosi_pin: GPIO13
  interface: hardware
  id: spihwd
    
# status_led:
#   pin: GPIO2


time:
  - platform: homeassistant
    id: ha_time

output:
  - platform: esp8266_pwm
    pin: GPIO05
    frequency: 20 Hz
    id: pwm_output

light:
  - platform: monochromatic
    output: pwm_output
    name: "Backlight"

globals:
- id: page
  type: int
  initial_value: "1"

interval:
  - interval: 15s
    then:
      - lambda: |-
          id(page) = (id(page) + 1);
          if (id(page) > 2) {
            id(page) = 1;
          }

number:
  - platform: template
    name: "disp page"
    optimistic: true
    min_value: 0
    max_value: 3
    step: 1
    on_value:
      then:
        - lambda: |-
            id(page) = x;
        - component.update : disp

sensor:
  - platform: homeassistant
    entity_id: sensor.gw2000c_v2_2_4_outdoor_temperature
    id: outdoortemp
    internal: true
    state_class: measurement
    unit_of_measurement: °C
  - platform: homeassistant
    entity_id: sensor.gw2000c_v2_2_4_humidity
    id: outdoorhumid
    internal: true
    state_class: measurement
    unit_of_measurement: "%"
  - platform: homeassistant
    entity_id: sensor.gw2000c_v2_2_4_uv_index
    id: uvindex
    internal: true
    state_class: measurement
    unit_of_measurement: UV-Index
  - platform: homeassistant
    entity_id: sensor.ac_thor_1_temperatur_1
    id: boilertemp
    internal: true
    state_class: measurement
    unit_of_measurement: °C
  - platform: homeassistant
    entity_id: sensor.total_solar_power
    id: pvpower
    internal: true
    state_class: measurement
    unit_of_measurement: W
text_sensor:
  - platform: homeassistant
    entity_id: sensor.aktuelles_wetter
    id: wcondition
    internal: true

font:
  - file: "gfonts://Roboto"
    id: roboto
    size: 30
  - file: "gfonts://Roboto"
    id: roboto2
    size: 36
  - file: "gfonts://Roboto"
    id: roboto3
    size: 20

image:
  - file: /config/www/images/static/green.yellow.red.gradient.jpg
    id: gradient
    type: RGBA
    resize: 100x16
  - file: /config/www/images/static/clear-night.png
    id: clearnight
    type: RGBA
    resize: 80x80
  - file: /config/www/images/static/cloudy.png
    id: cloudy
    type: RGBA
    resize: 80x80
  - file: /config/www/images/static/exceptional.png
    id: exceptional
    type: RGBA
    resize: 80x80
  - file: /config/www/images/static/fog.png
    id: fog
    type: RGBA
    resize: 80x80
  - file: /config/www/images/static/hail.png
    id: hail
    type: RGBA
    resize: 80x80
  - file: /config/www/images/static/lightning.png
    id: lightning
    type: RGBA
    resize: 80x80
  - file: /config/www/images/static/lightning-rainy.png
    id: lightningrainy
    type: RGBA
    resize: 80x80
  - file: /config/www/images/static/partlycloudy.png
    id: partlycloudy
    type: RGBA
    resize: 80x80
  - file: /config/www/images/static/pouring.png
    id: pouring
    type: RGBA
    resize: 80x80
  - file: /config/www/images/static/rainy.png
    id: rainy
    type: RGBA
    resize: 80x80
  - file: /config/www/images/static/snowy.png
    id: snowy
    type: RGBA
    resize: 80x80
  - file: /config/www/images/static/snowy-rainy.png
    id: snowyrainy
    type: RGBA
    resize: 80x80
  - file: /config/www/images/static/sunny.png
    id: sunny
    type: RGBA
    resize: 80x80
  - file: /config/www/images/static/windy.png
    id: windy
    type: RGBA
    resize: 80x80
  - file: /config/www/images/static/windy-variant.png
    id: windyvariant
    type: RGBA
    resize: 80x80

display:
  - platform: st7789v
    model: "Custom"
    spi_id: spihwd
    height: 240
    width: 240
    offset_height: 0
    offset_width: 0
    # dc_pin: GPIO02
    # reset_pin: GPIO04
    dc_pin: GPIO00
    reset_pin: GPIO02
    #backlight_pin: GPIO25
    eightbitcolor: True
    #update_interval: never
    #update_interval: 30s
    id: disp
    spi_mode: mode3
    lambda: |-
      switch (id(page)){
        default:
          break;
        case 0:
          break;
        case 1:
          it.printf(0, 0, id(roboto2), Color(255, 255, 255), "Wetter heute");
          if (id(wcondition).has_state()) {
            if (id(wcondition).state == "clear-night") {
                it.image(10, 35, id(clearnight));
            }
            if (id(wcondition).state == "cloudy") {
                it.image(10, 35, id(cloudy));
            }
            if (id(wcondition).state == "exceptional") {
                it.image(10, 35, id(exceptional));
            }
            if (id(wcondition).state == "fog") {
                it.image(10, 35, id(fog));
            }
            if (id(wcondition).state == "hail") {
                it.image(10, 35, id(hail));
            }
            if (id(wcondition).state == "lightning") {
                it.image(10, 35, id(lightning));
            }
            if (id(wcondition).state == "lightning-rainy") {
                it.image(10, 35, id(lightningrainy));
            }
            if (id(wcondition).state == "partlycloudy") {
                it.image(10, 35, id(partlycloudy));
            }
            if (id(wcondition).state == "pouring") {
                it.image(10, 35, id(pouring));
            }
            if (id(wcondition).state == "rainy") {
                it.image(10, 35, id(rainy));
            }
            if (id(wcondition).state == "snowy") {
                it.image(10, 35, id(snowy));
            }
            if (id(wcondition).state == "snowy-rainy") {
                it.image(10, 35, id(snowyrainy));
            }
            if (id(wcondition).state == "sunny") {
                it.image(10, 35, id(sunny));
            }
            if (id(wcondition).state == "windy") {
                it.image(10, 35, id(windy));
            }
            if (id(wcondition).state == "windy-variant") {
                it.image(10, 35, id(windyvariant));
            }
            if (id(uvindex).has_state()) {
              it.printf(120, 40, id(roboto3), Color(255, 255, 255), "UV Index: %.1f", id(uvindex).state);
              it.image(120, 75, id(gradient));
              it.rectangle(119, 74, 102, 18, Color(255, 255, 255));
              int xuv = 130 + 11 * id(uvindex).state;
              int luv = 90 - 11 * id(uvindex).state;
              it.filled_rectangle(xuv, 75, luv, 16, Color(0, 0, 0));
            }
            // Print outside temperature (from homeassistant sensor)
            if (id(outdoortemp).has_state()) {
              it.printf(0, 120, id(roboto3), Color(255, 255, 255), "Temperatur");
              it.printf(0, 140, id(roboto), Color(255, 255, 255), "%.1f°", id(outdoortemp).state);
            }
            // Print outside humidity (from homeassistant sensor)}
            if (id(outdoorhumid).has_state()) {
              it.printf(0, 180, id(roboto3), Color(255, 255, 255), "Luftfeuchtigkeit");
              it.printf(0, 200, id(roboto), Color(255, 255, 255), "%.1f%%", id(outdoorhumid).state);
            }
          }
          break;
        case 2:
          if (id(boilertemp).has_state()) {
            it.printf(0, 0, id(roboto3), Color(255, 255, 255), "Boilertemperatur");
            it.printf(0, 20, id(roboto), Color(255, 255, 255), "%.1f°", id(boilertemp).state);
          }
          // Print current pv power (from homeassistant sensor)
          if (id(pvpower).has_state()) {
            it.printf(0, 60, id(roboto3), Color(255, 255, 255), "Solarleistung");
            it.printf(0, 80, id(roboto), Color(255, 255, 255), "%.1fW", id(pvpower).state);
          }
          break;
      }

FYI it is possible to run it on the 8266 and also incorporate pages, but it is impossible to use OTA due to lack of free space. Also for newbies do not forget to pull GPIO0 low to enter boot mode ptherwise not programable.

If you require the weather icons sent me a message.

BR,
Chris

1 Like