Inżynieria

Odczytywanie EKG na iOS w czasie rzeczywistym

Author avatar

Jakub Domaszewicz

Ostatnia aktualizacja3 grudnia 2024

Odczytywanie EKG na iOS w czasie rzeczywistym

Zamień iPhone'a w kardiomonitor dzięki Aidlab iOS SDK. Wyjaśniamy, jak skanować, łączyć się i strumieniować dane.

Chcesz odbierać na iPhonie dane EKG ze swojego Aidlaba? Aktualne Aidlab Apple SDK udostępnia próbki EKG przez DeviceDelegate.didReceiveECG(_:timestamp:value:) po wyszukaniu urządzenia, nawiązaniu połączenia i rozpoczęciu zbierania sygnału .ecg.

Uwaga: w tym poradniku zakładamy znajomość Xcode i Swift Package Manager.

Instalacja SDK

Dodaj do aplikacji pakiet Swift:

https://github.com/Aidlab/aidlab-apple-sdk

Następnie dodaj do pliku Info.plist opis celu korzystania z Bluetooth:

<key>NSBluetoothAlwaysUsageDescription</key>
<string>This app connects to Aidlab over Bluetooth.</string>

Wyszukiwanie i łączenie z urządzeniem

Utwórz kontroler lub klasę zarządzającą, która przechowuje instancję AidlabManager. Menedżer przekazuje znalezione urządzenia przez AidlabManagerDelegate.didDiscover(_:). Poniższy fragment pokazuje obsługę EKG. Ponieważ DeviceDelegate obejmuje wszystkie obsługiwane sygnały, pełna klasa musi zawierać również puste implementacje nieużywanych funkcji zwrotnych, tak jak w przykładowej aplikacji SDK.

import Aidlab
import UIKit

final class ECGViewController: UIViewController, AidlabManagerDelegate, DeviceDelegate {
    private lazy var aidlabManager = AidlabManager(delegate: self)
    private var connectedDevice: Device?

    override func viewDidLoad() {
        super.viewDidLoad()
        aidlabManager.scan(scanMode: .aggressive)
    }

    func didDiscover(_ device: Device) {
        aidlabManager.stopScan()
        connectedDevice = device
        device.connect(delegate: self)
    }

    func didConnect(_ device: Device) {
        device.collect(dataTypes: [.ecg], dataTypesToStore: [])
    }

    func didReceiveECG(_ device: Device, timestamp: UInt64, value: Float) {
        print("ECG @ \(timestamp): \(value)")
    }

    func didDisconnect(_ device: Device, reason: DisconnectReason) {
        connectedDevice = nil
        print("Disconnected: \(reason)")
    }

    func didReceiveError(_ device: Device, error: AidlabError) {
        print("Aidlab error: \(error)")
    }
}

DeviceDelegate zawiera funkcje zwrotne dla wszystkich obsługiwanych sygnałów, dlatego aplikacja musi implementować także pozostałe metody protokołu. Kompletną implementację delegata znajdziesz w przykładowej aplikacji dla platform Apple w repozytorium SDK.

Przed rozpoczęciem pomiaru EKG załóż Aidlaba na klatkę piersiową. Gdy urządzenie jest luźne lub nie przylega do ciała, wykorzystaj wearStateDidChange(_:wearState:), aby zaktualizować interfejs i poprosić użytkownika o poprawienie pasa.

Odbierane wartości to próbki EKG wyrażone w woltach. Informacje o częstotliwości próbkowania i szczegółach pomiaru znajdziesz w artykule Zakres i dokładność pomiarów.