The best option for making a GUI?

First off, Happy New Year to all, hope you all have a fantastic year ahead.

I'm using the Arduino for home and work projects alike. I work in a production environment and the Ardunio is great for making all different types of test boxes.

However, I'd like to expand on this. I'd like to build test boxes and then integrate them with a Windows OS. For example, I'm planning on building a test box where through the use of k-type thermocouples, I can monitor the temp at different places on a piece of equipment under test. i'd want to graph this out to a GUI on windows, and also collect the data.

I'm also currently building a LORA based comms system, and I want to display on a windows OS, a GUI that gives me the status of the nodes connected, and also gather the data from that.

My Cpp programming skills are a basic level. i understand functions and classes well enough, but I'm still learning. Having projects help to drive this learning.

They'll be no doubt lot's of other projects down the line where i want to create similar things. With that said, i think i need to learn a GUI framework. But I'm new to programming and the options are just overwhelming.

I'd love some advice on this. Options I've briefly looked at are

  1. Dear ImGui: GitHub - ocornut/imgui: Dear ImGui: Bloat-free Graphical User interface for C++ with minimal dependencies

But i don't know if there will be more work involved with Dear ImGui. However, I must stress, it will be something I will continuously use, so if I've got to really work at it, so be it

  1. Processing ide: Download Processing / Processing.org

Processing ide looks kinda interesting tbh, and i'm leaning towards this at the moment.

  1. Qt: Open Source Development | Open Source License | Qt

A lot of folk on the internet seem to mention Qt as the gold standard. I'm not sure on the licensing side of things, how that works. Learning curve maybe steep, but again, so be it.

To sum up though. i'm looking for a GUI framework, that i'd be constantly using. It would only ever be used in a test environment in a production facility. it would not be distributed in any way. it doesn't have to look that fancy, practicality is the may concern here. The GUI's would be running on Windows. It would basically be graphing out things, from sensors etc. that are connected to Arduinos, nothing more than that.

One thing I'm unsure about, is the gathering of data, and how to do that. On my LORA based project, I want to gather data from multiple nodes. In simple terms, when a particular node is turned on and off, i want to log that, and the time it takes between an on and an off. i also want to be able to send a string, and capture that string, and log that.
I'm not sure yet how best to capture that info on the windows system. What role a GUI framework would play in that. If i just make a simple excel doc, I'm unsure.

Anyway, thanks for taking the time to read this.

Best wishes!

If the gui is intended to run on a Web browser (smartphone, PC etc) just create it with html/ javascript.

1 Like

I would just use C# in Microsoft Visual Studio if it's only for Windows.

Qt is not necessary if you don't code for multiple platforms (you only mention Windows).
The Processing is not an easy start if you need a full fletched GUI with dialog boxes, menu bar etc.

2 Likes

Iā€™d be inclined to pull the data into Excel and manipulate and graph it there. If you need something more sophisticated, your unsatisfactory Excel app will help you to define what you really want.

@burntout
If you are creating virtual instruments, then I recommend Labview.
They have a free version for non-commercial use.
It's just drag and drop

Depending on how many times you have to update the graphs a spread-sheet software like excel or libreOffice Calc might be sufficient.

If you do measurings over two weeks to collect data and then you will create 3 to 10 XY-graphs
something like libre-office will be sufficient because

  • importing the data from an SD-card as CSV-file
  • marking the data
  • defining which is X-value which is Y-value

and then let do LibreOfice Calc create the diagram
must be done only once every two weeks.

If your do some measurings for 30 minutes. Then want to see the graphs
changing some parameters and do the next measurings
or if the graphs shall be updated live in realtime
this would be too much effort

It highly depends on how your data looks like and how the visualisations shall look like

There are also some ready to use applications.
Example PlotJuggler

I did a quick look and it seems to be very versatile

Been using Delphi since ver 1 on Win3.1..
In my opinion still the best..
embarcadero
If you're not selling the app, could use free community editions, looks like they just released 11 to CE..
If you prefer c++, look at c++ builder..
But, really, I recommend Delphi..
There's also lazarus..
runs on a pi..

Used Delphi for nards..

good luck.. ~q

Cool used Borland Pascal and Turbo-Pascal a long time ago.
Used Delphi 7 around 2001 to 2005.Did only a few small thing since then

Yep, used both of them too, that was back in DOS days..
My fav back then was clipper..

Been a decade since i've done any commercial products..
last one was dassle..
built with delphi 2009..

Was a borland stock owner, the whole inprise move, horrible..
but delphi will always be dear to me..

good ole days.. ~q

Considering your continuous use of the framework and the practicality requirement, Qt seems to be a good choice.

I agree - Visual Studio C# is easy to build GUIs but as @sterretje states it is for Windows only
I tend to use NetBeans to build Java GUI applications as it is portable across operating systems, e.g. implement on windows and move the class files to Rapberry Pi and run (assuming one is not using operating system specific libraries)
also consider C++, Python, VB.NET, etc

if you setup your Arduino, Nano, ESP32, etc code to write information to the Serial monitor it is just a case of closing the serial monitor and your application opening the COM port associated with the Arduino and reading and displaying the information.
C#, Java, VB.NET, Python have libraries to communicate with the serial COM ports.
the program reads the information from the COM port (/dev/ttyUSB1 on RPi) and display on TextBoxes, Charts, Graphs, etc

alternatives are communicating using Bluetooth, WiFi, Ethernet, LoRa, etc - again supported by C#, Java, Python, etc

Python is good for rapid development and is fairly easy to use. It is modular and easy to create additional modules so you could get the basics up and running quite quickly and build this up over time to develop a more complex application

Have you looked at this GIF? that demonstrates how PlotJuggler works.

There are many many hours of software-development in this application
and it even offers plug-ins and writing your own pre-process-functions

1 Like

Python also has the advantage like Java of being (fairly) portable across operating systems.
if code contains operating system specific code one can

import os

print("Python:  operating system " + os.name)

then by determining the current host operating system take sepecfic action, e.g.

 if os.name == 'posix':   # if linux system add /dev/ to serial port name
                name='/dev/' + name

By far the simplest, most veratile way to create a GUI is as a web server. The ESP32, acting either as an AP, or a client on an existing WiFi network. is an ideal platform for this. Your "display" can then be ANY device with WiFi and a browser - phone, PC, tablet, almost anything. I will never again go to the bother of setting up a hard-wired device with its own display. The cost, development time, and memory footprint, of doing it with HTML/CSS/Javascript, etc, is a fraction of what it is for a dedicated display system, and you have almost unlimited flexibilty and expansion capabilty. ANYTHING that can be done through a browser can be done with your device.

1 Like

+1 for web interface. Use jquery.js + css and you are ready to go. But to be honest: in most cases a TUI is enough.

Sounds like you can setup something like this within 15 minutes.

Would you be so kind and take these 15 minutes to post a demo-sketch that will
simply count up a variables X and calculates Y with equation Y = 0.3 x X + 1 and then creates
a XY-Diagramm showing the graph from 0 to 10?

Though I doubt highly that it can be done that fast.
If it take more time can you post a link to a tutorial that explains the principles?

I doubt this too. That simply downloading this jquery.js + css will work that fast.
Go tae 15 minutes and post the demo-code like described above
or
post a link to a tutorial that shows how it is done

best regards Stefan

Who said it takes 15 mins to build a web application?

So if it takes more time. What do you estimate how long does it take?
Can you post a link to a tutorial?

I never so much as implied any such thing. But compared to how long it would take to create even a pretty rudimentary UI with a dedicated display and the typical Arduino display driver, a web interface would be a fraction of the development time. And, nearly all of the UI development can be done, and tested, on a PC, then, once working, simply transfer the files to the Arduino for final validation. If you have not yet developed a UI using a simple Arduino display, you have NO idea the challenges you are in for...