สารบัญ:

สร้าง Wearable Motion Tracker (BLE จาก Arduino ไปยัง Custom Android Studio App): 4 ขั้นตอน
สร้าง Wearable Motion Tracker (BLE จาก Arduino ไปยัง Custom Android Studio App): 4 ขั้นตอน

วีดีโอ: สร้าง Wearable Motion Tracker (BLE จาก Arduino ไปยัง Custom Android Studio App): 4 ขั้นตอน

วีดีโอ: สร้าง Wearable Motion Tracker (BLE จาก Arduino ไปยัง Custom Android Studio App): 4 ขั้นตอน
วีดีโอ: ทำไมเเม่ไม่บอกกันเลย😂 #แป้งวิงค์ไวท์ 2024, พฤศจิกายน
Anonim
สร้าง Wearable Motion Tracker (BLE จาก Arduino ไปจนถึง Custom Android Studio App)
สร้าง Wearable Motion Tracker (BLE จาก Arduino ไปจนถึง Custom Android Studio App)

Bluetooth Low Energy (BLE) เป็นรูปแบบหนึ่งของการสื่อสาร Bluetooth ที่ใช้พลังงานต่ำ อุปกรณ์สวมใส่ได้ เช่น เสื้อผ้าอัจฉริยะที่ฉันช่วยออกแบบที่ Predictive Wear ต้องจำกัดการใช้พลังงานในทุกที่ที่ทำได้เพื่อยืดอายุการใช้งานแบตเตอรี่ และใช้ BLE บ่อยครั้ง Bluetooth Special Interest Group (SIG) กำหนดข้อกำหนดหลายอย่างที่อุปกรณ์ควรใช้เพื่อโต้ตอบกับอุปกรณ์ Bluetooth ซึ่งเรียกว่า "โปรไฟล์" โปรไฟล์แอปพลิเคชันส่วนใหญ่ใช้โปรไฟล์แอตทริบิวต์ทั่วไป (GATT) เพื่อส่งข้อมูลผ่านลิงก์ BLE มีแนวคิดพื้นฐานสามประการใน BLE ได้แก่ โปรไฟล์ บริการ และคุณลักษณะ

Bluetooth SIG มีมาตรฐานโปรไฟล์ บริการ และคุณลักษณะทั่วไปมากมาย อย่างไรก็ตาม เมื่อสร้างฮาร์ดแวร์แบบกำหนดเอง มักจะมีความจำเป็นต้องสร้างบริการและแอตทริบิวต์แบบกำหนดเอง และมีบทช่วยสอนไม่มากนัก เพื่อทำให้เรื่องยากขึ้น Adafruit ไม่ได้ให้คำแนะนำใดๆ เกี่ยวกับการออกแบบแอปพลิเคชันมือถือเพื่อจับคู่กับโมดูล BLE และซอร์สโค้ดสำหรับแอปพลิเคชันนั้นยากต่อการทำวิศวกรรมย้อนกลับ

บทช่วยสอนนี้มีจุดมุ่งหมายเพื่ออธิบาย:

  1. วิธีการออกแบบบริการและลักษณะเฉพาะของ GATT
  2. วิธีตั้งโปรแกรม Adafruit Bluefruit LE SPI Friend ให้ทำหน้าที่เป็นเซิร์ฟเวอร์ GATT สำหรับบริการและคุณลักษณะที่กำหนดเองเหล่านี้
  3. วิธีตั้งโปรแกรมอุปกรณ์ Android ให้ทำหน้าที่เป็นไคลเอ็นต์ GATT เพื่ออ่านข้อมูลจากเซิร์ฟเวอร์ GATT

บทช่วยสอนนี้ไม่ได้มีวัตถุประสงค์เพื่อแปลเป็นแอปพลิเคชันที่พร้อมใช้งานจริง นี่เป็นเพียงการแนะนำ BLE

การอ่านพื้นหลัง:

  • เอกสารสำหรับเพื่อน Adafruit Bluefruit LE SPI
  • หากคุณไม่คุ้นเคยกับ GATT หรือ BLE

เสบียง

  • 1x - อุปกรณ์ Arduino (ฉันกำลังใช้ UNO สำหรับบทช่วยสอนนี้)
  • 1x - Adafruit Bluefruit LE SPI Friend
  • 8x - สายจัมเปอร์ชายกับชาย
  • อุปกรณ์บัดกรีพื้นฐาน (เพื่อบัดกรีหมุดส่วนหัวบน SPI Friend)
  • คอมพิวเตอร์ (เพื่อตั้งโปรแกรมอุปกรณ์ Arduino และอุปกรณ์ Android)

ขั้นตอนที่ 1: ออกแบบบริการและคุณลักษณะที่กำหนดเอง

การแนะนำ

บทความนี้อธิบายวิธีออกแบบบริการและคุณลักษณะที่กำหนดเองได้อย่างดี ฉันขอแนะนำให้อ่านบทความนี้ ฉันให้ภาพรวมที่เรียบง่ายมากด้านล่างซึ่งละเลยรายละเอียดปลีกย่อยและความเรียบง่าย

บริการของ GATT เป็นการรวบรวมคุณลักษณะ

ลักษณะของ GATT ประกอบด้วยคุณสมบัติ ค่า และตัวอธิบายศูนย์หรือมากกว่า

  • คุณสมบัติ: วิธีที่ลูกค้าควรจัดการข้อมูล (แอพ Android) เช่น อ่าน เขียน เขียนโดยไม่มีการตอบสนอง แจ้ง และระบุ
  • มูลค่า: มูลค่าที่แท้จริงของคุณลักษณะเช่น 1089
  • คำอธิบาย: นี่คือข้อมูลเกี่ยวกับค่าเช่น หน่วย มิลลิวินาที

ออกแบบ

โอเค ตอนนี้คุณรู้แล้วว่าบริการและคุณลักษณะคืออะไร เราต้องหาวิธีออกแบบบริการและคุณลักษณะบางอย่างเพื่อรับข้อมูลที่กำหนดเองของเราและส่งจากเซิร์ฟเวอร์ GATT (Arduino) ไปยังไคลเอนต์ (แอพ Android) ลองพิจารณาอุปกรณ์ Arduino ที่รวบรวมข้อมูลจากโมดูลมาตรความเร่ง-ไจโรสโคป (AGM) เราต้องการรวบรวมการวัดไจโรสโคปและการเร่งความเร็วจากแกนเชิงพื้นที่สามแกน และเวลาที่ใช้ในการวัดเหล่านี้และส่งข้อมูลนี้ไปยังแอปพลิเคชันมือถือของเรา เราต้องการทราบเช่นกันว่าเราต้องชาร์จอุปกรณ์เมื่อใด เราจึงต้องการอ่านระดับแบตเตอรี่และส่งไปยังแอปพลิเคชันมือถือของเรา

1. เราสามารถใช้บริการและคุณลักษณะมาตรฐานใด ๆ ได้หรือไม่?

Bluetooth SIG ได้กำหนดมาตรฐานการบริการและคุณลักษณะทั่วไปหลายอย่าง ขั้นแรก ให้ตรวจสอบสิ่งเหล่านี้เพื่อดูว่าคุณสามารถเลือกใช้บริการและคุณลักษณะที่เป็นมาตรฐานใดๆ ได้หรือไม่ บริการและคุณลักษณะมาตรฐานสามารถใช้แพ็กเก็ตข้อมูลที่มีขนาดเล็กกว่าได้มาก เนื่องจาก Universally Unique Identifier (UUID) เป็น 16 บิต ในขณะที่บริการและคุณลักษณะที่กำหนดเองต้องใช้ 128 บิตสำหรับ UUID เพิ่มเติมเกี่ยวกับ UUID ในภายหลัง จากการค้นหาของเรา เราพบ "บริการแบตเตอรี่" ที่ได้มาตรฐานซึ่งมี "ระดับแบตเตอรี่" หนึ่งลักษณะ

2. แยกค่าข้อมูลทั้งหมดที่คุณต้องการส่งผ่าน BLE เป็นลักษณะและบริการ

เราสามารถแบ่งจุดข้อมูลที่กำหนดเองของเราออกเป็นเจ็ดลักษณะที่กำหนดเองภายในบริการแบบกำหนดเองเดียว เราจะเรียกบริการนี้ว่า "บริการ AGM" จะมีลักษณะ 7 ประการ ได้แก่ การเร่งความเร็ว x การเร่ง y การเร่ง z การเร่งความเร็ว x ไจโรสโคป y- ไจโรสโคป z-gyroscope และการอ้างอิงเวลา

3. กำหนดคุณสมบัติที่จำเป็นสำหรับแต่ละลักษณะ

มีคุณสมบัติหลายอย่างที่อาจมีลักษณะเฉพาะ

  1. อ่าน: ไคลเอนต์ (แอพ Android) สามารถอ่านค่าจากเซิร์ฟเวอร์ GATT (Arduino)
  2. เขียน: ลูกค้าสามารถเปลี่ยนค่าจากเซิร์ฟเวอร์ GATT
  3. ระบุ: ลูกค้าจะได้รับแจ้งหากมีการเปลี่ยนแปลงค่าจากเซิร์ฟเวอร์ GATT และลูกค้าคาดว่าจะส่งการยืนยันไปยังเซิร์ฟเวอร์ GATT
  4. แจ้งเตือน: ลูกค้าจะได้รับแจ้งหากมีการเปลี่ยนแปลงค่าจากเซิร์ฟเวอร์ GATT และลูกค้าไม่คาดว่าจะส่งการยืนยันไปยังเซิร์ฟเวอร์ GATT

สำหรับบทช่วยสอนนี้ เราจะตั้งค่าคุณลักษณะทั้งหมดของเราให้อ่าน ยกเว้นระดับแบตเตอรี่ซึ่งจะมีทั้งคุณสมบัติการแจ้งเตือนและการอ่าน

4. สร้าง UUID สำหรับบริการและคุณลักษณะที่กำหนดเองและค้นหา UUID มาตรฐาน

ดังที่ฉันได้กล่าวไว้ก่อนหน้านี้สั้น ๆ บริการและคุณลักษณะที่ได้มาตรฐานของ Bluetooth SIG ใช้ UUID 16 บิต ในขณะที่บริการและคุณลักษณะแบบกำหนดเองใช้ UUID 128 บิต ตัวอย่างเช่น ดูบริการแบตเตอรี่ที่กำหนดหมายเลขบน Bluetooth SIG หมายเลขที่กำหนด 0x180F หมายถึง UUID 128 บิต "0000180F-0000-1000-8000-00805F9B34FB" ตัวเลขสี่หลัก (16 บิต) ที่เป็นตัวหนานั้นไม่ซ้ำกับบริการหรือคุณลักษณะที่เป็นมาตรฐานโดยเฉพาะ ในขณะที่อักขระอื่นๆ จะถูกสงวนไว้ระหว่างบริการและคุณลักษณะที่เป็นมาตรฐานทั้งหมด เนื่องจากทั้งไคลเอ็นต์และเซิร์ฟเวอร์ GATT ทราบดีว่าบริการและคุณลักษณะที่เป็นมาตรฐานจะแตกต่างกันไปตามตัวเลขที่เป็นตัวหนาเท่านั้น ขนาดแพ็กเก็ตของข้อมูลจึงลดลงอย่างมาก อย่างไรก็ตาม บริการและคุณลักษณะที่กำหนดเองไม่สามารถดำเนินการภายใต้สมมติฐานเดียวกันนี้ได้

บริการและคุณลักษณะที่กำหนดเองต้องใช้ UUID 128 บิตที่ไม่ย่อแทน นี่คือตัวสร้าง UUID ออนไลน์ UUID ใดๆ ที่ไม่ใช่ UUID มาตรฐานเป็นที่ยอมรับสำหรับ UUID ที่กำหนดเอง อย่างไรก็ตาม หลักการตั้งชื่อทั่วไปคือการแสดงถึงบริการแบบกำหนดเอง 00000001-… และลักษณะเฉพาะภายในบริการแบบกำหนดเองนั้น 00000002-…

นี่คือสเปรดชีตสรุปของบริการและลักษณะเฉพาะที่เราจะนำไปใช้พร้อมกับ UUID ของบริการเหล่านั้น

ขั้นตอนที่ 2: รหัส Arduino

อัพเดท BLUEFRUIT LE SPI FRIEND

ขั้นแรก เชื่อมต่อ Adafruit Bluefruit LE SPI Friend ตามที่ระบุในคู่มือการเชื่อมต่อและเปิดเครื่องอุปกรณ์ Arduino ตรวจสอบให้แน่ใจว่าคุณพบ Adafruit Bluefruit LE SPI Friend บนอุปกรณ์ Android ของคุณเมื่อสแกนหาอุปกรณ์บลูทูธ ดาวน์โหลดแอป Bluefruit Connect เชื่อมต่อกับ Adafruit Bluefruit LE SPI Friend และอนุญาตให้อัปเดตเฟิร์มแวร์บนอุปกรณ์ ขั้นตอนนี้มีความสำคัญ ถ้าคุณไม่อัปเดตเฟิร์มแวร์ คำสั่งที่คุณออกอุปกรณ์ผ่าน Arduino อาจล้มเหลวและจะไม่มีข้อผิดพลาดที่ชัดเจนสำหรับคุณในการค้นหาว่าปัญหาคืออะไร

ที่นี่ repo ของฉันสำหรับโครงการนี้ คุณสามารถดูรหัส Arduino แบบเต็มได้ที่นี่

ภาพรวม

สิ่งสำคัญบางประการที่ควรทราบ:

  1. ในเมธอด setup() UUID ที่กำหนดเองทั้งหมดต้องมี "-" ระหว่างทุกๆ สองอักขระ ตัวอย่างเช่น "AT+GATTADDCHAR=UUID128=00-00-00-05-62-7E-47-E5-A3-FC-DD-AB-D9-7A-A9-66" จะทำงาน "AT+GATTADDCHAR=UUID128=00000005-627E-47E5-A3fCDDABD97AA966" จะไม่ทำงาน
  2. โปรดทราบว่าในเมธอด setup() "battery.begin(true);" เรียก "ble.reset();" โดยอัตโนมัติ หากคุณไม่ได้ใช้บริการแบตเตอรี่อย่างที่ฉันมี คุณต้องรีเซ็ตโมดูล ble (ใช้ "ble.reset();") โดยที่ฉันมีคำสั่ง "battery.begin(true);"
  3. ในเมธอด setup() ให้เปลี่ยน "if (!ble.begin(false))" เป็น "if (!ble.begin(true))" หากคุณต้องการดีบัก

รหัสนี้ค่อนข้างอธิบายตนเองได้ ฉันได้รวมคำอธิบายของแต่ละวิธีที่กำหนดเองแล้ว วิธีการตั้งค่าทำให้โมดูล BLE พร้อมที่จะทำหน้าที่เป็นเซิร์ฟเวอร์ GATT วิธีการวนซ้ำต้องผ่านการกวาดแบบปลอมของโมดูลวัดการหมุนวนของมาตรความเร่ง (AGM) และสร้างตัวเลขสุ่มตั้งแต่ 1 ถึง 100 สำหรับค่าเหล่านี้ แบตเตอรี่หมด 1% เพื่อจำลองการใช้แบตเตอรี่ คุณสามารถแทนที่รหัสนี้ด้วยค่าเซ็นเซอร์จริงได้อย่างง่ายดาย รหัสนี้อนุมานว่าคุณจะส่งข้อมูล AGM แบบอาร์เรย์ ซึ่งมีความยาว 6 การวัด แทนที่จะเป็นการวัดเพียงครั้งเดียว เนื่องจากการวิเคราะห์กรอบเวลาของข้อมูล AGM จะมีประโยชน์มากกว่าข้อมูลเพียงจุดเดียว หากคุณเปลี่ยนขนาดอาร์เรย์ โปรดทราบว่าจะมีการเปลี่ยนแปลงที่จำเป็นในโค้ด android studio ในการดักจับอาร์เรย์ของข้อมูล คุณต้องส่งตัวนับพร้อมกับข้อมูลที่คุณต้องการส่ง ตัวนับนี้ช่วยให้คุณค้นหาตำแหน่งที่คุณอยู่ในหน้าต่างจากแอปพลิเคชัน android studio เพื่อให้คุณสามารถรอฟังจุดข้อมูลที่ขาดหายไปในหน้าต่าง หากไม่มีตัวนับหรืออาร์เรย์ที่มีขนาดต่างกัน โปรเจ็กต์สตูดิโอ Android อาจพลาดจุดข้อมูลหรือติดค้างอยู่ในลูปเพื่อรอจุดข้อมูลที่เหลือตามที่คาดไว้

ขั้นตอนที่ 3: รหัส Android Studio

ที่นี่ repo ของฉันสำหรับโครงการนี้ คุณสามารถดูโค้ด Android Studio แบบเต็มได้ที่นี่

ภาพรวม

ฉันจะอัปเดตสิ่งนี้ต่อไปด้วยภาพรวมที่ละเอียดยิ่งขึ้นเกี่ยวกับวิธีการทำงานของรหัส Arduino และ Android โดยละเอียด… แอปทำงานได้อย่างสมบูรณ์ ดังนั้นในระหว่างนี้ อย่าลังเลที่จะดูโค้ดด้วยตัวคุณเอง

ขั้นตอนที่ 4: การสมัครขั้นสุดท้าย

การสมัครครั้งสุดท้าย
การสมัครครั้งสุดท้าย
การสมัครครั้งสุดท้าย
การสมัครครั้งสุดท้าย
การสมัครครั้งสุดท้าย
การสมัครครั้งสุดท้าย

ยินดีด้วย! แอปพลิเคชันของคุณถูกดาวน์โหลดลงในโทรศัพท์ของคุณและอุปกรณ์สวมใส่ของคุณจะถูกชาร์จและส่งข้อมูล

เปิดแอป

ในการเริ่มต้น ให้คลิกที่ไอคอนตัวเรียกใช้สำหรับแอปพลิเคชัน

ให้สิทธิ์

คุณจะต้องอนุมัติการใช้สิทธิ์บางอย่างเพื่อให้แอปทำงานได้อย่างถูกต้อง

สแกนหาอุปกรณ์

ถัดไป คลิกที่ปุ่ม "สแกน" ที่มุมซ้ายบนของแอป

เลือกอุปกรณ์สวมใส่ของคุณ

จากนั้นเลือกอุปกรณ์สวมใส่ได้จากรายการอุปกรณ์ BLE ที่พร้อมใช้งาน ชื่อของมันคือ "BLE Arduino Hardware" รับข้อมูลรอในขณะที่แอปรับข้อมูล AGM และกำหนดตำแหน่งที่ผู้ใช้ยังคงอยู่หรือเคลื่อนที่ ดูผลลัพธ์ของคุณตรวจสอบผลลัพธ์บนหน้าจอ! คลิกปุ่มซิงค์เพื่ออ่านข้อมูลอีกครั้ง

แนะนำ: