PROJECT BUILD NOTES / DOCUMENTATION RELEASE · 21 OCT 2026

Portable 3-in-1 Biosignal Monitor

Source GPIO assignments, builder-reported power connections, module photographs and mechanical references.

Release status

The application, both supplied fonts, both STL meshes and the supplied MEGO Fusion archive are preserved unchanged. The builder confirms STEPico 3V3 and GND for modules other than EMG. The EMG connection record uses MEGO +VCC → +VS, -VEE → -VS, power GND → MEGO GND and signal GND → STEPico GND. The positive output is reported as +5 V; the negative setting has not been verified.

The source ZIP now includes six unchanged Python files: main.py, the latest device copy of SpO2Calculators.py, both fonts and the two-file max30102 package. The Pico reports MicroPython 1.20.0 on RP2040. The supplied Shell output confirms a successful st7789 import, and the builder reports prior hardware tests passed.

Educational build reference. Supply wiring does not establish compatible ADC signal levels or a verified body-connected measurement system. Conditioning and isolation require a separately checked setup.

Application and supplied libraries ZIP · STL ZIP · MEGO CAD archive · Release details and checksums

Module reference images

Product reference photos and details from the supplied CAD and EIM documentation screenshots. The original build photographs remain linked beside each reference image. The EMG illustration does not identify the amplifier IC in the actual build.

STEPico controller. Supplied CAD detail

STEPico controller

USB-C connector, BOOT / RUN buttons and four on-board LEDs. Detail from the supplied CAD layout.

Builder’s CAD screenshot · Original build photograph
AD8232 ECG module. Reference illustration

AD8232 ECG module

Front-view illustration of the ECG breakout. The supplied board photograph identifies 3.3V, GND and OUTPUT.

EIM documentation · supplied screenshot · Original build photograph
ST7789 display. Product reference photo

ST7789 display

Product reference for the 1.54-inch, 240 × 240, eight-pin SPI display. Check terminal labels on the supplied board.

Product image · Walmart listing · Original build photograph
MAX30102 optical sensor. Product reference photo

MAX30102 optical sensor

MH-ET LIVE breakout, shown from the labelled rear. VIN, SDA, SCL and GND are the four connections used in this build.

Product image · Modulemore · Original build photograph
EMG amplifier module. Reference illustration

EMG amplifier module

Reference illustration matching the module layout. The supplied board has +VS / GND / -VS and SIG / GND; its amplifier IC remains unconfirmed.

EIM documentation · supplied screenshot · Original build photograph

Image sources and provenance

Pictorial wiring guide

Five breadboard-style module sheets show GPIO labels and physical header-pin numbers. The same controller is repeated for clarity. Placement and module artwork are illustrative; the display header order must be checked against its printed labels. Shared 3V3 and GND need common distribution points.

Download all sheets (SVG and PNG) · Open the offline wiring guide

MAX30102 optical sensor pictorial wiring
MAX30102 optical sensor · SVG · PNG
ST7789 SPI display pictorial wiring
ST7789 SPI display · SVG · PNG
AD8232 ECG input pictorial wiring
AD8232 ECG input · SVG · PNG
Potentiometer and buttons pictorial wiring
Potentiometer and buttons · SVG · PNG
EMG and MEGO supply pictorial wiring
EMG and MEGO supply · SVG · PNG

Dashed display BL → GP20 is a proposed addition requiring software configuration. Dashed EMG SIG marks the pending conditioning / ADC-range check. The MEGO negative voltage setting and input wiring remain unverified.

Signal assignments from the source

Biosignal monitor — code-derived signal mapSource GPIO assignments for ECG, EMG, a potentiometer, two buttons, MAX30102, ST7789, and the on-board RGB indicator. The builder reports a +5 V MEGO Dual output; supply wiring is not established.TEENAGERS’ ENGINEERING INITIATIVE / BUILD REFERENCE 21 OCT 2026The signal map in the program.GPIO labels are GP numbers, not physical header-pin numbers. Hardware wiring has not been inspected.STEPico / RP2040Uploaded MicroPython configurationECG module / AD8232OUTPUT → pulse inputModel attribution: CAD labelOUTPUTGP28EMG amplifier moduleSIG → muscle inputOutput range / conditioning to verifyChip marking not confirmedSIG *GP27PotentiometerWiper → threshold inputWIPERGP26MAX30102 breakoutSoftware I2C / requested 400 kHzPower and pull-ups require checkingSDAGP6SCLGP9Two pushbuttonsActive-low inputs with internal pull-upsIntended switches close to GNDMODEGP2RESETGP3ST7789 / 240 × 240SPI1 / requested 40 MHzpolarity=1, phase=1GP10SCL / SCKGP11SDA / MOSIGP13CSGP14DCGP15RES / RSTOn-board RGB indicatorGP23 / NeoPixel(..., 1)On-board control; no added wireBody1 / MEGO Dual referenceFusion archive supplied as referenceSeparate supply path for EMG.+5 V output — reported by builderSupply paths: see power-map.svgSignal assignments only. This is not a verified full electrical schematic.* Check EMG signal conditioning and the ADC input range. Power paths are documented separately; EMG conditioning and isolation still require verification.

GP labels are GPIO numbers, not physical header-pin numbers. The application uses SPI1 at a requested 40 MHz, polarity=1, phase=1. Its MAX30102 connection is SoftI2C on GP6 / GP9 at a requested 400 kHz.

FunctionModule signalControllerSource line
ECG inputAD8232 OUTPUT (inferred module role)GP28 / ADC238
EMG inputEMG module SIGGP27 / ADC153
Threshold controlPotentiometer wiperGP26 / ADC054
Display clockST7789 SCL / SCKGP1031
Display dataST7789 SDA / MOSIGP1131
Display selectST7789 CSGP1332
Display data / commandST7789 DCGP1432
Display resetST7789 RES / RSTGP1532
Optical dataMAX30102 SDAGP672
Optical clockMAX30102 SCLGP972
Mode buttonActive-low pushbuttonGP217
Optical reset buttonActive-low pushbuttonGP370
On-board indicatorRGB LED dataGP2363–64

Reported power connections

Biosignal monitor — reported power connectionsThe builder reports STEPico 3V3 and GND for AD8232, MAX30102, the display and potentiometer. The MEGO supply record connects +VCC to EMG +VS and -VEE to -VS; the negative voltage is unverified. GP20 backlight is proposed, not an uploaded source assignment.TEENAGERS’ ENGINEERING INITIATIVE / BUILD REFERENCE · 21 OCT 2026Power follows its own path.Builder-reported wiring. Dots mark shared connections. Supply voltages do not establish ADC signal compatibility.STEPico / RP20403V3 outputReported 3.3 V supply for:ECG, optical breakout, displayand potentiometer.Display BL → GP20Optional assignment for this guide.Requires software configuration.GND / common referenceAD8232 ECG module3.3V pin · OUTPUT → GP28MAX30102 breakoutVIN pin · SDA → GP6 / SCL → GP9ST7789 displayVCC pin · display signals in signal mapPotentiometerOuter terminals → 3V3 / GND · wiper → GP263.3 V railShared STEPico GNDSEPARATE EMG SUPPLY / CONNECTION RECORDMEGO DualEMG module+VCC · reported +5 V+VSGNDPower GND-VEE · voltage unverified-VSArchive supplied: MEGO_Dual_v2.f3zSIG → GP27 · see source signal mapSignal GND → STEPico GNDReported wiring reference; not a verified full electrical schematic.EMG conditioning, signal range, isolation, print settings and device behaviour still require a checked build record.

AD8232 3.3V, MAX30102 VIN and ST7789 VCC connect to STEPico 3V3; each GND connects to STEPico GND. Potentiometer outer terminals use 3V3 / GND and its wiper goes to GP26. These supply paths follow the builder’s confirmation.

GP20 is selected as an optional display-backlight pin for this guide. It is free in the supplied program and follows the manufacturer’s reference assignment. It requires matching software configuration and is not asserted as the existing physical connection.

The standard RP2040 ADC range is 0–3.3 V. EMG amplifier supply rails are separate from its signal output; check the output range and conditioning before connecting GP27.

Assembly outline

  1. Open the two enclosure meshes and compare their board locations with the CAD layout. Verify model scale in the slicer; STL files do not declare units.
  2. Record actual print material, orientation, settings, clearances and fasteners. These are not established by the supplied files.
  3. Identify module connectors from the photographs. Plan access to USB-C, controls, the display and sensor connectors.
  4. Trace the reported 3V3 / GND connections and the separate EMG supply path; check the analog conditioning and reference.
  5. Use the source GPIO table for signal connections. GP2 selects the mode; GP3 resets the optical calculation buffers. Keep GP6 / GP9 for this SoftI2C source.
  6. Record firmware and library versions, resolve the compatibility findings, then check display output, sensor detection, controls and all three modes on the device.

MEGO_Dual_v2.f3z is a module reference archive. Full assembly CAD, print settings and fastening details are still needed for a complete mechanical build guide.

STEPico setup · six steps

For a new board, follow all six steps. A board already running compatible MicroPython with st7789 can continue at step 5. These instructions adapt the manufacturer’s STEPico setup guide to the biosignal monitor’s display driver and source files.

Recorded working environment

The builder’s Shell reports MicroPython 1.20.0 on Raspberry Pi Pico / RP2040 and successfully imports st7789. The builder confirms earlier hardware tests passed. The exact original firmware image has not been identified.

  1. 1

    Prepare Thonny and USB

    Install Thonny from thonny.org. Connect STEPico with a USB-C data cable.

  2. 2

    Choose the firmware

    Use an RP2040 / Raspberry Pi Pico build that provides the st7789 display driver. The builder’s working board reports MicroPython 1.20.0; the exact original firmware image is unavailable. The driver project provides precompiled RP2 firmware as an upstream reference.

  3. 3

    Enter BOOT mode

    Hold BOOT, press and release RUN, then release BOOT. Alternatively, hold BOOT while plugging in USB. A drive named RPI-RP2 should appear.

  4. 4

    Transfer the UF2 image

    Drag the compatible .uf2 file onto RPI-RP2. STEPico restarts and the drive disappears. This installs the runtime; Python files are transferred through Thonny afterwards.

  5. 5

    Connect the interpreter

    In Thonny, select the MicroPython Raspberry Pi Pico / RP2040 interpreter and the board’s serial port. Open the Shell. For a new installation, import st7789 to confirm that the display driver is available.

  6. 6

    Copy and start the project

    Extract application-source.zip. In Thonny’s Files view, copy the four root Python files and the max30102 folder to the device root, preserving both files inside that folder. Open main.py and choose Run current script (F5).

A .uf2 file installs the board’s runtime. main.py and its libraries are copied into that runtime’s filesystem through Thonny. The st7789 project’s precompiled RP2 firmware is an upstream driver-inclusive reference; it has not been confirmed as the builder’s original image.

Directory structure

Path on PicoPurpose
main.pyProject application
SpO2Calculators.pySupplied calculator with reset()
vga1_16x16.py16 × 16 display font
vga1_8x8.pyFont imported at startup
max30102/__init__.pyOptical sensor driver
max30102/circular_buffer.pyDriver buffer dependency

The two MAX30102 files belong inside the max30102 directory. The other four Python files belong in the device root. The supplied filenames containing upload suffixes have already been normalised in the source ZIP.

Supplied firmware references

UF2 block structure and internal version strings were inspected. These three uploaded files are references; they do not identify the current board’s reported 1.20.0 image. Their display-driver compatibility has not been established, and they are not bundled as project firmware.

Supplied filenameInternal version
RPI_PICO-20250415-v1.25.0.uf21.25.0
RPI_PICO-20250809-v1.26.0.uf21.26.0
RPI_PICO-20260824-v1.29.0.uf21.29.0

Software and installation

The builder supplied this Pico Shell result on 21 Oct 2026:

(name='micropython', version=(1, 20, 0), _machine='Raspberry Pi Pico with RP2040', _mpy=4358)

This identifies the reported runtime version and platform. The builder also supplied <module 'st7789'> as the result of importing the display driver. The exact original firmware image has not been supplied.

Files in application-source.zip

Path on PicoPurpose / status
main.pyCurrent device application; byte-identical to the earlier supplied final program.
SpO2Calculators.pyLatest supplied calculator, renamed to match the import. Includes reset() and an incomplete-cycle guard.
max30102/__init__.pySupplied optical sensor driver; original attribution and contents preserved.
max30102/circular_buffer.pySupplied buffer dependency, unchanged from the earlier copy.
vga1_16x16.pyOriginal 16 × 16 font.
vga1_8x8.pyOriginal 8 × 8 font, imported at startup.

Copy and check

  1. Extract application-source.zip on the computer and preserve the max30102 directory.
  2. Connect the Pico to Thonny and select its MicroPython interpreter. Open View → Files and preserve the existing device files before copying the release.
  3. Copy the four root Python files and the max30102 directory into the Pico root. The directory contains __init__.py and circular_buffer.py.
  4. On a fresh Pico, provide a compatible runtime with the st7789 driver available. The builder’s current Pico already imports it successfully; the source ZIP contains no firmware image.
  5. The builder confirms prior successful tests of the display, controls and all three modes. This operational status is recorded from that confirmation.

Firmware image and operating record

A .uf2 file is a board firmware image used to install the runtime onto the Pico. It is separate from main.py and the Python library files. A display driver can be compiled into a firmware build. Supplied 1.25.0, 1.26.0 and 1.29.0 files are recorded as references above. A fresh-board installation needs a compatible st7789 driver runtime; those files do not establish the exact original 1.20.0 image.

The builder confirmed prior hardware tests passed on 21 Oct 2026; the original test date and detailed logs were not supplied.

Code review findings

Host checks pass for Python syntax, the calculator constructor and reset, empty / flat input and complete synthetic wave cycles. Every MAX30102 method called by main.py exists in the supplied driver. These checks do not run the code on the physical Pico.

A zero-baseline stress input still triggers ZeroDivisionError in the calculator. main.py also divides red_ratio by ir_ratio without excluding zero. The supplied buffer’s pop_head() has an issue outside the application’s current pop_red_from_storage() / pop_ir_from_storage() path. All files are preserved unchanged; these findings are documented for a later code revision.

The earlier candidate calculator lacked reset(); the latest device copy supersedes that candidate and includes the method. Its incomplete-cycle guard also supersedes the earlier missing-guard finding. The original firmware image and exact display driver version remain undocumented. The display import succeeds and prior hardware operation is confirmed by the builder.

Implemented modes and test record

  1. ECG: GP28 waveform, threshold-crossing pulse estimate from the preceding ten seconds, with a two-second refresh after the first window.
  2. EMG: GP27 reading compared with the GP26 potentiometer threshold. The displayed “voltage” divides read_u16() by 30000, so this prototype scale needs review.
  3. Optical: MAX30102 red / infrared readings and a prototype oxygen-saturation estimate. The GP3 reset is not calibration against a reference instrument.

The supplied August 2025 conversation reports that replacing the STEPico restored operation and stopped observed heating. It does not establish the cause of the earlier fault. No servo or PWM output is implemented in the uploaded final program. Its sensor-missing startup message does not establish complete recovery behaviour. The builder reports prior successful hardware tests of the supplied program.

Manufacturer and software references