Couldn’t help myself, and instead of completing this project, I bought one of these to test…
Amoled screen… should look great.
Let us know!
Hi, i have some compilation probleme since a few days with lvgl.
esphome say me that the “btn” config must be rename into “button”.
and after that, i have no config error but compilation errors.
Have you any ideas ?
.piolibdeps/knob-salle-a-manger/lvgl/src/extra/widgets/animimg/lv_animimg.h:22:2: error: #error “lv_animimg: lv_img is required. Enable it in lv_conf.h (LV_USE_IMG 1)”
#error “lv_animimg: lv_img is required. Enable it in lv_conf.h (LV_USE_IMG 1)”
^~~~~
Compiling .pioenvs/knob-salle-a-manger/lib18f/WiFi/WiFiUdp.cpp.o
Compiling .pioenvs/knob-salle-a-manger/lib6ca/FS/FS.cpp.o
Compiling .pioenvs/knob-salle-a-manger/lib6ca/FS/vfs_api.cpp.o
Compiling .pioenvs/knob-salle-a-manger/libb83/Update/HttpsOTAUpdate.cpp.o
Archiving .pioenvs/knob-salle-a-manger/lib6ca/libFS.a
Compiling .pioenvs/knob-salle-a-manger/libb83/Update/Updater.cpp.o
.piolibdeps/knob-salle-a-manger/lvgl/src/extra/widgets/animimg/lv_animimg.h:37:5: error: ‘lv_img_t’ does not name a type; did you mean ‘lv_btn_t’?
lv_img_t img;
^~~~~~~~
lv_btn_t
Compiling .pioenvs/knob-salle-a-manger/libff1/ESPAsyncWebServer-esphome/AsyncEventSource.cpp.o
Archiving .pioenvs/knob-salle-a-manger/libb83/libUpdate.a
Compiling .pioenvs/knob-salle-a-manger/libff1/ESPAsyncWebServer-esphome/AsyncWebSocket.cpp.o
Compiling .pioenvs/knob-salle-a-manger/libff1/ESPAsyncWebServer-esphome/WebAuthentication.cpp.o
Archiving .pioenvs/knob-salle-a-manger/lib18f/libWiFi.a
Compiling .pioenvs/knob-salle-a-manger/libff1/ESPAsyncWebServer-esphome/WebHandlers.cpp.o
Compiling .pioenvs/knob-salle-a-manger/libff1/ESPAsyncWebServer-esphome/WebRequest.cpp.o
*** [.pioenvs/knob-salle-a-manger/src/main.cpp.o] Error 1
I’ve not done an update for a while, but I’d try a clean build files to see if it can force an update of all the backend/lvgl components

Have you received it yet? How does it compare to the M5Stack Dial in terms of screen?
Hard to get a great shot, but it’s sharper and better contrast. But it’s also noticeably smaller.
The dial is probably better overall, just an ugly orange and grey
Can you share your code. I love that background image
Hey @dgaust how did you go with the t-encoder?
I’ve had much time to work on it unfortunately. The touchscreen is still not working, and I’ve not really had an opportunity to work on converting the driver into an esphome component (also, I am most definitely not a competent c++ coder).
Hello @mrgrlscz Steven,
I’m in testing mode of this device and starting with LGVL. Then I check your yaml files and I have questions about line using " <<: & and <<: * "
This is a kind of macro and if yes, where it’s start and where it’s finish ?
I don’t see any documentation in esphome where I saw this kind of usage.
Hi all, I am excited to read the progress you have all made collaborating and how active it is.
I am admittedly just trying to get my toes wet here, so I updated a couple samples that others have posted and
I keep getting the error “Unable to find action with the name ‘homeassistant.service’.”
I see the homeassistant.service in the yaml file but do not know what it specifically references or how to resolved this . Can somehow give a hint?
Hi, it’s called yaml anchors, not reserved for home assistant.
Here’s a (one of many) link to How it works
I wanted to share my progress with you, i started out with @mrgrlscz his work, but i wanted to use the M5Dial differently. My goal is to alter entities in Home Assistant, i also wanted to have a page per entity (more or less). Additionaly i want to use the rotary button to switch between pages, but also alter a widget on a page when needed. Below is a link to youtube where you can see it in action. It has got page breadcrumbs and an indicator that you have are in the scroll mode for the widget (single button click), instead of being in the scroll mode for the pages (double button click when in scroll mode for the widget).
There is a lot more to this one, so take a look. It’s not perfect, but its a start ![]()
Youtube: M5Dial
Hey guys,
i created a housing for the M3 dial and would create more housings on your needs,
just tell me what you need and i will upload stl files.
There is also just the thead of the nut there:
and there are tools to fasten the nut.
Have fun,
best regards from germany
Where is the mistake or better say what am I doing wrong?!?
/config/esphome/m5-dial.yaml: In lambda function:
/config/esphome/m5-dial.yaml:461:55: error: cannot convert 'esphome::lvgl::LvRollerType*' to 'const lv_obj_t*' {aka 'const _lv_obj_t*'}
const char* orgText = lv_roller_get_options(id(climate_zone_modus_roller));
^~~~~~~~~~~~~~~~~~~~~~~~~
In file included from .piolibdeps/m5dial/lvgl/lvgl.h:57,
from src/esphome/components/lvgl/lvgl_esphome.h:23,
from src/esphome.h:64,
from src/main.cpp:3:
.piolibdeps/m5dial/lvgl/src/widgets/lv_roller.h:117:53: note: initializing argument 1 of 'const char* lv_roller_get_options(const lv_obj_t*)'
const char * lv_roller_get_options(const lv_obj_t * obj);
~~~~~~~~~~~~~~~~~^~~
/config/esphome/m5-dial.yaml: In lambda function:
/config/esphome/m5-dial.yaml:727:51: error: cannot convert 'esphome::lvgl::LvRollerType*' to 'const lv_obj_t*' {aka 'const _lv_obj_t*'}
const char* orgText = lv_roller_get_options(id(climate_zone_modus_roller));
^~~~~~~~~~~~~~~~~~~~~~~~~
In file included from .piolibdeps/m5dial/lvgl/lvgl.h:57,
from src/esphome/components/lvgl/lvgl_esphome.h:23,
from src/esphome.h:64,
from src/main.cpp:3:
.piolibdeps/m5dial/lvgl/src/widgets/lv_roller.h:117:53: note: initializing argument 1 of 'const char* lv_roller_get_options(const lv_obj_t*)'
const char * lv_roller_get_options(const lv_obj_t * obj);
~~~~~~~~~~~~~~~~~^~~
Compiling .pioenvs/m5dial/libb09/ESPAsyncWebServer-esphome/WebRequest.cpp.o
Compiling .pioenvs/m5dial/libb09/ESPAsyncWebServer-esphome/WebResponses.cpp.o
Compiling .pioenvs/m5dial/libb09/ESPAsyncWebServer-esphome/WebServer.cpp.o
*** [.pioenvs/m5dial/src/main.cpp.o] Error 1
Your yaml is needed to interpret the error
I used:
The error is on line 461, this is what is defined on that line
id: climate_zone_modus_roller
My yaml is not directly pasteable, it’s not a template. You’ll need to review what is configured and from that copy changes or alter the configuration. I have created it as an example of what is possible
Sorry for being a little late to the party here… Just wondering what recommended resources or methods would be suggested for getting one of these up and running? I keep getting pointed to this forum and have tried to read through as best I can, but I feel like there can be a fair amount of discussion in between solid info. A guide would be perfect, but I know that’s probably wishful thinking considering this still seems to be a work in progress. Thanks for any help anyone can provide!
aqara has a similar looking device created, wonder how much flexibility it will deliver opposed to the m5 dial


