Giter VIP home page Giter VIP logo

serial-studio / serial-studio Goto Github PK

View Code? Open in Web Editor NEW
4.1K 4.1K 651.0 72.76 MB

Multi-purpose serial data visualization & processing program

Home Page: https://serial-studio.github.io

License: Other

QMake 0.53% QML 4.74% C++ 51.52% Shell 0.01% C 42.47% NSIS 0.10% CMake 0.06% Objective-C++ 0.52% Roff 0.04% JavaScript 0.01%
arduino cansat csv embedded graph ground-station iot microcontroller network projects qt serial serial-studio

serial-studio's Introduction

Serial Studio

Github commits GitHub contributors PR's Welcome Codacy Badge Github All Releases Contributor Covenant Donate

Serial Studio is a simple, multi-platform, and multi-purpose data visualization program that allows embedded developers to visualize, analyze, and represent data generated from their projects and devices. It does not require the need to write project-specific visualization software.

Over my many CanSat-based competitions, I found myself writing and maintaing several Ground Station Softwares for each program. However, I decided that it would be easier and more sustainable to define one flexible Ground Station Software that let developers define how each CanSat presents data using an extensible communication protocol for easy data visualization. Developers can also use Serial Studio for almost any data acquisition and visualization project outside of CanSat, now supporting data retrieval from a hardware serial ports, software serial ports, MQTT, Bluetooth Low Energy (BLE) and network sockets (TCP/UDP).

Read this in other languages: Español 简体中文 Deutsch

Software usage

Install

You can download and install Serial Studio for your preferred platform.

GNU/Linux users must enable the executable flag before attempting to run the application:

chmod +x SerialStudio-1.1.1-Linux.AppImage
./SerialStudio-1.1.1-Linux.AppImage

You can also use the AppImageLauncher to integrate Serial Studio with your system.

Prebuilt Linux packages

Arch Linux users can install serial-studio-git from the aur, e.g. with aurutils:

aur fetch serial-studio-git
aur build
sudo pacman -S serial-studio-git

Licence

This project is released under the MIT license, for more information, check the LICENSE file.

Development

Requirements

The only requirement to compile the application is to have Qt installed in your system. The desktop application will compile with Qt 6.3.2.

On GNU/Linux systems, you will also need to install libgl1-mesa-dev in order to compile the application.

Full list of used Qt modules:

  • Qt SVG
  • Qt Quick
  • Qt Widgets
  • Qt Networking
  • Qt Serial Port
  • Qt Print Support
  • Qt Quick Widgets
  • Qt Quick Controls 2

Cloning

This repository makes use of git submodule. In order to clone it, execute these commands on your Terminal:

git clone https://github.com/Serial-Studio/Serial-Studio
cd Serial-Studio
git submodule init
git submodule update

Alternatively, just run:

git clone --recursive https://github.com/Serial-Studio/Serial-Studio

Compiling the application

Once you have Qt installed, open Serial-Studio.pro in Qt Creator and click the "Run" button.

Alternatively, you can also use the following commands:

qmake
make -j4

Software architecture

This is a simplified diagram that explains how the different Serial Studio modules interact with each other. You can find the DOXYGEN documentation by clicking here.

Architecture

Tipping

If you find Serial Studio suitable for your needs, please consider giving me a tip through PayPal. Or, if you prefer to buy me a drink personally instead, just send me a DM when you visit Querétaro, Mexico, where I live. I look forward to meeting you!

serial-studio's People

Contributors

00light00 avatar 2e0byo avatar abhisahn avatar alex-spataru avatar bradfora avatar danpark13 avatar jiangjiangjun avatar tetrapod1206 avatar umarcor avatar zfb132 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

serial-studio's Issues

Windows installer force restarts PC!

Windows installer of Serial Studio 1.0.12 release instantly force restarted my windows without asking at the end.
Lost a few hours of works. wtf

Network.cpp constructor function negligent mistake

In Network.cpp

The Constructor function,

line 43, "connect(&m_udpSocket, &QTcpSocket::errorOccurred, this, &Network::onErrorOccurred);"

I think it should be: connect(&m_udpSocket, &QUdpSocket::errorOccurred, this,&Network::onErrorOccurred);

I am not sure, please check it

Serial-Studio was upstreamed to MSYS2 repositories

Earlier today, a PKGBUILD recipe for Serial-Studio was accepted in msys2/MINGW-packages) (see msys2/MINGW-packages#7682 and mingw-w64-serial-studio).

The package was already built for MINGW32 and MINGW64. Those are available at staging-mingw. Most impatient users can download the mingw-w64-*serial-studio-*.zst files and install them with pacman -U *.zst. In the following days, maintainers will sign and upload them to the pacman repositories.

Serial-Studio was included in group mingw-w64-*-eda, which includes multiple tools/projects related to electronic design automation. See hdl.github.io/MINGW-packages for further details.

@alex-spataru, as you can see in https://github.com/msys2/MINGW-packages/blob/master/mingw-w64-serial-studio/PKGBUILD#L36, I "had to" install the binary directly, since I couldn't find a make install target. Is that correct? Shall we change it for future releases?

BTW, congrats for this nice looking and offensively easy to build project! 😄

[Feature request] UI enhancements

Sorry for creating so many issues, but I see a lot of potentioal in this project, and in my opinion the console itself it a very good general purpose serial monitor if it had a few more features. Here are some ideas you can take into consideration:

  • Everything I type and send gets echoed back on screen without any indication that this is the echo, not a reply from the attached serial device. The echo should IMO be optional, and default off, just like other serial monitors.
  • There should also be a way to automatically add [LF], [CR] or [CRLF] to the message sent from Serial Studio. Ideally from a dropdown menu just like in Arduino IDE, or perhaps a checkbox or similar.
  • It would be great if one could change the baudrate without having to disconnect, change and reconnect again. Arduino IDE let's you do this on the fly, and it's very practical if you accidentally selected the wrong baud rate. It's the small things that makes the user experience 🙂
  • It would also be really neat if there was a way to disable autoscrolling in the console. Sometimes you're logging somthing, and you'd like to stop and take a closer look without disconnecting from your serial device.

Here's how [CR]/[LF] is done in Coolterm (which is not a very intuitive terminal program):

image

Here's the timestamp setting in the Arduino IDE serial monitor:

image

UDP example

I'm sending raw UDP packets to Serial Studio but they are not received.

It is not clear to me what is the "Host" filed meaning for the UDP connection, Is it the address where serialStudio binds locally?

can you please provide and example?

thank you
Marco

Dragging the playback cursor shows wrong data on graphs

Describe the bug
When opening a CSV and using playback feature, graph data get wrong.
If we move manually the playback cursor (dragging the cursor from left to right and to left again), the graph line get rewritten.
It seems that the data value corresponding to the playback position is appended to the end of the graph line.
This means that for a value that goes continuously from 0 to 90, if we move to different points using the playback cursor (dragging the cursor), the line no longer shows a continuous line from 0 to 90 but shows 'waves' instead. The graph line then no longer reprenst the history of the data before the current point.

To Reproduce
Steps to reproduce the behavior:

  1. Record some data with graph enabled
  2. Open the CSV of the data
  3. Manually drag the playback cursor to different position and obverse the line graph.

Expected behavior
Two possibilities here :
a. Display the whole data in the graph and use a visual cursor showing the current time from the playback cusor
b. Erasing data when dragging the cursor backward and rewrite the whole data when moving forward (up to the selected point).

Personally I think solution a would be better and maybe easier to implement.

Screenshots
Example below show normal playback (played from start to end) : look at the Distance graph.
2021-03-03 08_50_01-Serial Studio v1 0 18
Example below show the same data, but after I dragged the mouse on the cursor from 0 to 20% back and forth several times. We see that the data is rewritten and shows 'waves'.
2021-03-03 08_50_24-Serial Studio v1 0 18

Upload your log file

17-21-52.csv.txt

Upload your JSON map file

serialstudio.json.txt

how to use auto mode to display widgets

Hi:
I want use auto mode to display widgets.I send json datas to Serial-Studio,but the Serial-Studio can not display.
I send the json data like this:
/*{ "t":"test", "g":[ { "t":"Mission Status", "d":[ { "t":"Runtime", "v":2, "u":"ms" }, { "t":"Packet count", "v":3 }, { "t":"Battery voltage", "v":4, "g":true, "u":"V", "w":"bar", "min":3.6, "max":4.3 } ] }, { "t":"Sensor Readings", "d":[ { "t":"Temperature", "v":5, "g":true, "u":"°C", "w":"bar", "min":0, "max":80 }, { "t":"Altitude", "v":6, "u":"m", "w":"bar", "min":0, "max":3000 }, { "t":"Pressure", "v":7, "u":"KPa", "g":true, "w":"bar", "min":54, "max":102 }, { "t":"External Temperature", "v":8, "g":true, "u":"°C", "w":"bar", "min":0, "max":80 }, { "t":"Humidity", "v":9, "g":true, "u":"%", "w":"bar", "min":0, "max":100 } ] }, { "t":"GPS", "w":"map", "d":[ { "t":"GPS Time", "v":10 }, { "t":"Longitude", "v":11, "u":"°E", "w":"lon" }, { "t":"Latitude", "v":12, "u":"°N", "w":"lat" }, { "t":"Altitude", "v":13, "u":"m" }, { "t":"No. Sats", "v":14 } ] }, { "t":"Accelerometer", "w":"accelerometer", "d":[ { "t":"X", "v":15, "u":"m/s^2", "g":true, "w":"x" }, { "t":"Y", "v":16, "u":"m/s^2", "g":true, "w":"y" }, { "t":"Z", "v":17, "u":"m/s^2", "g":true, "w":"z" } ] }, { "t":"Gyroscope", "w":"gyro", "d":[ { "t":"X", "v":18, "u":"°", "g":true, "w":"yaw" }, { "t":"Y", "v":19, "u":"°", "g":true, "w":"roll" }, { "t":"Z", "v":20, "u":"°", "g":true, "w":"pitch" } ] } ] }*/

Can you give some auto mode examples,Thanks very mutch!!!

Customizable start and stop frames

Simply a mechanism to define some other token as the start or end of frame. One example of where this could be nice would be an existing stream that is going straight to CSV already, having '\r' or ';' for end of frame and '\n' for start of frame would mean it just works in both.

Support arbitrary baud rates

Hi!

It would be great if Serial Studio supported user-defined baud rates. In many cases, an application uses a different baud rate that's currently available. For instance, I often use 250000 and 500000 baud on 16 MHz microcontrollers. Sometimes even 1M. The midi baud rate is 31250 baud, and other common ones are 460800 and 921600 baud.

Cannot set 3000000 baud

Describe the bug
When I manually type in 3000000 for the baud rate, the output is not correct. I can confirm in other terminal programs that the data is received correctly.

image

chart got worst in newer versions (after version 1.0.15)

Hi,
I've made a design where I'm sending values (sine waveform) to Serial Studio. Version 1.0.15 looks nice, but when I updated to 1.0.16 and now to 1.0.17 I've noticed that the waveform looks bad.

The design is the same (same JSON, same port settings).

Version 1.0.15
Zrzut ekranu z 2021-02-17 20-32-58

Newer versions
Zrzut ekranu z 2021-02-17 20-32-02

Here's my JSON file I use with both versions.

serial_studio.json

Are there some changes I should make for newer versions?

Best regards,
Dominik

SVG-Based Widgets

Is your feature request related to a problem? Please describe.

Currently, most of the widgets make extensive use of JS and QML code. While this is not inherently a bad idea, performance issues can arise. Also, the "textures" of the widgets cannot be too detailed using QML/JS code.

Describe the solution you'd like

With the compass widget, I opted out to use SVG assets and simply "rotate" the indicator image according to the angle reported by the MCU. Here is a screenshot of the widget in action:

Screen Shot 2021-03-12 at 9 40 23

And finally, here are the used assets side-by-side (I added the magenta background color so that the plane symbol can be seen under GitHub's white background):

compass

The SVG assets come from the QFlightInstruments repo.

Finally, the QML implementation of the compass widget can be found here. The implementation is less complicated and looks far better (IMHO) than the other widgets.

The QFlightInstruments repo already has SVG assets for the artificial horizon, altitude indicator and flight speed (in knots), among others.

I would really like to replicate this approach to other widgets (e.g. the g-meter). However, my design skills are mediocre at best. If possible, I ask the community to provide the SVG assets for the following widgets:

  • G-meter
  • Bar widget
  • Generic gauge

Of course, any ideas or suggestions are always welcome.

Several locations on the same map widget

Is your feature request related to a problem? Please describe.
I am working on a device that has a GPS module and send / receive GPS coordinates from an other module through a radio protocol. I would like to be able to see both devices on the same map.

Describe the solution you'd like
I would like to be able to display several points on the map widget.

Describe alternatives you've considered
Alternatively I would have to write a Python script myself to parse the output csv and build a map manually, which I could not really do dynamically.

Additional context

Virtual Com Port Support

Describe the bug
I don't have any hardware on hand, but I wanted to test out this cool test suite. I thought of creating a virtual com port with socat and just piping data into it with python or something, but I can't select the virtual com port in Serial-Studio.

To Reproduce
Steps to reproduce the behavior:

  1. create a virtual com port with socat -x -v PTY,link=$HOME/dev/modem0 PTY,link=$HOME/dev/modem1
  2. Serial-Studio will not recognize either of these as valid serial ports

Expected behavior
To allow connecting to the virtual serial port in the COM port drop down

Screenshots
N/a

Upload your log file
N/a

Upload your JSON map file
N/a

Support for data integrity checks

Since typical UART/serial does not support correction of data errors it would be nice to be able to have some mechanism for this.

I would suggest two mechanisms:

  1. Simple 8 or 16 bit checksum (simple but not perfect by any means)
  2. 8, 16 or 32-bit CRC (configurable polynomial would be a bonus)

This would be appended to the end of the frame. If the checksum or CRC does not pass, drop the frame.

Spelling mistakes

In Serial.cpp

line 698:

notes: // Search for available ports and add them to the lsit

lsit should be "list"

[Feature request] Use up and down arrow keys to select previously sent messages

This one is super useful and is present in the Arduino IDE serial monitor.

When the send-text field is highlighted, it would be awesone if one could press the up and down keys to cycle between older messages that have been sent previously, just like you can on "standard" terminal application like CMD on windows and Terminal on Mac.

It would be awesome if this could apply to the HEX mode as well!

Speaking of HEX mode, is this a bug or a feature? I'm able to place the cursor anywhere I want, even between every nibble. Shouldn't this be left oriented, just like in ASCII mode? That's atleast what Realterm does.

Screenshot for reference:

image

Display errors and quit unexpectedly

Hello,
First,Thank you for you work!
here is a little bug I found when useing.

Sorry, the photo can not display.

  1. the title num more than 6. llike this.
    scrollbar can not move。
    "t":"Sensor Readings", "d":[ { "t":"Temperature", "v":"%5", "g":true, "u":"°C" }, { "t":"Altitude", "v":"%6", "u":"m" }, { "t":"Pressure", "v":"%7", "u":"KPa", "g":true }, { "t":"External Temperature", "v":"%8", "g":true, "u":"°C" }, { "t":"Humidity", "v":"%9", "g":true, "u":"°C" }, { "t":"NO6", "v":"%7", "u":"KPa", "g":true }, { "t":"NO7", "v":"%8", "g":true, "u":"°C" }, { "t":"NO8", "v":"%9", "g":true, "u":"°C" } ]
    1

  2. serial-studio quit unexpectedly when inptu Parameter error。like "Date Bits : 5,Stop Parity : One and Half"and there will a Error messages when use other tools.

2

Duplicate Channels

Is your feature request related to a problem? Please describe.
My project includes many channels, where each channel includes multiple of the same measurement. For example:

Channel 1:

  • Voltage
  • Current
  • Speed

Channel 2:

  • Voltage
  • Current
  • Speed

Channel 3:

  • Voltage
  • Current
  • Speed

Currently, I must define the JSON to include each of these channels, and track their channel numbers. Instead, allowing channels to be defined, by defining how one channel behaves, and an identifier for each channel, you could scale to any number of identical channels.

Maybe some format like:

/*MyChannel[1], data, data, data*\
/*MyChannel[2], data, data, data*\
/*MyChannel[3], data, data, data*\

or

/*MyChannel[1], data, data, data,
MyChannel[2], data, data, data,
MyChannel[3], data, data, data*\

Missing Qt dependencies in the Build instructions

Describe the bug
Just an improvement to the README : there are two Qt dependencies that don't appear to be explicitly mentioned in the build instructions, QtCharts and QtGraphicalEffects. I don't know about other systems, but they are not provided by default on my ArchLinux system, I had to look into the build log and install qt5-charts and qt5-graphicaleffects from the repositories. On Windows, this may require checking the correct boxes during Qt's install? I'm not sure about this.

To Reproduce
Steps to reproduce the behavior:
Follow the Build instructions on a new Qt install.

Expected behavior
Dependencies explicitly stated in the README.

cannot show '0A' '0D' in binary display mode

Describe the bug

cannot show '0A' '0D' in binary display mode

To Reproduce
Steps to reproduce the behavior:

  1. connect to USB-TTL device (like /dev/ttyUSB0), loop-back TXD and RXD
  2. switch to binary display mode: Console - Display Mode - Binary(hexadecimal)
  3. switch to binary display mode: Console - Echo user command
  4. switch to hex input mode
  5. send '01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f'
  6. '0A', '0D' lost
17:34:24.738 -> 
17:40:08.531 -> 01 02 03 04 05 06 07 08  09 0B 0C 0E 0F           |  ............. 
17:40:08.531 -> 
17:40:08.546 -> 01 02 03 04 05 06 07 08  09 0B 0C 0E 0F           |  ............. 

Expected behavior
...

Screenshots

image
image

Upload your log file

[11:45:16.152] QDateTime(2021-08-04 11:45:16.152 CST Qt::LocalTime)                     [I] [main]
[11:45:16.152] Serial Studio 1.0.20                                                     [I] [main]
[11:45:16.152] Running on Manjaro Linux                                                 [I] [main]
[11:45:16.153] Initializing C++ modules                                                 [I] [ModuleManager::initializeQmlInterface]
[11:45:16.154] Baud rate set to 9600                                                    [I] [IO::DataSources::Serial::setBaudRate]
[11:45:16.154] Data bits set to QSerialPort::Data8                                      [I] [IO::DataSources::Serial::setDataBits]
[11:45:16.154] Stop bits set to QSerialPort::OneStop                                    [I] [IO::DataSources::Serial::setStopBits]
[11:45:16.154] Serial port parity set to QSerialPort::NoParity                          [I] [IO::DataSources::Serial::setParity]
[11:45:16.154] Flow control set to QSerialPort::NoFlowControl                           [I] [IO::DataSources::Serial::setFlowControl]
[11:45:16.161] Finished initializing C++ modules                                        [I] [ModuleManager::initializeQmlInterface]
[11:45:16.161] Loading QML interface...                                                 [I] [ModuleManager::initializeQmlInterface]
[11:45:16.762] qrc:/qml/SetupPanes/MQTT.qml:123:15: QML TextField: Binding loop detected for property "text" [W] []
[11:45:16.764] qrc:/qml/SetupPanes/Network.qml:107:15: QML TextField: Binding loop detected for property "text" [W] []
[11:45:17.063] Baud rate set to 9600                                                    [I] [IO::DataSources::Serial::setBaudRate]
[11:45:17.118] Finished loading QML interface                                           [I] [ModuleManager::initializeQmlInterface]
[11:45:43.976] Baud rate set to 115200                                                  [I] [IO::DataSources::Serial::setBaudRate]
[11:45:53.262] Serial port error QSerialPort::NoError                                   [I] [IO::DataSources::Serial::handleError]
[11:45:53.383] Device opened successfully                                               [I] [IO::Manager::connectDevice]
[11:52:47.916] Disconnected from "ttyUSB0"                                              [I] [IO::DataSources::Serial::disconnectDevice]
[11:52:47.920] Device disconnected                                                      [I] [IO::Manager::disconnectDevice]
[11:59:44.396] Serial port error QSerialPort::NoError                                   [I] [IO::DataSources::Serial::handleError]
[11:59:44.516] Device opened successfully                                               [I] [IO::Manager::connectDevice]
[12:00:28.049] Serial port error QSerialPort::ReadError                                 [I] [IO::DataSources::Serial::handleError]
[12:00:28.050] Disconnected from "ttyUSB0"                                              [I] [IO::DataSources::Serial::disconnectDevice]
[12:00:28.052] Device disconnected                                                      [I] [IO::Manager::disconnectDevice]
[12:02:30.769] Serial port error QSerialPort::NoError                                   [I] [IO::DataSources::Serial::handleError]
[12:02:30.892] Device opened successfully                                               [I] [IO::Manager::connectDevice]
[15:23:17.572] Disconnected from "ttyUSB0"                                              [I] [IO::DataSources::Serial::disconnectDevice]
[15:23:17.574] Device disconnected                                                      [I] [IO::Manager::disconnectDevice]
[15:23:18.049] Serial port error QSerialPort::NoError                                   [I] [IO::DataSources::Serial::handleError]
[15:23:18.058] Device opened successfully                                               [I] [IO::Manager::connectDevice]
[17:39:45.570] Serial port error QSerialPort::ReadError                                 [I] [IO::DataSources::Serial::handleError]
[17:39:45.570] Disconnected from "ttyUSB0"                                              [I] [IO::DataSources::Serial::disconnectDevice]
[17:39:45.575] Device disconnected                                                      [I] [IO::Manager::disconnectDevice]
[17:40:03.809] Serial port error QSerialPort::NoError                                   [I] [IO::DataSources::Serial::handleError]
[17:40:03.936] Device opened successfully                                               [I] [IO::Manager::connectDevice]

Upload your JSON map file
unused

environments

Serial Studio 1.0.20
QT 5.15.2

OS: Manjaro 21.1.0 Pahvo
Kernel: x86_64 Linux 5.10.53-1-MANJARO
Uptime: 5d 2h 38m
Packages: 1651
Shell: zsh 5.8
Resolution: 1920x1080
WM: i3
GTK Theme: Adwaita [GTK3]
Disk: 742G / 976G (79%)
CPU: AMD Ryzen 5 3400G with Radeon Vega Graphics @ 8x 3.7GHz
GPU: AMD Radeon(TM) Vega 11 Graphics (RAVEN, DRM 3.40.0, 5.10.53-1-MANJARO, LLVM 12.0.1)
RAM: 10117242880

Send Commands from the Dashboard

I'm just asking here before i go to far into the code on this. I was wondering if it's possible to have some basic functions on the dashboard such as buttons / sliders to adjust some setpoints / start stop a machine.

Currently I'm thinking that some extra tags could be added to the JSON with a simple JSON string fired back over the serial on click. I'm willing to take a look at adding this I'm just getting my head round QT at the Moment :)

Compass widget

Is your feature request related to a problem? Please describe.
Working with a magnetometer, I would like to be able to visualize the current direction on the device using a compass widget on the Serial Studio UI.

Describe the solution you'd like
A compass widget (round that turns to show the device's direction compared to the North).

Describe alternatives you've considered
I might be able to cheat and use the gyroscope widget but it wouldn't really look nice (no indication of North).

Additional context

More than one variable plotted on a graph

Firstly thanks for a great piece of software that is making my life a lot easier.

Is your feature request related to a problem? Please describe.
I am using this to tune a PID loop. To make this more effective it would be great to be able to combine more than one line on a graph. For example, having the Set Point and Current Value combined on the same plot would make it easier to see how quickly the process is settling down.

Describe the solution you'd like
Some way to say that two variable should be plotted together.

Describe alternatives you've considered
Currently showing the graphs side by side but sometimes the Y axis is scaled differently and makes it hard to compare.

Auto-reconnect

Is your feature request related to a problem? Please describe.
Yes. Other programs as Tera Term reconnects automatically when you disconnect and connect an USB-Serial connection.

Describe the solution you'd like
Add a checkbox called "auto-reconnect"

Describe alternatives you've considered
I use Tera Term program because it has auto-reconnect.

Additional context
Checkbox added to below of Serial options.

A question about how to update the UI

In Generator.cpp, line 182:

emit jsonFileMapChanged();

It seems that the signal jsonFileMapChanged() is emitted, however, i can not find any function to connect with the signal jsonFileMapChanged() to update the UI. Frustrating, the UI updated successfully. Could you give me some suggestions ?

Thanks.

gauge widget

First of all, thank you for this software. It helps a lot with my studies.

We made an RC-Car in university and I thought it would be nice to show the vehicle speed on a gauge.

I think a widget which is a gauge could be a nice feature
Like in the “bar” widget the JSON could include “min” and “max” and the value

compile errors, missing files

Compile error!
"No such file or directory"
These files are missing.

please upload these files or from where can I add them to project?
<qtcsv/stringdata.h>
<qtcsv/reader.h>
"Logger.h"
"ConsoleAppender.h"

Two accelerometer widgets will have the same title

Hello,
here is a little bug I found when creating two widgets with accelerometer.
Both widgets will have the same title.

{
    "t": "Sensor processing",
    "g": [
        {
            "t": "Accelerometer Unfiltered",
            "w": "accelerometer",
            "d": [
                {
                    "t": "X",
                    "v": "0",
                    "u": "m/s^2",
                    "g": false,
                    "w": "x"
                },
                {
                    "t": "Y",
                    "v": "0",
                    "u": "m/s^2",
                    "g": false,
                    "w": "y"
                },
                {
                    "t": "Z",
                    "v": "%1",
                    "u": "m/s^2",
                    "g": true,
                    "w": "z"
                }
            ]
        },
        {
            "t": "Accelerometer Filtered",
            "w": "accelerometer",
            "d": [
                {
                    "t": "X",
                    "v": "0",
                    "u": "m/s^2",
                    "g": false,
                    "w": "x"
                },
                {
                    "t": "Y",
                    "v": "0",
                    "u": "m/s^2",
                    "g": false,
                    "w": "y"
                },
                {
                    "t": "Z",
                    "v": "%2",
                    "u": "m/s^2",
                    "g": true,
                    "w": "z"
                }
            ]
        }
    ]
}

bug_serial_studio

CSV Player Filename and Timestamps are UTC not Local Time

Congratulations on a very functional app which solves numerous problems for real-time data visualisation for STEM classes and projects. The CSV Player feature is great except the timestamps applied are in UTC not in the computer localtime, the former being confusing and the latter more useful.
I have tried this both in Windows and Macintosh computers and the bug is the same. I am in Australia at UTC+10 and the timeshift here is very noticeable.
Otherwise, great job!
Regards,
Tony

"data to text" interpreter support

First of all, your project is the definitive serial console! Awesome work! 👏
I´m tired of realterm´s errors and lack of advanced serial console alternatives 😭

I use finite state machines in my projects all the time, and the most important data is the current state.
Sending over serial the name as ascii is time consuming in time critical projects.

Maybe you can make a "data to text" interpreter, so you config an array of text at JSON file and the Serial Studio translates a number (index) to the stored text (JSON field).

Example:
Data frame
/*4,1*/
JSON

{
   "t":"Minimal Example",
   "g":[
      {
         "t":"MCU Status",
         "d":[
            {
               "t":"State",
               "v":"%1",
               "text":[ "UNARMED", "ARMED", "FIRST STAGE", "SECOND STAGE", "FALLING", "REST" ]
            },
            {
               "t":"Parachute deployed",
               "v":"%2",
               "text":[ "NO", "YES" ]
            }
         ]
      }
   ]
}

I think this "data to text" feature could be usefull for many applications.
Maybe also with a text widget 😊

Raspberry Pi binary

The Raspberry Pi is a very popular and affordable computing platform, running its own distinct version of Linux. This is of particular value in STEM instruction settings. Having a downloadable binary of Serial Studio available for distribution for the Raspberry Pi with the Raspbian operating system would be very convenient and not require Raspberry Pi users among them teachers and STEM students who are not versed in the intricacies of the Qt framework and compilers to build the application every time there is a release, even if they knew how.

So it would be wonderful if you could offer a Raspberry Pi binary as part of your distribution. I would be very popular among STEM students, their teachers and makers in general..

Map provider issue on Windows build and log error

I'm trying to show GPS coordinates on the latest Windows build and am seeing the following in my log. The map widget shows a white box with an empty drop-down. I'm not sure if the argument missing is due to my json or not? Thanks in advance for this great tool!

[23:49:15.757] QString::arg: Argument missing: { "t":"PIPICOGPS", "g":[ { "t":"GPS", "w":"map", "d":[ { "t":"Longitude", "v":"51.6151", "u":"°N", "w":"lon" }, { "t":"Latitude", "v":"1.227836", "u":"°W", "w":"lat" } ] } ] }, 0.0 [W] [] [23:49:29.388] Loading JSON file, silent flag set to false [I] [JsonGenerator::loadJsonMap] [23:49:29.389] JSON map loaded successfully [I] [JsonGenerator::loadJsonMap] [23:49:29.440] 1 , "The geoservices provider is not supported." [D] []

[Feature Request] FFT/DFT plotting

Hello,
I have been using this tool to visualize in real time the effect of DSP on the device.
(Which was very usefull by the way!)

** Problem **
If I have data which needs to be shown that is not in the time domain.
For example: FFT/DFT which processed on the device or 1D cameras.

** Solution **
2 Widgets where the Y axis is not time based.

  • A classic line-chart, based on a table.
  • a heatmap/waterfall diagramm to show for example 1D grayscale diagrams in time or an FFT/DFT in time.

The device would just send the row/column count followed by values set in one transmission.

Describe alternatives you've considered
Exporting signal data to Scilab/Octave, which is tedious but is also usefull.

Edit: Sorry it seems you have been assigned automatically to the issue when I created it. :/

Parameters Request over UART

JSON is a bit of a heavy overhead for small microcontrollers, as well as having a huge impact on SPS over uart, yet offers no real advantage over simpler methods. However it would still be nice if the microcontroller could specify the desired application configuration on the PC, or that they can somehow negotiate what and how to display the data.

Proposed would be a simple query request issued from Serial Studio. The micro controller would respond with a CSV list describing the data without the overhead of JSON. Something like:
1, Sys_Voltage, V, 0.0, 5.0, G=true
2, Current, mA, 50, 800,G=true
3, Output_Voltage, V,,G=false
END

Where fields: 1 = csv position, 2= name, 3= units label, 4= min, 5=max, and 6=optional parameters. When min or max is null, then assume auto scaling

This request would be issued on demand but not impart any overhead on the micro otherwise. It would even allow to easily change com port settings to another device and automatically requesting a new display layout.

By starting each line with a csv position, the data could be sent out of order (I dont see why you would want to, but it makes it irrelevant). In the future it would permit to have the same data displayed using multiple widgets, such as line plot and needle gauge.

Math expressions in manual JSON mode

For a resource limited MCU, sending raw data from a sensor may be the only feasible way to send back to the application, however the visualization and datalogging may want to post process it. For example, the raw register values from an accelerometer or similar, before calculating actual acceleration. Allowing the value (or a new key type) in the JSON be a math expression would allow any amount of post processing.

Example:

{
         "t":"Accelerometer",
         "w":"accelerometer",
         "d":[
            {
               "t":"X",
               "v":"(%15 * 100) / 9.8",
               "u":"m/s^2",
               "g":true,
               "w":"x"
            },

Describe the solution you'd like
There seems to be some good libraries for this type of thing already, for example https://github.com/ArashPartow/exprtk

Add graph display mode or a new widget similar to spectrum analyser

Is your feature request related to a problem? Please describe.
I want my data to appear on a graph or widget like a spectrum, and the graph there will only be updated when I send new data.

Like this:
Spectrum
or this:
Spectrum

Describe the solution you'd like

  • Maybe add a mode parameter (optional) and index data field (optional) to graph, and then the graph would only update the value of the newly arrived correspond to the index.

eg.

    {
        "t": "Spectrum",
        _"m": "indexed"_,
        _"i":"%1"_,
        "v": "%2",
        "g": true
    }
  • Or add a new widget

eg.

{
    "t": "Spectrum",
    _"w": "spectrum"_,
    "d": [
            {
               "t": "Level",
               "v": "%2",
               "u": "dBW",
               "g": true,
               _"w": "value"_,
               "min": -150,
               "max": 0
            },
            {
                "t": "Freq",
                "v": "%1",
                "u": "kHz",
                "g": true,
                _"w": "index"_,
                "min": 0,
                "max": 50000
            }
        ]
    }

接收处理问题

在设置好115200 8N1 没有流控制的情况下,接收中文出现乱码

[Feature request] Add connect/disconnect button

Hi!

The user interface is already quite nice, and I like the idea that you automatically connect to the serial port when you select it. However, it would be nice if there was a connect/disconnect button in the toolbar. The reason this would be practical is when you need to re-upload code to your microcontroller. At the moment you'll have to select another serial port and re-select it to reconnect. A simple connect/disconnect button (green/red button perhaps?) would make this process even more elegant.

Another idea: why not have read/write mode selected by default? In most cases it's not harmful to write to the connected device.

syntax issues

In Console.cpp

Line 283: QFileDialog::getSaveFileName(Q_NULLPTR, tr("Export console data"),
QDir::homePath(), tr("Text files") + " (*.txt)");

it might be: QFileDialog::getSaveFileName(Q_NULLPTR, tr("Export console data"),
QDir::homePath(), tr("Text files") + tr(" (*.txt)"));

Add support for binary sensors/flags

Is your feature request related to a problem? Please describe.
Not to a specific problem, just a missing feature

Describe the solution you'd like
In addition to the strings that are already supported, I would love to be able to pass a boolean value and have an on/off indicator. This could be used to indicate that a value is out of the expected range, could be used to monitor binary sensors, and could also be used to monitor the state of relays.

Describe alternatives you've considered
In a similar vein, it would be incredible to be able to add a indicator bar on the bar/tank widget, for a similar "value is out of nominal readings" function, similar to how the redline section on a car's tachometer functions

Additional context
At the basic level, I'm looking for something similar to how this project handles bools, it would be great if they could be adjacent to a graph or a value, but their own widget would work fine as well!

Multiple accelerometer widgets do not take the correct name.

Hello,
here is a little bug I found when creating two widgets with accelerometer.
Both widgets will have the same title.

{
    "t": "Sensor processing",
    "g": [
        {
            "t": "Accelerometer Unfiltered",
            "w": "accelerometer",
            "d": [
                {
                    "t": "X",
                    "v": "0",
                    "u": "m/s^2",
                    "g": false,
                    "w": "x"
                },
                {
                    "t": "Y",
                    "v": "0",
                    "u": "m/s^2",
                    "g": false,
                    "w": "y"
                },
                {
                    "t": "Z",
                    "v": "%1",
                    "u": "m/s^2",
                    "g": true,
                    "w": "z"
                }
            ]
        },
        {
            "t": "Accelerometer Filtered",
            "w": "accelerometer",
            "d": [
                {
                    "t": "X",
                    "v": "0",
                    "u": "m/s^2",
                    "g": false,
                    "w": "x"
                },
                {
                    "t": "Y",
                    "v": "0",
                    "u": "m/s^2",
                    "g": false,
                    "w": "y"
                },
                {
                    "t": "Z",
                    "v": "%2",
                    "u": "m/s^2",
                    "g": true,
                    "w": "z"
                }
            ]
        }
    ]
}

bug_serial_studio

[Feature Request] MQTT Topic as network source

With the rise of IoT many data are already sent back to MQTT on clouds.
I have some devices where all serial lines are already used, or devices are in the field.
(And I cant use Segger RTT/Semihosting as source)
This means instead of going through a Serial, it would be easy to send the data to MQTT topic.
(Bascially you could monitor anything on a cloud service with this approach in real-time).

Describe the solution you'd like
Adding to TCP/UDP drop-down an MQTT option.
Following fields would be required:

  • Host
  • MQTT Topic
  • Authentification mode: Basic (User+PW) Certificates (Private Key Certificate, Certificate Authority)
  • MQTT Name
    Each MQTT message received is parsed, like a frame over serial.

(Yes, Serial over MQTT)

Describe alternatives you've considered
I tried many hacks to visualize data from my devices on the cloud, but those are all quite complicated architectures.

Additional context
I am using AWS IoT as backend, but any kind of MQTT broker could benefit from this.
Guess you could connect far more than devices to it, like whole cloud related metrics.

It's a pleasure to use Serial Studio. There simply is no solution which si so simple to use.
Thank you <3

CSV export doesn't strip frame end characters

Describe the bug
For a frame: /Frame,1,2,3/, in the CSV, the '3' will be recorded as "3*/".

To Reproduce
Steps to reproduce the behavior:

  1. Allow CSV Exporting
  2. Open the CSV

Environment
Ubuntu 21.04

Expected behavior
The frame end characters will not be present in the CSV.

Screenshots
image

Are /* */ frames required in MQTT?

...short answer to which is 'no, at least not with this build this end'.

I'm assuming that the /* and */ are serial only? (which makes sense). In this case I'll open a PR for the wiki.

Is this also the case with the udp/tcp connection? (I plan to do some work with it shortly, so I can figure it out if nobody knows).

I've just modified OpenFridge to spew out data in a format readable by Serial Studio, and now I have a nice pretty dashboard for free! I bet you didn't expect it would be used to watch the temperature of a fridge :D

Thanks for a very exciting project!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.