นี่คือแอพ Swift iOS (ในตัว XCode 6.1.1) ที่ให้ไว้เป็นตัวอย่างสำหรับนักพัฒนาที่ทดลองในระบบนิเวศของ Kardia.io ขณะนี้มีฮาร์ดโค้ดเพื่อเชื่อมต่อและอ่านข้อมูลจากหน่วย RedBearLabs Blend Micro ที่โหลดเฟิร์มแวร์ที่แนะนำโดยเว็บไซต์ RedBearLabs เราตั้งโปรแกรมหน่วยเหล่านี้ให้ปล่อยข้อมูลจำลองที่จำลองการติดตามคลื่นไฟฟ้าหัวใจจริง แอพนี้เชื่อมต่อโทรศัพท์กับอุปกรณ์และถ่ายทอดข้อมูลที่ส่งไปยังเซิร์ฟเวอร์ (node.js และ python) ที่ Kardia.io แอพยังรับฟังและแสดงการวิเคราะห์ที่กลับมาจากเซิร์ฟเวอร์
โคลน repo และเปิดใน XCode โหลดแอปลงในโทรศัพท์ของคุณ แอปจะเชื่อมต่อกับหน่วย BLE ที่อยู่ใกล้เคียงโดยอัตโนมัติด้วยบริการที่เหมาะสมและ UUID ที่มีลักษณะเฉพาะ (ดูด้านล่าง) และเริ่มสตรีมข้อมูลไปยัง kardia.io ข้อมูลที่วิเคราะห์จะกลับมาที่แอปแบบเรียลไทม์ เหตุการณ์ผิดปกติใดๆ (จังหวะ) จะถูกบันทึกไว้ในมุมมองตารางที่สามารถเข้าถึงได้โดยการปัดไปทางซ้ายหรือขวา กิจกรรมเหล่านี้สามารถลบได้โดยการดึงไปทางซ้าย
แอปค้นหาบริการ UUID 713D0000-503E-4C75-BA94-3148F18D941E ซึ่งมีคุณลักษณะ UUID 713D0002-503E-4C75-BA94-3148F18D941E ที่สอดคล้องกับข้อมูลที่ปล่อยออกมาจาก Arduino ค่าเหล่านี้ถูกกำหนดไว้ในเฟิร์มแวร์สำหรับ Blend Micro ที่ลิงก์บนเว็บไซต์ RedBearLabs
เมื่อแอปเชื่อมต่อกับอุปกรณ์ BLE (ดูคำอธิบายสั้น ๆ ด้านล่าง) แอปจะลงทะเบียนผู้ฟังสำหรับการเปลี่ยนแปลงสถานะของคุณลักษณะข้อมูลของฮาร์ดแวร์ ข้อมูลนี้ถูกตีความว่าเป็นทศนิยมและส่งผ่านไปยังฟังก์ชันโทรกลับสองฟังก์ชัน หนึ่งเพิ่มลงในบัฟเฟอร์ของจุดข้อมูลล่าสุดสำหรับการเรนเดอร์ในกราฟ อีกอันส่งเสียงเป็นเหตุการณ์ซ็อกเก็ต โดยปล่อยออกมาเป็นออบเจ็กต์ JSON พร้อมด้วยคีย์ "แอมพลิจูด" และ "เวลา" ที่สอดคล้องกับค่าที่ได้รับจากฮาร์ดแวร์และเวลา ISO8601 ที่เหตุการณ์ซ็อกเก็ตถูกปล่อยออกมา ตามลำดับ
แอปยังรับฟังการตอบสนองจากเซิร์ฟเวอร์ ซึ่งเป็นออบเจ็กต์ JSON ที่มีปุ่ม "heartRate" (อธิบายได้ในตัว) และ "statusCode" รหัสสถานะจะถูกค้นหาในพจนานุกรมที่กำหนดไว้ใน ViewController.swift และแปลเป็นมุมมองหลักเป็น statusView
เราใช้ไลบรารี SocketIOClient ซึ่งล้อมรอบไลบรารี Objective-C Socket Rocket มีการใช้เหตุการณ์ต่อไปนี้:
เราใช้ไลบรารี Swift-Linechart เพื่อเรนเดอร์การติดตาม ECG แบบสด มันไม่ตรงตามความต้องการของเราทั้งหมด ดังนั้นเราจึงแก้ไขดังนี้:
เมื่อแอปบันทึกความผิดปกติครั้งใหม่ แอปจะบันทึกใน arrhythmiaTimes global ซึ่งทำหน้าที่เป็นแหล่งข้อมูลสำหรับมุมมองตาราง "สด" ในกรณีนี้หมายความว่าเหตุการณ์จะถูกบันทึกก็ต่อเมื่อสถานะที่เซิร์ฟเวอร์รายงาน เปลี่ยน เป็นเหตุการณ์ผิดปกติ (ในกรณีนี้คือภาวะหัวใจเต้นผิดจังหวะ) เท่านั้น ดังนั้นเหตุการณ์ภาวะหัวใจเต้นผิดจังหวะซ้ำๆ ไม่ได้รับการบันทึกทั้งหมด
โปรดดูส่วนปัญหาของ repo นี้
ต่อไปนี้เป็นบทช่วยสอนที่ดีเกี่ยวกับการเชื่อมต่ออุปกรณ์ BLE กับอุปกรณ์ iOS โดยใช้ Swift โดยสรุป แอปจะเริ่มค้นหาอุปกรณ์ต่อพ่วงบลูทูธที่โฆษณา UUID บริการเฉพาะ เมื่อพบสิ่งหนึ่ง มันจะเชื่อมต่อและค้นหา UUID ลักษณะเฉพาะ หากพบสิ่งนี้จะเริ่มฟังข้อมูลนั้น
เมื่อใดก็ตามที่จำเป็นต้องอัปเดตมุมมอง คุณต้องเรียกใช้โค้ดนั้นบนเธรดหลัก (UI) นั่นเป็นเหตุผลที่คุณจะเห็นบล็อคโค้ดดังนี้:
dispatch_async(dispatch_get_main_queue()) {
// UI-updating code goes here
}
กิจกรรมได้รับการจัดการโดย NSNotificationCenter - การลงทะเบียนผู้ฟังและการยิงเหตุการณ์นั้นค่อนข้างจะอธิบายได้ในตัว นี่คือ Swift ฉบับย่อ: การแปลคำศัพท์ Javascript:
ตัวอย่าง:
foo.on('bar', doAThing)
กลายเป็น
NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("doAThing"), name: "bar", object: nil)
ฟังก์ชันสามารถมีชื่อเดียวกันได้ตราบใดที่มีพารามิเตอร์ต่างกัน ซึ่งมักเกิดขึ้นกับโปรโตคอล
สามารถสร้างและจำกัดมุมมองได้ใน Main.storyboard หรือโดยทางโปรแกรมในโค้ด แอปนี้ใช้ทั้งสองอย่างผสมกัน โดยมุมมองหลักจะเสร็จสิ้นในรูปแบบหลัง ในขณะที่มุมมองตารางจะใช้รูปแบบแรก