<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[M5ez, a complete interface builder system for the M5Stack as an Arduino library. Extremely easy to use.]]></title><description><![CDATA[<p dir="auto">Three weeks ago I was frustrated that it wasn't easier to build applications for the M5Stack. Today I release M5ez (pronounced "M5 easy") so that everyone can build things that look cool and just work.</p>
<p dir="auto">There are little things I want to make better still. It's not "done" - such things are never done - but you have to release at some point. But is good enough to build things on.</p>
<p dir="auto">A video can say more than a thousand words: please watch the video and have a look at the Github repository.</p>
<p dir="auto"><a href="https://www.youtube.com/watch?v=qRbE3FXEWJQ" target="_blank" rel="noopener noreferrer nofollow ugc"><img src="https://rop.nl/M5ez.png" alt="" class=" img-fluid img-markdown" /></a></p>
<p dir="auto"><a href="https://github.com/ropg/M5ez" target="_blank" rel="noopener noreferrer nofollow ugc">https://github.com/ropg/M5ez</a></p>
<p dir="auto">As you will see I put some effort into documenting everything it does on Github. I hope you all will play with this and tell me what you like and don't like. I will continue to work on it and let you know in this thread when things are changing.</p>
<hr />
<p dir="auto"><em>( A big thank you to Calin for some of the ideas. )</em></p>
]]></description><link>https://community.m5stack.com/topic/262/m5ez-a-complete-interface-builder-system-for-the-m5stack-as-an-arduino-library-extremely-easy-to-use</link><generator>RSS for Node</generator><lastBuildDate>Fri, 13 Mar 2026 14:39:55 GMT</lastBuildDate><atom:link href="https://community.m5stack.com/topic/262.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 18 Jul 2018 21:33:58 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to M5ez, a complete interface builder system for the M5Stack as an Arduino library. Extremely easy to use. on Wed, 23 Feb 2022 00:15:56 GMT]]></title><description><![CDATA[<p dir="auto">How do i get the characters for my region such as the pound sign £ ?</p>
]]></description><link>https://community.m5stack.com/post/16734</link><guid isPermaLink="true">https://community.m5stack.com/post/16734</guid><dc:creator><![CDATA[AndyT]]></dc:creator><pubDate>Wed, 23 Feb 2022 00:15:56 GMT</pubDate></item><item><title><![CDATA[Reply to M5ez, a complete interface builder system for the M5Stack as an Arduino library. Extremely easy to use. on Wed, 17 Mar 2021 14:03:30 GMT]]></title><description><![CDATA[<p dir="auto">Hi,<br />
I wanted to know if there is a way to use faces keyboard in the menus (i.e. I have the calculator keyboard and instead of using the three buttons to go up and down and select, I want to use the keys on the face, for example for selecting first line I will type on the key '1' and so on).<br />
and if it is possible, can you give me an example of code using it.<br />
Thanks</p>
]]></description><link>https://community.m5stack.com/post/13069</link><guid isPermaLink="true">https://community.m5stack.com/post/13069</guid><dc:creator><![CDATA[kilam]]></dc:creator><pubDate>Wed, 17 Mar 2021 14:03:30 GMT</pubDate></item><item><title><![CDATA[Reply to M5ez, a complete interface builder system for the M5Stack as an Arduino library. Extremely easy to use. on Thu, 25 Feb 2021 14:03:19 GMT]]></title><description><![CDATA[<p dir="auto">Hi,<br />
It is great using the M5EZ!<br />
But I want / need to give my Core a static IP address. Is there an easy way to alter the Wifi settings menu and add the option of adding static ip? Maybe In such a way it is stored in the preferences?</p>
<p dir="auto">kr, G</p>
]]></description><link>https://community.m5stack.com/post/12673</link><guid isPermaLink="true">https://community.m5stack.com/post/12673</guid><dc:creator><![CDATA[GSAL]]></dc:creator><pubDate>Thu, 25 Feb 2021 14:03:19 GMT</pubDate></item><item><title><![CDATA[Reply to M5ez, a complete interface builder system for the M5Stack as an Arduino library. Extremely easy to use. on Mon, 30 Nov 2020 09:34:23 GMT]]></title><description><![CDATA[<p dir="auto">Hi,<br />
great project.<br />
It is possible to use the face encoder for up, down and enter?<br />
if yes, you  have an example?<br />
this will be great</p>
]]></description><link>https://community.m5stack.com/post/10769</link><guid isPermaLink="true">https://community.m5stack.com/post/10769</guid><dc:creator><![CDATA[hobo]]></dc:creator><pubDate>Mon, 30 Nov 2020 09:34:23 GMT</pubDate></item><item><title><![CDATA[Reply to M5ez, a complete interface builder system for the M5Stack as an Arduino library. Extremely easy to use. on Thu, 16 Jul 2020 18:33:47 GMT]]></title><description><![CDATA[<p dir="auto"><a class="mention plugin-mentions-user plugin-mentions-a" href="https://community.m5stack.com/uid/1049">@brianr</a> <a class="mention plugin-mentions-user plugin-mentions-a" href="https://community.m5stack.com/uid/457">@rop</a> Hey guys, thanks a lot for this very elegant solution, I´m using the ezMenu library in a program where I had installed Blynk working very well but everytime when I activated the ezMenu with mainmenu.run(); my Blynk app was very unstable, with the trick of ez.addEvent(run_Blynk) in the setup() function now is working very well, thanks for the help</p>
]]></description><link>https://community.m5stack.com/post/9349</link><guid isPermaLink="true">https://community.m5stack.com/post/9349</guid><dc:creator><![CDATA[asalazaro]]></dc:creator><pubDate>Thu, 16 Jul 2020 18:33:47 GMT</pubDate></item><item><title><![CDATA[Reply to M5ez, a complete interface builder system for the M5Stack as an Arduino library. Extremely easy to use. on Wed, 18 Sep 2019 19:06:28 GMT]]></title><description><![CDATA[<p dir="auto"><a class="mention plugin-mentions-user plugin-mentions-a" href="https://community.m5stack.com/uid/457">@rop</a> Any intention of a stick version?</p>
]]></description><link>https://community.m5stack.com/post/5636</link><guid isPermaLink="true">https://community.m5stack.com/post/5636</guid><dc:creator><![CDATA[ajb2k3]]></dc:creator><pubDate>Wed, 18 Sep 2019 19:06:28 GMT</pubDate></item><item><title><![CDATA[Reply to M5ez, a complete interface builder system for the M5Stack as an Arduino library. Extremely easy to use. on Wed, 18 Sep 2019 18:32:39 GMT]]></title><description><![CDATA[<p dir="auto"><a class="mention plugin-mentions-user plugin-mentions-a" href="https://community.m5stack.com/uid/443">@ajb2k3</a></p>
<p dir="auto">No it does not: it only works on the 3-Button M5Stack devices.</p>
]]></description><link>https://community.m5stack.com/post/5635</link><guid isPermaLink="true">https://community.m5stack.com/post/5635</guid><dc:creator><![CDATA[Rop]]></dc:creator><pubDate>Wed, 18 Sep 2019 18:32:39 GMT</pubDate></item><item><title><![CDATA[Reply to M5ez, a complete interface builder system for the M5Stack as an Arduino library. Extremely easy to use. on Wed, 18 Sep 2019 15:45:55 GMT]]></title><description><![CDATA[<p dir="auto"><a class="mention plugin-mentions-user plugin-mentions-a" href="https://community.m5stack.com/uid/457">@Rop</a> is M5EZ supporting the Stick C?<br />
I have had a query from the Facebook group.</p>
]]></description><link>https://community.m5stack.com/post/5631</link><guid isPermaLink="true">https://community.m5stack.com/post/5631</guid><dc:creator><![CDATA[ajb2k3]]></dc:creator><pubDate>Wed, 18 Sep 2019 15:45:55 GMT</pubDate></item><item><title><![CDATA[Reply to M5ez, a complete interface builder system for the M5Stack as an Arduino library. Extremely easy to use. on Tue, 30 Jul 2019 06:31:34 GMT]]></title><description><![CDATA[<p dir="auto">Great Job</p>
]]></description><link>https://community.m5stack.com/post/4909</link><guid isPermaLink="true">https://community.m5stack.com/post/4909</guid><dc:creator><![CDATA[m5stack]]></dc:creator><pubDate>Tue, 30 Jul 2019 06:31:34 GMT</pubDate></item><item><title><![CDATA[Reply to M5ez, a complete interface builder system for the M5Stack as an Arduino library. Extremely easy to use. on Mon, 29 Jul 2019 15:20:24 GMT]]></title><description><![CDATA[<p dir="auto">Looks great! Does it play well with PlatformIO ?</p>
]]></description><link>https://community.m5stack.com/post/4893</link><guid isPermaLink="true">https://community.m5stack.com/post/4893</guid><dc:creator><![CDATA[mawg]]></dc:creator><pubDate>Mon, 29 Jul 2019 15:20:24 GMT</pubDate></item><item><title><![CDATA[Reply to M5ez, a complete interface builder system for the M5Stack as an Arduino library. Extremely easy to use. on Wed, 06 Feb 2019 15:05:08 GMT]]></title><description><![CDATA[<p dir="auto">Hello,</p>
<p dir="auto">Is there a chance to change font (or size) of ez.header ?</p>
<p dir="auto">Regards, M</p>
]]></description><link>https://community.m5stack.com/post/2885</link><guid isPermaLink="true">https://community.m5stack.com/post/2885</guid><dc:creator><![CDATA[macle]]></dc:creator><pubDate>Wed, 06 Feb 2019 15:05:08 GMT</pubDate></item><item><title><![CDATA[Reply to M5ez, a complete interface builder system for the M5Stack as an Arduino library. Extremely easy to use. on Thu, 17 Jan 2019 13:57:23 GMT]]></title><description><![CDATA[<p dir="auto">I really like M5ez so I gave it its own core. Justified it by saying that’s real MVC architecture! Real Computer Science stuff.<br />
/*</p>
<hr />
<p dir="auto">GLOBAL INFO<br />
core 0 is the communications processor.<br />
Uses the ESP-NOW protocol<br />
on the 2.4 GHz radio<br />
This process runs as a task created<br />
on core 1<br />
core 1 is the UI processor.<br />
Maintains the M5Stack M5ez LCD menu<br />
Runs Arduino setup() and loop()</p>
<hr />
<p dir="auto">*/<br />
Use RTOS semaphores when accessing the global vars to/from the local versions.</p>
]]></description><link>https://community.m5stack.com/post/2538</link><guid isPermaLink="true">https://community.m5stack.com/post/2538</guid><dc:creator><![CDATA[bobolink]]></dc:creator><pubDate>Thu, 17 Jan 2019 13:57:23 GMT</pubDate></item><item><title><![CDATA[Reply to M5ez, a complete interface builder system for the M5Stack as an Arduino library. Extremely easy to use. on Wed, 16 Jan 2019 15:30:00 GMT]]></title><description><![CDATA[<p dir="auto">Ah yes, success!  I added <code>ez.addEvent(run_Blynk);</code> to the <code>setup()</code>, and then created a function down below, after the loop, that looks like the following.  It's worth noting that I'm using the M5 as a "receiver" from a bridge, thus the blynk_write(V1) statement.</p>
<pre><code>uint16_t run_Blynk() {
  Blynk.run();
  return 1;
}

BLYNK_WRITE(V1){
    eventData = param.asString();
}
</code></pre>
<p dir="auto">That did the trick, Blynk connects and stays connected.  Now trying to figure out how to display the dynamic data from Blynk on the canvas.  If I figure this all out, I'll write a short demo in a new topic for others, as I haven't seen many examples of actual use of M5ez, other than the demo program, but most projects are more than just menus, they have to display something...    Again, <a class="mention plugin-mentions-user plugin-mentions-a" href="https://community.m5stack.com/uid/457">@rop</a>, excellent work, and thanks again so much!</p>
]]></description><link>https://community.m5stack.com/post/2528</link><guid isPermaLink="true">https://community.m5stack.com/post/2528</guid><dc:creator><![CDATA[BrianR]]></dc:creator><pubDate>Wed, 16 Jan 2019 15:30:00 GMT</pubDate></item><item><title><![CDATA[Reply to M5ez, a complete interface builder system for the M5Stack as an Arduino library. Extremely easy to use. on Tue, 15 Jan 2019 19:31:46 GMT]]></title><description><![CDATA[<p dir="auto"><a class="mention plugin-mentions-user plugin-mentions-a" href="https://community.m5stack.com/uid/1049">@brianr</a> It depends on the rest of your program, but normally you would place it in <code>setup()</code>. Then make sure the event function returns <code>1</code> to run as often as possible. What that means is that you cannot provide Blynk.run() directly but must make your own function that runs <code>Blynk.run()</code> and returns a <code>uint16_t</code> of value <code>1</code></p>
<p dir="auto">This needs to be more convenient, I know. <code>addEvent()</code> needs another go-over, better documentation and examples, will put that on the list.</p>
]]></description><link>https://community.m5stack.com/post/2519</link><guid isPermaLink="true">https://community.m5stack.com/post/2519</guid><dc:creator><![CDATA[Rop]]></dc:creator><pubDate>Tue, 15 Jan 2019 19:31:46 GMT</pubDate></item><item><title><![CDATA[Reply to M5ez, a complete interface builder system for the M5Stack as an Arduino library. Extremely easy to use. on Tue, 15 Jan 2019 17:33:43 GMT]]></title><description><![CDATA[<p dir="auto"><a class="mention plugin-mentions-user plugin-mentions-a" href="https://community.m5stack.com/uid/457">@rop</a>, M5ez is awesome - thank you for the enormous amount of time you put into it!</p>
<p dir="auto">I'm trying to use Blynk to receive events from another board.  I have gotten events to show on the M5 in a simple standalone program, so I know it "works".  Within M5ez, I believe I just need to call Blynk.run() with the ez.addEvent function, as Blynk.run needs to run often as possible - in most of my projects it's usually the only thing in the main loop, but I'm unsure of how/where to use the ez.addEvent function.  There aren't any examples of ez.addEvent in the Demo or any of the other examples included with the library.  Any help on syntax and where to put that statement?</p>
<p dir="auto">Thanks again for your time!!!</p>
]]></description><link>https://community.m5stack.com/post/2516</link><guid isPermaLink="true">https://community.m5stack.com/post/2516</guid><dc:creator><![CDATA[BrianR]]></dc:creator><pubDate>Tue, 15 Jan 2019 17:33:43 GMT</pubDate></item><item><title><![CDATA[Reply to M5ez, a complete interface builder system for the M5Stack as an Arduino library. Extremely easy to use. on Sun, 11 Nov 2018 12:37:26 GMT]]></title><description><![CDATA[<p dir="auto"><a class="mention plugin-mentions-user plugin-mentions-a" href="https://community.m5stack.com/uid/457">@rop</a> I thought MyTZ object was already declared in your library, my fault.<br />
Thank you for your explanation about objects. I misunderstood your previous directions and I thought I must use them to the widget to work. It seems it was a lot easier to do than that! The widgets I need to display are really simple, just a small text or icon reflecting the state of some variable's value, so I think a regular function will work. I'll try one more time. ;)</p>
]]></description><link>https://community.m5stack.com/post/1968</link><guid isPermaLink="true">https://community.m5stack.com/post/1968</guid><dc:creator><![CDATA[CrazyHorse80]]></dc:creator><pubDate>Sun, 11 Nov 2018 12:37:26 GMT</pubDate></item><item><title><![CDATA[Reply to M5ez, a complete interface builder system for the M5Stack as an Arduino library. Extremely easy to use. on Sun, 11 Nov 2018 11:42:56 GMT]]></title><description><![CDATA[<p dir="auto"><a class="mention plugin-mentions-user plugin-mentions-a" href="https://community.m5stack.com/uid/798">@crazyhorse80</a></p>
<blockquote>
<p dir="auto">I tried to put this line MyTZ.setlocation("Europe/Rome") in my setup() function, but I get an error:<br />
<code>error: 'MyTZ' was not declared in this scope</code></p>
</blockquote>
<p dir="auto"><code>MyTZ</code> has to be declared first. If you put <code>Timezone MyTZ</code> outside of any functions (in the "global scope") it should work.</p>
<p dir="auto">More generally: using objects from my libraries works because they are declared in the <code>ezTime.h</code> and <code>M5ez.h</code> files and then implemented in the respective <code>.cpp</code> files. I would stay away from creating your own objects at this point. You don't need them: simple functions within your own sketch would work and are easier to understand. Simply put the <code>header.add</code> in your <code>setup()</code> (after <code>ez.begin()</code>), and point to a regular <code>void</code> function that takes two <code>uint16_t</code> parameters for drawing the widget.</p>
<p dir="auto">(If you do want to use a class, you'll have to make it static, because otherwise you cannot point to the draw function. But really, just use a regular function.)</p>
]]></description><link>https://community.m5stack.com/post/1967</link><guid isPermaLink="true">https://community.m5stack.com/post/1967</guid><dc:creator><![CDATA[Rop]]></dc:creator><pubDate>Sun, 11 Nov 2018 11:42:56 GMT</pubDate></item><item><title><![CDATA[Reply to M5ez, a complete interface builder system for the M5Stack as an Arduino library. Extremely easy to use. on Sun, 11 Nov 2018 11:14:55 GMT]]></title><description><![CDATA[<p dir="auto"><a class="mention plugin-mentions-user plugin-mentions-a" href="https://community.m5stack.com/uid/457">@rop</a> 在 <a href="/post/1958">M5ez, a complete interface builder system for the M5Stack as an Arduino library. Extremely easy to use.</a> 中说：</p>
<blockquote>
<p dir="auto"><a class="mention plugin-mentions-user plugin-mentions-a" href="https://community.m5stack.com/uid/798">@crazyhorse80</a><br />
Do you also have problems if you lookup the timezone from code (like with <code>MyTZ.setlocation("Europe/Amsterdam")</code>?</p>
</blockquote>
<p dir="auto">I tried to put this line <code>MyTZ.setlocation("Europe/Rome")</code> in my <code>setup()</code> function, but I get an error:</p>
<pre><code>error: 'MyTZ' was not declared in this scope
</code></pre>
<p dir="auto">I also tried to setup TZ in the clock menu at runtime but I can't find the <code>/</code> character on onscreen keyboard...</p>
<blockquote>
<p dir="auto"> <br />
I'm not sure I could do something that would be more informative than the clock code from <code>M5ez.cpp</code>. Let's walk through:</p>
<p dir="auto">[...]</p>
<p dir="auto">Hope this helps, otherwise you'll have to tell me what is not working for you, or (better yet) show code that you are trying to make work.</p>
</blockquote>
<p dir="auto">I think I understood how the clock widget works, but I can't replicate it with my own widget code, here it is:<br />
this is on a tab of its own named <code>Widgets</code>:</p>
<pre><code>//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
//   B B A N D
//
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

class ezBBand {
  public:
    static void begin();
    static void restart();
    static void menu();
    static uint16_t loop();
    static void clear();
    static void draw(uint16_t x, uint16_t w);
  private:
    static void _writePrefs();
    static bool _on;
    static bool _starting;
};

  bool ezBBand::_on;
  bool ezBBand::_starting = true;

  void ezBBand::begin() {
    Preferences prefs;
    prefs.begin("M5ez", true);  // read-only
    _on = prefs.getBool("BBand_on", true);
    prefs.end();
    ez.settings.menuObj.addItem("BBand settings", ezBBand.menu);
    ez.addEvent(ezBBand.loop);
    ezBBand.restart();
  }
  
  void ezBBand::restart() {
    ez.header.remove("BBand");
    uint8_t length;
    if (_on) {
      length = 2;
      ez.setFont(ez.theme-&gt;clock_font);
      uint8_t width = length * m5.lcd.textWidth("F") + ez.theme-&gt;header_hmargin * 2;
      ez.header.insert(ez.header.position("title") + 2, "BBand", width, ezBBand.draw);
    }
  }
  
  void ezBBand::menu() {
    bool on_orig = _on;
    while(true) {
      ezMenu bbandmenu("BBand settings");
      bbandmenu.txtSmall();
      bbandmenu.buttons("up#Back#select##down#");
      bbandmenu.addItem("on|Display BBand\t" + (String)(_on ? "on" : "off"));
      if (_on) {
      }
      switch (bbandmenu.runOnce()) {
        case 1:
          _on = !_on;
          ezBBand.restart();
          break;
        case 0:
          if (_on != on_orig) {
            _writePrefs();
          }
          return;
      }
    }
  }
  
  uint16_t ezBBand::loop() {
    ezt::events();
    if (_starting &amp;&amp; timeStatus() != timeNotSet) {
      _starting = false;
      ez.header.draw("BBand");
    } else {
      if (_on &amp;&amp; ezt::minuteChanged()) ez.header.draw("BBand");
    }
    return 250;
  }
  
  void ezBBand::draw(uint16_t x, uint16_t w) {
    if (_starting) return;
    m5.lcd.fillRect(x, 0, w, ez.theme-&gt;header_height, ez.theme-&gt;header_bgcolor);
    ez.setFont(ez.theme-&gt;clock_font);
    m5.lcd.setTextColor(ez.theme-&gt;header_fgcolor);
    m5.lcd.setTextDatum(TL_DATUM);
    m5.lcd.drawString("Fx", x + ez.theme-&gt;header_hmargin, ez.theme-&gt;header_tmargin + 2);
  }
  
  void ezBBand::_writePrefs() {
    Preferences prefs;
    prefs.begin("M5ez");
    prefs.putBool("BBand_on", _on);
    prefs.end();
  }
</code></pre>
<p dir="auto">It should display the string <code>Fx</code> between WiFi and clock widgets (I'll modify that to display a string from a variable if I get it to work).<br />
In my main tab (M5remDisplay) I put this:<br />
<code>ezBBand BBand;</code> as a global variable declaration and <code>BBand.begin();</code> in my <code>setup()</code> function.</p>
<p dir="auto">This is a list of errors I got:</p>
<pre><code>M5remDisplay:16:1: error: 'ezBBand' does not name a type

 ezBBand BBand;

 ^

C:\Users\Utente\AppData\Local\Temp\arduino_modified_sketch_422641\M5remDisplay.ino: In function 'void setup()':

M5remDisplay:58:3: error: 'BBand' was not declared in this scope

   BBand.begin();

   ^

Z:\_PVControl\M5remDisplay\Widgets.ino: In static member function 'static void ezBBand::begin()':

Widgets:30:58: error: expected primary-expression before '.' token

     ez.settings.menuObj.addItem("BBand settings", ezBBand.menu);

                                                          ^

Widgets:31:24: error: expected primary-expression before '.' token

     ez.addEvent(ezBBand.loop);

                        ^

Widgets:32:12: error: expected unqualified-id before '.' token

     ezBBand.restart();

            ^

Z:\_PVControl\M5remDisplay\Widgets.ino: In static member function 'static void ezBBand::restart()':

Widgets:42:80: error: expected primary-expression before '.' token

       ez.header.insert(ez.header.position("title") + 2, "BBand", width, ezBBand.draw);

                                                                                ^

Z:\_PVControl\M5remDisplay\Widgets.ino: In static member function 'static void ezBBand::menu()':

Widgets:58:18: error: expected unqualified-id before '.' token

           ezBBand.restart();

                  ^
</code></pre>
<p dir="auto">Thank you for helping me and having so much patience...</p>
]]></description><link>https://community.m5stack.com/post/1966</link><guid isPermaLink="true">https://community.m5stack.com/post/1966</guid><dc:creator><![CDATA[CrazyHorse80]]></dc:creator><pubDate>Sun, 11 Nov 2018 11:14:55 GMT</pubDate></item><item><title><![CDATA[Reply to M5ez, a complete interface builder system for the M5Stack as an Arduino library. Extremely easy to use. on Sat, 10 Nov 2018 18:06:23 GMT]]></title><description><![CDATA[<p dir="auto"><a class="mention plugin-mentions-user plugin-mentions-a" href="https://community.m5stack.com/uid/798">@crazyhorse80</a></p>
<blockquote>
<p dir="auto">I have some problem with Geo-IP timezone auto-select, it always timeouts and it's only executed once: could you, please, modify this function to retry if timeout occurs?</p>
</blockquote>
<p dir="auto">Do you also have problems if you lookup the timezone from code (like with <code>MyTZ.setlocation("Europe/Amsterdam")</code>? Retries (and periodic refreshes) of timezone data are planned.</p>
<p dir="auto"> </p>
<blockquote>
<p dir="auto">Could you make the actual header to be a "system" header (with title, WiFi and clock widgets) and add a "user" header so the user could put more widgets in it? I ask for this one 'cause I'm planning an app that will require to display few widgets and I have no pixels to show them all. (In case you're not planning to do that, I'll simply add my code to be displayed in the canvas space with a function of my own).</p>
</blockquote>
<p dir="auto">You could remove the header widgets and create new ones if you want to use the existing space on the display. Or you can write your own code to create your own header on the canvas either in place of or below the existing header. I do not plan to include a second header line.</p>
<p dir="auto"> </p>
<blockquote>
<p dir="auto">And now a more personal request: could you please make a dummy widget complete with all the code to associate a settings menu (with enable / disable widget setting) and the draw code. It'll be perfect if it will simply display a variable value and update every time the minute changes. I've tried to modify the clock widget but I didn't have success with that.</p>
</blockquote>
<p dir="auto">I'm not sure I could do something that would be more informative than the clock code from <code>M5ez.cpp</code>. Let's walk through:</p>
<ul>
<li>If the clock is set to be displayed, <code>ezClock::restart()</code> calculates the width of the widget (clock uses a fixed-width font) and does:</li>
</ul>
<pre><code class="language-cpp">ez.header.insert(RIGHTMOST, "clock", width, ez.clock.draw);
</code></pre>
<ul>
<li>The draw routine that this points to simply clears the area and draws the text. Note that this gets x-position and width from the header code :</li>
</ul>
<pre><code class="language-cpp">void ezClock::draw(uint16_t x, uint16_t w) {
	if (_starting) return;
	m5.lcd.fillRect(x, 0, w, ez.theme-&gt;header_height, ez.theme-&gt;header_bgcolor);
	ez.setFont(ez.theme-&gt;clock_font);
	m5.lcd.setTextColor(ez.theme-&gt;header_fgcolor);
	m5.lcd.setTextDatum(TL_DATUM);
	m5.lcd.drawString(tz.dateTime(_datetime), x + ez.theme-&gt;header_hmargin, ez.theme-&gt;header_tmargin + 2);
}
</code></pre>
<ul>
<li>This redraw routine is automatically called by the header code every time the header is redrawn and additionally every minute — from <code>ezClock::loop()</code> — which simply says:</li>
</ul>
<pre><code class="language-cpp">if (_on &amp;&amp; ezt::minuteChanged()) ez.header.draw("clock");
</code></pre>
<ul>
<li>The clock header item can be removed with</li>
</ul>
<pre><code class="language-cpp">ez.header.remove("clock");`
</code></pre>
<p dir="auto"> </p>
<p dir="auto">Hope this helps, otherwise you'll have to tell me what is not working for you, or (better yet) show code that you are trying to make work.</p>
]]></description><link>https://community.m5stack.com/post/1958</link><guid isPermaLink="true">https://community.m5stack.com/post/1958</guid><dc:creator><![CDATA[Rop]]></dc:creator><pubDate>Sat, 10 Nov 2018 18:06:23 GMT</pubDate></item><item><title><![CDATA[Reply to M5ez, a complete interface builder system for the M5Stack as an Arduino library. Extremely easy to use. on Fri, 09 Nov 2018 12:54:11 GMT]]></title><description><![CDATA[<p dir="auto"><a class="mention plugin-mentions-user plugin-mentions-a" href="https://community.m5stack.com/uid/457">@Rop</a> Hi! Could you consider some changes requests to M5ez?</p>
<ul>
<li>
<p dir="auto">I have some problem with Geo-IP timezone auto-select, it always timeouts and it's only executed once: could you, please, modify this function to retry if timeout occurs?</p>
</li>
<li>
<p dir="auto">Could you make the actual header to be a "system" header (with title, WiFi and clock widgets) and add a "user" header so the user could put more widgets in it? I ask for this one 'cause I'm planning an app that will require to display few widgets and I have no pixels to show them all. (In case you're not planning to do that, I'll simply add my code to be displayed in the canvas space with a function of my own).</p>
</li>
<li>
<p dir="auto">And now a more personal request: could you please make a dummy widget complete with all the code to associate a settings menu (with enable / disable widget setting) and the draw code. It'll be perfect if it will simply display a variable value and update every time the minute changes. I've tried to modify the clock widget but I didn't have success with that.</p>
</li>
</ul>
<p dir="auto">Thank you in advance!</p>
]]></description><link>https://community.m5stack.com/post/1952</link><guid isPermaLink="true">https://community.m5stack.com/post/1952</guid><dc:creator><![CDATA[CrazyHorse80]]></dc:creator><pubDate>Fri, 09 Nov 2018 12:54:11 GMT</pubDate></item><item><title><![CDATA[Reply to M5ez, a complete interface builder system for the M5Stack as an Arduino library. Extremely easy to use. on Wed, 31 Oct 2018 12:10:04 GMT]]></title><description><![CDATA[<p dir="auto">Thak you! I'll have a look at that.</p>
]]></description><link>https://community.m5stack.com/post/1873</link><guid isPermaLink="true">https://community.m5stack.com/post/1873</guid><dc:creator><![CDATA[CrazyHorse80]]></dc:creator><pubDate>Wed, 31 Oct 2018 12:10:04 GMT</pubDate></item><item><title><![CDATA[Reply to M5ez, a complete interface builder system for the M5Stack as an Arduino library. Extremely easy to use. on Wed, 31 Oct 2018 11:51:55 GMT]]></title><description><![CDATA[<p dir="auto"><a class="mention plugin-mentions-user plugin-mentions-a" href="https://community.m5stack.com/uid/798">@crazyhorse80</a> 在 <a href="/post/1870">M5ez, a complete interface builder system for the M5Stack as an Arduino library. Extremely easy to use.</a> 中说：</p>
<blockquote>
<p dir="auto"><a class="mention plugin-mentions-user plugin-mentions-a" href="https://community.m5stack.com/uid/457">@rop</a><br />
That should be<br />
ez.wifi.indexForSSID("your-ssid")<br />
;)</p>
</blockquote>
<p dir="auto">Whoops, so right... Fixed.</p>
<p dir="auto"> </p>
<blockquote>
<p dir="auto">Can I ask if someone has already integrated a simple web server with your software? Could you point me to some easy example? Thank you!<br />
Basically I have an Arduino board sending GET requests to my M5Stack address and I need to decode the GET string and display some variable value on screen every time I got a new connection.</p>
</blockquote>
<p dir="auto">I haven't done this, but the new <code>ez.addEvent</code> feature (<a href="https://github.com/ropg/M5ez#your-own-events" target="_blank" rel="noopener noreferrer nofollow ugc">manual</a>) allows you to put any code you want in the idle loop of M5ez. For example, if you were to use the <a href="https://github.com/espressif/arduino-esp32/tree/master/libraries/WebServer" target="_blank" rel="noopener noreferrer nofollow ugc">WebServer library</a> from Espressif, you would create a function that runs as part of the M5ez main loop, and from it call that library's <code>server.handleClient()</code> (you can't do that directly because the M5ez event functions must return a <code>uint16_t</code> number to indicate after how many ms they would like to be ran again.)</p>
]]></description><link>https://community.m5stack.com/post/1872</link><guid isPermaLink="true">https://community.m5stack.com/post/1872</guid><dc:creator><![CDATA[Rop]]></dc:creator><pubDate>Wed, 31 Oct 2018 11:51:55 GMT</pubDate></item><item><title><![CDATA[Reply to M5ez, a complete interface builder system for the M5Stack as an Arduino library. Extremely easy to use. on Wed, 31 Oct 2018 10:12:31 GMT]]></title><description><![CDATA[<p dir="auto"><a class="mention plugin-mentions-user plugin-mentions-a" href="https://community.m5stack.com/uid/457">@rop</a><br />
That should be<br />
ez.wifi.indexForSSID("your-ssid")<br />
;)</p>
<p dir="auto">Can I ask if someone has already integrated a simple web server with your software? Could you point me to some easy example? Thank you!<br />
Basically I have an Arduino board sending GET requests to my M5Stack address and I need to decode the GET string and display some variable value on screen every time I got a new connection.</p>
]]></description><link>https://community.m5stack.com/post/1870</link><guid isPermaLink="true">https://community.m5stack.com/post/1870</guid><dc:creator><![CDATA[CrazyHorse80]]></dc:creator><pubDate>Wed, 31 Oct 2018 10:12:31 GMT</pubDate></item></channel></rss>