Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
68 commits
Select commit Hold shift + click to select a range
cf2f499
Structure GUI composition and make buttons look more modern
13Bytes Aug 15, 2025
4d4cd47
make formatting consistent
13Bytes Aug 15, 2025
f21b971
Add datettime of recording-start into log
13Bytes Aug 15, 2025
549af30
Add mocked dongle to ease GUI dev
13Bytes Aug 15, 2025
6eaa396
Refactor US acquisition setup and add functionality to live-patch con…
13Bytes Aug 15, 2025
d255b36
add first steps to move towards a http-api
13Bytes Aug 20, 2025
92b6466
refactor
13Bytes Aug 21, 2025
a437813
send data during measurement
13Bytes Aug 21, 2025
f937c8a
working ws json-message of live measurements
13Bytes Aug 21, 2025
320f2b8
Fix min/max values of config-requirements (the conversion into ticks …
13Bytes Aug 22, 2025
1fff0e1
Add first POC of Web-UI
13Bytes Aug 22, 2025
7f06902
Implement disconnect functionality and update API methods for Bluetoo…
13Bytes Aug 22, 2025
e51805c
Fix bug in bluetooth-connection (string wrong interpreted)
13Bytes Aug 25, 2025
7e226f0
Add recording-functionality
13Bytes Aug 25, 2025
4eaef52
Refactor code into more files & clean up
13Bytes Aug 26, 2025
133dcd0
Add logging and configuration management features, including API endp…
13Bytes Aug 26, 2025
c588bd1
make graph filter user-defined
13Bytes Aug 26, 2025
3031431
Add mock and replay functionality
13Bytes Aug 27, 2025
3ccb1ba
persist config over reloads (use localStorage)
13Bytes Aug 27, 2025
a59aa57
Fix bug where simulation wasn't using the mocked BT-data ("live"-mode)
13Bytes Aug 27, 2025
0ffd88f
Make frontend servable directly from FastAPI
13Bytes Aug 28, 2025
87d4766
Change data-structure of latest_frame to a more detailed (and typed) …
13Bytes Aug 28, 2025
d63e4a1
Fix bug in download-path
13Bytes Aug 28, 2025
be5dc7b
Add a build-script that works on os-independent
13Bytes Aug 28, 2025
a127b52
- Restructure project to nicely integrate new GUI
13Bytes Aug 28, 2025
0f841d4
Merge pull request #1 (New wulpus-gui)
13Bytes Aug 28, 2025
d88754f
fix location of requirement.txt (if you want to use pip instead of an…
13Bytes Aug 28, 2025
11e6594
Add CICD-pipeline with auto-building of AIO exe (#2)
13Bytes Aug 29, 2025
dfe6d02
Add fixed y-range for graph
13Bytes Sep 3, 2025
e8bc502
Add "restore defaults" button
13Bytes Sep 4, 2025
40a794f
Fix bug in case no tx or rx channels are used
13Bytes Sep 4, 2025
81727d6
Change the log format of wulpus and extend it with more information.
13Bytes Sep 4, 2025
ca10635
Fix a bug where the result of _save_measurement() was truncated so th…
13Bytes Sep 5, 2025
530ba15
Add extend visualization of logs in jupyter notebook
13Bytes Sep 5, 2025
d8ac7a4
Add support for onboard bluetooth-adapter besides dongle
13Bytes Sep 9, 2025
0bac216
Make UI more responsive by checkin more often for status-updates (but…
13Bytes Sep 10, 2025
1cecca6
Initially power down HV PCB to save energy
13Bytes Sep 18, 2025
97e8651
Add a SeriesPanel for repeated measurements.
13Bytes Sep 18, 2025
b85e414
extend script to visualize logs (and concatenate multiple logs)
13Bytes Sep 18, 2025
4cf620e
Add POC for live data analysis
13Bytes Sep 19, 2025
53c5e01
Revert bug in firmware (checking runtime for new config doesn't seem …
13Bytes Sep 25, 2025
24a3de7
Add UI-Panel for user-configurable peak-detection
13Bytes Sep 25, 2025
fa3c5b1
allow to ignore first n datapoints in every measurement of every series
13Bytes Sep 29, 2025
7ab6657
Add capabilities to support multiple wulpus at the same time (for the…
13Bytes Oct 10, 2025
2c6134c
Make multi-wulpus more robust by fixing a few bugs
13Bytes Oct 10, 2025
e985988
disable new connections during running job
13Bytes Oct 10, 2025
497af3e
Add version-info into application (#3)
13Bytes Oct 17, 2025
b80cc32
Merge branch 'main' of https://github.com/13Bytes/wulpus
13Bytes Oct 17, 2025
ae9e836
Add automatic releases for main commits (#4)
13Bytes Oct 20, 2025
c8638f9
correclty represent status if wulpus disconnects (for direct connecti…
13Bytes Oct 24, 2025
f0cd0e5
Add details about the log-files to readme.
13Bytes Oct 24, 2025
dd82437
Merge pull request #5 from 13Bytes/multi-wulpus
13Bytes Oct 24, 2025
351515c
Extend printing for debugging
13Bytes Nov 12, 2025
e09ae6b
Fix error: scanning wasn't possible on devices without bluetooth chipset
13Bytes Nov 18, 2025
ed4073a
Merge PR #40 from 13Bytes into wulpus-web-gui beta branch
Sebi1128 May 15, 2026
152ac50
cleanup
Sebi1128 May 15, 2026
d7da84b
move from pip to uv and clean up READMEs
13Bytes Jun 23, 2026
7a18516
Merge pull request #6 from pulp-bio/main
13Bytes Jun 23, 2026
e180551
Merge pull request #45 from 13Bytes/main
Sebi1128 Jun 23, 2026
a9c95f5
update antenna and matching circuit
Sebi1128 Aug 4, 2026
e92d930
Adjust RF routing
Sebi1128 Aug 4, 2026
b02e10f
update docs and fabrication files
Sebi1128 Aug 4, 2026
0d6fcee
Document changes
Sebi1128 Aug 11, 2026
7072df6
Update readme
Sebi1128 Aug 11, 2026
efcca34
prepare for release 1.2.4
Sebi1128 Aug 31, 2026
290731c
Merge pull request #47 from pulp-bio/wulpus-web-gui
Sebi1128 Sep 1, 2026
223cbb8
Merge pull request #48 from pulp-bio/feature/update-stackup_and_RF
Sebi1128 Sep 1, 2026
97c3344
Update readme and changelog
Sebi1128 Sep 1, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
59 changes: 59 additions & 0 deletions .github/workflows/release-gui.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
name: GUI Release
on:
push:
pull_request:
branches:
- main
jobs:
Build-Action:
runs-on: windows-latest
steps:
- uses: actions/checkout@v5
- uses: actions/setup-node@v4
- uses: actions/setup-python@v5
with:
python-version: "3.9"
- name: Install uv
uses: astral-sh/setup-uv@v6
- name: Install npm dependencies
run: npm ci
working-directory: ./sw/wulpus-frontend
- name: Build UI (react)
run: python build.py
working-directory: ./sw/wulpus-frontend
- name: Install python dependencies
working-directory: ./sw
run: uv sync --locked
- name: Build .exe
working-directory: ./sw
run: uv run pyinstaller ./wulpus/main.spec --noconfirm
- name: Bump version and push tag
id: tag_version
uses: mathieudutour/github-tag-action@v6.2
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
dry_run: ${{ github.event_name == 'pull_request' || github.ref != 'refs/heads/main'}}
- name: Write version info to artifact
working-directory: ./sw
shell: pwsh
run: |
$commitHash = (git rev-parse HEAD).Trim()
$commitDateFull = (git show -s --format=%cd --date=iso-strict HEAD).Trim()
$commitDate = $commitDateFull.Split('T')[0]
$text = "$commitHash from $commitDate (${{ steps.tag_version.outputs.new_tag }})"
$target = "./dist/main/_internal/wulpus/version.txt"
New-Item -ItemType Directory -Force -Path (Split-Path -Parent $target) | Out-Null
Set-Content -Path $target -Value $text -Encoding UTF8
- uses: actions/upload-artifact@v4
id: artifact-upload-step
with:
name: wulpus-all-in-one
path: ./sw/dist/main/
compression-level: 8
- name: Create release
uses: softprops/action-gh-release@v2
if: ${{ github.event_name != 'pull_request' && github.ref == 'refs/heads/main'}}
with:
tag_name: ${{ steps.tag_version.outputs.new_tag }}
name: UI-Release ${{ steps.tag_version.outputs.new_tag }}
body: Automated release of Wulpus GUI version ${{ steps.tag_version.outputs.new_tag }}. The release can be downloaded here [${{ steps.artifact-upload-step.outputs.artifact-url }}](${{ steps.artifact-upload-step.outputs.artifact-url }}) (github-login required)
7 changes: 7 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,5 +1,12 @@
*.ipynb_checkpoints
*.pyc
__pycache__/
*.egg-info/
.ipynb_checkpoints/
.vscode
*.clangd
sw/.venv
sw/build/
sw/dist/
.uv-cache/
local-development/
14 changes: 14 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,20 @@ For the detailed description, please explore nested folders and corresponding CH
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).


## [1.2.4] - 2026-08-31

### Added

### Fixed

- Acquisition PCB layout changes to improve RF performance
- Firmware improvements on nRF52 to improve reliability

### Changed

- Added new antenna (NN02-201) and corresponding matching network on Acquisition PCB

## [1.2.3] - 2026-04-02

### Added
Expand Down
25 changes: 17 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<img src="docs/images/wulpus_main.png" alt="WULPUS main" width="100%"/>

# WULPUS v1.2.3
# WULPUS v1.2.4
## Wearable Ultra Low-Power Ultrasound

# Introduction
Expand Down Expand Up @@ -35,7 +35,7 @@ This repository has the following folders:
- source code for the nRF52832 MCU of the WULPUS probe, located at `fw/nrf52/ble_peripheral/US_probe_nRF52_firmware`
- source code for the nRF52840 USB dongle, located at `fw/nrf52/peripheral/US_probe_dongle_firmware`
- source code for the MSP430 ultrasound MCU, located at `fw/msp430`
- `sw`, containing the Python code for the WULPUS Graphical User Interface
- `sw`, containing the Python code for the WULPUS Graphical User Interface (web-based version).

- `hw`, containing the CAD source files for
- WULPUS Acquisition PCB (located at `hw/wulpus_acquisition_pcb`)
Expand All @@ -49,19 +49,22 @@ This repository has the following folders:

The comprehensive [WULPUS User Manual](docs/wulpus_user_manual.pdf) can be found in the `docs/` folder. It covers everything about WULPUS, from assembly instructions to example measurements and troubleshooting, making the platform user-friendly for everyone, regardless of technical expertise.

# How to reproduce?
# How to use?

Please find the detailed instructions in chapter 2 of the [WULPUS User Manual](docs/wulpus_user_manual.pdf).

In a nutshell, to build your own instance of WULPUS, the following steps should be completed:
1. *PCBs manufacturing and assembly*<br>
You can find the design files (Altium source files, schematics, bills of materials) under the `hw` folder.
2. *Flashing MSP430 firmware*<br>
You can find the instructions on seting-up the toolchain, compiling the firmware and flashing the MSP430 MCU in the `fw/msp430` folder.
You can find the instructions on setting up the toolchain, compiling the firmware and flashing the MSP430 MCU in the `fw/msp430` folder.
3. *Flashing nRF52 MCU and USB dongle firmware*<br>
You can find the instructions on setting-up the toolchain, compiling the firmware, flashing the nRF52 MCU and USB dongle in the `fw/nrf52` folder.
4. *Python dependencies installation on the host PC*<br>
Follow the instructions in the `sw` folder to install the dependencies.
4. *GUI installation on the host PC*<br>
Choose one of the following interfaces depending on your application:
- **BioGUI** *(Recommended for general use & HMI applications)*: Modular PySide6 GUI for acquiring and visualizing bio-signals from different sources. Follow the setup instructions in the [BioGUI repository](https://github.com/pulp-bio/biogui).
- **Web-based GUI** *(Recommended for NDT applications & acquisition sequences)*: Features a React/Vite frontend and FastAPI backend. Follow the setup instructions in [`sw/`](sw/).
- **Legacy Jupyter Notebook GUI** *(Deprecated / not recommended for new projects)*: Legacy interactive notebooks are located in [`sw/jupyter notebook (legacy)/`](<sw/jupyter notebook (legacy)/>).

# Usage

Expand All @@ -70,7 +73,7 @@ Please refer to chapter 3 of the [WULPUS User Manual](docs/wulpus_user_manual.pd
Starting a measurement with WULPUS can be accomplished in three simple steps:
- Power up the probe, either from the micro-USB connector or from the battery connector
- Connect the USB dongle to the host PC
- Activate the Python environent, launch the Jupyter notebook located in `sw` folder, and follow the instructions in the notebook
- Launch your chosen interface (**[BioGUI repository](https://github.com/pulp-bio/biogui)** or the **Web-based GUI** in [`sw/`](sw/)).

# Citation
If you would like to reference the project, please cite the following paper:
Expand All @@ -97,6 +100,12 @@ If you would like to reference the project, please cite the following paper:

[5] Spacone G, Vostrikov S, Kartsch V, Benatti S, Benini L, Cossettini A. "Tracking of Wrist and Hand Kinematics with Ultra Low Power Wearable A-mode Ultrasound." IEEE Transactions on Biomedical Circuits and Systems. 2024 Sep 23.

[6] Spacone, Giusy, et al. "Wearable and Ultra-Low-Power Fusion of EMG and A-Mode US for Hand-Wrist Kinematic Tracking." 2025 IEEE Biomedical Circuits and Systems Conference (BioCAS). IEEE, 2025.

[7] Spacone, Giusy, et al. "Towards Fully Wearable Muscle Fatigue Assessment with A-mode Ultrasound." 2025 IEEE International Ultrasonics Symposium (IUS). IEEE, 2025.

[8] Spacone, Giusy, et al. "Towards Whole Hand and Wrist Kinematic Tracking with a Wearable A-Mode Ultrasound Probe." IEEE Open Journal of Ultrasonics, Ferroelectrics, and Frequency Control. 2026.

# Authors

The WULPUS system was developed at the [Integrated Systems Laboratory (IIS)](https://iis.ee.ethz.ch/) at ETH Zurich by:
Expand All @@ -109,7 +118,7 @@ Thanks to all the people who contributed to the WULPUS platform:
- [Cédric Hirschi](https://www.linkedin.com/in/c%C3%A9dric-cyril-hirschi-09624021b/) (GUI improvements, Documentation)
- [Josquin Tille](https://www.linkedin.com/in/josquin-tille-829a341a7/) (Silicone package design, Documentation)
- [William Bruderer](https://www.linkedin.com/in/william-bruderer-59ba9b26b/) (Documentation)

- [Louis Dod](https://github.com/13Bytes) (GUI Rework)

# License
The following files are released under Apache License 2.0 (`Apache-2.0`) (see `sw/LICENSE`):
Expand Down
11 changes: 11 additions & 0 deletions docs/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,17 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [Unreleased]

## [1.3.0] - 2025-08-28

### Added
- New GUI with replay-functionality and extended logging, which is running in the browser
- This required a new API, which structures the way of communicating with the wulpus-server

(More details can be found in the [sw-changelog](../sw/CHANGELOG.md))


## [1.2.0] - 2025-01-27

### Added
Expand Down
Binary file added docs/images/v1_2/Gui-Screenshot-2025-08-28.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Loading