Fluid Dial (Fluid NC dial pendant by Bart Dring, using M5 Stack's M5 Dial)

EDITED TO ADD some new video made later on, specifically from Dec. 28, 2023:

EDITED TO ADD from Dec. 28, 2023, the Printables download link for my remix of the case: Printables

I found out about this via this forum, here.

My purchases (of the M5 Dial, the 12mm momentary buttons, and the wiring tails) have arrived, and I am printing the case (tweaked the lid for printed logo medallions to be added), and I’ve downloaded and installed the Arduino IDE. Will try to post updates as I move forward.

NOTE: regarding the following mentions and images of Arduino IDE… I later posted this update: "Well, after downloading the Arduino IDE, I read further on the Pendant wiki and saw that Bart recommends using Visual Studio Code with platformIO. Since I am already familiar with that, I guess I will pivot to using that!“


Screenshot 2023-12-21 at 4.40.46 PM

I just happened to have a very short USB-C to USB-C patch cable that is compatible with both the M5 Dial and my M1 Max-based MacBook Pro.

Once the device is connected to the computer via the USB-C cable, the screen lights up like this:

In the Arduino IDE, I select the attached ESP-32 S3 like this:

1 Like

I’m currently getting the Arduino IDE setup for the M5 Stack Dial using the setup info on their docs page linked from the “Bart’s Fluid Dial” pendant wiki page: m5-docs

The instructions said to link to their board management profile, yet the IDE also prompted me to download one. I had a choice to choose “Install manually” and I probably should have chosen that, but I permitted the IDE to download what it was asking for. As far as I can tell, it downloaded a “generic” version of the exact same set up files that the “M5 Stack” profile management link caused to be downloaded.

In the last step of the setup…

5.Select ToolsDevelopment Board:M5Stack Arduino, the main control used by M5Dial is M5StampS3, so select (STAMP-S3) in this option.

…I wound up selecting the “name brand” version listing of the board instead of generic “LOLIN S3” choice I selected earlier:

I also went ahead and downloaded the sample libraries suggested by M5:

… by using the interface built into the IDE.

Note: when I used the interface to get “M5Dial” —

… I was asked if I wanted to also get the dependencies, and said yes, and that got the other two as well (M5GFX and M5Unified).

Well, after downloading the Arduino IDE, I read further on the Pendant wiki and saw that Bart recommends using Visual Studio Code with platformIO. Since I am already familiar with that, I guess I will pivot to using that!


Even though Bart’s wiki for the pendant links to a Github subfolder just for the pendant, you’re ahead to go to the root of the Github project and download the whole repo, especially because there is a Lib folder above the pendant folder, and that Lib folder is needed. A copy of it has to be moved into the pendant folder. See more below.

The first efforts to build in Visual Studio Code using PlatformIO failed because the lib containing GrblParser.h could not be found. I located it in the folder branch one step above the “M5Dial_Pendant” folder. I copied that folder (which was named “lib”) into the folder named “M5Dial_Pendant,” then restarted VSCOde, and retried the build. That time I got a “success” on the build. The build was done by clicking on the PlatformIO icon on the left, and then clicking on “Build” in the Project Tasks list, under “m5stack-stamps3” > “General” …

After the successful build, I then clicked on the “Upload” task listed immediately below “Build” — and (remember, my M5 Stack Dial was already previously connected to the MacBook Pro via USB, and it was still connected the whole time) — and I got not only a successful upload, but the screen of the M5 Dial immediately started looking like the Fluid Dial is supposed to look!



This little task I first forgot to do, and then when I remembered, I had trouble locating the file to be edited. Here’s the task:

Developer Info

Library Patch

There is a bug in the M5Dial Encoder library . The patch is pretty simple. It could be automated with some platformio scripting, but I can’t be bothered to do a cross-platform version of the patch script so you will have to apply it manually. After an initial compilation to install the libraries, edit .pio/build/m5stack-stamps3/M5Dial/src/utility/Encoder.h . Find this line:



and replace it with

#define CORE_NUM_INTERRUPT 42 /* was 40 */
#define CORE_INT40_PIN 40 /* added */
#define CORE_INT41_PIN 41 /* added */

My search for the file only brought a result once I reopened VSCode, and clicked “Build” again, and then searched again while VSCode was still open.

In other news, I got the case done, and I got the wiring done on the pendant side. I still need to get the connection done on the Jackpot board side.

Assembly note: the base and lid are attached to each other using four (4) M3 x 16mm screws.


Whoa this thing sure looks amazing. I just read the specs in the Wiki and it sounds like an awesome addition to have. Your build documentation looks pretty thorough as well. Everything seems very well done :slight_smile: I hope you will get it running with no trouble and have great joy using it.

1 Like

I did have to redo the wiring in the pendant. I found I had misaligned one button such that I connected the DC power wires for its LED to its momentary switch terminals instead (and vice versa). I also had no power to the dial, for some reason, probably because there was a very tight fit between the dial and the bottom of the base, which caused pressure against the wiring connector I was using. This led me to remix the base to add depth, and re-print it, while I was redoing the wiring. Now I have success. :slight_smile:

Still need to get it wired into the board.


SUCCESS! Update and key info on connecting the new pendant to the Jackpot driving the LowRider

I now have the new pendant working with my LowRider, connected to the Jackpot board, and moving my LowRider around with it! Very cool.

Connecting to the board involves both a very simple physical wiring connection, and one simple software change, by adding a short section to your config.yaml file.

In the docs by Bart Dring, there is a section called “Connections to controllers” and it illustrates both the wiring and the config edit:

The wiring setup shown there looks like this:

And here’s how mine looks (the only colors on mine that match his are red and black for the 12v power):

And here’s where that gets plugged into the Jackpot board:

Now, while that’s the same place Bart Dring is suggesting it be plugged in, the GPIO numbers on the Jackpot are different. This means the software changes (to the config.yaml file) need to edited from how how Bart Dring lists them in the docs. Specifically, the docs show Tx (transmit or send) happening on Gpio 26, but on the Jackpot the Tx would be happening on Gpio 14, and the docs show Rx (receive) happening on Gpio 4, but on the Jackpot the Rx would be happening on Gpio 13.

Suggested config code from Bart (for 6-Pack boards):
2023-12-23 at 2.27.36 AM Screenshot

Adjusted config code for installation on a Jackpot board:
2023-12-23 at 2.27.52 AM Screenshot

Here’s the config.yaml before adding the new UART2 section for the new pendant

Here’s the edited config.yaml after adding the new UART2 section for the new pendant

Before making this config change and uploading to the Jackpot, the new pendant was getting power, and just saying “N/C” (not connected) at the top instead of “IDLE.” After making the config change, uploading, and rebooting the Jackpot, the new pendant starts with saying “IDLE,” and works exactly as intended.



Now that I have it setup and working, I will aim to get to know it, and put it through some paces, and report back. :slight_smile:

1 Like

Very cool Doug. Nice write up too!

1 Like

Seems they are still working a few things out on that knob.

As of 3.7.12 I think you are missing a setting to minimize UART chitchat. Auto reporting maybe? It seems it is not in the wiki yet so maybe they are still working on it.

So one issue with the dial knob, that the manually edited bug fix was supposed to correct, is still present, even though I did my best to apply the code of the bug fix. That means that when trying to jog continuously with the knob, the motion will suddenly stutter backwards briefly, even though I didn’t turn the knob in the other direction. Meanwhile, continuous jogging via the momentary switches works great.

Any idea where I could get the latest version? I downloaded what was available on Github from the repo that he linked to in the wiki.

There’s still a lot of active development going on.

I’m not sure which repo is the one linked in the wiki, but the discussion today seems to sound like they are consolidating changes from multiple repos.

Dev discussion is here


When I visit the link you posted, I get auto-redirected to here: Discord

…And get this error message:


I went to the WIki, and located there a different link to the Discord, which resulted in me getting classed as having been invited to join:

Yeah, you have to be a member of their Discord first.

After joining, the link should bring you to the FluidDial discussion

1 Like

Yes, that link now works!

Regarding the stutter on jogging via the dial, Bart replied saying he’s still seeing it too, and waiting to see what M5 Stack does.

I’ve also posted in the Discord about some other issues:

  • Homing - works but the little radio buttons don’t light up when end stop switches are pressed.
  • Jogging - I applied bug fix code, yet I’m still getting the backwards stutter when doing continuous jogging with the dial.
  • Jogging - works but the DRO of the location does not update on the touch screen
  • Jogging - is not supposed to allow going too far, such as past a detected end stop, yet this happens.

Bart is dialoging with me. He asked if UART was setup correctly, and I pasted photos and screen shots for him.

1 Like

There is ample evidence in the developer dialogue on the Discord server that Bart and team are working to implement CGode file access and job starts via the pendant!

These are screen shots from a video posted by Bart.


They are working on that, and will allow Macros, etc as well.

Just remember this is still very early Alpha/Beta level at the moment, so it is expected to have a few issues.

I know you read the wiki, but for others seeing this that haven’t, don’t expect a full featured product at this point. Anyone early adopting will need to be a bit patient, but it looks like there are 3 developers actively working on this as a primary focus.

The thing I like, even though I do like this dial, is that it opens the door for more complete implementations of TFT displays, etc. if someone prefers, since all the messaging and stuff they are adding will work for other things.

Might see some other full featured displays pop up over time.

However, seeing it in action, I like the way this one looks, and will likely look into it over the next month or two once it settles a bit.