Thứ Sáu, 16 tháng 9, 2016

Estimote Beacon Tutorial

Estimote Beacon Tutorial

Tác giả: Nguyễn Tấn Phát

Mục đích: Chúng tôi giới thiệu bài viết này nhằm cung cấp kiến thức chi tiết về cách cấu hình và sử dụng công nghệ beacon. Việc này sẽ hỗ trợ cho chúng ta trong việc xây dựng các ứng dụng chạy trên thiết bị smartphone sử dụng hệ điều hành Android. Bên cạnh đó, chúng tôi cũng giới thiệu một số ứng dụng cụ thể áp dụng những kiến thức mà chúng tôi giới thiệu để quí vị có thể tiếp cận công nghệ này một cách hiệu quả và ứng dụng trong việc xây dựng các ứng dụng của riêng quí vị.

1           Yêu cầu

·         Android Studio Tool dùng để lập trình ứng dụng Android

·         Smart phone sử dụng hệ điều hành Android từ phiên bản 4.3 trở lên

·         Thiết bị Estimote Beacon. http://estimote.com/?gclid=COPn5bbVgs8CFUyWvQodjLQBYA

·         Tài khoản Estimote Cloud, tài khoản này sẽ được cung cấp khi quí vị sở hữu thiết bị Estimote Beacon

2           Estimote Beacon là gì?

·         Estimote Beacon là một thiết bị nhỏ có thể gắn vào bất kỳ vật thể hay đối tượng bất kỳ hoặc đặt tại một vị trí xác định. Thiết bị này có 02 cảm biến, một cảm biến gia tốc và một cảm biến nhiệt độ

·         Thiết bị này sử dụng Bluetooth 4.0 Smart (BLE – Bluetooth Low Energy). Protocol BLE được hỗ trợ từ Android 4.3 trở đi

·         Estimote Beacon phát ra sóng radio với tầm phát sóng tối đa 70m trong điều kiện lý tưởng. Trong thực tế, tầm phát song của Beacon ở điều kiện tốt nhất tầm 40 – 50m.

·         Các thiết bị smartphone có thể nhận biết được sóng của các beacon và các thiết bị có thể tính toán khoảng cách tương đối từ điện thoại đến beacon dựa vào cường độ tín hiệu nhận được từ beacon phát ra. Các thiết bị beacon không phát sóng liên tục, thay vào đó sẽ có một khoảng thời gian ngắn thiết bị này sẽ ngưng phát sóng. Chính vì thế, nếu chúng ta muốn nhận được tín hiệu của các beacon một cách ổn định nhất, chúng ta cần phải cấu hình cho thời gian nghỉ giữa 02 lần phát sóng càng ngắn càng tốt. Tuy nhiên, điều này sẽ làm hời lượng pin của beacon giảm đi khá nhiều.

·         Estimote Beacon có 2 phiên bản: Estimote Proximity Beacons và Estimote Location Beacons

·         Trong bài viết này, tôi sẽ hướng dẫn cấu hình và sử dụng thiết bị Estimote Proximity Beacons

3           Cách cấu hình Estimote Beacon

·         Đầu tiên, chúng ta cần có một thiết bị Estimote Beacon và một tài khoản Estimote Cloud để có thể cấu hình.

·         Estimote cung cấp một phần mềm cấu hình (phần mềm được download tại địa chỉ https://play.google.com/store/apps/details?id=com.estimote.apps.main&hl=en)

·         Các thuôc tính quan trọng cần lưu ý khi cấu hình là Advertising IntervalTransmit Power.

Thuộc tính

Giải thích

Advertising Interval

Tần suất phát sóng của beacon

Transmit Power

Tầm phát sóng của beacon

 

§  Cấu hình Advertising Interval

           

 

 

 

 

 

 

 

 

 

 

 

 

 

 

o   Khoảng thời gian cấu hình càng ngắn thì beacon sẽ phát sóng càng nhanh và smartphone có thể nhận diện beacon càng nhanh. Tuy nhiên, điều này gây ảnh hưởng tới thời lượng pin.

§  Cấu hình Transmit Power

o   Tầm phát sóng của beacon càng rộng thì các thiết bị smartphone sẽ có thể dễ dàng nhận diện được tín hiệu của beacon và ngược lại. Tuy nhiên, nếu thiết lập tầm phát sóng của beacon luôn luôn ở trạng thái High thì sẽ ảnh hưởng rất nhiều đến thời lượng pin của beacon.

o   Ở trạng thái High: beacon sẽ có thể phát sóng tối đa ~70m

o   Ở trạng thái Low: beacon sẽ có thể phát sóng tối đa ~1.5m

§  Ngoài ra Estimate Beaon còn có các thông số UUID, Major và Minor. Các thông số này được sử dụng để nhận diện beacon và beacon cho phép tùy chỉnh chúng tùy theo mục đích sử dụng.

o   Tất cả mọi Estimote Beacon đều có một UUID mặc định đó chính là B9407F30-F5F8-466E-AFF9-25556B57FE6D. Tuy nhiên, beacon cho phép người sử dụng cấu hình lại thông số này.

o   Áp dụng nội dung nêu trên vào một hệ thống chuỗi cửa hàng như sau:

Vị trí cửa hàng

Quận 1

Quận 2

Quận 3

UUID

B9407F30-F5F8-466E-AFF9-25556B57FE6D

Major

1

2

3

Minor

Quần áo

1

1

1

Giày dép

2

2

2

Phụ kiện

3

3

3

4           Xây dựng ứng dụng Android tương tác với thiết bị Estimote Beacon

·         Đầu tiên, chúng ta sẽ tìm hiểu 02 thuật ngữ Region Monitoring và Ranging mà Estimote cung cấp.

§  Region Monitoring: hành động nhận biết được một thiết bị smartphone có đi vào vùng phát sóng của một beacon hay smart phone đi ra khỏi vùng phát sóng của một beacon.

§  Ranging: hành động nhận biết được một thiết bị smartphone đang ở gần hay xa đối với thiết bị Estimote beacon.

·         Xây dựng ứng dụng Monitoring Beacon

o   Ứng dụng Monitoring Beacon nhằm mục đích xác định điện thoại di động smart phone đang nằm trong hay ngoài vùng phủ sóng của beacon. Các bước thực hiện như sau

o   Bước 1: Tạo một ứng dụng Android sử dụng tool Android Studio

§  Chọn SDK là 4.4

§  Tạo một Empty Activity đặt tên là MainActivity

o   Bước 2: Import Estimote SDK vào build.gradle

o   Bước 3: Tạo class Beacon để chứa thông tin của beacon

o   Bước 4: Tạo class BeaconNotificationsManager để quản lý thông báo khi monitor beacon

§  Trong bước này, BeaconManager class được cung cấp để để quản lý các tương tác với thiết bị Estimote Beacon. Class này cho phép chúng ta có thể thực hiện monitoring và ranging beacon.

§  Ở ví dụ trên, chúng ta đang thực hiện việc monitor beacon sử dụng class này thông qua phương thức setMonitoringListener.

§  Ngoài ra, chúng ta sử dụng phương thức addNotitification để đưa nội dung thông báo và phương thức showNotification để hiện nội dung thông báo cho người dùng sử dụng smartphone.

o   Bước 5: Tạo một class MyApplication để authenticate việc sử dụng các thiết bị Estimote Beacon với Estimote Cloud trong ứng dụng thông qua Appication ID và Application Token

§  Application ID và Application Token sẽ được lấy từ Estimote Cloud

§  DEFAULT_UUID: UUID mặc định của mọi beacon.

§  Phương thức startMonitoring được sử dụng để bắt đầu việc phát hiện beacon có nằm trong vùng của beacon hay là không

§  APP_ID và APP_TOKEN: 02 thông số mà Estimote Cloud dùng để authenticate quyền sử dụng Estimote Beacon thông qua bộ SDK của Estimote.

·         Để lấy được APP_ID và APP_TOKEN ta cần tạo một ứng dụng trên Estimote Cloud thông qua tài khoản của mình.

o   Vào Estimote cloud, chọn Apps, click chọn Add New App

o   Click chọn Blank

o   Click chọn Java on Android…

·         Sau khi có được APP_ID và APP_TOKEN, chúng ta sẽ thay các giá trị này vào code để ứng dụng có thể thực thi

·         class MyApplication được cập nhật như sau

 

o   Bước 6: Kích hoạt Bluetooth từ class MainActivity

§  Tạo Layout cho Activity

§  Bổ sung vào Android Manifest

o   Bước 7: Thực hiện Build & Run Project, chúng ta sẽ nhận được kết quả như sau

 

Khi đi vào cùng phát sóng của Estimote Beacon

 

 

Khi ra khỏi vùng phát sóng của Estimote Beacon

 

 

o   Chúng ta vừa hoàn tất xong việc tạo ứng dụng Monitoring Beacon để áp dụng các khái niệm liên quan đến việc xác định thiết bị smart phone đang nằm ngoài hay nằm trong vùng phủ sóng của beacon

·         Xây dựng ứng dụng Ranging Beacon

o   Ứng dụng Ranging Beacon được xây dụng với mục đích phát hiện các beacon đang xuất hiện xung quanh điện thoại smart phone theo các bước như sau

o   Bước 1Bước 2  thực hiện tương tự như mục “Xây dựng ứng dụng Monitoring Beacon”

o   Bước 3: Tạo một class MyApplication để authenticate việc sử dụng các thiết bị Estimote Beacon với Estimote Cloud trong ứng dụng thông qua Appication ID và Application Token

Application ID và Application Token sẽ được lấy từ Estimote Cloud

§  Để lấy được APP_ID và APP_TOKEN, chúng ta sẽ thực hiện tương tự như các bước trong Bước 5 của mục “Xây dựng ứng dụng Monitoring Beacon”

§  Sau khi lấy được APP_ID và APP_TOKEN, chúng ta sẽ thay vào code cập nhật class MyApplication như sau

o   Bước 4: Tạo layout cho Activity

§  Tạo layout cho một row trong ListView

§  Cấu hình Adapter cho ListView

§  Estimote SDK cung cấp phương thức computeAccuracy nhằm hỗ trợ người sử dụng lấy khoảng cách tương đối giữ thiết bị smartphone và Estimote Beaon.

 

o   Bước 5: Kích hoạt Bluetooth từ class MainActivity và cấu hình ListView

§  Khai báo ListView

§  Khởi tạo ListView và setup layout cho ListView

§  Thông qua phương thức setRangingListener, chúng ta có thể lấy các beacon nằm trong vùng phát sóng thông qua object beaconManager.

§  Thứ tự sắp xếp của các beacon trong object beaconManager sẽ được sắp xếp theo thứ tự tăng dần về khoảng cách giữa các beacon và smartphone.

 

 

§  Thông qua phương thức checkWithDefaultDialogs của đối tượng SystemRequirmentsChecker do EstimoteSDK cung cấp, chúng ta sẽ cấu hình bật/tắt Bluetooth của thiết bị smartphone.

·         ALL_ESTIMOTE_BEACON_REGION: một vùng chứa beacon với giá trị mặc định Default UUID (B9407F30-F5F8-466E-AFF9-25556B57FE6D).

·         Thông qua phương thức startRanging, smartphone có thể phát hiện xung quanh những thiết bị beacon nào có Default UUID và smartphone có thể ngừng scan xung quanh khi ứng dụng không còn hoạt động thông qua hàm stopRangingdisconnect.

§  Cập nhật Android Manifest

o   Bước 6: Build & Run Project, chúng ta sẽ có được kết quả như sau

 

Khi phát hiện được 1 Estimote Beacon

 

 

Khi phát hiện được 4 Estimote Beacon

    

 

o   Chúng ta vừa hoàn tất xong việc tạo ứng dụng Ranging Beacon để áp dụng các khái niệm liên quan đến việc dùng smart phone để xác định các beacon đang xuất hiện gần smartphone

·         Xây dựng ứng dụng sử dụng 02 cảm biến của Estimote Beacon

o   Từ 02 ứng dụng nêu trên, chúng ta đã có thể phát hiện được các beacon mà smartphone nằm trong vùng phát sóng.

o   Chúng ta cập nhật thêm phương thức createOnItemClickListener và cấu hình cho ListView để hỗ trợ tương tác khi người sử dụng bấm vào một row thông qua hàm setOnItemClickListener.

§  Khi bấm vào một dòng trong ListView ta sẽ kết nối với beacon đó để có thể sử dụng hai cảm biến, đó là cảm biến chuyển động và cảm biến nhiệt độ.

o   Tạo một Activity mới có tên là SensorActivity để quản lý cách thông số của các cảm biến, đồng thời tạo layout và khai báo Activity đó trong Android Manifest.

§  Tạo Layout:

§  Cập nhật Android Manifest:

§  Khi chuyển qua Activity này, chúng ta sẽ nhận được Mac Address của Estimote Beacon cần được kết nối.

§  Kết nối với Estimote Beacon sẽ được thiết lập thông qua object BeaconConnection và được hiện thực thông qua phương thức bindingBeaconConnection

·         Thông qua phương thức authenticate của object BeaconConnection, chúng ta sẽ mở kết nối với Estimote Beacon và bắt đầu sử dụng 2 cảm biến.

o   Khi kết nối thành công, phương thức callback onConnected sẽ được kích hoạt. Khi có lỗi phát sinh trong quá trình kết nối hoặc bị mất kết nối giữa chừng, các phương thức callback onAuthenticationErroronDisconnected sẽ được kích hoạt

·         Để lấy được nhiệt độ của Estimote Beacon, chúng ta sử dụng phương thức temperature của BeaconConnection

o   để cập nhật được nhiệt độ của Estimote Beacon, chúng ta sẽ hiện thực phương thức refreshTemperature

·         Để sử dụng được cảm biến chuyển động của Estimote Beacon, chúng ta sẽ hiện thực phương thức enableMotionListener

o   Trong phương thức enableMotionListener, chúng ta sẽ hiện thực một callback là setMotionListener để liên tục kiểm tra xem Estimote Beacon có di chuyển hay không? Trạng thái di chuyển của Estimote Beacon sẽ được trả về thông qua object MotionState (có 02 giá trị là NOT_MOVINGMOVING)

·         Chúng ta cần phải hủy kết nối giữa ứng dụng với Estimote Beacon để các thiết bị khác có thể kết nối vào và sử dụng thông qua hàm close của object BeaconConnection

o   Build & Run ứng dụng, chúng ta chọn một thiết bị Estimote Beacon trong list ở màn hình trước để có được kết quả như sau:

 

Khi phát hiện được Estimote Beacon di chuyển

 

 

Khi Estimote Beacon không di chuyển

    

 

 

o   Chúng ta vừa hoàn tất ứng dụng thứ 3 với việc sử dụng beacon để xác định beacon có đang di chuyển hay không. Ngoài ra, ứng dụng cũng cung cấp việc lấy nhiệt độ của một beacon

Chúc mừng quí vị đã hoàn thành các khái niệm cơ bản về beacon và ứng dụng các khái niệm này với một số chức năng cần thiết và cơ bản nhất để áp dụng beacon vào các chương trình quản lý của quí vị. Rất mong sự đóng góp của quí vị và hẹn quí vị ở một chủ đề khác.

3 nhận xét:

  1. Cảm ơn anh khánh vì bài viết rất hửu ích trên ah. Không biết anh có thể làm thêm 1 bài hướng dẫn : làm sao để Modify 1 đường link URL từ thiết bị Eddystone trên android không ạ (hay còn gọi là Physical WEb).

    Trả lờiXóa
  2. Rất cảm ơn anh vì bài hướng dẫn này. Không biết anh có thể làm thêm nhiều bài về lập trình android với beacon được không ạ

    Trả lờiXóa
  3. Anh ơi, khi app nhận tính hiệu chậm quá, khoản 2 phút mới có phản hồi. Có cách nào chỉnh cho nhanh hơn không anh?

    Trả lờiXóa