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
pyqt5orpyqt6user interfacepyqtgraphdisplaynumpydata gathering and manipulationpyserialserial interfacemarkdownhelp filewmion Windows for USB device notificationspyudevon Linux for USB device notificationsqasyncandbleakfor bluetooth communication
In future version we will also need:
scipyimage decompressionnumbaacceleration of numpy codecobsserial data encoding (byte stuffing)zlibandtampfor 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/null14-18 MB/sscreen /dev/ttyACM0 4000000160k 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)

