Many have asked and therefore many will contribute.... please open source uiFlow so we (the community) can help fix bugs and add enhancements (new blocks).

Best posts made by world101
-
[UIFlow] Open source UIFlow
-
RE: M5stack original firmware (binary)
I also flashed mine with micropython. To get it back to the factory program that came installed, I connected it to the Arduino IDE, selected Tools > Board: M5Stack-Core-ESP32. Next I opened: File > Examples > M5Stack > Basics > FactoryTest. Upload that to the m5stack and you should be back to the factory program.
If you don't have the M5Stack custom libraries, you can install it from Sketch > Include Library > Manage Libraries... Type m5stack in the filter box, select the result, and install the latest version.
-
RE: need help converting text to int (CORE2)
I think your issue is because you are using variable X within the ESP Now Receive Callback to hold the string data coming from the ESP Now transmitter device. Then within the Loop, you are trying to convert it to an integer. Upon program execution, the Python code has X=None, and is trying to convert X (which has no data yet) to an integer, thus throwing the error: can't convert noneType to int. So you have a few options. These worked for me.
- Define X within the Setup function like this...
- Redesign your program to perform all the calculations within the Receive Callback function. I actually prefer this option, because it doesn't require a Loop and is therefore non-blocking (no 1 second delay in the Loop). You're just waiting to receive data from ESP Now and then take action on it. However, I'm not sure what the rest of your program is supposed to achieve, so just take this into consideration.
For reference, here is my ESP Now transmitter flow. It's an M5StickC with the JoyC Hat. It sends the X position data of the left joystick, mapped from 0 to 180, so it will turn a servo connected to port A on the Core2 (the ESP Now receiver).
- Define X within the Setup function like this...
-
RE: M5StickC Nixie tube Clock
I implemented the Nixie tube clock in uiFlow IDE for the M5StickC-Plus device.
https://github.com/bstein2379/M5StickC-Plus-Nixie-clockCredit goes to @macsbug for the original idea. I just made it easier for new programmers and kids by using the uiFlow IDE.
-
RE: [Solved]M5StickC firmware
@arzaman said in M5StickC firmware:
@world101 thank ,
so the same bootloader works for arduino IDE and UIflow ? if so is awesome
so what is the "original" FW that is pre-loaded?
If I udenrstand well the UIflow V1.2.3 loads on ESP32 micro python so sounds strange to me that once you have loaded the UIFlow FW you can use also with arduino IDE (C++)anyway I will try
D.
No it’s one FW or the other. The original FW should be uiFlow (MicroPython), at least for the recent hardware. The older hardware cores (M5Stack black or grey) shipped with a factory test Arduino sketch. All the newer hardware should ship with the uiFlow firmware.
Flashing the hardware with the Arduino IDE will overwrite the uiFlow firmware. To get it back to uiFlow (MicroPython), use m5burner.
-
UiFlow needs https
@m5stack please also configure http://flow.m5stack.com/ for https like you did for this community forum. Thanks!
-
RE: [Solved] Poweroff M5Stack using uiflow?
Hi @sjako
There is a "Power off" block in uiFlow if your device is the M5StickC, M5StickC-Plus, or Core2 since they have the newer AXP192 power management chip.
The other M5stack devices like Core (Black), Grey, Fire, M5Go, etc. have the older IP5306_I2C power management chip with limited power functions, so the same "Power off" block does not exist in uiFlow for these specific devices. Also, when these devices are are charging with the USB-C cable plugged-in, there is no way to turn them off by double tapping the red power button on the side. Double tapping the power button just resets the device while the cable is plugged in. The USB-C cable has to be unplugged in order to turn it off. It's just a limitation of the IP5306_I2C power management chip, which is why I think M5Stacked moved away from that chip in favor of the AXP192 on newer device models.
So your options include:
-
Use the M5StickC, M5StickC-Plus, or Core2 device as your timer and use the native "Power off" block in uiFlow
-
Just turn the screen off (brightness=0) after the timer exceeds the set time. Then you could use a button callback to turn the screen back on and reset the timer.
- Have the device go into deep sleep after the timer exceeds the set time by using the Execute block. This will essentially shutdown the M5Stack. To turn it back on, tap the red power button once and it will boot-up and start the last running program again (assuming you Downloaded the program to the device and the device is in App mode).
Hope this helps!
-
-
RE: UIFlow Github project?
I feel your pain. I’ve been buying M5Stack products for more than 3 years now, after learning about the company from their Kickstarter campaign. They are such cool “complete packaged” products and nothing like it in the market right now. I just can’t stop buying things from them. However, there are some serious challenges when you really dig into the details of the products. Engineering-wise they are pretty good and so compact. Sometimes there are hardware flaws (noisy speaker, conflicting GPIOs, m5stickC battery drain, etc.), but I’ve seen a relatively low number of those over the years. Is it perfect? Nope. Lacking documentation is the biggest complaint. Personally I think they release products a bit too quickly. I’m all about fast innovation, but IMHO they should wait until all software, docs, and good examples in Arduino and uiFlow/Micropython are ready. But their slogan is “ideas fast tracked” not “IoT products for retail and commercial solutions.” So you have to take the good with the bad I guess. 🤷🏼♂️
If you care to share your feedback, they released a customer survey here:
https://m5stack.com/blogs/news/m5stack-customer-survey-2021 -
RE: Randomness ...
1/ Possibly, but I'm not sure how you would verify the extents/limitations of the hardware while using uiFlow. I think in general though, working with the UI elements of uiFlow can be a little tricky at times, especially with more complicated programs like this. You have to carefully manage the UI elements and the layers they are on. If you make changes on the screen, you might have to update the elements with the
Set ... show/hide
block to ensure they display properly after making a change to the display. Sometimes it's a bit of trial and error for me. I have developed some fairly complex flows on the M5Stack devices with uiFlow. Here is one example. I'm not a software programmer though, so other people might say it's not complex, but it was for me ;-)2/ Arduino would give you more control vs. uiFlow where you rely on blocks to do the work (coding) for you. If you don't know what's going on "under the covers" of the blocks (due to lack of documentation, uiFlow not being open source, etc.), it's hard to debug the corner-case issues. The downside to Arduino is that UI development is harder (you can't just drag/drop elements to the screen like with uiFlow). Also, you need to be a good programmer and understand all the syntax to make something work :-)
3/ Not quite sure yet. I'll give your program a try to see if I can figure anything out. Can you please also post the images that go above buttons A, B, and C? I already have HA set up and ready to go.
-
RE: The Max value of the slider cannot be modified !
Yes, I agree this is a bug with the slider object and also the bar object in the UI simulator, but you can easily work around the bug with the
Set range min max
block until m5stack fixes it. -
RE: Receiving data with ESP Now in UIFlow
Here is a simple flow that you can program on each M5StickC device that will send (Tx) and receive (Rx) a counter value using ESPNow.
I'm using broadcast to send the counter values, so will send data to all devices listening on the ESPNow network.
To make it point-to-point, you could use the "Add peer" block with the mac address of the other device within the flow and then use the "Send message with id" block to send data to only a specific device by its mac address.
If you had more than two devices on the ESPNow network, you would add multiple "Add peer" blocks (also changing the mac and ID values for each one) and multiple "Receive mac_address" blocks (also adding the specific mac you want to receive data from) to distinguish who was sending the data and who could receive the data.
Hope this helps!
-
RE: Arduino not parsing M5Stack package index
I just wanted to update that I finally got it working.
I uninstalled v4 of the Silicon Labs VCP driver (using the uninstaller.sh script from the zip file below). Then installed the latest driver from this file:
https://www.silabs.com/documents/public/software/Mac_OSX_VCP_Driver.zip
I did not install the legacy driver. I used "Silicon Labs VCP Driver.pkg" from the main directory of the zip file.Next, I had to do a fresh install of the Arduino IDE 1.8.5, then followed the same instructions here: https://github.com/m5stack/M5Stack/blob/master/docs/arduino-ide/mac.md
After I restarted the Arduino IDE, I now saw the M5Stack-Core-ESP32 listed under the Tools > Boards > ESP32 Arduino menu. No need to do anything with the Boards Manager.
-
RE: Turn Off Display
If you have the m5stack with MPU-9250... it would be cool if you code the display to turn off after a certain time, then turn it back on once you pick up or move the m5stack. Anyone want to implement that?
-
RE: M5Stack and Blynk
After further digging for the error, I found the following which has the solution.
https://github.com/m5stack/M5Stack/issues/32
I modified the header file Arduino/libraries/M5Stack/src/utility/M5Timer.h as follows.
//typedef std::function<void(void)> timer_callback; typedef void (*timer_callback)(void); typedef void (*timer_callback_p)(void *);
It now builds successfully and connects to the blynk cloud :-)
@m5stack FYI... please add this to fix on the next release.
-
RE: Has anyone figured out a good way to update the display quickly?
Yep, or any combination of these defined colors
TFT_BLACK
TFT_NAVY
TFT_DARKGREEN
TFT_DARKCYAN
TFT_MAROON
TFT_PURPLE
TFT_OLIVE
TFT_LIGHTGREY
TFT_DARKGREY
TFT_BLUE
TFT_GREEN
TFT_CYAN
TFT_RED
TFT_MAGENTA
TFT_YELLOW
TFT_WHITE
TFT_ORANGE
TFT_GREENYELLOW
TFT_PINKOr you can define your own color based on red, green, and blue values, like this:
#define MY_CUSTOM_COLOR M5.Lcd.color565(83,54,120) /* uint16_t color565(uint8_t r, uint8_t g, uint8_t b), */
-
RE: Setting the volume
@dda 在 Setting the volume 中说:
You're supposed to call
M5.Speaker.update();
after that to update the value.Excellent and thanks! I was wondering the same thing.
-
RE: Blynk on M5Stack via uiFlow and block-maker
By the way, I haven't found a way to import existing m5b files into block-maker.m5stack.com, so here are the ones I created. Feel free to play around with them and even create some new ones! The official Blynk colors are here: http://docs.blynk.cc/#blynk-main-operations-change-widget-properties
Blynk Init:
import BlynkLib BLYNK_AUTH = ${auth_token} blynk = BlynkLib.Blynk(BLYNK_AUTH)
Blynk Run:
blynk.run()
Uptime:
@blynk.VIRTUAL_READ(${pin}) def v${pin}_read_handler(): time_val = time.ticks_ms() // 1000 blynk.virtual_write(${pin}, time_val) lcd.textClear(${x}, ${y}, ' ', lcd.${bg_color}) lcd.print(time_val, ${x}, ${y}, lcd.${fg_color})
Slider: (Note, this is slightly different than the tutorial above. I was experimenting with passing a variable into the block. Feel free to adjust it as needed)
@blynk.VIRTUAL_WRITE(${pin}) def v${pin}_write_handler(value): lcd.textClear(${x}, ${y}, ' ', lcd.${bg_color}) ${variable} = '{}'.format(value).strip("['']") lcd.print(${variable}, ${x}, ${y}, lcd.${fg_color}, transparent=True, fixedwidth=True)
Push Notification:
@blynk.VIRTUAL_WRITE(${pin}) def v${pin}_write_handler(value): if value: blynk.notify(${text})
I'm really interested in how to link blocks together, like the m5stack team did for the MQTT blocks. But I'll start a new thread on that soon.
-
Blynk on M5Stack via uiFlow and block-maker
I've been playing around with block-maker.m5stack.com quite a bit the past few days. I managed to integrate the Blynk python library and a few of the examples from the Blynk github repo.
Here is how I did it. I'm on a Mac, so sorry I don't have the equivalent instructions for a PC.
-
First you need to get the BlynkLib library on the M5Stack. Clone the repo to your computer (or just download the BlynkLib.py file from github.com)
git clone https://github.com/vshymanskyy/blynk-library-python.git
-
You will also need ampy or another file transfer utility to copy BlynkLib.py to the M5Stack. Follow the instructions in this video.
https://www.youtube.com/watch?v=rvP3GixWG1Y -
Copy BlynkLib.py to the M5Stack and put it into the /flash/lib directory so it can be imported as a MicroPython module
cd blynk-library-python
ampy -p /dev/tty.SLAB_USBtoUART -b 115200 put BlynkLib.py /flash/lib/BlynkLib.py
Note: if you use a local Blynk server like I do, you can edit line 216 of BlynkLib.py and change it to your local server IP and port. Don't forget to put the updated file on your m5stack with ampy. This is the line to edit:
self.conn.connect(socket.getaddrinfo("blynk-cloud.com", 80)[0][4])
-
Using your browser, go to flow.m5stack.com. Open this *.m5b file that I made with block-maker.m5stack.com. It has the custom blocks that I created for Blynk.
-
Open this Blynk flow by using the Open option in the upper right menu.
- Load the image Blynk_m5.jpg into the Resource Manager (upper right menu of uiFlow)
Note: you may need to reload the image on the UI
Now it should look like this:
-
Open the Blynk app on your iOS or Android mobile device. Create a new project and give it a name (I called my project MicroPython). Obtain the auth token from the nut icon in the upper right corner.
-
Drag 4 widgets into the project view
- Value Display: set title to "Uptime (sec)", set pin to V0, and set Refresh Interval to 1 sec
- Horizontal or Vertical Slider: set pin to V1 and Decimals to #
- Button: set title "Push Notification", set pin to V2, set ON label to Sent and set OFF label to Send
- Notification: no settings necessary
-
Press the Run icon (triangle in upper right corner of the Blynk app)
-
Back on your browser, paste your auth token into the flow under the Blynk init block
- Press the Run icon (triangle in upper right corner of the uiFlow page) and wait for the Blynk app to connect to the M5Stack. Optionally, you can Download the flow to your m5stack using the Download option in the upper right menu.
Demo Use Cases:
-
M5Stack uptime (in seconds) will be shown on the Blynk app and on the M5Stack LCD
-
Change the Slider and the value will be updated on the M5Stack LCD
-
Tap the Push Notification button and it should send a push notification to the Blynk app on your device with the text shown in the flow.
Happy Blynking with your M5Stack! :-)
-
-
RE: Blynk on M5Stack via uiFlow and block-maker
Glad you all got it working. To access REPL, you can do this from the Mac Terminal with the M5Stack connected to a USB port.
screen /dev/tty.SLAB_USBtoUART 115200
You may not see anything at first, so you can press CTRL+C on the keyboard to drop you into the REPL prompt (>>>). From there, you can do your regular MicroPython commands. For example...
>>> os.listdir() ['image_app', 'main.py', 'emoji', 'sys_lib', 'config.py', 'lib', 'res', 'flow.py', 'blocks', 'apps', 'debug.py', 'modeconfig.json', 'boot.py', 'img'] >>> os.listdir('lib') ['servo.py', 'square.py', 'step_motor.py', 'm5_pin.py', 'm5bala.py', 'wave.mpy', 'lego_board.py', 'bmp280.mpy', 'dht12.mpy', 'mpu6050.py', 'chunk.mpy', 'pid.py', 'lego.py', 'BlynkLib.py'] >>> import BlynkLib ___ __ __ / _ )/ /_ _____ / /__ / _ / / // / _ \/ '_/ /____/_/\_, /_//_/_/\_\ /___/ for Python v0.2.0 >>> help() Welcome to LoBo MicroPython for the ESP32 For online documentation please visit the Wiki pages: https://github.com/loboris/MicroPython_ESP32_psRAM_LoBo/wiki Based on official MicroPython, this port brings many new features: - support for two cores and 4MB SPIRAM (psRAM) - improved 'network' module - greatly improved thread support - support for 3 different internal file systems on top of ESP32 VFS - ESP32 native support for SD Card - built-in FTP & Telnet servers - support for OTA updates - many new and improved hardware access modules implemented in C and many more... Control commands: CTRL-A -- on a blank line, enter raw REPL mode CTRL-B -- on a blank line, enter normal REPL mode CTRL-C -- interrupt a running program CTRL-D -- on a blank line, do a soft reset of the board CTRL-E -- on a blank line, enter paste mode For further help on a specific object, type help(obj) For a list of available modules, type help('modules') >>> help('modules') __main__ m5flow/m5mqtt math uerrno _thread m5flow/m5stack microWebSocket uhashlib ak8963 m5flow/peripheral microWebSrv uheapq array m5flow/simple microWebTemplate uio binascii m5flow/ubutton micropython ujson btree m5flow/unit/adc mpu6500 uos builtins m5flow/unit/button mpu9250 upip cmath m5flow/unit/color network upip_utarfile collections m5flow/unit/dac os upysh display m5flow/unit/dual_button pye urandom errno m5flow/unit/ext_io random ure freesans20 m5flow/unit/ir re urequests functools m5flow/unit/ncir select uselect gc m5flow/unit/relay socket usocket hashlib m5flow/unit/rgb_ ssd1306 ussl heapq m5flow/unit/tof ssl ustruct io m5flow/units struct utime json m5flow/utils sys utimeq logging m5flow/wifichoose time uzlib m5base m5flow/wificonfig tpcalib websocket m5flow/app_manage m5flow/wifisetup ubinascii writer m5flow/i2c_bus m5ui ucollections ymodem m5flow/m5cloud machine uctypes zlib Plus any modules on the filesystem >>>
etc...
Or if you don't go into the REPL prompt, but still have the screen session connected, you can see the serial logs from the m5stack. Reboot the M5stack and you should see the Blynk start up, plus some other useful information (network connection, connection to M5cloud, etc.).
To exit the screen session press CTRL+A then CTRL+\ then y.
-
RE: MQTT and Ui.Flow help needed
@f3rn4nd0d try changing the mqtt subscribe to username/feeds/parking but replace your username with the real one