Mục lục:

Xây dựng Trình theo dõi chuyển động có thể đeo (BLE Từ Arduino đến Ứng dụng Android Studio tùy chỉnh): 4 bước
Xây dựng Trình theo dõi chuyển động có thể đeo (BLE Từ Arduino đến Ứng dụng Android Studio tùy chỉnh): 4 bước

Video: Xây dựng Trình theo dõi chuyển động có thể đeo (BLE Từ Arduino đến Ứng dụng Android Studio tùy chỉnh): 4 bước

Video: Xây dựng Trình theo dõi chuyển động có thể đeo (BLE Từ Arduino đến Ứng dụng Android Studio tùy chỉnh): 4 bước
Video: Biến hình khi văn phòng Schannel có khách đến 2024, Tháng mười một
Anonim
Xây dựng Trình theo dõi chuyển động có thể đeo (BLE Từ Arduino đến Ứng dụng Android Studio tùy chỉnh)
Xây dựng Trình theo dõi chuyển động có thể đeo (BLE Từ Arduino đến Ứng dụng Android Studio tùy chỉnh)

Bluetooth Low Energy (BLE) là một dạng giao tiếp Bluetooth công suất thấp. Các thiết bị đeo được, chẳng hạn như quần áo thông minh mà tôi giúp thiết kế tại Prediction Wear, phải hạn chế mức tiêu thụ điện năng ở mọi nơi có thể để kéo dài tuổi thọ pin và thường xuyên sử dụng BLE. Nhóm Sở thích Đặc biệt Bluetooth (SIG) xác định một số thông số kỹ thuật mà một thiết bị phải triển khai để tương tác với thiết bị Bluetooth, mà họ gọi là "cấu hình". Hầu hết các cấu hình ứng dụng sử dụng Cấu hình Thuộc tính Chung (GATT) để gửi dữ liệu qua liên kết BLE. Có ba khái niệm cơ bản trong BLE: hồ sơ, dịch vụ và thuộc tính.

Bluetooth SIG đã chuẩn hóa nhiều cấu hình, dịch vụ và thuộc tính chung. Tuy nhiên, khi tạo phần cứng tùy chỉnh, bạn thường phải tạo các dịch vụ và thuộc tính tùy chỉnh và không có nhiều hướng dẫn. Để làm cho vấn đề trở nên khó khăn hơn, Adafruit không cung cấp bất kỳ hướng dẫn nào về việc thiết kế các ứng dụng di động để ghép nối với các mô-đun BLE của họ và mã nguồn cho các ứng dụng của họ rất khó để thiết kế ngược lại.

Hướng dẫn này nhằm mục đích giải thích:

  1. Cách thiết kế các đặc điểm và dịch vụ GATT tùy chỉnh
  2. Cách lập trình Adafruit Bluefruit LE SPI Friend để hoạt động như một máy chủ GATT cho các dịch vụ và đặc điểm tùy chỉnh này
  3. Cách lập trình thiết bị Android hoạt động như ứng dụng khách GATT để đọc dữ liệu từ máy chủ GATT

Hướng dẫn này không nhằm mục đích có thể dịch thành một ứng dụng sẵn sàng sản xuất - đây chỉ đơn giản là phần giới thiệu về BLE.

Đọc nền:

  • Tài liệu về Adafruit Bluefruit LE SPI Friend
  • Nếu bạn không quen với GATT hoặc BLE

Quân nhu

  • 1x - Thiết bị Arduino (Tôi đang sử dụng UNO cho hướng dẫn này)
  • 1x - Adafruit Bluefruit LE SPI Friend
  • 8x - dây nhảy nam sang nam
  • Thiết bị hàn cơ bản (đến chân tiêu đề hàn trên SPI Friend)
  • Máy tính (để lập trình thiết bị Arduino và thiết bị Android)

Bước 1: Thiết kế các dịch vụ & đặc điểm tùy chỉnh

GIỚI THIỆU

Bài viết này thực hiện một công việc tuyệt vời giải thích cách thiết kế các dịch vụ và đặc điểm tùy chỉnh. Tôi thực sự khuyên bạn nên đọc qua bài viết này. Tôi cung cấp một cái nhìn tổng quan rất đơn giản dưới đây mà bỏ qua sự tinh tế để ủng hộ sự đơn giản.

Dịch vụ GATT là một tập hợp các đặc điểm.

Đặc điểm GATT chứa một thuộc tính, một giá trị và không hoặc nhiều bộ mô tả.

  • Thuộc tính: cách dữ liệu sẽ được xử lý bởi ứng dụng khách (Ứng dụng Android), ví dụ: đọc, viết, viết mà không cần phản hồi, thông báo, và chỉ ra.
  • Giá trị: giá trị thực của đặc tính, ví dụ: 1089
  • Bộ mô tả: đây là thông tin về giá trị, ví dụ: đơn vị, mili giây

THIẾT KẾ

Được rồi, bây giờ bạn đã biết dịch vụ và đặc điểm là gì, chúng tôi cần tìm ra cách thiết kế một số dịch vụ và đặc điểm để lấy dữ liệu tùy chỉnh của chúng tôi và gửi nó từ máy chủ GATT của chúng tôi (Arduino) đến máy khách (Ứng dụng Android). Hãy xem xét một thiết bị Arduino đang thu thập dữ liệu từ mô-đun con quay hồi chuyển-gia tốc kế (AGM). Chúng tôi muốn thu thập các phép đo con quay hồi chuyển và gia tốc từ ba trục không gian và thời gian các phép đo này được thực hiện và truyền dữ liệu này tới ứng dụng di động của chúng tôi. Chúng tôi cũng muốn biết khi nào chúng tôi cần sạc thiết bị, vì vậy chúng tôi muốn đọc mức pin và truyền mức đó đến ứng dụng di động của mình.

1. Chúng tôi có thể sử dụng bất kỳ dịch vụ & đặc điểm tiêu chuẩn nào không?

Bluetooth SIG đã tiêu chuẩn hóa nhiều dịch vụ và đặc điểm chung. Trước tiên, hãy kiểm tra những điều này để xem liệu bạn có thể đồng chọn bất kỳ dịch vụ và đặc điểm tiêu chuẩn nào hay không. Các dịch vụ và đặc điểm tiêu chuẩn có thể sử dụng các gói dữ liệu nhỏ hơn nhiều vì Mã định danh duy nhất (UUID) là 16 bit trong khi các dịch vụ và đặc điểm tùy chỉnh phải sử dụng 128 bit cho UUID của chúng. Thông tin thêm về UUID sau này. Từ tìm kiếm của chúng tôi, chúng tôi đã tìm thấy một "dịch vụ pin" được tiêu chuẩn hóa có chứa một "mức pin" đặc trưng.

2. Tách tất cả các giá trị dữ liệu bạn muốn gửi qua BLE thành các đặc điểm và dịch vụ

Chúng tôi có thể chia nhỏ các điểm dữ liệu tùy chỉnh của mình thành bảy đặc điểm tùy chỉnh trong một dịch vụ tùy chỉnh. Chúng tôi sẽ gọi dịch vụ này là "dịch vụ AGM". Nó sẽ chứa 7 đặc điểm: gia tốc x, gia tốc y, gia tốc z, con quay hồi chuyển x, con quay hồi chuyển y, con quay hồi chuyển z và một tham chiếu thời gian.

3. Xác định các thuộc tính cần thiết cho mỗi đặc tính

Có một số thuộc tính mà một đặc tính có thể có.

  1. Đọc: Máy khách (Ứng dụng Android) có thể đọc giá trị từ Máy chủ GATT (Arduino)
  2. Viết: Máy khách có thể thay đổi giá trị từ Máy chủ GATT
  3. Cho biết: Khách hàng sẽ được thông báo nếu một giá trị thay đổi từ Máy chủ GATT và Khách hàng sẽ gửi xác nhận đến Máy chủ GATT
  4. Thông báo: Khách hàng sẽ được thông báo nếu một giá trị thay đổi từ Máy chủ GATT và Khách hàng sẽ không gửi xác nhận đến Máy chủ GATT

Đối với hướng dẫn này, chúng tôi sẽ đặt tất cả các đặc điểm của chúng tôi để đọc, ngoại trừ mức pin sẽ có cả thuộc tính thông báo và đọc.

4. Tạo UUID cho các dịch vụ và đặc điểm tùy chỉnh và tìm các UUID tiêu chuẩn

Như tôi đã đề cập ngắn gọn trước đó, các đặc tính và dịch vụ được tiêu chuẩn hóa của Bluetooth SIG sử dụng UUID 16 bit trong khi các đặc điểm và dịch vụ tùy chỉnh sử dụng UUID 128 bit. Ví dụ: xem số chỉ định của dịch vụ pin trên Bluetooth SIG. Số được gán 0x180F đại diện cho 128 bit UUID "0000180F-0000-1000-8000-00805F9B34FB". Bốn chữ số (16 bit) in đậm là duy nhất cho dịch vụ hoặc đặc tính được tiêu chuẩn hóa cụ thể trong khi các ký tự khác được bảo toàn giữa tất cả các dịch vụ và đặc tính được tiêu chuẩn hóa. Vì cả máy khách và máy chủ GATT đều biết rằng các dịch vụ và đặc tính được tiêu chuẩn hóa chỉ khác nhau bởi các chữ số được in đậm, kích thước gói dữ liệu có thể được giảm đáng kể. Tuy nhiên, các dịch vụ và đặc điểm tùy chỉnh không thể hoạt động theo cùng một giả định này.

Thay vào đó, các dịch vụ và đặc điểm tùy chỉnh phải sử dụng UUID 128 bit chưa được viết tắt. Đây là một trình tạo UUID trực tuyến. Bất kỳ UUID nào khác với UUID chuẩn hóa đều có thể chấp nhận được đối với UUID tùy chỉnh. Tuy nhiên, quy ước đặt tên điển hình là biểu thị một dịch vụ tùy chỉnh 00000001-… và các đặc điểm trong dịch vụ tùy chỉnh đó 00000002-…

Dưới đây là bảng tính tóm tắt về các dịch vụ và đặc điểm mà chúng tôi sẽ triển khai cùng với UUID của chúng

Bước 2: Mã Arduino

CẬP NHẬT BẠN BÈ LE SPI BLUEFRUIT

Đầu tiên, kết nối Adafruit Bluefruit LE SPI Friend như họ chỉ định trong hướng dẫn kết nối và bật nguồn thiết bị Arduino. Đảm bảo bạn có thể tìm thấy Adafruit Bluefruit LE SPI Friend trên thiết bị Android của mình khi quét tìm thiết bị Bluetooth. Tải xuống ứng dụng Bluefruit Connect, kết nối với Adafruit Bluefruit LE SPI Friend và cho phép nó cập nhật chương trình cơ sở trên thiết bị. Bước này là quan trọng. Nếu bạn không cập nhật chương trình cơ sở, các lệnh bạn đưa ra thiết bị thông qua Arduino có thể sẽ bị lỗi và sẽ không có lỗi rõ ràng để bạn phát hiện ra vấn đề là gì.

Đây là repo của tôi cho dự án này. Bạn có thể xem toàn bộ mã Arduino tại đây.

TỔNG QUAT

Một số điều quan trọng cần lưu ý:

  1. Trong phương thức setup (), tất cả các UUID tùy chỉnh phải chứa "-" giữa mỗi hai ký tự. Ví dụ: "AT + GATTADDCHAR = UUID128 = 00-00-00-05-62-7E-47-E5-A3-FC-DD-AB-D9-7A-A9-66" sẽ hoạt động. "AT + GATTADDCHAR = UUID128 = 00000005-627E-47E5-A3fCDDABD97AA966" sẽ không hoạt động.
  2. Lưu ý rằng trong phương thức setup (), "pin.begin (true);" gọi "ble.reset ();" tự động. Nếu bạn không sử dụng dịch vụ pin như tôi có, bạn cần đặt lại mô-đun ble (sử dụng "ble.reset ();") trong đó tôi có lệnh "pin.begin (true);".
  3. Trong phương thức setup (), hãy thay đổi "if (! Ble.begin (false))" thành "if (! Ble.begin (true))" nếu bạn muốn gỡ lỗi.

Mã này khá dễ hiểu. Tôi đã bao gồm các mô tả của từng phương pháp tùy chỉnh. Phương pháp thiết lập giúp mô-đun BLE sẵn sàng hoạt động như máy chủ GATT. Phương pháp vòng lặp đi qua một lần quét giả mô-đun con quay hồi chuyển gia tốc kế (AGM) và tạo ra một số ngẫu nhiên từ 1 đến 100 cho các giá trị này. Pin bị cạn 1% để mô phỏng việc sử dụng pin. Bạn có thể thay thế mã này bằng các giá trị cảm biến thực tế một cách dễ dàng. Mã này giả định rằng bạn sẽ truyền một mảng dữ liệu AGM, dài 6 phép đo, thay vì một phép đo duy nhất vì việc phân tích một cửa sổ dữ liệu AGM có thể hữu ích hơn một điểm dữ liệu. Nếu bạn thay đổi kích thước mảng, hãy lưu ý rằng sẽ có những thay đổi cần thiết trong mã studio android. Để nắm bắt một mảng dữ liệu, bạn phải chuyển một bộ đếm cùng với dữ liệu bạn định gửi. Bộ đếm này cho phép bạn tìm thấy bạn đang ở đâu trong cửa sổ từ ứng dụng android studio để bạn có thể đợi để lắng nghe các điểm dữ liệu bị thiếu trong cửa sổ. Nếu không có bộ đếm hoặc với một mảng có kích thước khác, dự án studio android sẽ bỏ lỡ các điểm dữ liệu hoặc sẽ bị mắc kẹt trong một vòng lặp chờ đợi các điểm dữ liệu còn lại mà nó mong đợi.

Bước 3: Mã Android Studio

Đây là repo của tôi cho dự án này. Bạn có thể xem mã Android Studio đầy đủ tại đây.

TỔNG QUAT

Tôi sẽ tiếp tục cập nhật điều này với tổng quan kỹ lưỡng hơn về cách hoạt động chi tiết của mã arduino và android… Ứng dụng này có đầy đủ chức năng nên hãy tự xem mã trong thời gian chờ đợi.

Bước 4: Đơn đăng ký cuối cùng

Đơn cuối cùng
Đơn cuối cùng
Đơn cuối cùng
Đơn cuối cùng
Đơn cuối cùng
Đơn cuối cùng

Xin chúc mừng! Ứng dụng của bạn được tải xuống điện thoại của bạn và thiết bị đeo của bạn được sạc và truyền dữ liệu.

KHỞI ĐỘNG ỨNG DỤNG

Để bắt đầu, hãy nhấp vào biểu tượng trình khởi chạy cho ứng dụng.

CẤP PHÉP

Bạn sẽ cần phê duyệt việc sử dụng một số quyền để ứng dụng hoạt động bình thường.

QUÉT CHO THIẾT BỊ

Tiếp theo, nhấp vào nút "Quét" ở góc trên cùng bên trái của ứng dụng.

CHỌN THIẾT BỊ CÓ THỂ DÙNG ĐƯỢC CỦA BẠN

Tiếp theo, chọn thiết bị có thể đeo của bạn từ danh sách các thiết bị BLE hiện có. Tên của nó là "BLE Arduino Hardware". NHẬN DỮ LIỆU Chờ trong khi ứng dụng lấy dữ liệu AGM và xác định vị trí của người dùng. XEM KẾT QUẢ CỦA BẠN Kiểm tra kết quả trên màn hình! Nhấp vào nút đồng bộ hóa để đọc dữ liệu khác.

Đề xuất: