Inżynieria

Odbieranie EKG z Aidlaba na iPhonie

Author avatar

Jakub Domaszewicz

Ostatnia aktualizacja3 grudnia 2024

Odbieranie EKG z Aidlaba na iPhonie

Dodaj Aidlab Apple SDK, połącz się z urządzeniem i odbieraj próbki EKG w aplikacji na iPhone. Poradnik zawiera przykład w Swift.

W tym poradniku odbierzesz na iPhonie próbki EKG z Aidlaba. W Aidlab Apple SDK służy do tego metoda DeviceDelegate.didReceiveECG(_:timestamp:value:). Wywołania zaczną docierać, gdy połączysz się z urządzeniem i rozpoczniesz zbieranie sygnału .ecg.

Poradnik zakłada znajomość Xcode i Swift Package Manager.

Instalacja SDK

Dodaj do aplikacji pakiet Swift i wybierz wersję 2.7.0:

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

Przechowuj instancję AidlabManager w kontrolerze lub osobnej klasie. Metoda AidlabManagerDelegate.didDiscover(_:) przekaże znalezione urządzenia. Poniższy fragment pokazuje połączenie i obsługę EKG:

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)
    }

    nonisolated func didDiscover(_ device: Device) {
        Task { @MainActor in
            guard connectedDevice == nil else { return }
            aidlabManager.stopScan()
            connectedDevice = device
            do {
                try await device.connect(delegate: self)
            } catch {
                connectedDevice = nil
                print("Connection failed: \(error)")
            }
        }
    }

    nonisolated func didConnect(_ device: Device) {
        Task { @MainActor in
            do {
                _ = try await device.collect(dataTypes: [.ecg], dataTypesToStore: [])
            } catch {
                print("Collection failed: \(error)")
            }
        }
    }

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

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

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

SDK udostępnia domyślne implementacje opcjonalnych callbacków. Wystarczy zaimplementować połączenie, rozłączenie, obsługę błędów i sygnały, których potrzebujesz.

Przed pomiarem załóż Aidlaba na klatkę piersiową. Callback didReceiveEvent(_:event:) ze zdarzeniem WearStateEvent pozwala zareagować, gdy urządzenie jest luźne lub odłączone od ciała — na przykład wyświetlić prośbę 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.