SerialUI provides a graphical interface to send and receive text from the serial port, including a serial plotter for displaying numerical data. It offers features beyond the Arduino IDE Serial Plotter.
BLESerialUI is equivalent to SerialUI but uses the Nordic Serial UART on a BLE connection (Experimental, Unfinished Code)
The programs are written in python using pyQt.
One liner Windows:
- pip3 install pyqt5 pyqtgraph numpy pyserial markdown wmi bleak qasync
One liner Linux:
- pip3 install pyqt5 pyqtgraph numpy pyserial markdown pyudev bleak qasync
pyqt5
orpyqt6
user interfacepyqtgraph
displaynumpy
data gathering and manipulationpyserial
serial interfacemarkdown
help filewmi
on Windows for USB device notificationspyudev
on Linux for USB device notificationsqasync
andbleak
for bluetooth communication
In future version we will also need:
scipy
image decompressionnumba
acceleration of numpy codecobs
serial data encoding (byte stuffing)zlib
andtamp
for compression
Installation of PyQt5/6 has its own dependencies. If it fails, read the suggested solution in the error messages. For example pyOpenGL might be required.
The main programs are SerialUI.py
and BLESerialUI.py
. The use files in the assets
and helper
folders.
In the Arduino_programs
folder are example programs that simulate data for display.
Comparing SerialUI to other serial IO programs:
Text Display
Teensy 4.0 using the Test Program from Paul Stoffregen with default settings produces about 530k lines/second and 19Mbytes/second on the USB port:
- SerialUI: ~500k lines/sec at ~17 MBytes/sec
- Arduino IDE (2.3.5): 530k lines/sec
- Putty: 483k lines/sec
cat /dev/ttyACM0 | pv -r > /dev/null
14-18 MB/sscreen /dev/ttyACM0 4000000
160k lines/sec
Arduino IDE is slightly faster in raw text display.
Limit in SerialUI is the Qt plain text display widget. It can display about 70k lines/sec. SerialUI displays the most recent text in the display window. It saves all data to file at the reported throughput.
ESP32-S3 Adafruit Feather:
- Arduino IDE: 17k lines/sec
- Serial UI: 17k lines/sec and 560 kBytes/sec
There is no difference between SerialUI and ArduinoIDE.
Charting
With simple simulated data from Teensy 4.0 we can retrieve and plot 2 channels with about 80k samples/second/channel.
Arduino IDE plotter does not provide performance metrics.
Urs Utzinger, 2022-2025 (University of Arizona)
Cameron K Brooks, 2024 (Western University)