สารบัญ:
- เสบียง
- ขั้นตอนที่ 1: ออกแบบบริการและคุณลักษณะที่กำหนดเอง
- ขั้นตอนที่ 2: รหัส Arduino
- ขั้นตอนที่ 3: รหัส Android Studio
- ขั้นตอนที่ 4: การสมัครขั้นสุดท้าย
วีดีโอ: สร้าง Wearable Motion Tracker (BLE จาก Arduino ไปยัง Custom Android Studio App): 4 ขั้นตอน
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:02
Bluetooth Low Energy (BLE) เป็นรูปแบบหนึ่งของการสื่อสาร Bluetooth ที่ใช้พลังงานต่ำ อุปกรณ์สวมใส่ได้ เช่น เสื้อผ้าอัจฉริยะที่ฉันช่วยออกแบบที่ Predictive Wear ต้องจำกัดการใช้พลังงานในทุกที่ที่ทำได้เพื่อยืดอายุการใช้งานแบตเตอรี่ และใช้ BLE บ่อยครั้ง Bluetooth Special Interest Group (SIG) กำหนดข้อกำหนดหลายอย่างที่อุปกรณ์ควรใช้เพื่อโต้ตอบกับอุปกรณ์ Bluetooth ซึ่งเรียกว่า "โปรไฟล์" โปรไฟล์แอปพลิเคชันส่วนใหญ่ใช้โปรไฟล์แอตทริบิวต์ทั่วไป (GATT) เพื่อส่งข้อมูลผ่านลิงก์ BLE มีแนวคิดพื้นฐานสามประการใน BLE ได้แก่ โปรไฟล์ บริการ และคุณลักษณะ
Bluetooth SIG มีมาตรฐานโปรไฟล์ บริการ และคุณลักษณะทั่วไปมากมาย อย่างไรก็ตาม เมื่อสร้างฮาร์ดแวร์แบบกำหนดเอง มักจะมีความจำเป็นต้องสร้างบริการและแอตทริบิวต์แบบกำหนดเอง และมีบทช่วยสอนไม่มากนัก เพื่อทำให้เรื่องยากขึ้น Adafruit ไม่ได้ให้คำแนะนำใดๆ เกี่ยวกับการออกแบบแอปพลิเคชันมือถือเพื่อจับคู่กับโมดูล BLE และซอร์สโค้ดสำหรับแอปพลิเคชันนั้นยากต่อการทำวิศวกรรมย้อนกลับ
บทช่วยสอนนี้มีจุดมุ่งหมายเพื่ออธิบาย:
- วิธีการออกแบบบริการและลักษณะเฉพาะของ GATT
- วิธีตั้งโปรแกรม Adafruit Bluefruit LE SPI Friend ให้ทำหน้าที่เป็นเซิร์ฟเวอร์ GATT สำหรับบริการและคุณลักษณะที่กำหนดเองเหล่านี้
- วิธีตั้งโปรแกรมอุปกรณ์ 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. กำหนดคุณสมบัติที่จำเป็นสำหรับแต่ละลักษณะ
มีคุณสมบัติหลายอย่างที่อาจมีลักษณะเฉพาะ
- อ่าน: ไคลเอนต์ (แอพ Android) สามารถอ่านค่าจากเซิร์ฟเวอร์ GATT (Arduino)
- เขียน: ลูกค้าสามารถเปลี่ยนค่าจากเซิร์ฟเวอร์ GATT
- ระบุ: ลูกค้าจะได้รับแจ้งหากมีการเปลี่ยนแปลงค่าจากเซิร์ฟเวอร์ GATT และลูกค้าคาดว่าจะส่งการยืนยันไปยังเซิร์ฟเวอร์ GATT
- แจ้งเตือน: ลูกค้าจะได้รับแจ้งหากมีการเปลี่ยนแปลงค่าจากเซิร์ฟเวอร์ 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 แบบเต็มได้ที่นี่
ภาพรวม
สิ่งสำคัญบางประการที่ควรทราบ:
- ในเมธอด 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" จะไม่ทำงาน
- โปรดทราบว่าในเมธอด setup() "battery.begin(true);" เรียก "ble.reset();" โดยอัตโนมัติ หากคุณไม่ได้ใช้บริการแบตเตอรี่อย่างที่ฉันมี คุณต้องรีเซ็ตโมดูล ble (ใช้ "ble.reset();") โดยที่ฉันมีคำสั่ง "battery.begin(true);"
- ในเมธอด 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 และกำหนดตำแหน่งที่ผู้ใช้ยังคงอยู่หรือเคลื่อนที่ ดูผลลัพธ์ของคุณตรวจสอบผลลัพธ์บนหน้าจอ! คลิกปุ่มซิงค์เพื่ออ่านข้อมูลอีกครั้ง
แนะนำ:
PIR Motion Sensor จาก Arduino: 4 ขั้นตอน
Arduino Based PIR Motion Sensor: ด้วยความช่วยเหลือของโครงการนี้ คุณสามารถควบคุมสถานะสูงและความไวของ PIR
สร้าง Solar Tracker อัตโนมัติด้วย Arduino UNO: 8 ขั้นตอน
การสร้าง Solar Tracker อัตโนมัติด้วย Arduino UNO: พลังงานแสงอาทิตย์เป็นที่แพร่หลายมากขึ้นทั่วโลก ในปัจจุบัน มีการวิจัยหลายวิธีเพื่อให้แผงโซลาร์เซลล์มีพลังงานมากขึ้น ลดการพึ่งพาเชื้อเพลิงฟอสซิลและถ่านหินของเรา วิธีหนึ่งในการทำเช่นนี้คือการเคลื่อนย้ายแผง ก
สร้าง Custom in Ear Monitors! (DIY IEM): 10 ขั้นตอน (พร้อมรูปภาพ)
ปรับแต่งหูฟังในหู! (DIY IEM): จอภาพอินเอียร์แบบกำหนดเอง (CIEM) ที่ใช้กันอย่างแพร่หลายโดยนักดนตรีและนักแสดง หูฟังเหล่านี้ได้รับการติดตั้งมากับหูของแต่ละคนโดยเฉพาะเพื่อการแยกส่วนและความสบายที่เหนือชั้น มันเริ่มต้นเมื่อฉันต้องการ CIEM สักคู่ เพียงเพื่อให้รู้ว่าราคาสำหรับหนึ่งมีพอ
สร้าง iPod Nano Dock จาก iPod Mini Dock: 5 ขั้นตอน
สร้าง iPod Nano Dock จาก iPod Mini Dock: อธิบายวิธีการแปลง Dock เก่าสำหรับ iPod mini เพื่อใช้งานกับ iPod nano (ทั้งรุ่นแรกและรุ่นที่สองเพียงครั้งเดียว) เพราะอะไร ถ้าคุณชอบให้ฉันมี iPod มินิและเอาแท่นเสียบที่เหลือ ตอนนี้ซื้อ iPod nano และค่อนข้างบาง
สร้าง External HDD จาก External CD/RW ตัวเก่า: 5 ขั้นตอน
สร้าง HDD ภายนอกจาก CD/RW ภายนอกแบบเก่า: การแปลง cd/rw ภายนอกแบบเก่าไปเป็นฮาร์ดไดรฟ์ภายนอกที่มีประโยชน์มากกว่า วัสดุ1-cd/rw ภายนอก (ควรเป็นประเภทกล่องมากกว่า)1-ฮาร์ดไดรฟ์ (ต้องตรงกับขั้วต่อภายในของเคสไดรฟ์ ต้องฟอร์แมต/ระบบ)1-sm