This is the authors' abstract. We don't add key points for this paper.
This paper presents a low-cost real-time photoplethysmography (PPG) monitoring platform based on an ESP32-S3 SuperMini, a MAX30102 sensor operating at 200 samples per second, and a desktop graphical user interface (GUI). The proposed system establishes Bluetooth Low Energy (BLE) communication between the embedded node and the PC interface to stream both infrared (IR) and red (RED) channels simultaneously. On the embedded side, the firmware acquires, packages, and transmits the raw PPG signals while estimating the heart rate in beats per minute (BPM) for each channel. On the desktop side, the GUI displays the received signals and the corresponding BPM values in real time, providing a practical and accessible monitoring environment. The main contribution is the integration of real-time dual-channel PPG acquisition, BLE transmission, embedded BPM estimation, desktop GUI visualization, and experimental validation within a single compact and low-cost platform. The proposed architecture is aimed at low-cost biomedical applications and offers a compact solution for signal acquisition, wireless communication, visualization, and basic physiological estimation. Experimental results show that the platform can reliably capture and transmit both channels, supporting its use as a foundation for future work on more advanced PPG processing and physiological monitoring applications. Furthermore, the system performance was validated by comparing the estimated heart rate against measurements obtained from two medical reference devices: a pulse oximeter and a digital sphygmomanometer. The results demonstrated good agreement between the measurements, supporting the feasibility of the proposed platform for non-invasive physiological monitoring applications.
No takes yet. Share an insight, caveat, or question.
Miranda-Vega et al. (2026) studied this question.
Synapse has enriched 5 closely related papers on similar clinical questions. Consider them for comparative context: