Close
0%
0%

SerialPlot - Realtime Plotting Software

Small and simple software for plotting data from serial port

Similar projects worth following
This is a Qt based software for plotting data from serial port in real time.

IMPORTANT: instead of commenting please consider creating a ticket at issue tracker (https://todo.sr.ht/~hyozd/serialplot or https://github.com/hyOzd/serialplot/issues) Hackaday's notification system is broken and I may not notice your messages.

SerialPlot accepts 3 different types of data input:

  • simple binary stream, supports different number formats (unsigned/signed - 8/16/32 bits and float)
  • ASCII data in CSV format
  • user defined custom frame format (frame start byte, frame size, checksum etc..)

You can take snapshots of current view and store them in CSV files. You can also load them back from csv files, for convenient viewing.User can also define "commands" to be sent to the serial port device with a click. Commands can be defined in HEX or ASCII format.

In the sidebar you can find links to Linux and Windows downloads and source code.

  • Moving Project to Git/Github (?)

    Hasan Yavuz Özderya05/31/2021 at 20:11 1 comment

    I'm considering moving this project to git. There has been a few requests. Not many. But I feel like reason is that people just don't request such things unless a project is really really popular. Actually there has been a git repository at github for quite some time. But I did not update it. I only kept it for visibility and as another place for people to create tickets.

    From now on; I will keep github repository up to date which is at: https://github.com/hyOzd/serialplot

    I enjoy using mercurial even though I don't have much opportunity to do so. For a while I will keep using both git and mercurial. There is a mercurial extension called hggit that makes this relatively easy and pain free. For git users there should be no drawbacks.

    To be honest if git repository turns into something popular I will probably stop using mercurial altogether.

  • SerialPlot v0.12 release

    Hasan Yavuz Özderya05/14/2021 at 16:19 3 comments

    This is another minor release. There isn't any significant changes.

    Changes:

    • Filter by prefix for ASCII data format parser (thanks to Alexander Amelkin)
      This is useful when your data is mixed with other information such as log messages. There is no way of displaying such log messages on SerialPlot yet.
    • Export SVG (thanks to martijuerg)
    • Other minor fixes improvements etc:
      • remember user entered custom baud rate
      • add double precision floating point number format support for binary readers
      • fix 'settings invalid' error when loading config with 'first byte is size byte' enabled
      • fix for data format selection can be empty (no button is selected state which is invalid)

    As always you can find latest download links in the sidebar.

    Download links for v0.12:

    Windows installer: https://serialplot.ozderya.net/downloads/serialplot-0.12.0-win32-setup.exe

    Windows EXE 7Zip: https://serialplot.ozderya.net/downloads/serialplot-0.12.0-win32.7z

    Windows EXE: https://serialplot.ozderya.net/downloads/serialplot-0.12.0-win32.exe

    Linux AppImage (based on Ubuntu 18.04): https://serialplot.ozderya.net/downloads/serialplot-0.12.0-x86_64.AppImage

  • SerialPlot v0.11 release

    Hasan Yavuz Özderya09/14/2020 at 11:12 1 comment

    Well, it's been a while.

    But I decided to finally put together a new release. There aren't any big news or changes. To be honest what pushed me to finally create a new release is that I forgot to move the "downloads' section from the bitbucket before they axed the mercurial repositories and as a result got a lot of mails/comments from people around to world. Sorry.

    Here are some changes that come in v0.11:

    • command line options thanks to Mehmet Aslan
    • "value tracker" that displays the sample values under cursor
    • "Text View" panel to display read values
    • Gain and Offset to adjust input data
    • An experimental "Bar Plot" widget
    • added icons for Windows
    • recorder timestamp format
    • decimal precision setting for recorder
    • port read statistics
    • many fixes

    Download links:

    Linux AppImage (Ubuntu Trusty based, should work on anything newer):

    https://serialplot.ozderya.net/downloads/serialplot-v0.11.0-x86_64.AppImage

    Windows 32 bit (should work fine on 64 bit windows):

    https://serialplot.ozderya.net/downloads/serialplot-0.11.0-win32.exe

    Important: I didn't have time to test either of these images. Please let me know if you have any problems with them.

  • Building SerialPlot for Windows using Docker

    Hasan Yavuz Özderya09/14/2020 at 11:02 0 comments

    Building serialplot on windows isn't much different than building on linux. But it isn't as straightforward. Installing dependencies can be difficult. And it is also difficult to build a static EXE that doesn't require DLLs to keep it company. But most importantly it is difficult for me, because I don't use windows other than for gaming purposes. Unfortunately most users of SerialPlot use windows and as a result I can't ignore it.

    Luckily there is MXE to my rescue. This is a cross compilation toolchain to build windows binaries (and more) on a linux (unix like) host. Whats more is that they also provide 'static' toolchains. When you build your project with a static toolchain it is easier to deploy and can be smaller in size.

    So I prepared a dockerfile to make it even easier to build windows using docker. You can build this docker image on linux. AFAIK there are ways to run docker on windows host but I won't go into any details of that. It is also possible to use MXE in msys2, which is a layer to run unix programs on windows. In fact most of the windows releases until now has been built on windows using msys2 and mxe.

    Dockerfile is already included in the serialplot source code called:

    Dockerfile_mxe

    Assuming you have already installed docker, download the serialplot source code using mercurial and build the docker image:

    hg clone https://hg.sr.ht/~hyozd/serialplot/
    cd serialplot
    sudo docker build -t serialplot_mxe -f Dockerfile_mxe ./

    Remember this might easily take a couple hours depending on your internet speed and cpu power. To give you an idea resulting docker image is around 5GB in size.

    If all goes well you can get the built binary from inside the docker image with this command:

    sudo docker run --rm --entrypoint cat serialplot_mxe /serialplot/build_docker_mxe/serialplot.exe > ../serialplot.exe 


  • How to build SerialPlot on Linux

    Hasan Yavuz Özderya09/07/2020 at 07:59 0 comments

    These are the steps for building SerialPlot on linux. I will also provide more detailed steps for Ubuntu and similar debian based distributions.

    Building SerialPlot on linux is quite easy. Most difficult part (not really difficult) is gathering the dependencies. It is possible that you already have some of them installed such as a C++ compiler.

    I've also described how to build with docker which might be the easiest method if you are familiar with it.

    Install Dependencies

    You should have following dependencies installed, preferably using your package manager:

    • Qt5 Development Package (at least version 5.9; recommended 5.15)
    • Qt5 serialport and svg package
    • Cmake (version 3.x)
    • C++ compiler (somewhat new, should support C++11) and make (usually installed with a base package)
    • Mercurial (to download source code, optional)

    On ubuntu or similar operating systems you can install these dependencies with the  following command.

    sudo apt install build-essential qtbase5-dev libqt5serialport5-dev libqt5svg5-dev cmake mercurial

     Note: instead of 'qtbase5-dev' you can install 'qt5-default' package to make sure it is the default qt version.

    Also note: SerialPlot doesn't build with Qt4, you need Qt5.

    Also also note: you need internet access during build process. It is not necessary, but if you don't, you have to also have "Qwt" library installed.

    Get Source Code

    You can download the source code using mercurial with the following command. Mercurial is a version control tool very similar to git.

    hg clone https://hg.sr.ht/~hyozd/serialplot

    Or if you don't want to deal with the mercurial you can download the latest code from this link.

    https://hg.sr.ht/~hyozd/serialplot/archive/tip.tar.gz

    Build

    When you have everything ready, run following commands in the serialplot directory.

    mkdir build
    cmake ..
    make run

     This should build SerialPlot and start it.

    Building AppImage

    When you build SerialPlot this way it probably only works on your computer. It should work on other computers with the same distribution as yours as long as they have the correct libraries installed. If you want to lend your build to your friends you can create a portable executable called AppImage. This should run on most distributions. And it is how I release the Gnu/Linux version of the SerialPlot.

    It is easy to build SerialPlot appimage.

    Run below command in your build directory.

    cmake ..
    make appimage

    That's it. If everything goes well you should  now have SerialPlot appimage in your build directory, and it should run in most distributions (fingers crossed).

    Building with Docker

    There is a Dockerfile inside the serialplot directory ready to go. It is based on Ubuntu 18.04 (bionic) [used to be 14.04 (trusty)]. Building it, produces an appimage that you can use on Ubuntu/Debian based systems. Maybe on other distros too?

    If you don't have it installed, you can install docker on Ubuntu with this command:

    sudo apt install docker.io

    After that, get into the directory of 'serialplot' where the 'Dockerfile' exists and run this command. It might take some time depending on your internet speed.

    sudo docker build -t serialplot_bionic .

     This will build a docker image that should contain the SerialPlot appimage. After building appimage, you should get it from inside the docker image with this command.

    sudo docker run --rm --entrypoint cat serialplot_bionic /serialplot/build_docker/SerialPlot-x86_64.AppImage > ./serialplot.appimage

    Make it executable and start serialplot:

    chmod +x ./serialplot.appimage
    ./serialplot.appimage

    Notes

    Although actual build process is quite simple and straightforward, if you are not experienced you may have issues building SerialPlot successfully. It usually is missing dependencies. It rarely is an incompatible library. In that case please leave a comment : ) I will be happy to help.

    Also if you have steps for other distributions and recommendations, please share, I will...

    Read more »

  • Moving SerialPlot out of bitbucket

    Hasan Yavuz Özderya05/01/2020 at 10:15 4 comments

    Bitbucket is removing mercurial support along with all mercurial repositories.

    I decided to move the source code to sourcehut.

    Here is the mercurial repository: https://hg.sr.ht/~hyozd/serialplot/

    Here is the new issue tracker: https://todo.sr.ht/~hyozd/serialplot

    I haven't moved download files yet. I will probably have to host them myself. Sourcehut doesn't provide file hosting.

  • Sample value tracker development in progress

    Hasan Yavuz Özderya09/27/2018 at 21:11 2 comments

  • SerialPlot v0.10.0 Released

    Hasan Yavuz Özderya09/03/2017 at 15:19 0 comments

    SerialPlot 0.10 is released. This release brings some performance improvements, minor features and bug fixes.

    Instead of "number of samples" option in the "Plot" tab, now there are 2 options you can set. "Buffer Size" and "Plot Width". "Buffer Size" is the total number of samples that are kept in memory, while "Plot Width" is the maximum number of samples that are plotted at once, in X axis. To see previous samples you simply use the X axis scrollbar. The main reason for this distinction is the performance. Previously you couldn't set number of samples too high because SerialPlot tried to plot all data at one time. Now you can set "Buffer Size" to 1.000.000 and it will most likely will be fine as long as you keep "Plot Width" small. Another advantage is that, sometimes when you have frequently changing data, zooming way out doesn't mean much, you have too keep a certain zoom level in X axis to be able to see any detail. If you enjoy the old behaviour you can always set buffer size option same number as plot width and it should be fine. Remember though "plot width" option has a smaller limit then "buffer size" for performance reasons. A note; performance improvements are not done. I'm still working on some improvements to increase "buffer size" limitations.

    Now you can set RS232 control signals (DTR, RTS) and see input signal () statuses from the "Port" tab. Being able to set DTR signal was a requested feature so that SerialPlot can work with Arduino Leanardo board.

    Also we now have an update checker. You can launch it from the "Help" menu. It will check updates once a day when you first launch SerialPlot unless you disable it.

    Other improvements and bug fixes:

    • custom ASCII (csv) data column delimiter
    • fixed snapshot display bug
    • fixed command type not loaded/remembered
    • fixed duplicated channel names

    Check the sidebar for download links. I will try update the win32 version and launchpad PPA later this week.

  • Patch Release 0.9.1

    Hasan Yavuz Özderya05/05/2017 at 12:25 6 comments

    This patch fixes various issues and adds small improvements:

    • fix symbols getting stuck after multiplot mode
    • fix symbols in snapshot view
    • add options to disable (or always enable) symbols
    • panning (Ctrl+Left Mouse) @Maxim
    • show snapshot view in current plot settings
    • fix snapshot view axis stuck at [0-1]

    See downloads links at the sidebar.

  • SerialPlot 0.9 Released (Recording and Scrollbars)

    Hasan Yavuz Özderya04/17/2017 at 12:55 3 comments

    Hi everyone, it's release time. First of all I want to thank everyone who contacted me via various channels for their kind comments! And ideas of course... some to be implemented... some day... : )

    Changes:

    • scrollbars for plot (appears when zoomed)
    • continuous recording to CSV file
    • channels can be hidden and plot colors are adjustable ("Plot" tab)
    • bunch of various GUI improvements and minor bug fixes

    Installation for linux:

    PPA for Ubuntu 16.04 (xenial) and based distros: https://launchpad.net/~hyozd/+archive/ubuntu/serialplot

    Appimage(*) for other distros: https://bitbucket.org/hyOzd/serialplot/downloads/SerialPlot-x86_64.AppImage

    Installation for windows:

    64bit setup: https://bitbucket.org/hyOzd/serialplot/downloads/serialplot-0.9.0-win64.exe

    32bit setup: https://bitbucket.org/hyOzd/serialplot/downloads/serialplot-0.9.0-win32.exe

    (*) Appimage may be broken on some systems. Please let me know if you have any problems.

View all 18 project logs

Enjoy this project?

Share

Discussions

osannolik wrote 04/18/2017 at 10:20 point

Great project! It is somewhat similar to my Measurement tool (https://hackaday.io/project/11607-calibration-and-measurement-tool), although a bit more general and configurable, since it does not imply anything about the protocol and how the data sent should be formatted.

  Are you sure? yes | no

Hasan Yavuz Özderya wrote 04/18/2017 at 10:27 point

Thanks @osannolik I've already seen your project. It's one of those project that I've been thinking about but secretly wishing for someone else to do it :D Thanks!

  Are you sure? yes | no

avengersx2011 wrote 04/17/2017 at 16:24 point

Is it possible to represent the y axis in time(seconds)?

  Are you sure? yes | no

Hasan Yavuz Özderya wrote 04/17/2017 at 20:19 point

I think you mean x axis? Unfortunately that's not possible at the moment. X-axis is always index. There is X-axis scaling from the Plot tab, that you can set. But this is mostly visual. If your data comes in fixed intervals (no actual time data) that might work for you.

  Are you sure? yes | no

Andres wrote 04/13/2017 at 15:41 point

Hey man, amazing software.. it saved me a shitton of time. I'm using it everyday and it's really good with microcontrollers.

Yesterday I discovered a totally minor thing, the legends are partly readable to me, here's a pic:

http://imgur.com/a/sngNc

I'm using Windows 10

On another note does serialplot timeout the uart? After a while the program seems to stop showing data, and I'm checking with a scope that the UART is still sending. I need to press the "Open" button twice (two "unpress" it, and press it) and it starts working again. 

  Are you sure? yes | no

Hasan Yavuz Özderya wrote 04/13/2017 at 18:03 point

@Andres I'm very happy to hear that it was helpful to you : )

Hmm, your problem looks like a DPI problem. Can you tell me your screen DPI setting?

No, there is no such thing as timeout. It's probably a bug. Can you give more details? Which data format are you using? How do you connect to the device, uart-usb converter, RS232? How long does it take the problem to occur? Do you see any messages in the log tab? By the way did you check if the problem occurs with other software as well, such as a terminal?

  Are you sure? yes | no

Andres wrote 04/19/2017 at 13:03 point

Excuse my late late reply. 

After much debugging I realized that the one dropping the connection is my usb-serial (A STM32 Nucleo64 board), there are some problems with their ST-LINK or my usb decides to disconnect it. But definitely not your soft, sorry for that.

Regarding the legends.. it doesn't always happen.  But it's an XPS9550 at 1920x1080 with the "dpi" settings of window at 125%(recommended). Not sure how to get an exact number tbh.

  Are you sure? yes | no

Maxim wrote 04/11/2017 at 08:34 point

I found a little issue. This is not even a problem, but an interface feature.

In Multiplot mode, if you have plots with different scale, Y value have different length. So, graph windows shift from one another. Because of this, it is difficult to compare these graphs.

So, I guess, graph width should be the same.

I send you a link to snapshot of this situation. If I can't do it here, I'll send it using private message. 

  Are you sure? yes | no

Maxim wrote 04/11/2017 at 05:30 point

Next, it will be very helpful, if user can click on a point of the graph and see precise X & Y values of this point.

  Are you sure? yes | no

Hasan Yavuz Özderya wrote 04/11/2017 at 06:07 point

That's also in my todo. I hope to get it implemented in the 0.10 version. (Next one will be 0.9)

  Are you sure? yes | no

Maxim wrote 04/10/2017 at 14:11 point

And thank you very much for the simple binary protocol.

Hate, "AAA BBB CCC XXX bla-bla-bla "OOOOO, user byte is here" NNN CRC". It is impossible to obtain effective use of the band in a plenty of programs. But it's not nessesary for debugging.

And your "Skip Byte" & "Skip Sample" :) Wondeful!

  Are you sure? yes | no

Hasan Yavuz Özderya wrote 04/11/2017 at 06:05 point

"Simple Binary" is the reason this software is created :) Most other similar software uses ASCII, but "printf" is not option in small MCU's such as PICs.

  Are you sure? yes | no

Maxim wrote 04/11/2017 at 08:06 point

Wow, we use simple PICs like PIC16F684, and powerful PICs like dsPIC33EP series, so, your "Simple Binary" is a reason I really liked your program :)

"printf" in MCU... Where is my gun? :) As low-level developer, I work with low-level raw data, hi-speed PID regulators & uncompressed audio streams with 256k bitrates. ASCII. Impossible :)

  Are you sure? yes | no

Maxim wrote 04/10/2017 at 14:06 point

And it will be really helpful, if user can manage the time scale of the two graphs simultaneously. I mean, for example, I have 2 graphs, which is connected with each other, but it has different scales. So, I need to use "Multi Plot". But if I see something interesting on the first, change it scale, but the second, which graph is connected with first (logically), doesn't scaled automatically. It will be very helpful, if user can select, merge or not time scale of the graphs of "Multiplot"

  Are you sure? yes | no

Hasan Yavuz Özderya wrote 04/11/2017 at 06:03 point

Do you mean different views for the same data stream? This is something I planned but I don't think I will be implementing it soon. I will have to solve some architectural problems first. In the mean time, to capture interesting events you can use "snapshots" feature. Would that work for you?

  Are you sure? yes | no

Maxim wrote 04/11/2017 at 08:14 point

No-no-no, I talked about other thing. Not differernt views for the same data stream. One time-window for two (or more) data streams in Multiplot, the windows is synchronized with each other. For example, I try to zoom first Multiplot window using time-axis, other Multiplot windows is zooming is conclusion with the first along with time-axis.

  Are you sure? yes | no

Hasan Yavuz Özderya wrote 04/11/2017 at 09:10 point

Ok. I get it now. You means synchronizing the zoom. Again, in my TODO. Will prioritize it for you.

  Are you sure? yes | no

Maxim wrote 04/10/2017 at 08:44 point

Your program is really useful. First of all, I can config protocol as I need. Simple, lightweight. Beautiful. We used other software to plot our data, it's VERY slowly, it was a real problem. After all, another programs are ugly.

I would suggest introducing the ability to multiply incoming data from the channel by a constant. This will be very useful when presenting data on charts in fixed point formats, such as 1.15. 

Also useful would be the ability to scroll through the schedule, "grabbing" it with the mouse, like pulling.

  Are you sure? yes | no

Hasan Yavuz Özderya wrote 04/11/2017 at 06:00 point

Multiplications/offset constants are in my todo.

> Also useful would be the ability to scroll through the schedule, "grabbing" it with the mouse, like pulling.

I didn't understand what you mean? Can you explain again?

  Are you sure? yes | no

Maxim wrote 04/11/2017 at 08:24 point

Of course :) And thanks for attention to the comments. 

Google maps is a correct examle of such grab/move action.

I mean if I zoom the graph, but is mistaken a little with the place, I must unzoom it & make zoom again. Try to find needed place with such instrument is Google Maps :)

I offer to make an abitily to click on the zoomed graph, hold mouse button & move mouse to correct zoom zone, like "grabbing" the window. 

  Are you sure? yes | no

Hasan Yavuz Özderya wrote 04/11/2017 at 09:29 point

Ok, you mean "panning". I will look into it. I didn't implement it because I don't know how it should work. As you said clicking is already used for zooming. I will think about your suggestion.

By the way. 0.9 will have scroolbars which should help your problem.

  Are you sure? yes | no

Maxim wrote 04/11/2017 at 10:11 point

Scrollbars? Really, it help! It's not as convenient as panning, but in any case! Thanks. Scrollbars will be very useful.

If you decided to do panning, I try to offer the next action scheme:

1. First, left mouse click & hold

2. Second, right click & hold.

3. Drag holding two buttons.

Or maybe use any keyboard key on the edge of the keyboard, "Ctrl", for example.

  Are you sure? yes | no

Nate wrote 05/10/2017 at 16:06 point

I would suggest click and hold the middle mouse button to pan.  This is the convention in many programs including Gimp, Inkscape, Autocad.

  Are you sure? yes | no

Hasan Yavuz Özderya wrote 05/10/2017 at 17:00 point

@Nate I couldn't find your other comment that you asked how to pan.

Currently you pan with pressing Ctrl+left mouse button. I will think about your suggestion.

  Are you sure? yes | no

kbnie wrote 01/25/2017 at 18:47 point

Hello, this software support high bit rate like 921600 bps? I don't see it on the user interface. Could you make this availble? 

  Are you sure? yes | no

Maxim wrote 04/10/2017 at 08:36 point

I use such bitrate in my project.

This program supports this bit rate. There is no this bitrate in the list, but you can type it by hand in the field of drop-down list.

  Are you sure? yes | no

Nate wrote 01/05/2017 at 19:01 point

Your SerialPlot is great - really useful.  Thanks!  Can you add the ability to set individual Ymax and Ymin to each channel?

  Are you sure? yes | no

Hasan Yavuz Özderya wrote 04/11/2017 at 09:31 point

@Nate I'm sorry for late reply. I missed the notification. 

I'm not sure how to implement your idea. This would be possible in "Multi View" mode. But in single view mode, since all channels share the same axis. It wouldn't work. What did you have in mind exactly?

  Are you sure? yes | no

Nate wrote 04/11/2017 at 10:11 point

Sorry for not being more clear.  I meant multi view mode.

  Are you sure? yes | no

Hasan Yavuz Özderya wrote 04/11/2017 at 10:13 point

Ok then. I will look into it.

  Are you sure? yes | no

Nate wrote 04/11/2017 at 10:19 point

Thank you! 

  Are you sure? yes | no

Nate wrote 04/24/2017 at 16:50 point

I noticed the 0.9 release.  Did individual Ymax and Ymin for each channel (for multiplot) make it into this release?

  Are you sure? yes | no

Hasan Yavuz Özderya wrote 04/24/2017 at 17:33 point

@Nate No I haven't added per axis y-limits yet. Maybe next time : )

  Are you sure? yes | no

RoGeorge wrote 09/15/2015 at 22:01 point

I was very annoyed in the past by the hassle of saving the COM data as HEX to a text file, then import the file as CSV and convert the data, in order to plot from a spreadsheet.

Your SerialPlot is sooo useful, thanks!

  Are you sure? yes | no

Hasan Yavuz Özderya wrote 09/16/2015 at 03:15 point

I'm glad to be helpful. Thanks for your kind comment :D

  Are you sure? yes | no

Chrunchstick wrote 08/01/2015 at 17:33 point

Any change that you'll release a mac version?

  Are you sure? yes | no

Hasan Yavuz Özderya wrote 08/01/2015 at 20:10 point

@Chrunchstick I'm sorry but not soon. I don't have any experience with mac.

However, SerialPlot uses Qt which is a cross platform framework. In theory you should have no problem building SerialPlot on a mac yourself. If you try this and experience any problems, please let me now.

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates