Gửi dữ liệu đến BLESerial3 bằng Bluetooth LE Android

Gửi dữ liệu đến BLESerial3 bằng Bluetooth LE Android
5 (100%) 2 votes

Có thể bạn đang loay hoay tìm cách kết nối đến module này bằng android nhưng chưa có thấy ở đâu có? Ok đây là bài viết đầu tiên ở Việt Nam viết về nó.

Về cơ bản kết nối đến các thiết bị đều giống nhau và tuỳ vào thiết bị mà có thêm vào bước xử lý đặc biệt khác.

Có 2 loại Bluetooth: Bluetooth Classic và BLE (Android 4.3 trở lên mới có BLE)

Muốn kết nối tới một thiết bị dùng Bluetooth LE thì ta cần biết địa chỉ MAC của thiết bị đó, sau đó dựa vào thiết bị đó có những service gì, tiếp theo kiểm tra có service mình cần thì dùng SERVICE_UUID để kết nối. Cuối cùng ghi hay đọc lên các đặc tính của service đó.

Tóm lại các bước ghi đó là:

  • Quét các thiết bị trong phạm vi và lọc device.
  • Kết nối bằng địa chỉ MAC
  • Khám phá các dịch vụ và khám phá các đặc tính có trong những dịch vụ đó.
  • Ghi giá trị lên đặc tính.
  • Đọc giá trị từ đặc tính.

Nào bắt đầu thôi

Thống nhất khái niệm

  • Device/Client/Module tức là cái BLESerial3.
  • Điện thoaị là thiết bị chạy Android trên 4.3.
  • Ble là Bluetooth Low energy.
  • BC là Bluetooth classic.

Định nghĩa các UUID

Chú ý UUID chữ hoa và thường có khác nhau. Nêú để chữ in hoa bạn sẽ không thể kết nối đến được device. Dưới đây là thông tin SERVICE dùng để kết nối và CHARACTERISTIC_UUID để ghi. (Module này không cho phép đọc nhé!)

Những UUID này lấy ở đâu? Khi nhà sản xuất họ làm ra phần cứng thì họ sẽ nạp cố định cho nó nên bạn là nhà phát triển bạn có thể yêu cầu họ cung cấp thông tin này cho mình.

Hình ảnh BLESerial3

BLESerial3 module

Cài đặt mã nguồn

Quét các thiết bị trong phạm vi và lọc device.

Ở đây cần tìm ra một thiết bị mình cần với điều kiện trùng SERVICE UUID. Sau khi tìm ra thì cần trả kết quả về thông qua đối tượng callback là mScanCallback. 

Thằng mScanCallback này sẽ được khởi tạo ở bước tiếp theo

Kết nối bằng địa chỉ MAC

Ở đây ta tìm thấy được thiết bị ở bước trên thì lấy địa chỉ mac của nó, sau đó thực hiện kết nối tới GATT server trên device bằng hàm connectGatt. Sau khi gọi connectGatt thì kết quả dù được hay không nó đều tiếp tục thông báo cho mình biết thông qua một callback là mGattCallBack. Thằng mGattCallBack được khởi tạo ở bước tiếp theo.

Khám phá các dịch vụ và khám phá các đặc tính

Ở bước này ta cần khởi tạo callback để lấy kết quả từ việc kết nối tới device.

Trong đối tượng callback này ta kiểm tra nếu kết nối thành công thì sẽ khám phá service của nó thông qua hàm discoverServices(); còn không sẽ báo ra không kết nối được. Nếu kết khám phá ra service thì nó sẽ tự động gọi hàm onServicesDiscovered.

Ngoài ra trong đối tượng này ta còn lắng nghe các sự kiện khác như:

onCharacteristicWrite: Hàm này sẽ kích hoạt khi ghi xong một giá trị vào device (được chạy ngay sau khi ta gọi hàm writeCharacteristic)
onCharacteristicRead: Hàm này sẽ kích hoạt khi đọc xong một giá trị từ device (được chạy ngay sau khi ta gọi hàm readCharacteristic).
onCharacteristicChanged: Hàm này sẽ kích hoạt khi một dđặc tính bị thay đổi trên device (ví dụ như nhịp tim thay đổi trên device thì trên app của bạn cũng tự động lấy được giá trị đó).

Ghi giá trị lên đặc tính

Coi như mọi thứ đã thành công và đây là bước ghi một giá trị lên device của bạn.

Bởi vì theo quy định BLE chỉ được gửi tối đa 20 bytes một lần, vậy nên nếu bạn phải gửi gói nào nặng hơn 20 bytes thì cần phải chia ra làm nhiều gói mỗi gói nhỏ hơn hoặc bằng 20 bytes. Mỗi gói gửi cách nhau tầm 150 mili giây. Mình sẽ chia sẻ đoạn code đấy cho bạn luôn  lovedog

Đọc giá trị từ đặc tính

Do module này nó không cho phép đọc nên mình sẽ không làm thực tế, nhưng để dùng cho các dự án khác thì mình nghĩ đoạn code này bạn có thể tham khảo.

Dừng việc quét thiết bị

Sau khi tìm thấy thì dừng việc quét lại nhé không thì hao mòn pin điện thoại đấy.

Trên đây là tổng quan việc kết nối và gửi dữ liệu thông qua bluetooth năng lượng thấp, mong rằng với tài liệu ít ỏi này sẽ giúp ích được cho công việc của bạn. Nếu bạn muốn biết sâu hơn thì có lẽ nên nghiên cứu thêm trên mạng hoặc mua sách. Bạn có bất kỳ đóng góp nào hãy bình luận để chúng ta cùng trao đổi.

Xin cám ơn.

Tặng cho bạn tất cả các bài viết mình đã đọc trong khi làm việc với ble

– Quyển sách rất hay nhưng mất phí http://www.althosbooks.com/intobleb.html
– Các giao thức và thuộc tính https://www.ncbi.nlm.nih.gov/pmc/articles/PMC3478807/
– Phân biệt các profile high level https://www.philips.co.in/c-f/XC000008687
– Ví dụ hay về cả server và client: http://nilhcem.com/android-things/bluetooth-low-energy

Các bài viết không xem thì tiếc:

Chia sẻ là sexy

Đô Trịnh

Một lập trình viên vui vẻ, hòa đồng, luôn sống tích cực và anh ấy quay tay khỏe và khéo trong môn bi lắc :) Xem thêm thông tin tại trang -> Giới thiệu

Bình luận qua khung của website

Bình luận lời hay ý đẹp!

Thảo luận

  Subscribe  
Nhận thông báo: