Ultimate Reader czytnik wM-Bus - nowa konstrukcja opracowana przez @_Szczepan (SzczepanLeon)

Taki znany urok OLEDów.

Echh. Zrobie sobie pająka ale to ramach walki z nudą. Kupiłem sam wyświetlacz E-papier za 17 zeta wiec będzie pasował.

Znasz “urok” e-paieru?
zasilanie tylko na czas zmiany treści, w przeciwnym razie po roku będziesz miał degradację gorszą niż to wypalenie OLED

To stracę 17 PLN :slight_smile: plus IN-POST za fatyge do Paczkomatu

2026-01-03

Na e -papierze poległem a dwa pająk.
Kupiłem 2.5 " AMOLED.
Słownik Wyrazów Brzydkich Również :wink:

Może zrobić wybudzanie wyświetlacza pod przyciskiem fizycznym?

Jeżeli pytasz o oryginalną konstrukcję to nie.
Przyciski wyprowadzone na zewnątrz to reboot/reset i wyłączenie wifi/usb lub jakoś tak.

Chodzi mi o dopisanie kodu w ESPHome, pod fizyczny przycisk, który przecież można dodać i w ten sposób wybudzać wyświetlacz tylko w razie potrzeby patrzenia na niego przez krótką chwilę. Nie widzę po prostu potrzeby, aby wypalał się przez 24h.

Za GPT bo Ja nie mam wiedzy więc potrzebna weryfikacja :

binary_sensor:
  - platform: gpio
    pin:
      number: GPIO14       # <- DOWOLNY wolny pin
      mode:
        input: true
        pullup: true
      inverted: true
    name: "OLED Wake Button"
    on_press:
      then:
        - script.execute: oled_wake
wpisz lub wklej tutaj kod
script:
  - id: oled_wake
    mode: restart
    then:
      - logger.log: "OLED ON (podgląd)"
      - display.turn_on: oled_display
      - delay: 15s
      - display.turn_off: oled_display
      - logger.log: "OLED OFF"

i2c:
  sda: GPIO18
  scl: GPIO17
  frequency: 400kHz

display:
  - platform: ssd1306_i2c
    id: oled_display
    model: "SSD1306 128x64"
    address: 0x3C
    update_interval: never   # 🔴 WAŻNE
    lambda: |-
      it.printf(0, 0, id(font_small), "UltimateReader");
      it.printf(0, 16, id(font_small), "wM-Bus OK");

Ja nie mam tego sprzętu, ty masz…

Owszem tak ale używam nie kodu Szczepana tylko:

packages:
  hal: github://wM-Bus/UltimateReader/packages/lilygo_t3_s3_hal.yaml@IoTLabs
  wmbus_gateway: github://wM-Bus/UltimateReader/packages/wmbus_gateway.yaml@IoTLabs

On zapala tylko przy starcie ekran.
Jak wyżej wspomniałem dokupiłem AMOLED-a i na nim wyświetlam dane.

Inaczej : Ja nie wyświetlam tych danych na OLED w ogóle bo u mnie z powodu wypalenia mija się to z celem. Ekran mam wyłączony.
Ale testowałem miganie drugą diodą LED i np można tego użyć do wybudzenia czyli jeżeli wpadnie dany Telegram to wtedy wyświetl a potem zgaś. Ale to tylko przykład ( u mnie tak zrobiłem przez chwilę żółty LED migał sygnalizując mi że Telegram został rozpoznany ).

Przyciski wyprowadzone na zewnątrz to RESET oraz GPIO0
o ile ten pierwszy jest nie do ruszenia to pod drugi można przypisać dowolną funkcję programowo (oczywiście w trakcie bootstrapu zachowuje swoją funkcję)

??? pisałeś o e-papierze (e-inku)

amoled też się wypala, więc chyba o wygaszaniu warto pomyśleć, to wprawdzie nieco nowocześniejsza technologia niż zwykły monochromatyczny oled produkowany w technologii sprzed koło 30 lat

Tak - wystarczy zmienic przod obudowy na taki pod przycisk albo wywiercic otwór. Z przodu obok wyswietlacza jest fizyczny przycisk - tak jak @szopen opisał

Tak - zgadza się. Tylko poległem na E-papierze ( nie miałem topnika aby to się kupy trzymało ).
A ponieważ miałem jako prezent kupon 200 PLN na Allegro to wydałem 85 zeta na tego AMOLEDA.

A nad kodem do niego dalej kombinuje ( częściowo mam już wystrugany).


Sorry za jakość.
Tu z prawej strony widać te 2 fizyczne przyciski dla których Szczepan zrobił otwory w obudowie.


A tu widać z drugiej strony przycisk boot.

BOOT = Bootloader (czy tam bootstrap?) = GPIO0
(S3 to jest Xtensa7 więc ten pin zgodny z wcześniejszymi modelami ESP)
RST = Reset
a co do przełącznika to nie wnikałem gdzie jest podpięty, ale można zajrzeć na schemat… i jest to wyłącznik zasilania

Od stycznia mam problem z aktualizacją.
przy próbie wgrywania na płytkę mam takie błędy

INFO ESPHome 2026.1.4
INFO Reading configuration /config/esphome/esphome-web-5a0940.yaml...
WARNING GPIO33 is used by the PSRAM interface on ESP32-S3R8 / ESP32-S3R8V and should be avoided on these models
WARNING GPIO37 is used by the PSRAM interface on ESP32-S3R8 / ESP32-S3R8V and should be avoided on these models
INFO Detected timezone 'Europe/Warsaw'
INFO Detected timezone 'Europe/Warsaw'
INFO Generating C++ source...
INFO Setting CONFIG_LWIP_MAX_SOCKETS to 14 (registered: api=4, captive_portal=4, mdns=2, ota=1, web_server=3)
INFO Compiling app... Build path: /data/build/ultimatereader
Processing ultimatereader (board: lilygo-t3-s3; framework: espidf; platform: https://github.com/pioarduino/platform-espressif32/releases/download/55.03.35/platform-espressif32.zip)
--------------------------------------------------------------------------------
HARDWARE: ESP32S3 240MHz, 320KB RAM, 4MB Flash
 - contrib-piohome @ 3.4.4 
 - framework-espidf @ 3.50502.0 (5.5.2) 
 - tool-cmake @ 4.0.3 
 - tool-esp-rom-elfs @ 2024.10.11 
 - tool-esptoolpy @ 5.1.0 
 - tool-mklittlefs @ 3.2.0 
 - tool-ninja @ 1.13.1 
 - tool-scons @ 4.40801.0 (4.8.1) 
 - toolchain-xtensa-esp-elf @ 14.2.0+20251107
Reading CMake configuration...
Dependency Graph
|-- noise-c @ 0.1.10
|-- ArduinoJson @ 7.4.2
|-- Improv @ 1.2.4
Compiling .pioenvs/ultimatereader/src/main.cpp.o
Compiling .pioenvs/ultimatereader/bt/host/bluedroid/stack/smp/smp_cmac.c.o
Compiling .pioenvs/ultimatereader/bt/host/bluedroid/stack/smp/smp_keys.c.o
Compiling .pioenvs/ultimatereader/bt/host/bluedroid/stack/smp/smp_l2c.c.o
Compiling .pioenvs/ultimatereader/bt/host/bluedroid/stack/smp/smp_main.c.o
Compiling .pioenvs/ultimatereader/bt/host/bluedroid/stack/smp/smp_utils.c.o
Compiling .pioenvs/ultimatereader/bt/host/bluedroid/config/stack_config.c.o
Compiling .pioenvs/ultimatereader/bt/common/btc/profile/esp/blufi/bluedroid_host/esp_blufi.c.o
Compiling .pioenvs/ultimatereader/bt/common/tinycrypt/src/utils.c.o
Compiling .pioenvs/ultimatereader/bt/common/tinycrypt/src/sha256.c.o
Compiling .pioenvs/ultimatereader/bt/common/tinycrypt/src/ecc.c.o
Compiling .pioenvs/ultimatereader/bt/common/tinycrypt/src/ctr_prng.c.o
Compiling .pioenvs/ultimatereader/bt/common/tinycrypt/src/ctr_mode.c.o
Compiling .pioenvs/ultimatereader/bt/common/tinycrypt/src/aes_decrypt.c.o
Compiling .pioenvs/ultimatereader/bt/common/tinycrypt/src/aes_encrypt.c.o
Compiling .pioenvs/ultimatereader/bt/common/tinycrypt/src/ccm_mode.c.o
Compiling .pioenvs/ultimatereader/bt/common/tinycrypt/src/ecc_dsa.c.o
Compiling .pioenvs/ultimatereader/bt/common/tinycrypt/src/cmac_mode.c.o
Compiling .pioenvs/ultimatereader/bt/common/tinycrypt/src/ecc_dh.c.o
Compiling .pioenvs/ultimatereader/bt/common/tinycrypt/src/hmac_prng.c.o
Compiling .pioenvs/ultimatereader/bt/common/tinycrypt/src/ecc_platform_specific.c.o
Compiling .pioenvs/ultimatereader/bt/common/tinycrypt/src/hmac.c.o
Compiling .pioenvs/ultimatereader/bt/common/tinycrypt/src/cbc_mode.c.o
Compiling .pioenvs/ultimatereader/bt/common/tinycrypt/port/esp_tinycrypt_port.c.o
Compiling .pioenvs/ultimatereader/cmock/CMock/src/cmock.c.o
Archiving .pioenvs/ultimatereader/esp-idf/bt/libbt.a
Compiling .pioenvs/ultimatereader/console/commands.c.o
Archiving .pioenvs/ultimatereader/esp-idf/cmock/libcmock.a
Indexing .pioenvs/ultimatereader/esp-idf/cmock/libcmock.a
Compiling .pioenvs/ultimatereader/console/esp_console_common.c.o
Indexing .pioenvs/ultimatereader/esp-idf/bt/libbt.a
Compiling .pioenvs/ultimatereader/console/esp_console_repl_internal.c.o
Compiling .pioenvs/ultimatereader/console/split_argv.c.o
Compiling .pioenvs/ultimatereader/console/linenoise/linenoise.c.o
Compiling .pioenvs/ultimatereader/console/esp_console_repl_chip.c.o
Compiling .pioenvs/ultimatereader/console/argtable3/arg_cmd.c.o
Compiling .pioenvs/ultimatereader/console/argtable3/arg_date.c.o
Compiling .pioenvs/ultimatereader/console/argtable3/arg_dbl.c.o
Compiling .pioenvs/ultimatereader/console/argtable3/arg_dstr.c.o
Compiling .pioenvs/ultimatereader/console/argtable3/arg_end.c.o
Compiling .pioenvs/ultimatereader/console/argtable3/arg_file.c.o
Compiling .pioenvs/ultimatereader/console/argtable3/arg_hashtable.c.o
Compiling .pioenvs/ultimatereader/console/argtable3/arg_int.c.o
In file included from src/esphome/components/wmbus_gateway/display_manager.h:17,
                 from src/esphome.h:151,
                 from src/main.cpp:3:
src/esphome/components/wmbus_gateway/screen_sensor.h: In member function 'void esphome::wmbus_gateway::SensorScreen::render_value(esphome::display::Display&)':
src/esphome/components/wmbus_gateway/screen_sensor.h:46:101: warning: 'std::string esphome::EntityBase_UnitOfMeasurement::get_unit_of_measurement()' is deprecated: Use get_unit_of_measurement_ref() instead for better performance (avoids string copy). Will be removed in ESPHome 2026.5.0 [-Wdeprecated-declarations]
   46 |                         data = str_truncate(data, std::min(pos, 11 - sensor->get_unit_of_measurement().length()));
      |                                                                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~
In file included from src/esphome/components/binary_sensor/binary_sensor.h:3,
                 from src/esphome/core/application.h:35,
                 from src/esphome/components/api/api_frame_helper.h:13,
                 from src/esphome/components/api/api_connection.h:5,
                 from src/esphome.h:3:
src/esphome/core/entity_base.h:202:15: note: declared here
  202 |   std::string get_unit_of_measurement();
      |               ^~~~~~~~~~~~~~~~~~~~~~~
src/esphome/components/wmbus_gateway/screen_sensor.h:48:60: warning: 'std::string esphome::EntityBase_UnitOfMeasurement::get_unit_of_measurement()' is deprecated: Use get_unit_of_measurement_ref() instead for better performance (avoids string copy). Will be removed in ESPHome 2026.5.0 [-Wdeprecated-declarations]
   48 |                     data += sensor->get_unit_of_measurement();
      |                             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~
src/esphome/core/entity_base.h:202:15: note: declared here
  202 |   std::string get_unit_of_measurement();
      |               ^~~~~~~~~~~~~~~~~~~~~~~
Compiling .pioenvs/ultimatereader/console/argtable3/arg_lit.c.o
Compiling .pioenvs/ultimatereader/console/argtable3/arg_rem.c.o
Compiling .pioenvs/ultimatereader/console/argtable3/arg_rex.c.o
Compiling .pioenvs/ultimatereader/console/argtable3/arg_str.c.o
Compiling .pioenvs/ultimatereader/console/argtable3/arg_utils.c.o
Compiling .pioenvs/ultimatereader/console/argtable3/argtable3.c.o
Compiling .pioenvs/ultimatereader/cxx/cxx_exception_stubs.cpp.o
src/main.cpp: At global scope:
src/main.cpp:62:20: error: 'font_large' was declared 'extern' and later 'static' [-fpermissive]
   62 | static font::Font *font_large;
      |                    ^~~~~~~~~~
In file included from src/esphome/components/wmbus_gateway/screen_splash.h:4,
                 from src/esphome/components/wmbus_gateway/display_manager.h:10:
src/esphome/components/wmbus_gateway/resources.h:9:29: note: previous declaration of 'font_large'
    9 | extern esphome::font::Font *font_large;
      |                             ^~~~~~~~~~
src/main.cpp:63:20: error: 'font_small' was declared 'extern' and later 'static' [-fpermissive]
   63 | static font::Font *font_small;
      |                    ^~~~~~~~~~
src/esphome/components/wmbus_gateway/resources.h:8:29: note: previous declaration of 'font_small'
    8 | extern esphome::font::Font *font_small;
      |                             ^~~~~~~~~~
src/main.cpp:64:22: error: 'qr_code' was declared 'extern' and later 'static' [-fpermissive]
   64 | static image::Image *qr_code;
      |                      ^~~~~~~
src/esphome/components/wmbus_gateway/resources.h:7:31: note: previous declaration of 'qr_code'
    7 | extern esphome::image::Image *qr_code;
      |                               ^~~~~~~
src/main.cpp:65:22: error: 'logo' was declared 'extern' and later 'static' [-fpermissive]
   65 | static image::Image *logo;
      |                      ^~~~
src/esphome/components/wmbus_gateway/resources.h:6:31: note: previous declaration of 'logo'
    6 | extern esphome::image::Image *logo;
      |                               ^~~~
/data/packages/9c197793/packages/lilygo_t3_s3_hal.yaml: In lambda function:
/data/packages/9c197793/packages/lilygo_t3_s3_hal.yaml:31:18: warning: narrowing conversion of '(double)std::min<double>((* & std::max<double>(((double)2 * (((double)x) + 1.0e+2)), 0.0)), 1.0e+2)' from 'double' to 'float' [-Wnarrowing]
   31 |     unit_of_measurement: "%"
      |               ~~~^~~~~~~~~~~                       
Compiling .pioenvs/ultimatereader/cxx/cxx_guards.cpp.o
Compiling .pioenvs/ultimatereader/cxx/cxx_init.cpp.o
Compiling .pioenvs/ultimatereader/driver/deprecated/adc_legacy.c.o
Archiving .pioenvs/ultimatereader/esp-idf/console/libconsole.a
Indexing .pioenvs/ultimatereader/esp-idf/console/libconsole.a
Compiling .pioenvs/ultimatereader/driver/deprecated/adc_dma_legacy.c.o
Archiving .pioenvs/ultimatereader/esp-idf/cxx/libcxx.a
Indexing .pioenvs/ultimatereader/esp-idf/cxx/libcxx.a
Compiling .pioenvs/ultimatereader/driver/deprecated/timer_legacy.c.o
Compiling .pioenvs/ultimatereader/driver/i2c/i2c.c.o
Compiling .pioenvs/ultimatereader/driver/deprecated/i2s_legacy.c.o
Compiling .pioenvs/ultimatereader/driver/deprecated/mcpwm_legacy.c.o
Compiling .pioenvs/ultimatereader/driver/deprecated/pcnt_legacy.c.o
*** [.pioenvs/ultimatereader/src/main.cpp.o] Error 1
========================= [FAILED] Took 14.43 seconds =========================

Mój kod

packages:
  hal: github://wM-Bus/UltimateReader/packages/lilygo_t3_s3_hal.yaml@IoTLabs
  wmbus_gateway: github://wM-Bus/UltimateReader/packages/wmbus_gateway.yaml@IoTLabs 

esphome:
  name: ultimatereader
  friendly_name: Ultimate Reader
  name_add_mac_suffix: false
  comment: Ultimate Reader
  project:
    name: wmbus.UltimateReader
    version: ${wmbus_gateway_version}

improv_serial:

esp32_improv:
  authorizer: none

logger:
  level: DEBUG
  logs:
    status_led: INFO
    binary_sensor: INFO
    light: INFO
  baud_rate: 115200

ota:
  - platform: esphome

api:
  encryption:
    key: "F6qk6W6X9P5nA4Dg0b3e9O4uLqf4uM5K2pH7tH1V7jA="

dashboard_import:
  package_import_url: github://wM-Bus/UltimateReader/blueprints/UltimateReader.yaml@IoTLabs
  import_full_config: true

wmbus_radio:
  radio_type: SX1276
  cs_pin: GPIO7
  reset_pin: GPIO8
  irq_pin: GPIO33
  on_frame:
    - then:
        - logger.log:
            level: WARN
            format: "Meter ID: 0x%s"
            args: ["frame->meter_id().c_str()"]
        - logger.log:
            level: WARN
            format: "Frame: https://wmbusmeters.org/analyze/%s"
            args: ["frame->as_hex().c_str()"]


spi:
  clk_pin:
    number: GPIO5
  mosi_pin: GPIO6
  miso_pin:
    number: GPIO3
    ignore_strapping_warning: true




wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  
wmbus_meter:
  - id: woda_apator162
    meter_id: 0x02095578
    type: apator162
    key: "00000000000000000000000000000000"

  - id: woda_apator1621
    meter_id: 0x02257250
    type: apator162
    key: "00000000000000000000000000000000"  
    
sensor:
  - platform: wmbus_meter
    id: total_water_sensor
    field: total_m3
    parent_id: woda_apator162
    name: Licznik Wody Główny
    state_class: total_increasing
    device_class: water
    filters:
      - offset: 526.996
  - platform: wmbus_meter
    id: water_meter_rssi
    field: rssi_dbm
    parent_id: woda_apator162
    name: RSSI
    device_class: signal_strength
    state_class: measurement

  - platform: wmbus_meter
    id: total_water_sensor2
    field: total_m3
    parent_id: woda_apator1621
    name: Licznik wody Mieszkanie
    state_class: total_increasing
    device_class: water
    filters:
      - offset: -115.644

To już sobie nie wgrasz - zmiany w ESP

Ok, rozumiem
Ale jak to naprawić, co zmienić?

Masz dwie drogi.
Wersja 5x softu - działa ale będzie się restartować losowo.
Szukajka na Forum - kompilacja ESP w chmurze .

Dziękuje, lecę zatem do lektury