Yea, that makes sense. Working on a code change so it doesn’t get stuck like that when it can’t connect to WiFi.
I just pushed up a code update to the code repo. You’ll just need to upload that the same as you did the first time. It will now timeout trying to connect to WiFi. Once that happens, you can select Other → Setup and update the settings.
There are a few other changes I’ve been working on in this update too. I changed some messages and when they display as well as the default colors. There are some other formatting updates as well. I’m still poking this here and there.
Thanks. I’ll try it later tonight.
Success! I was able to connect to the FluidNC network and I am exploring the controls. Homing works and so does jogging. I still have to set up some macros to try that. I am using the FluidScreen on a Primo. Thanks for your work on this.
Awesome. Let me know if you have any questions or suggestions.
P.S. I’m thrilled someone else made one. You’re the first that I’m aware of. I would love to see a picture of it.
Looks great!
whoa, you built one already?
I find the webUI to be a little clumsy when I am trying to move the router around. This seemed like it would make things a little easier. I like the ability to move with a joy stick, and I am still exploring the additional features of the FluidScreen. Jason’s instructions made this a really easy project to construct.
Just pushed some updates to the firmware:
- Show messages as you navigate the menu to make usage more intuitive
- Update preview image on web page
- Update Websocket connection to retry
- Update menu to auto select “Reset” when state goes to Alarm
- Added details for “Other” → “Info” to show connection details and version.
I haven’t had this happen since then. I think it’s fine now.
The update to the websocket connection fixes this.
I might make a new video this weekend to show it as it is now. Otherwise, I don’t really have any pending actions for this project other than maybe reviewing/updating the documentation. I’m calling this version 1.0.0-20250130.
Got mine built and I love the design. Total cost for me was about $25 since I had to buy the screen, encoder and joystick. But the prints went together well, and I love the form factor.
However, I can’t get it to trigger a captive portal on any of my devices, either by scanning or by joining FluidScreen SSID. If I try to hit the 192.168.8.1 IP address I get “too many redirects.” I’ve tried turning off all Apple’s anti-tracking craziness. Any ideas on how I can get this thing set up if I can’t hit the captive portal (or I’d take more ideas on how to trigger the captive portal.)
Thanks for the great work.
Awesome!
Hmm, yea the captive portal stuff has given me some grief. I don’t have any Apple devices but even on Android, I can’t get the auto-captive portal stuff to work right. But, if I go to 192.168.8.1, it works.
I pushed up a change to a new captive-portal branch that removes some redirects. Try building and uploading from that branch and see if you can get to it at 192.168.8.1. You don’t need to do the filesystem part.
jeyeager65/FluidScreen at captive-portal
Hmm - I still haven’t been able to trigger the captive portal. I’ll see if I can find a non-apple device to try with. I’ve been Apple only since 2007, so no PCs in the house with WiFi, but I could probably construct a quick Raspberry Pi with a browser. I’ll check back.
I wasn’t expecting that change to fix the captive portal, just get rid of some redirects. So, I’d still expect you would need to manually go to http://192.168.8.1 to get to the page.
I guess to clarify, when I say “captive portal”, I mean the functionality to automatically display the page. I know that’s not working. But, it should still allow you to access the web page by going to the URL directly. If that’s not working (such as due to too many redirects), that’s a different problem.
I’ll have to poke this captive portal stuff some more. If I can get it to work on my Android phone, maybe it will work for you as well. I also can borrow an iPad to try it out.
In the meantime, if you want to use it without worrying about this setup part, you can make this modification to configure manually within the code:
In main.cpp, in the void setup()
method starting on line 608, add this code after setupColors with the “Override Settings” comment. You’ll need to update the Connection settings as appropriate.
void setup() {
Serial.begin(115200);
// I don't know why but without this delay, I can't read preferences
delay(100);
settingsSetup();
setupColors(CurrentSettings);
// Override Settings
CurrentSettings.IsInitialized = true;
CurrentSettings.IsConfigMode = false;
CurrentSettings.Connection.SSID = "MyWifi";
CurrentSettings.Connection.Password = "MyWifiPassword";
CurrentSettings.Connection.Address = "fluidnc.local";
CurrentSettings.Connection.Port = 82;
if(CurrentSettings.IsConfigMode) {
...
Thank you! I’ll configure manually if I can’t get to the config page. And just to clarify, I was trying the 192.168.8.1 page. I never got the captive portal to pop, but it’s easy enough to use a browser. I tried Chrome, Safari, and Chrome on Windows and all said too many redirects. I wonder if it’s something in my network settings.
I did end up configuring manually, but then it worked and was awesome. Driving the LR4 around with the thing is so intuitive. The speed takes a little practice for someone of my age, but it’s awesome. Thank you!
Glad to hear it. Being intuitive was one of my goals.
Ah, that’s good feedback. I forgot I hardcoded max feedrate to 4000 mm/min for XY and 1200 mm/min for Z which is a bit aggressive. I’ll make that configurable once I sort out the captive portal stuff.
If you want to change it manually yourself for now, you’ll need to update main.cpp in 4 spots:
For X and Y, search for these 3 lines and update with your desired max:
maxFeedrate = 4000;
For Z, there’s just 1:
maxFeedrate = 1200;
I pushed some changes up to my captive-portal branch. I’ll see if I can borrow an iPad next week to test it there. If anyone wants to apply them, this requires uploading the filesystem and the app. Once I test it out more, I’ll push these changes to the main branch but there’s no harm in using this version.
- Fixed the issue with the captive portal not popping up on my android phone. It seems that it doesn’t like private IP addresses (like 192.168.x.x) so I changed it to 4.3.2.1.
- I don’t know yet if it helps, but I added a couple Apple-specific captive portal redirects.
- Added the ability to set the max feedrates for jog settings. New defaults of 2400 mm/min for XY and 800 mm/min for Z.
- Added popup messages to better reflect that the Save and Restart buttons are actually doing something. Before, you would press them and while they worked, there was no indication to the user.
Getting smooth jogging is a bit challenging. I noticed when I reduced the max jog rate, I’m more likely to get a bit of stuttering. Since there are a bunch of things happening, I need to reduce the delay (based on calculated time for the jog) before sending the next jog command. The goal is to try and prevent having an empty planner buffer yet keep it as close to empty as possible. Currently, it reduces the time for the next jog by 75 ms for the first jog command, and 25 ms for the next ones. It’s not bad, but there is some potential for optimization.
I was playing with Github Copilot which was pretty helpful. I’m generally an AI skeptic but it provided useful information. It wasn’t perfect, but good enough. At some point, I’ll use this to help me restructure the code. This is small enough that it’s not a big deal, but I’d like it to be more organized and split. That’s mostly just to meet some personal coding standards that I’m not 100% certain how to handle in C++ which is not my strength.
I also have some thoughts on how I might implement the ability to select files to run from the SD card. Running a file currently requires a macro and using a file with a specific name which is a little odd but not a big deal either. I’m not sure when or if I’ll do this yet.
Jason and others.
I have My Primo up and running and everything is dialed in and working on WebUI v2
I’d like to try and upgrade to WebUI v3 but is this a bad idea?
Is v3 stable and ready for prime time?
I’d like to use the keyboard controls feature in V3 and maybe get a joystick working.
I like the fluid dial but I’d prefer a dedicated x,y, and z jog button which you can have with a joystick with multiple toggle switches.
anyway would you recommend going from UI v2 to UI v3?
Is there a dedicated thread for help creating macros for Fluidnc?
I’d like to learn more about machine coordinates and create two macros one for sending the spindle to a specific “machine” coordinate for me to manually change the bit and one for sending the machine to a dedicated machine coordinate for parking the machine. With the weight of the 1.5 KW spindle I need to add a wood block below the z-rails so the spindle does not drop to the spoil board. So I’d like to be able to set the wood board in place and hit a macro key to send the spindle to a specific x, y, and z location and then turn the jackpot off. Right now I need to do all this manually and it’s a pain in the butt.