đŸ€–Have you ever tried Chat.M5Stack.com before asking??😎
    M5Stack Community
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Search
    • Register
    • Login

    UiFlow 2.0 discuss(how-to, bug, feature request or sometings)

    UiFlow 2.0
    69
    178
    172.6k
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • B
      BritOnTour
      last edited by

      My issue with Sync is also fixed. It was another issue with aliyun.com access restriction by my company's IT dept

      1 Reply Last reply Reply Quote 0
      • B
        BritOnTour
        last edited by

        OK, so I am finally making progress with my design, and I see so many features missing that really should be available for a modern development environment. There is no option for design reuse, code sharing, custom functions, etc. If I want to use some example code, I have to recreate each step in my project.

        Moving from uiflow1 to uiflow2, I had to rebuild every block of my design. If I find something useful in an example project, I can't just copy/paste from one window to the other, again, I have to manually rebuild what I want in my project.

        Is there a roadmap for planned features to be added to uiflow2?

        teastainT 1 Reply Last reply Reply Quote 0
        • teastainT
          teastain @BritOnTour
          last edited by

          @britontour Maybe it is time for you to expand into Arduino IDE where all your complaints are answered.
          -Cheers

          Cheers, Terry!

          100% M5Stack addict with several drawers full of product!

          1 Reply Last reply Reply Quote 1
          • K
            Kris @IAMLIUBO
            last edited by

            @iamliubo Why only DAC hat is available with m5staick? No more hats?

            ajb2k3A 1 Reply Last reply Reply Quote -1
            • ajb2k3A
              ajb2k3 @Kris
              last edited by ajb2k3

              @kris said in UiFlow 2.0 discuss(how-to, bug, feature request or sometings):

              @iamliubo Why only DAC hat is available with m5staick? No more hats?

              Because it take time to write and develop the code so that it doesn’t cause breakers in other code

              UIFlow, so easy an adult can learn it!
              If I don't know it, be patient!
              I've ether not learned it or am too drunk to remember it!
              Author of the WIP UIFlow Handbook!
              M5Black, Go, Stick, Core2, and so much more it cant be fit in here!

              1 Reply Last reply Reply Quote 0
              • Z
                zendes
                last edited by

                Hi. I'm missing the 4-Relay Unit in the list of possible devices. Can you please add that back, as it exists in uiflow 1?

                1 Reply Last reply Reply Quote 0
                • felmueF
                  felmue
                  last edited by felmue

                  Hello @zendes

                  maybe my example (PlayZone: M5Dial_4RelayUnit_UIFlow2.0.1) can help out until the native 4-relay unit gets added in UIFlow2.

                  Note: you might need to modify the I2C pins for SCL and SCK dependent on the core you are using.

                  Thanks
                  Felix

                  GPIO translation table M5Stack / M5Core2
                  Information about various M5Stack products.
                  Code examples

                  1 Reply Last reply Reply Quote 0
                  • S
                    sorphin
                    last edited by

                    Just got my Dials in, demo was neat. Used the burner to flash UIFlow 2.0.3 (only option it gives is that or alpha29) (Note, i'm not new to M5Stack or UIFlow)... built a quick for testing the RFID reader which was reported to work... using blocks (and verifying the python)... it does not.. (not in 2.0.3 apparently):

                    1_1712280273337_Screen Shot 2024-04-04 at 6.22.56 PM.png 0_1712280273336_Screen Shot 2024-04-04 at 6.24.02 PM.png

                    1 Reply Last reply Reply Quote 0
                    • W
                      wmatkins
                      last edited by

                      @dlhawley

                      I have a problem with the NCIR-2 temp sensor not being available in the Unit selection window of UIFlow2. I decided to switch to the NCIR hat and forego the high temp alert capability of the NCIR-2 and low and behold, the hat was missing from the add hat section too.
                      These are current products for sale in the M5 store. Wasn't the NCIR-2 introduced over two years ago? I think there would have been ample time to integrate them into the latest UIFlow.

                      1 Reply Last reply Reply Quote 0
                      • felmueF
                        felmue
                        last edited by felmue

                        Hello @wmatkins

                        re: NCIR hat : I think it should work by adding the NCIR unit but with a custom I2C setting, e.g. SCL=26 and SDA=0.

                        Note: I do not have the NCIR hat or unit so I cannot test this myself.

                        Thanks
                        Felix

                        GPIO translation table M5Stack / M5Core2
                        Information about various M5Stack products.
                        Code examples

                        1 Reply Last reply Reply Quote 0
                        • felmueF
                          felmue
                          last edited by felmue

                          Hello @sorphin

                          I can confirm that in M5Dial UIFlow2.0.3 firmware the blocks for the built-in RFID reader are not working and throw an error. However, as a workaround, I used the blocks of a virtual RFID unit (and modified I2C SCL and SDA pins) to successfully read RFID cards with the internal RFID reader. See PlayZone M5Dial_RFID_UIFlow2.0.3 example.

                          Thanks
                          Felix

                          GPIO translation table M5Stack / M5Core2
                          Information about various M5Stack products.
                          Code examples

                          S 1 Reply Last reply Reply Quote 1
                          • S
                            sorphin @felmue
                            last edited by

                            @felmue Thanks for confirming as well Felix. I did find that I could make it work in a round about way as well (using rfid.RFID (no parenthesis)).. but one shouldn't have to do that :/

                            1 Reply Last reply Reply Quote 1
                            • CAT the TechC
                              CAT the Tech
                              last edited by

                              I am programming using UiFlow 2.0 on my M5Stack Stick C Plus 2.

                              I have 3 issues currently:

                              • 1
                                When I burn UiFlow 2.0 using M5Burner, the tool shows esptool being used, which reports the file size being ~20KB.
                                This is very fast (less than a minute).

                                When I use UiFlow 2.0's web interface to upload my program (~20KB) via USB in the web terminal, however, It is very very slow (~2-3 minutes).

                                The issue also happens when I upload a file from the web terminal.

                              • 2
                                When I upload a file or program, it results in an empty (0 Bytes) file! (most of the time), I burned the old Alpha-29 version of UIFlow 2 on my device using M5Burner, and this problem is fixed

                              • 3
                                Half of the time, when I run the program, the colors are inverted (instead of RGB, it's BGR, literally)

                              1 Reply Last reply Reply Quote 0
                              • P
                                Peter
                                last edited by

                                I would like to use the touchscreen on the M5Dial. But the block M5.Touch.getCount() does not work in a while loop! It only works in the main loop. So the touchscreen is hardly usable in Micropython. I have not been able to realize the waiting for a touch.

                                1 Reply Last reply Reply Quote 0
                                • felmueF
                                  felmue
                                  last edited by felmue

                                  Hello @Peter

                                  the trick is to add an M5.update() statement (using an Execute mpy Code block) inside the while loop.
                                  See UIFlow2 Project Zone example: M5Dial_Touch_Get_Count_In_While_Loop_UIFlow2.0.4

                                  Thanks
                                  Felix

                                  GPIO translation table M5Stack / M5Core2
                                  Information about various M5Stack products.
                                  Code examples

                                  P 1 Reply Last reply Reply Quote 0
                                  • P
                                    Peter @felmue
                                    last edited by

                                    @felmue Thanks Felix, it works:)
                                    I didn't look to the Project Zone. I'll do it now.

                                    1 Reply Last reply Reply Quote 0
                                    • R
                                      Raed.Alnuaimi
                                      last edited by

                                      Hi...
                                      How to add custom block (m5b) to UiFlow2.0???

                                      1 Reply Last reply Reply Quote 0
                                      • H
                                        HéctorD
                                        last edited by

                                        Is there any way to port projects from UiFlow 1 to UiFlow 2 (.m5f to .m5f2)?

                                        I've been searching in the forum but didn't find any message about it.

                                        I've to start all my development from zero or there is any way to port projects from one system to the another?

                                        I've several developments for M5StickC.

                                        If it is possible, I think it must be put more visible how to do it. If it's not possible, it must be warning in some place to be visible too.

                                        Thanks.

                                        1 Reply Last reply Reply Quote 1
                                        • CAT the TechC
                                          CAT the Tech
                                          last edited by

                                          Since update 2.0.9, the buttons on my M5Stack Stick C Plus 2 have been tangled and unusable

                                          The button A and power button (aka button C) are now unresponsive. Their respective callbacks do not get triggered at all.
                                          The button B will trigger the callback for button A!

                                          Here is my test program:
                                          uiflow2_block_1720288367871.png

                                          import os, sys, io
                                          import M5
                                          from M5 import *
                                          from hardware import *
                                          import time
                                          
                                          
                                          
                                          
                                          
                                          
                                          def btnA_wasPressed_event(state):
                                            print('Pressed A')
                                          
                                          
                                          def btnA_wasReleased_event(state):
                                            print('Released A')
                                          
                                          
                                          def btnB_wasPressed_event(state):
                                            print('Pressed B')
                                          
                                          
                                          def btnB_wasReleased_event(state):
                                            print('Released B')
                                          
                                          
                                          def btnPWR_wasPressed_event(state):
                                            print('Pressed PWR')
                                          
                                          
                                          def btnPWR_wasReleased_event(state):
                                            print('Released PWR')
                                          
                                          
                                          def setup():
                                          
                                            print('hello M5')
                                            M5.begin()
                                            BtnA.setCallback(type=BtnA.CB_TYPE.WAS_PRESSED, cb=btnA_wasPressed_event)
                                            BtnA.setCallback(type=BtnA.CB_TYPE.WAS_RELEASED, cb=btnA_wasReleased_event)
                                            BtnB.setCallback(type=BtnB.CB_TYPE.WAS_PRESSED, cb=btnB_wasPressed_event)
                                            BtnB.setCallback(type=BtnB.CB_TYPE.WAS_RELEASED, cb=btnB_wasReleased_event)
                                            BtnPWR.setCallback(type=BtnPWR.CB_TYPE.WAS_PRESSED, cb=btnPWR_wasPressed_event)
                                            BtnPWR.setCallback(type=BtnPWR.CB_TYPE.WAS_RELEASED, cb=btnPWR_wasReleased_event)
                                          
                                          
                                          
                                          def loop():
                                            M5.update()
                                            time.sleep_ms(50)
                                          
                                          
                                          if __name__ == '__main__':
                                            try:
                                              setup()
                                              while True:
                                                loop()
                                            except (Exception, KeyboardInterrupt) as e:
                                              try:
                                                from utility import print_error_msg
                                                print_error_msg(e)
                                              except ImportError:
                                                print("please update to latest firmware")
                                          

                                          All was working well in UiFlow 2.0.8 yesterday, please fix this so I can continue to use it.

                                          lbuqueL 1 Reply Last reply Reply Quote 0
                                          • CAT the TechC
                                            CAT the Tech
                                            last edited by CAT the Tech

                                            I also tried some other methods since, none of them had the desired effect:

                                            Method 2 - Pin buttons

                                            • This method works only with mode High (pull_low=False), with or without pull
                                            • It is incredibly slow to respond (about 1 second)
                                            import os, sys, io
                                            import M5
                                            from M5 import *
                                            from hardware import *
                                            import time
                                            
                                            
                                            
                                            Btn37 = None
                                            Btn39 = None
                                            Btn35 = None
                                            
                                            
                                            def btn37_wasPressed_event(state):
                                              global Btn37, Btn39, Btn35
                                              print('Pressed A')
                                            
                                            
                                            def btn39_wasPressed_event(state):
                                              global Btn37, Btn39, Btn35
                                              print('Pressed B')
                                            
                                            
                                            def btn35_wasPressed_event(state):
                                              global Btn37, Btn39, Btn35
                                              print('Pressed PWR')
                                            
                                            
                                            def btn35_wasReleased_event(state):
                                              global Btn37, Btn39, Btn35
                                              print('Released PWR')
                                            
                                            
                                            def btn39_wasReleased_event(state):
                                              global Btn37, Btn39, Btn35
                                              print('Released B')
                                            
                                            
                                            def btn37_wasReleased_event(state):
                                              global Btn37, Btn39, Btn35
                                              print('Released A')
                                            
                                            
                                            def setup():
                                              global Btn37, Btn39, Btn35
                                            
                                              print('hello M5')
                                              M5.begin()
                                              # Pin 37 == button A
                                              # Pin 39 == button B
                                              # Pin 35 == button PWR (aka button C)
                                              Btn37 = Button(37, active_low=False, pullup_active=False)
                                              Btn37.setCallback(type=Btn37.CB_TYPE.WAS_PRESSED, cb=btn37_wasPressed_event)
                                              Btn37.setCallback(type=Btn37.CB_TYPE.WAS_RELEASED, cb=btn37_wasReleased_event)
                                              Btn39 = Button(39, active_low=False, pullup_active=False)
                                              Btn39.setCallback(type=Btn39.CB_TYPE.WAS_PRESSED, cb=btn39_wasPressed_event)
                                              Btn39.setCallback(type=Btn39.CB_TYPE.WAS_RELEASED, cb=btn39_wasReleased_event)
                                              Btn35 = Button(35, active_low=False, pullup_active=False)
                                              Btn35.setCallback(type=Btn35.CB_TYPE.WAS_PRESSED, cb=btn35_wasPressed_event)
                                              Btn35.setCallback(type=Btn35.CB_TYPE.WAS_RELEASED, cb=btn35_wasReleased_event)
                                            
                                            
                                            def loop():
                                              global Btn37, Btn39, Btn35
                                              M5.update()
                                              Btn37.tick(None)
                                              Btn39.tick(None)
                                              Btn35.tick(None)
                                              time.sleep_ms(50)
                                            
                                            
                                            if __name__ == '__main__':
                                              try:
                                                setup()
                                                while True:
                                                  loop()
                                              except (Exception, KeyboardInterrupt) as e:
                                                try:
                                                  from utility import print_error_msg
                                                  print_error_msg(e)
                                                except ImportError:
                                                  print("please update to latest firmware")
                                            

                                            Method 3 - machine.Pin (IRQ)

                                            • It is fast, responsive
                                            • It cannot report accurately if the button was pressed or released if multiple events are queued one after the other
                                            import os, sys, io
                                            import M5
                                            from M5 import *
                                            import time
                                            from hardware import *
                                            from machine import Pin
                                            
                                            
                                            
                                            pin37 = None
                                            pin39 = None
                                            pin35 = None
                                            
                                            
                                            p = None
                                            
                                            # Describe this function...
                                            def button_callback(p):
                                              global pin37, pin39, pin35
                                              i = int(str(p)[4:-1])
                                              print(f"Button id: {i}, value: {p.value()}")
                                            
                                            
                                            def setup():
                                              global pin37, pin39, pin35
                                            
                                              print('hello M5')
                                              M5.begin()
                                              # Pin 37 == button A
                                              # Pin 39 == button B
                                              # Pin 35 == button PWR (aka button C)
                                              pin37 = Pin(37, mode=Pin.IN)
                                              pin39 = Pin(39, mode=Pin.IN)
                                              pin35 = Pin(35, mode=Pin.IN)
                                              pin37.irq(trigger=Pin.IRQ_RISING | Pin.IRQ_FALLING, handler=button_callback)
                                              pin39.irq(trigger=Pin.IRQ_RISING | Pin.IRQ_FALLING, handler=button_callback)
                                              pin35.irq(trigger=Pin.IRQ_RISING | Pin.IRQ_FALLING, handler=button_callback)
                                            
                                            
                                            def loop():
                                              global pin37, pin39, pin35
                                              M5.update()
                                              time.sleep_ms(50)
                                            
                                            
                                            if __name__ == '__main__':
                                              try:
                                                setup()
                                                while True:
                                                  loop()
                                              except (Exception, KeyboardInterrupt) as e:
                                                try:
                                                  from utility import print_error_msg
                                                  print_error_msg(e)
                                                except ImportError:
                                                  print("please update to latest firmware")
                                            

                                            Edit:
                                            Oh, right, I almost forgot.
                                            There is no such thing as the following in the machine.Pin method:

                                            p.irq().flags()
                                            

                                            I don't know if it is because of the micropython port you guys use or if it is the esp32-pico-v3-02's fault, but I think there is something missing there...

                                            1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post