3 chương: Chương 1: Trình bày khái quát về kiến trúc vi điều khiển STM32F407VG, giới thiệu về KIT STM32F4Discovery và chuẩn giao tiếp không dây Bluetooth, đồng thời khảo sát các công trình đã đăng tải liên quan đến đề tài luận văn, nêu những vấn đề còn tồn tại, chỉ ra những vấn đề mà đề tài luận văn quan tâm. Chương 2: Đề cập tới việc thiết kế xe mô hình và phát triển các phần mềm điều khiển, truyền nhận dữ liệu trên KIT và trên thiết bị di động chạy hệ điều hành Android. Chương 3: Trình bày các kết quả chạy thử nghiệm và đánh giá các kết quả đạt được.
Trang 1LỜI CAM ĐOAN
Tôi xin cam đoan đây là công trình nghiên cứu của riêng tôi dưới sự hướngdẫn của TS.Phạm Văn Hà, các nội dung tham khảo được trích dẫn rõ ràng, các kếtquả nghiên cứu nêu trong luận văn là trung thực và chưa từng được công bố trongbất kỳ các công trình nào khác Nếu sai tôi xin hoàn toàn chịu trách nhiệm
Tác giả
Phạm Hữu Điệp
Trang 2LỜI CẢM ƠN
Tôi xin chân trọng cảm ơn Trung tâm sau đại học, Khoa điện tử Trường đạihọc công nghiệp Hà Nội, đã tạo điều kiện thuận lợi giúp đỡ cho tôi trong suốt quátrình học tập và nghiên cứu
Tôi xin bày tỏ lòng biết ơn sâu sắc TS Phạm Văn Hà, người hướng dẫn
khoa học cho tôi Tôi cũng xin chân thành cảm ơn các thầy cô giáo, các bạn đồngnghiệp đã đóng góp nhiều ý kiến quý báu và giúp đỡ tận tình để luận văn đượchoàn thành
Tác giả
Phạm Hữu Điệp
Trang 3MỤC LỤC
LỜI CAM ĐOAN
LỜI CẢM ƠN
DANH MỤC SƠ ĐỒ, HÌNH VẼ
DANH MỤC BẢNG BIỂU
DANH SÁCH TỪ VIẾT TẮT
MỞ ĐẦU I CHƯƠNG 1 - TỔNG QUAN 1
1.1 TỔNG QUAN VỀ VI ĐIỀU KHIỂN STM32F407VG VÀ KIT STM32F4-DISCOVERY 1
1.1.1 Tổng quan về vi điều khiển STM32F407VG 1
1.1.2 Tổng quan về KIT phát triển STM32F4Discovery 2
1.2 TỔNG QUAN VỀ CÔNG NGHỆ TRUYỀN KHÔNG DÂY BLUETOOTH 5
1.2.1 Giới thiệu về Bluetooth 5
1.2.1.Tìm hiểu Bluetooth API trên hệ điều hành Android 8
1.3.TÌM HIỂU API HỖ TRỢ LẬP TRÌNH CHO CẢM BIẾN GIA TỐC 21
1.3.1.Tổng quan về cảm biến trong Android 21
1.3.2.Cảm biến sử dụng trong đề tài 22
1.4.TỔNG QUAN MODULE BLUETOOTH HC-05 .23
1.4.1.Cấu tạo, nguyên lý hoạt động và một số thông số kỹ thuật của HC-05 .23
1.4.2.Bộ truyền nhận nối tiếp USART 27
1.5.MODULE ĐIỀU KHIỂN ĐỘNG CƠ L298 31
1.5.1.Cấu tạo và nguyên lý hoạt động của Module L298 31
Trang 4CHƯƠNG 2- THIẾT KẾ XE MÔ HÌNH, XÂY DỰNG ỨNG DỤNG CHO VI ĐIỀU
KHIỂN VÀ THIẾT BỊ DI ĐỘNG ANDROID 33
2.1 THIẾT KẾ PHẦN CỨNG 33
2.1.1 Xe mô hình 33
2.1.2 Sơ đồ nguyên lý ghép nối 34
2.1.3.Thiết kế mô hình xe 35
2.2 THIẾT KẾ PHẦN MỀM 36
2.2.1 Phần mềm điều khiển xe mô hình trên vi điều khiển STM32F407VG 36
2.2.2 Phần mềm truyền nhận dữ liệu qua cổng Bluetooth cho vi điều khiển STM32F407VG 44
2.2.3 Phần mềm cho thiết bị di động chạy hệ điều hành Android 45
2.3 KẾT LUẬN CHƯƠNG 54
CHƯƠNG 3 - THỬ NGHIỆM VÀ ĐÁNH GIÁ 55
3.1 Cài đặt phần mềm trên KIT và trên thiết bị di động 55
3.1.1 Cài đặt phần mềm nhúng trên KIT STM32F407VG 55
3.1.2 Cài đặt phần mềm trên thiết bị di động chạy hệ điều hành Android 55
3.2.KẾT QUẢ CHẠY THỬ NGHIỆP PHẦN MỀM 57
3.3.ĐÁNH GIÁ 58
KẾT LUẬN 59
TÀI LIỆU THAM KHẢO 60
Trang 5DANH MỤC SƠ ĐỒ, HÌNH VẼ
Hình 1.1.KIT STM32F4 Discovery 3
Hình 1.2 STM32F4DISCOVERY Extension Board 4
Hình 1.3 Các tầng giao thức trong Bluetooth 7
Hình 1.4 Kiến trúc bậc cao của J2ME CDLC/MIDP và Bluetooth 9
Hình 1.5 Hộp thoại yêu cầu mở Bluetooth 13
Hình 1.6 Hộp thoại xác nhận ghép nối thiết bị 16
Hình 1.7.Hệ thống tọa độ thể hiện các giá trị dữ liệu từ cảm biến trên điện thoại 22
Hình 1.8 Ảnh Module Bluetooth HC-05 thực tế 23
Hình 1.9 Sơ đồ các chân của HC-05 24
Hình 110 chi tiết các bộ phận của HC-05 24
Hình 1.11.Tín hiệu tương đương của UART và RS232 27
Hình 1.12 Truyền 8 bit theo phương pháp song song và nối tiếp 28
Hình 1.13.Module L298V1 31
Hình 1.14.Nguyên lý hoạt động của mạch cầu H 31
Hình 1.15 Sơ đồ nguyên lý 32
Hình 2.1 Mô hình giao tiếp giữa xe mô hình và thiết bị di động Android 33
Hình 2.2 Sơ đồ khối tổng quát 34
Hình 2.3.Sơ đồ nguyên lý ghép nối trên xe mô hình 35
Hình 2.4 Mô hình xe 36
Hình 2.5 Sơ đồ nguyên lý kết nối KIT, module L298 và các động cơ 37
Trang 6Hình 2.6 Bộ điều xung PWM 39
Hình 2.7 Sóng vuông 40
Hình 2.8 Tạo xung vuông bằng phương pháp so sánh 42
Hình 2.9 Kết nối HC-05 và KIT STM32F4Discovery 44
Hình 2.10 Mô hình hoạt động của các activities trong ứng dụng 46
Hình 2.11 Các luồng thao tác chính 51
Hình 2.12.: Các luồng ngoại lệ 52
Hình 2.13 Thông báo ngoại lệ 53
Hình 3.1 Màn hình chờ trong quá trình tải ứng dụng 55
Hình 3.3 Màn hình làm việc với Bluetooth 56
Hình 3.4 Màn hình điều khiển ở các chế độ: 57
Trang 7DANH MỤC BẢNG BIỂU
Bảng 1.1 Các chân kết nối trong Bluetooth HC-05 25Bảng 2.1 Kết nối giữa KIT STM32F4Discovery và Module L298 36Bảng 2 2 các trạng thái của xe tương ứng với xung PWM 38
Trang 8DANH SÁCH TỪ VIẾT TẮT
Từ viết tắt Từ đầy đủ tiếng anh Từ đầy đủ tiếng việt
ADC Analog to Digital Converter Chuyển đổi từ analong sang số
Trang 9MỞ ĐẦU
LÝ DO CHỌN ĐỀ TÀI
Trong những năm gần đây người ta nói nhiều đến kỷ nguyên hậu PC, tức thời
kỳ mà máy tính cỡ lớn sẽ gần như biến mất, thay vào đó nó hiện hữu trong mọi ngõngách của cuộc sống dưới các hình thức nhỏ gọn hơn hoặc tích hợp vào các hệthống cần sự trợ giúp về tính toán, điều khiển, truyền tin Một trong những biểuhiện của nó là sự bùng nổ của điện thoại thông minh và máy tính bảng Một biểuhiện khác âm thầm hơn, nhưng cũng không kém phần mạnh mẽ, đó chính là các hệthống nhúng Các hệ thống này đang có mặt không chỉ trong trong các hệ thốngcông nghiệp, quan trắc, truyền tin, xe cộ… mà thậm chí hiện hữu ngay trong mỗigia đình, trong các thiết bị thông dụng như tivi, tủ lạnh, máy giặt, lò vi sóng, nồicơm điện… Các hệ thống nhúng thường bao gồm các thành phần phần cứng vàphần mềm, trong đó “bộ não” của nó là các chip vi điều khiển, chúng đảm nhậnmọi yêu cầu tính toán, điều khiển, giao tiếp… cho hệ thống Nhu cầu nhân lực pháttriển các hệ thống nhúng ngày một cao, không chỉ ở các nước có nền công nghiệpđiện tử - tin học phát triển mà ngay ở các nước chuyên gia công phần mềm như
nước ta Chính vì lý do đó mà em quyết định chọn đề tài “THIẾT KẾ XE MÔ HÌNH ĐIỀU KHIỂN TỪ XA BẰNG THIẾT BỊ DI ĐỘNG CHẠY HỆ ĐIỀU HÀNH ANDROID THÔNG QUA CHUẨN BLUETOOTH” Đây là một đề tài hấp dẫn, cập
nhật công nghệ, có tính ứng dụng cao và phù hợp với nội dung đào tạo Thạc sĩngành Kỹ thuật điện tử tại Trường Đại học Công nghiệp Hà Nội mà trong đó mônhọc Hệ thống nhúng đóng một vai trò quan trọng
TÍNH CẤP THIẾT CỦA ĐỀ TÀI
Khoảng 99% các chip vi xử lý ngày nay nằm ở các thiết bị nhúng, chỉ duy nhất1% dành cho máy tính cá nhân Điều này cho thấy vị thế đặc biệt quan trọng củacác hệ thống nhúng Trong số các chip vi xử lý hiện đang lưu hành thì tới 75% cókiến trúc ARM Có rất nhiều công ty sản xuất chip mang kiến trúc ARM Họ muabản quyền thiết kế lõi vi điều khiển từ công ty ARM Holdings, sau đó bổ xungthêm bộ nhớ, các thiết bị ngoại vi và các thành phần khác để tạo nên các dòng chipcủa riêng mình Đi đầu trong các công ty sản xuất chip ARM có thể kể đến cáccông ty như Atmel, Broadcom, Freescale, NXP, Qualcomm, Samsung,STMicroelectronics, Texas Instruments, Toshiba…
Trong số các dòng chip ARM phổ biến thì dòng ARM Cortex-M4 được đánhgiá rất cao nhờ hiệu năng xử lý và cấu hình cao, giá thành rẻ, dễ học, dễ chuyểnđổi Công ty STMicroelectronics (hiện đứng số 1 ở Châu Âu về điện tử bán dẫn và
có văn phòng ở Việt Nam) đã cho ra đời các dòng KIT giá rẻ được đánh giá rất cao
Trang 10phục vụ việc học tập và thử nghiệm, trong đó có KIT STM32F4Discovery Đây làKIT phát triển xây dựng trên vi điều khiển ARM Cortex-M4 STM32F407VG, tíchhợp sẵn mạch nạp và nhiều thành phần ngoại vi cơ bản Tuy vậy trên KITSTM32F4Discovery không tích hợp sẵn khả năng truyền dữ liệu không dây cũngnhư không có module điều khiển động cơ Trong khi đó nhu cầu truyền dữ liệukhông dây trong các ứng dụng đo lường, điều khiển và nhu cầu điều khiển động cơluôn hiện hữu Như vậy bài toán đặt ra là cần cung cấp khả năng điều khiển động
cơ và khả năng truyền dữ liệu không dây cho chip STM33F407VG thông qua mộtchuẩn không dây phổ biến, giá thành triển khai thấp, tốc độ truyền cao và khoảngcách truyền không quá ngắn, chẳng hạn như công nghệ Bluetooth Yêu cầu đó chothấy tính cấp thiết của đề tài luận văn
MỤC TIÊU VÀ PHƯƠNG PHÁP NGHIÊN CỨU
Mục tiêu của đề tài
Tìm hiểu kiến trúc và các kỹ thuật lập trình cho vi điều khiển STM32F407VG,thiết kế xe mô hình với 2 động cơ DC, phát triển ứng dụng cho KITSTM32F407VG thu nhận tín hiệu điều khiển truyền qua Bluetooth và thực hiệnviệc điều khiển động cơ theo các lệnh nhận được, xây dựng ứng dụng trên thiết bịAndroid cho phép điều khiển xe mô hình từ xa
Nội dung nghiên cứu
Để đạt được mục tiêu của đề tài cần thực hiện các nội dung nghiên cứu sau:
- Tìm hiểu kiến trúc vi điều khiển STM32F407VG, KIT STM32F4Discovery
và các kỹ thuật lập trình cho vi điều khiển đó
- Tìm hiểu về chuẩn truyền thông Bluetooth
- Thiết kế xe mô hình với 2 động cơ DC
- Xây dựng module Bluetooth cho KIT phát triển STM32F4Discovery
- Xây dựng ứng dụng giao tiếp giữa KIT STM32F4Discovery với thiết bị diđộng chạy hệ điều hành Android thông qua chuẩn Bluetooth Ứng dụng cho phépnhận lệnh điều khiển xe từ thiết bị Android
- Xây dựng phần mềm cho thiết bị di động chạy hệ điều hành Android chophép sử dụng thiết bị đó như một module điều khiển từ xa
Phương pháp nghiên cứu
Nghiên cứu làm chủ KIT STM32F4Discovery, xây dựng giải pháp kết nối KITvới module serial Bluetooth như HC-05 và module điều khiển động cơ L298N; sửdụng thiết bị di động như máy tính bảng hoặc điện thoại thông minh làm công cụthử nghiệm trao đổi dữ liệu qua Bluetooth, trên cơ sở đó xây dựng ứng dụng demođiều khiển xe mô hình từ xa bằng thiết bị di động
Trang 11TÓM TẮT LUẬN VĂN
Ngoài phần mở đầu, kết luận và tài liệu tham khảo, phần chính của luận văngồm 3 chương:
Chương 1: Trình bày khái quát về kiến trúc vi điều khiển STM32F407VG,
giới thiệu về KIT STM32F4Discovery và chuẩn giao tiếp không dây Bluetooth,đồng thời khảo sát các công trình đã đăng tải liên quan đến đề tài luận văn, nêunhững vấn đề còn tồn tại, chỉ ra những vấn đề mà đề tài luận văn quan tâm
Chương 2: Đề cập tới việc thiết kế xe mô hình và phát triển các phần mềm
điều khiển, truyền nhận dữ liệu trên KIT và trên thiết bị di động chạy hệ điều hànhAndroid
Chương 3: Trình bày các kết quả chạy thử nghiệm và đánh giá các kết quả đạt
được
Trang 12CHƯƠNG 1 - TỔNG QUAN
Chương này trình bày khái quát về kiến trúc vi điều khiển STM32F407VG,giới thiệu về KIT phát triển STM32F4Discovery và chuẩn giao tiếp không dâyBluetooth, đồng thời khảo sát các công trình đã đăng tải liên quan đến đề tài luậnvăn, nêu những vấn đề còn tồn tại, chỉ ra những vấn đề mà đề tài luận văn quantâm
1.1 TỔNG QUAN VỀ VI ĐIỀU KHIỂN STM32F407VG VÀ KIT DISCOVERY
STM32F4-Để thực hiện đề tài, tác giả sử dụng KIT phát triển STM32F4Discovery củacông ty ST Microelectronics làm thiết bị điều khiển động cơ, thu thập dữ liệu vàtruyền thông tin Vi điều khiển được sử dụng trên KIT có tên gọi STM32F407VG.Phần này của luận văn sẽ khảo sát về vi điều khiển và KIT phát triển nói trên
1.1.1 Tổng quan về vi điều khiển STM32F407VG
Ngày nay, hơn 75% CPU nhúng 32-bit là thuộc họ ARM, điều này khiếnARM trở thành cấu trúc 32-bit được sản xuất nhiều nhất trên thế giới CPU ARMđược tìm thấy khắp nơi trong các sản phẩm thương mại điện tử, từ thiết bị cầm tay(PDA, điện thoại di động, máy đa phương tiện, máy trò chơi cầm tay, và máy tínhcầm tay) cho đến các thiết bị ngoại vi máy tính (ổ đĩa cứng, bộ định tuyến để bàn)[] Một nhánh nổi tiếng của họ ARM là ARM Cortex
ARM Cortex
ARM Cortex là dòng vi xử lý thế mới với kiến trúc chuẩn cho nhu cầu đa dạng
về công nghệ Không giống như các chip ARM khác, dòng Cortex có lõi xử lý hoànthiện, CPU và kiến trúc hệ thống có chuẩn chung Dòng Cortex gồm có 3 phânnhánh chính: Dòng A dành cho các ứng dụng cao cấp, dòng R dành cho các ứngdụng thời gian thực như các đầu đọc và dòng M dành cho các ứng dụng vi điềukhiển và chi phí thấp
32-lý tín hiệu số, những ứng dụng nhúng sâu yêu cầu tính năng đáp ứng ngắt nhanhchóng Dưới đây là một số ưu điểm của các chip ARM Cortex-M4:
Hiệu suất xử lý vượt trội kết hợp với xử lý ngắt nhanh chóng
Trang 13 Tăng cường hệ thống gỡ lỗi với breakpoint và khả năng theo vết mở rộng.
Giao diện bus on-chip dựa trên công nghệ ARM AMBA (AdvancedMicrocontroller Bus Architecture) cho phép nâng cao khả năng truyền dữ liệu
Tiêu thụ điện năng cực thấp với chế độ ngủ tích hợp (sleep mode) và mộtchế độ ngủ sâu tùy chọn (standby mode)
Nền tảng bảo mật vững mạnh, với tùy chọn đơn vị bảo vệ bộ nhớ (MPU)tích hợp
Các bộ vi xử lý Cortex-M4 được xây dựng trên lõi xử lý hiệu suất cao, vớiđường ống kiến trúc Harvard 3 giai đoạn, khiến cho nó trở nên lý tưởng với cácứng dụng nhúng Các bộ vi xử lý mang lại hiệu quả năng lượng đặc biệt thông quamột lệnh đặt hiệu quả và tối ưu hóa thiết kế rộng rãi, cung cấp phần cứng xử lý caocấp bao gồm tùy chọn IEEE754
Các bộ vi xử lý Cortex-M4 được thiết kế để thực thi tập lệnh Thumb-2, là một
sự pha trộn của lệnh 16-bit và 32-bit Tập lệnh thumb-2 cải tiến 26% mật đọ mã sovới tập lệnh ARM 32-bit và 25% hiệu suất so với tập lệnh Thumb16-bit Tập lệnhThumb-2 có một số lệnh nhân được cải tiến, có thể thực hiện trong một chu kỳ đơn
và khả năng thực hiện phép chia bằng phần cứng và chỉ mất từ 2-7 chu kỳ
Các bộ vi xử lý Cortex-M4 tích hợp bộ xử lý ngắt lồng nhau (Nested VectoredInterrupt Controller - NVIC) với hiệu suất xử lý ngắt cực nhanh Để tối ưu hóa thiết
kế công suất thấp, các NVIC tích hợp với chế độ ngủ, trong đó bao gồm một chứcnăng ngủ sâu tùy chọn
STM32F407VG là vi điều khiển thuộc họ ARM Cortex-M4 được sản xuất bởicông ty bán dẫn lớn nhất châu Âu là ST Microelectronics Nó là sự kết hợp của cácchức năng điều khiển và xử lý tín hiệu hiệu quả cao nhưng chi phí thấp Dễ dàng sửdụng những lợi ích của vi xử lý ARM Cotex-M cho các giải pháp linh hoạt, đặcbiệt áp dụng cho điều khiển động cơ, ô tô, quản lý điện năng và tự động hóa…
1.1.2 Tổng quan về KIT phát triển STM32F4Discovery
STM32F4Discovery là board vi điều khiển dành cho người mới học hoặc dànhcho lập trình viên chuyên nghiệp trong lĩnh vực điều khiển tự động hóa… Boardđược tích hợp chip ARM Cortex-M4 cùng với bộ tính toán số thực (FPU) và bộ xử
lý tín hiệu số DSP, hoạt động với tần số rất cao 168 MHz, tỷ suất DMIPS/MHZ cao1.25 giúp cho hệ thống có thể đạt được hiệu năng 210 DMIPS, board rất thích hợpcho các ứng dụng với yêu cầu tính toán xử lý nhanh, ví dụ như DSP, điều khiểnrobot, thậm chí xử lý ảnh
Trang 14Hình 1.1.KIT STM32F4 Discovery
Thông số kỹ thuật
Sử dụng vi điều khiển lõi ARM Cortex-M4 32-bit STM32F407VGT6, 1
MB Flash, 192 KB RAM đóng gói LQFP100 (100 chân)
Tích hợp sẵn mạch nạp ST-LINK/V2
Nguồn cung cấp cho board: qua USB bus hoặc từ nguồn điện ngoài 5V
Cấp nguồn cho ứng dụng ngoài: 3V và 5V
Cảm biến chuyển động ST MEMS LIS302DL
Cảm biến âm thanh ST MEMS MP45DT02
Audio DAC CS43L22 với driver loa lớp D tích hợp
8 đèn LED:
o LD1 (red/green) dùng cho giao tiếp USB
o LD2 (red) báo hiệu nguồn 3.3 V đang bật
o 4 đèn LED người dùng: LD3 (orange), LD4 (green), LD5 (red) và LD6(blue)
Trang 15o 2 đèn LED cho USB OTG: LD7 (green) VBus và LD8 (red) current
over- 2 nút bấm (user và reset)
Khả năng mở rộng
STM32F4Discovery hỗ trợ trong việc tìm hiểu dòng vi điều khiểnSTM32F407/417 và hỗ trợ phát triển ứng dụng một cách dễ dàng hơn Nó cung cấphầu hết mọi thứ cho những người mới bắt đầu và cả những người đã có kinhnghiệm về lập trình nhúng Tuy nhiên trên KIT STM32F4Discovery không tíchhợp sẵn nhiều khả năng, cụ thể là khả năng truyền dữ liệu không dây sử dụng trong
đề tài này Vì vậy, KIT STM32F4Discovery cung cấp khả năng mở rộng kết nốinhư Ethernet, khe cắm micro SD Card™, LCD, camera, UARTS, SPI, … Và đượcgọi là STM32F4DIS-EXT (STM32F4DISCOVERY extension board) Các đặcđiểm chính của STM32F4DIS-EXTđược nêu dưới đây:
Hình 1.2 STM32F4DISCOVERY Extension Board
Bảng mạch chính
o Khe cắm thẻ Micro SD
Trang 16o 10/100 Ethernet with IEEE 1588v2 (RJ45 connector)
o Kết nối với bảng mạch camera
o Giao tiếp chính: UART, SPI Interface & Standalone
o Giao tiếp khác: GPIO, ADC, DAC, I2C
o Nguồn:- 5V Power Jack- chân cắm mini usb
1.2 TỔNG QUAN VỀ CÔNG NGHỆ TRUYỀN KHÔNG DÂY BLUETOOTH 1.2.1 Giới thiệu về Bluetooth
Bluetooth là công nghệ không dây cho phép các thiết bị điện, điện tử giao tiếpvới nhau trong khoảng cách ngắn, bằng sóng vô tuyến qua băng tần chung ISM(Industrial, Scientific, Medical) trong dãy 2.40 – 2.48 GHz và có khả năng truyềntải giọng nói và dữ liệu
Bluetooth được thiết kế nhằm mục đích thay thế cable giữa máy tính và cácthiết bị truyền thông cá nhân, kết nối vô tuyến giữa các thiết bị điện tử lại với nhaumột cách thuận lợi với giá thành rẻ
Công nghệ không dây Bluetooth là một tiêu chuẩn trong thực tế, dùng cho cácthiết bị cỡ nhỏ, chi phí thấp, sóng ngắn liên kết giữa PC di động, điện thoại di động
và giữa các thiết bị hỗ trợ cá nhân PDA (Personal Digital Assistant)
Trang 17Bluetooth Special Interest Group (Bluetooth SIG) là tổ chức gồm những công
ty hàng đầu trong lĩnh vực viễn thông, máy tính và công nghiệp mạng đang cố gắngphát triển công nghệ này và cung cấp rộng rãi trên thị trường
Đặc điểm
Tiêu thụ năng lượng thấp
Cho phép ứng dụng được nhiều loại thiết bị bao gồm các thiết bị cầm tay vàđiện thoại di động
Giá thành ngày một giảm (giá một con chip Bluetooth đang giảm dần)
Khoảng cách giao tiếp cho phép :
o Khoảng cách giữa 2 thiết bị đầu cuối có thể lên đến 10m ngoài trời và5m trong tòa nhà
o Khoảng cách thiết bị đầu cuối và Access point có thể lên tới 100m ngoàitrời và 30m trong nhà
Bluetooth sử dụng bằng tần 2,4GHz, tốc độ truyền dữ liệu có thể đạt tớimức tối đa 1Mbps mà các thiết bị không cần phải trực tiếp thấy nhau.Bluetooth hỗ trợ tốc độ truyền tải dữ liệu lên tới 720Kbps trong phạm vi10m
Dễ dàng trong việc phát triển ứng dụng: Bluetooth kết nối một ứng dụngnày với một ứng dụng khác thông qua các chuẩn “Bluetooth profiles”, do
đó có thể độc lập về phần cứng cũng như hệ điều hành sử dụng
An toàn và bảo mật: được tích hợp với sự xác nhận và mã hóa
Tính tương thích cao, được nhiều nhà sản xuất phần cứng cũng như phầnmềm hỗ trợ
Hoạt động
Bluetooth là chuẩn kết nối không dây tầm ngắn, thiết kế cho các kết nối thiết
bị cá nhân hay mạng cục bộ nhỏ trong phạm vi băng tần từ 2.4GHz đến 2.485GHz.Bluetooth hoạt động dựa trên 79 tần số đơn lẻ Khi kết nối, nó sẽ tự động tìm ra tần
số tương thích để di chuyển đến thiết bị cần kết nối trong khu vực nhằm đảm bảo
sự liên tục
Trang 18Các tầng giao thức trong Bluetooth
Hình 1.3 Các tầng giao thức trong Bluetooth
OBEX (Object exchange): giao thức giao tiếp được sử dụng để trao đổi dữ
liệu vật lý như các tập tin, hình ảnh và kể cả các định dạng nhị phân
L2CAP (Logical Link Control and Adaptation Protocol): được sử dụng để
gửi các gói dữ liệu giữa máy chủ và máy khách
RFCOMM (Radio Frequency COMMunication): được sử dụng cho luồng
dữ liệu đơn giản
Lưu ý: Bluetooth API thuộc JSR-82, có khả năng cung cấp cả 3 giao thức kể
trên Nhưng trong phạm vi đề tài này, ta sẽ chỉ tập trung vào giao thức đơn giản nhất là RFCOMM.
RFCOMM protocol
Giao thức RFCOMM cho phép giả lập cổng serial thông qua giao thứcL2CAP Giao thức này dựa trên tiêu chuẩn ETSI TS 07.10, chỉ có một phần củachuẩn TS 07.10 được dùng và được chỉnh sửa cho phù hợp với Bluetooth
RFCOMM hỗ trợ tối đa 60 kết nối cùng một lúc giữa 2 thiết bị Bluetooth theomặc định, nhưng hiện nay số kết nối tối đa tùy thuộc vào nhà sản xuất Đối vớiRFCOMM, một kết nối bao gồm 2 ứng dụng chạy trên 2 thiết bị riêng biệt (2 thiết
bị đầu cuối)
Loại thiết bị: Về cơ bản, RFCOMM cung cấp cho 2 loại thiết bị:
o Loại 1: là những thiết bị đầu cuối như máy tính hay máy in
o Loại 2: là những thành phần để truyền dữ liệu, chẳng hạn modem
Trang 191.2.1.Tìm hiểu Bluetooth API trên hệ điều hành Android
Framework lập trình trên Android hỗ trợ bộ giao thức Bluetooth, cho phép mộtthiết bị không dây trao đổi dữ liệu với các thiết bị Bluetooth khác Các khung ứngdụng cung cấp truy cập vào các chức năng Bluetooth thông qua các API BluetoothAndroid Sử dụng API Bluetooth, một ứng dụng Android có thể thực hiện các côngviệc sau:
Quét các thiết bị Bluetooth xung quanh
Lấy về danh sách các thiết bị bluetooth đã ghép nối
Thiết lập các kênh RFCOMM
Kết nối với các thiết bị khác thông qua dịch vụ discovery
Truyền/nhận dữ liệu với các thiết bị khác
Quản lý nhiều kết nối
Bluetooth Profiles
Thiết bị Bluetooth không thể tương tác trừ khi chúng phù hợp với một profile
cụ thể Profile Bluetooth được định hướng để đảm bảo khả năng tương tác giữa cácthiết bị hỗ trợ Bluetooth và các ứng dụng từ các nhà sản xuất và các nhà cung cấp(vendor) khác nhau Một profile định nghĩa vai trò và khả năng cho các loại ứngdụng cụ thể
Bluetooth Profiles có các kiểu sau:
- Generic Access Profile
- Service Discovery Application and Profile
- Serial Port Profile
- LAN Access Profile
- Synchronization Profile
- Basic Imaging Profile
- Basic Printing Profile
- File Transfer Profile
Ngoài ra, còn rất nhiều Profiles nữa do số lượng profiles ngày càng tăng
Cấu trúc Bluetooth API
Mục đích của bản đặc tả JSR-82 đã được xác định là một chuẩn API có tính
mở, không độc quyền và có thể được sử dụng bởi tất cả các thiết bị hỗ trợ JavaME.Các đặc điểm quan trọng:
Đặc tả này cung cấp hỗ trợ cơ bản cho các giao thức và profile Bluetooth Nókhông bao gồm các API cụ thể cho tất cả các cấu hình Bluetooth đơn giản chỉ vì sốlượng profile là ngày càng tăng
Trang 20Đặc tả này kết hợp các các giao thức truyền thông OBEX, L2CAP, vàRFCOMM trong JSR 82 API, chủ yếu bởi vì tất cả các profile Bluetooth hiện tạiđược thiết kế để sử dụng các giao thức truyền thông.
Giao thức Service Discovery cũng được hỗ trợ JSR 82 định nghĩa đăng kýdịch vụ một cách chi tiết để chuẩn hóa quy trình đăng ký cho các lập trình ứngdụng
JSR 82 đòi hỏi stack Bluetooth nằm bên dưới thực thi JSR 82 đủ tiêu chuẩncho Generic Access Profile, Service Discovery Application Profile, và Serial PortProfile Stack phải cũng cung cấp quyền truy cập vào Service Discovery Protocol;các tầng (layer) RFCOMM và L2CAP
Các API được thiết kế theo cách sao cho các nhà phát triển có thể sử dụngngôn ngữ lập trình Java để xây dựng profile Bluetooth mới từ các API này miễn làcác đặc tả lớp lõi (core layer) không thay đổi Để thúc đẩy sự linh hoạt và mở rộngnày, bản đặc tả không bị giới hạn bởi các API cài đặt các profile Bluetooth JSR 82bao gồm các API cho OBEX và L2CAP để trong tương lai các profile Bluetooth cóthể được cài đặt trong Java Hình dưới cho thấy các API được định nghĩa trong đặc
tả phù hợp với kiến trúc của CLDC/MIDP
Hình 1.4 Kiến trúc bậc cao của J2ME CDLC/MIDP và Bluetooth
Bluetooth Communication
Đầu tiên, các dịch vụ nên được đăng ký hay quảng bá trên một thiết bịBluetooth server trước khi nó được discovery Server sẽ thực hiện một số công việcnhư: tạo ra một bản ghi dịch vụ để mô tả dịch vụ được cung cấp, chấp nhận các kếtnối từ client và thêm bản ghi vào cơ sở dữ liêu discovery dịch vụ(ServiceDiscovery Database)
Trang 21Như đã đề cập trong phần trên, các kết nối Bluetooth được dựa trên giao thứcL2CAP, một gói dữ liệu giao thức cấp thấp, và RFCOMM Các kết nối Bluetoothđược tạo ra bằng cách gọi phương thức Connector.open() dựa trên GenericConnection FrameWork(GCF) Kiểu kết nối URL được tạo ra có cú pháp sau:Định dạng URL cho kết nối L2CAPConnection:
btl2cap://hostname:[PSM | UUID];parameters
Định dạng URL cho kết nối RFCOMM StreamConnection:
btspp://hostname:[CN | UUID];parameters
Trong đó:
hostname: hoặc địa chỉ thiết lập một kết nối server hoặc địa chỉ Bluetooth
để tạo ra một kết nối client
PSM: là một giá trị Protocol/Service Multiplexer, sử dụng cho một kết nối
client tới server
UUID: là một Universally Unique Identifier sử dụng khi thiết lập một dịch
vụ trên server Mỗi một UUID phải được đảm bảo rằng nó là duy nhất trongtoàn bộ thời gian và không gian
parameters: mô tả tên các dịch vụ và các thông số bảo mật xác thực, ủy
Bluetooth API trong Android
Nền tảng Android hỗ trợ các thiết bị không dây trao đổi dữ liệu với các thiết bịBluetooth khác.Các ứng dụng có khả năng truy cập vào các chức năng củaBluetooth thông qua Android Bluetooth APIs Bluetooth APIs có thể thực hiện rấtnhiều chức năng, tuy nhiên trong phạm vi và những yêu cầu cần đạt của đề tài,chúng ta chỉ cần bàn tới 4 chức năng cần thiết chủ yếu, các mục tiếp theo sẽ tìmhiểu về các chức năng này:
Thiết lập Bluetooth
Tìm/quét thiết bị có sẵn hoặc đã kết nối
Kết nối thiết bị
Trang 22 Truyền nhận dữ liệu giữa các thiết bị
Tất cả Bluetooth APIs đều có sẵn trong gói android.bluetooth.Dưới đây là
một số các classes, interfaces cần thiết để có thể thiết lập kết nối Bluetooth
Bluetooth Adapter
BluetoothAdapter như một cổng vào ra cho tất cả các tương tác Bluetooth Sửdụng BluetoothAdapter có thể quét các thiết bị Bluetooth khác, truy vấn ra danhsách các thiết bị đã kết nối trước đó, khai thác thông tin các thiết bị qua địa chỉMAC hay tạo ra một BluetoothServerSocket để lắng nghe các giao tiếp từ các thiết
bị khác
BluetoothDevice
Tượng trưng cho một thiết bị điều khiển từ xa Sử dụng để yêu cầu kết nối vớimột thiết bị Bluetooth khác thông qua BluetoothSocket hoặc truy vấn thông tin vềthiết bị như tên, địa chỉ, trạng thái kết nối
BluetoothServerSocket
Đại diện cho một ServerSocket mở để lắng nghe các yêu cầu gửi tới (tương tựnhư TCP ServerSocker) Để kết nối 2 thiết bị Android, một thiết bị phải được mởServerSocket sử dụng lớp này Khi một thiết bị Bluetooth từ xa tạo ra một yêu cầukết nối đến các thiết bị khác, các BluetoothServerSocket sẽ trả về mộtBluetoothSocket kết nối khi kết nối được chấp nhận
Quyền Bluetooth (Bluetooth Permission)
Trang 23Để sử dụng các tính năng của Bluetooth trong ứng dụng, ta phải khai báoquyền Bluetooth là BLUETOOTH.Có như vậy ta mới có thể thực thi các giao tiếpBluetooth như yêu cầu kết nối (requesting connection), chấp nhận kết nối(accepting connection) và giao tiếp dữ liệu (transferring data).
Nếu bạn muốn ứng dụng của bạn khởi tạo việc tìm kiếm các thiết bị hoặc thao
tác cài đặt Bluetooth bằng tay, bạn cần khai báo quyền BLUETOOTH_ADMIN.
Lưu ý rằng để sử dụng quyền BLUETOOTH_ADMIN, cần khai báo quyềnBLUETOOTH đi kèm
Khai báo các quyền Bluetooth trong file manifest, ví dụ như:
Thiết lập Bluetooth (Setting up Bluetooth)
Trước khi ứng dụng của bạn có thể thực hiện các giao tiếp, bạn cần xác minhlại xem thiết bị của bạn có được hỗ trợ Bluetooth không
Nếu thiết bị được hỗ trợ Bluetooth nhưng bị disable, bạn cần yêu cầu tới người
sử dụng enable Bluetooth lên Việc thiết lập này chỉ qua hai bước, sử dụngBluetoothAdapter:
Bước 1: Get theBluetoothAdapter
Sử dụng phương thức static getDefaultAdapter() Phương thức này sẽ trả về
một BluetoothAdapter nếu thiết bị được hỗ trợ Bluetooh
BluetoothAdapter mBluetoothAdapter =BluetoothAdapter.getDefaultAdapter();if(mBluetoothAdapter ==null){
// Device does not support Bluetooth
}
Bước 2: Enable Bluetooth
Sử dụng phương thức isEnable() để kiểm tra xem bluetooth đã được enable
chưa Nếu trả về false thì Bluetooth đã bị disable Để yêu cầu enable bluetooth, ta
ACTION_REQUEST_ENABLE trong Intent:
Trang 24Hình 1.5 Hộp thoại yêu cầu mở Bluetooth
REQUEST_ENABLE_BT là một hằng số kiểu số nguyên được định nghĩa
sẵn, phải lớn hơn 0 Hằng số này sẽ được trả lại trong onActivityResult() với giá trị được gán cho tham số requestCode.
Nếu enable được bluetooth, activity sẽ nhận được code là RESULT_OK trong
onActivityResult(), nếu không code nhận được sẽ là RESULT_CANCELED
Tìm/quét thiết bị (Finding devices)
Quét tìm thiết bị là việc phát hiện ra các thiết bị Bluetooth đang mở trongphạm vi cho phép và yêu cầu một số thông tin khác Tuy nhiên, thiết bị Bluetoothđích trong phạm vi sẽ hồi đáp các yêu cầu thông tin chỉ khi trạng thái là đang mở.Nếu một thiết bị được phát hiện, nó sẽ hồi đáp lại các yêu cầu quét một số thông tinnhư: tên thiết bị (device name), class, địa chỉ MAC (MAC address) duy nhất Mộtkhi có được những thông tin này, thiết bị quét có thể khởi tạo kết nối tới thiết bịđược chọn (một trong các thiết bị bluetooth đích)
Một khi kết nối đã được tạo lần đầu tiên, yêu cầu kết nối sẽ được hiển thị tớingười sử dụng Khi đã kết nối (do người dùng đồng ý kết nối ), các thông tin vềthiết bị được kết nối (tên thiết bị, class, địa chỉ MAC) sẽ được lưu lại và có thể lấyđược thông qua Bluetooth APIs Bằng cách sử dụng địa chỉ MAC như một thiết bịđiều khiển từ xa, kết nối có thể được tạo bất cứ lúc nào mà không cần
“discovering” nữa (giả sử trường hợp thiết bị trong phạm vi cho phép)
Trang 25Lưu ý rằng có sự khác biệt lớn giữa đang ghép đôi (paired) và đang kết nối (being connected) Để được ghép đôi (to be paired) tức là hai thiết bị đều nhận thức
được sự tồn tại của nhau, có một link-key được sử dụng để xác thực và có thể thiết
lập một kết nối đã mã hóa với nhau.Để được kết nối (to be connected) có nghĩa là
các thiết bị hiện tại đang chia sẻ một kênh RFCOMM và có thể truyền dữ liệu chonhau.Việc sử dụng các APIs Bluetooth Android yêu cầu các thiết bị phải được ghép
đôi (to be paired) trước khi một kênh RFCOMM được thiết lập.
Các mục tiếp theo sẽ tìm hiểu làm thể nào phát hiện được các thiết bị đã pairedhay thiết bị mới (chưa paired)
Truy vấn các thiết bị đã ghép nối (Querying paired devices)
Trước khi thực hiện quét tìm các thiết bị mới, ta sẽ tìm các thiết bị đã ghép nối
từ trước bằng cách gọi phương thức getBondedDevices() Phương thức này sẽ trả
về một Set các BluetoothDevices.Ví dụ bạn có thể truy vấn tất cả các thiết bị đã
ghép nối và hiển thị lên tên của mỗi thiết bị cho người dùng xem bằng cách sử
dụng ArrayAdapter.
Set<BluetoothDevice> pairedDevices =mBluetoothAdapter.getBondedDevices();// If there are paired devices
if(pairedDevices.size()>0){
// Loop through paired devices
for(BluetoothDevice device: pairedDevices){
// Add the name and address to an array adapter to show in a ListView
Phát hiện các thiết bị (Discovering devices)
Để bắt đầu tìm/quét thiết bị mới, đơn giản là ta gọi phương thức
startDiscovery() Quá trình này là không đồng bộ và phương thức sẽ ngay lập tức
trả về một giá trị logic (true hoặc false) để chỉ ra việc tìm/quét có khởi động thành
công hay không.Quá trình tìm/quét thông thường sẽ mất khoảng 12 giây, sau khi đã
có được một list các thiết bị thì quét sâu hơn để lấy được tên thiết bị Bluetooth đó.Ứng dụng của bạn phải đăng ký BroadcastReceiver cho IntentACTION_FOUND để có thể nhận được thông tin về mỗi thiết bị quét được.Với
mỗi thiết bị, hệ thống sẽ truyền phát (broadcast) Intent ACTION_FOUND Sau khi
sử dụng Intent, cần mở rộng sử dụng thêm các trường bổ sung EXTRA_DEVICE,
Trang 26EXTRA_CLASS bao gồm BluetoothDevice và BluetoothClass tương ứng Ví dụdưới sẽ hướng dẫn cách đăng ký sử dụng broadcast khi thiết bị được tìm thấy.
// Create a BroadcastReceiver for ACTION_FOUND
privatefinalBroadcastReceiver mReceiver =newBroadcastReceiver(){
publicvoid onReceive(Context context,Intent intent){
String action = intent.getAction();
// When discovery finds a device
if(BluetoothDevice.ACTION_FOUND.equals(action)){
// Get the BluetoothDevice object from the Intent
BluetoothDevice device =
intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
// Add the name and address to an array adapter to show in a ListView
mArrayAdapter.add(device.getName()+"\n"+ device.getAddress());
}
}
};
// Register the BroadcastReceiver
IntentFilter filter =newIntentFilter(BluetoothDevice.ACTION_FOUND);
registerReceiver(mReceiver, filter);// Don't forget to unregister during onDestroy
Lưu ý: Việc thực hiện tìm/quét thiết bị là một công việc “nặng” với Bluetooth
adapter bởi sẽ tốn nhiều tài nguyên Nên một khi đã tìm được thiết bị cần kết nối cần dừng việc tìm/quét lại bằng việc dùng cancelDiscovery() trước khi kết nối Ngoài ra, khi đã kết nối với thiết bị, việc tìm/quét mới có thể sẽ giảm đáng kể băng tần có sẵn mà điều này là không tốt cho việc truyền nhận dữ liệu, vì vậy không nên thực hiện việc tìm/quét thiết bị trong lúc đã kết nối.
Kết nối thiết bị (Connecting devices)
Giống như lập trình socket trên java, kết nối giữa 2 thiết bị qua bluetooth trênandroid cũng sử dụng cơ chế client – server
Để tạo ra được một kết nối giữa 2 thiết bị, bạn cần thực thi các cơ chế trên cả
phía server (server-side) và phía client (client-side), bởi vì một thiết bị phải mở
server socket và thiết bị còn lại thì khởi tạo kết nối (sử dụng địa chỉ MAC) Server
và client coi như là được kết nối với nhau khi mà chúng đều đã kết nốiBluetoothSocket tại cùng một kênh RFCOMM Lúc này, mỗi thiết bị đều có đượcinput và output streams và truyền nhận dữ liệu có thể bắt đầu
Thiết bị phía server và client kết nối BluetoothSocket theo những cách khácnhau Phía server sẽ nhận được khi kết nối truyền đến được chấp nhận.Phía client
sẽ nhận được khi nó mở kênh RFCOMM đến server
Trang 27Còn một kỹ thuật khác nữa đó là để tự động chuẩn bị mỗi thiết bị như là mộtserver, theo đó, mỗi bên có một server socket được mở và lắng nghe kết nối Tiếptheo, mỗi thiết bị đều có thể khởi tạo một kết nối với thiết bị còn lại và trở thành
client Ngoài ra, một thiết bị có thể trở thành “host” và mở server socket theo yêu
cầu và các thiết bị khác đơn giản chỉ việc khởi tạo kết nối tới
Lưu ý: Nếu là 2 thiết bị chưa từng kết nối trước đó, thì hệ thống sẽ tự động
hiện ra một hộp thoại thông báo và xác nhận mã tới người dùng như hình dưới:
Hình 1.6 Hộp thoại xác nhận ghép nối thiết bị
Việc ghép nối sẽ fail khi người dùng từ chối việc ghép nối (lựa chọn Don’t pair) hoặc hết thời gian (times out).
Server (Connecting as a server)
Khi bạn muốn kết nối 2 thiết bị, thì một bên thiết bị phải ở vị trí là server bằngcách giữ một BluetoothServerSocket được mở.Mục đích là để lắng nghe yêu cầukết nối tới và một khi kết nối được chấp nhận, thì sẽ cung chấp cho việc kết nốiBluetoothSocket.Khi đã có được BluetoothSocket từ BluetoothServerSocket,BluetoothServerSocket có thể sẽ bị (hay nên) loại bỏ, trừ phi bạn muốn có thêmnhiều kết nối khác
Dưới đây là những thủ tục cơ bản để thiết lập một server socket và chấp nhậnkết nối tới:
Bước 1: Mở một BluetoothServerSocket bởi lời gọi hàm:
listenUsingRfcommWithServiceRecord(String, UUID)
Trong đó:
- String là tên bất kì bạn muốn đặt có thể là tên thiết bị hay ứng dụng của bạn.
- UUID là một mã 128bit định dạng cho một chuỗi ID để sử dụng xác định
thông tin hay xác định ứng dụng bluetooth của bạn UUID này tương tự như
một tờ giấy thông hành cho thiết bị client Cụ thể là khi client muốn tạo kết
Trang 28nối với server, nó sẽ phải mang theo UUID phù hợp để kết nối được chấpnhận.
Bước 2: Bắt đầu lắng nghe và chấp nhận kết nối bằng lời gọiaccept().
Một kết nối được chấp nhận khi một thiết bị gửi tới một UUID phù hợp Nếu
thành công, hàm accept() sẽ trả về một BluetoothSocket.
Bước 3: Đóng kết nối bằng lời gọi close().
Không giống như TCP/IP, RFCOMM chỉ cho phép một client kết nối cho mỗikênh tại một thời điểm Vì vậy trong nhiều trường hợp, nó có khả năng phán đoán
để gọi close() ngay lập tức sau khi đã chấp nhận một socket để kết nối.
Ví dụ tạo một server:
privateclassAcceptThreadextendsThread{
privatefinalBluetoothServerSocket mmServerSocket;
publicAcceptThread(){
// Use a temporary object that is later assigned to mmServerSocket,
// because mmServerSocket is final
BluetoothServerSocket tmp =null;
try{
// MY_UUID is the app's UUID string, also used by the client code
tmp = mBluetoothAdapter.listenUsingRfcommWithServiceRecord(NAME,MY_UUID);
}catch(IOException e){}
mmServerSocket = tmp;
}
publicvoid run(){
BluetoothSocket socket =null;
// Keep listening until exception occurs or a socket is returned
Trang 29Bước 2: Bắt đầu kết nối bằng cách gọi connect()
Hệ thống sẽ tự thực hiện tra cứu SPD (Service Discovery Protocol) trên cácthiết bị từ xa để phù hợp UUID.Nếu tra cứu thành công và được chấp nhận kết nối,
nó sẽ chia sẻ kênh RFCOMM sử dụng trong kết nối giữa 2 thiết bị
Dưới đây là một ví dụ cơ bản về thread khởi tạo kết nối Bluetooth:
privateclassConnectThreadextendsThread{
privatefinalBluetoothSocket mmSocket;
privatefinalBluetoothDevice mmDevice;
publicConnectThread(BluetoothDevice device){
// Use a temporary object that is later assigned to mmSocket,
// because mmSocket is final
BluetoothSocket tmp =null;
mmDevice = device;
// Get a BluetoothSocket to connect with the given BluetoothDevice
try{
Trang 30// MY_UUID is the app's UUID string, also used by the server code
// Connect the device through the socket This will block
// until it succeeds or throws an exception
mmSocket.connect();
}catch(IOException connectException){
// Unable to connect; close the socket and get out
Quản lý kết nối (Managing a connection)
Khi bạn đã có một kết nối giữa 2 thiết bị thành công.Lúc này để chia sẻ dữ liệubạn cần dùng BluetoothSocket
Trang 31- Lấy InputStream và OutputStream xử lý và truyền qua socket, thông
qua getInputStream() và getOutputStream().
- Đọc và ghi dữ liệu với read(byte[]) và wite(byte[]).
Xét qua ví dụ cơ bản bên dưới để có cái nhìn thực tế hơn:
privateclassConnectedThreadextendsThread{
privatefinalBluetoothSocket mmSocket;
privatefinalInputStream mmInStream;
privatefinalOutputStream mmOutStream;
publicConnectedThread(BluetoothSocket socket){
mmSocket = socket;
InputStream tmpIn =null;
OutputStream tmpOut =null;
// Get the input and output streams, using temp objects because
// member streams are final
byte[] buffer =newbyte[1024]; // buffer store for the stream
int bytes;// bytes returned from read()
// Keep listening to the InputStream until an exception occurs
while(true){
try{
// Read from the InputStream
bytes = mmInStream.read(buffer);
// Send the obtained bytes to the UI activity
mHandler.obtainMessage(MESSAGE_READ, bytes,-1, buffer)
.sendToTarget();
Trang 32}catch(IOException e){
break;
}
}
}
/* Call this from the main activity to send data to the remote device */
publicvoid write(byte[] bytes){
1.3.TÌM HIỂU API HỖ TRỢ LẬP TRÌNH CHO CẢM BIẾN GIA TỐC
1.3.1.Tổng quan về cảm biến trong Android
Android hỗ trợ cảm biến chia làm ba phân mục sau:
Cảm biến chuyển động (Motion sensor), bao gồm gia tốc, trọng lực, conquay hồi chuyển và vector quay
Cảm biến môi trường (Environmental sensor), bao gồm khí áp, ánh sáng,nhiệt độ
Cảm biến vị trí (Position sensor), bao gồm định hướng, từ (từ kế)
Cảm biến trên Android cho phép bạn truy cập vào nhiều loại.Một số dựa trênphần cứng, một số phần mềm Cảm biến dựa trên phần cứng là thành phần vật lýđược xây dựng thành một thiết bị cầm tay hoặc tablet Chúng lấy được dữ liệu củamình bằng cách đo trực tiếp các thuộc tính môi trường cụ thể, chẳng hạn như tăngtốc, cường độ trường địa từ, hoặc thay đổi góc
Cảm biến dựa trên phần mềm không phải là thiết bị vật lý, mặc dù bắt chướccảm biến dựa trên phần cứng Cảm biến dựa trên phần mềm lấy dữ liệu từ một hoặc
Trang 33nhiều các bộ cảm biến dựa trên phần cứng và đôi khi được gọi là cảm biến ảo hoặccác cảm biến tổng hợp Các cảm biến gia tốc tuyến tính và các cảm biến trọng lực
là những ví dụ của các cảm biến dựa trên phần mềm.Các loại cảm biến rất đa dạng
do ngày càng có nhiều loại thiết bị, hãng sản xuất khác nhau, và cảm biến cũng cóthể khác nhau giữa các phiên bản Android
Hệ thống tọa độ
Các khung cảm biến sử dụng một hệ thống 3 trục tọa độ chuẩn để thể hiện cácgiá trị dữ liệu Mặc định, trục X là ngang và điểm bên phải, trục Y là thẳng đứng vàchỉ lên, và điểm Z trục về phía bên ngoài của bề mặt màn hình
Hình 1.7.Hệ thống tọa độ thể hiện các giá trị dữ liệu từ cảm biến trên điện thoại
Điểm quan trọng nhất để hiểu về hệ thống phối hợp này là các trục không đổikhi hướng màn hình của thiết bị thay đổi, hệ thống phối hợp của bộ cảm biếnkhông bao giờ thay đổi khi thiết bị di chuyển
1.3.2.Cảm biến sử dụng trong đề tài
Cảm biến sử dụng trong đề tài là cảm biến gia tốc (accelerometers sensor) thuộc nhóm cảm biến chuyển động (motion sensor).
Cảm biến gia tốc đo gia tốc của thiết bị, bao gồm cả lực hấp dẫn Đoạn codedưới sẽ chỉ cho bạn cách tạo ra một thể hiện của cảm biến gia tốc trong Android:
privateSensorManager mSensorManager;
privateSensor mSensor;
Trang 34
mSensorManager =(SensorManager)
getSystemService(Context.SENSOR_SERVICE);
mSensor =
mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
Do trong quá trình chuyển động, có sự tác động của các yếu tố về trọng lựckhiến cho các dữ liệu đo đạc của cảm biến gia tốc không đúng Nên cần phải tínhtoán để tách/loại bỏ các yếu tố đó ra Ví dụ dưới sẽ chỉ cho bạn làm như nào:
publicvoid onSensorChanged(SensorEventevent){
// In this example, alpha is calculated as t / (t + dT),
// where t is the low-pass filter's time-constant and
// dT is the event delivery rate
finalfloat alpha =0.8;
// Isolate the force of gravity with the low-pass filter
gravity[0]= alpha * gravity[0]+(1- alpha)*event.values[0];
gravity[1]= alpha * gravity[1]+(1- alpha)*event.values[1];
gravity[2]= alpha * gravity[2]+(1- alpha)*event.values[2];
// Remove the gravity contribution with the high-pass filter
linear_acceleration[0]=event.values[0]- gravity[0];
linear_acceleration[1]=event.values[1]- gravity[1];
linear_acceleration[2]=event.values[2]- gravity[2];
}
Cảm biến gia tốc là một lựa chọn tốt khi cần theo dõi chuyển động củathiết bị Hầu hết các thiết bị cầm tay, tablet chạy Android đều có cảm biếngia tốc Một điểm trừ là phải tính toán để loại bỏ lực hấp dẫn và giảm tiếng
ồn thông qua việc sử dụng các bộ lọc
Trang 351.4.TỔNG QUAN MODULE BLUETOOTH HC-05
1.4.1.Cấu tạo, nguyên lý hoạt động và một số thông số kỹ thuật của HC-05
Hình 1.8 Ảnh Module Bluetooth HC-05 thực tế
Trang 36Hình 1.9 Sơ đồ các chân của HC-05
Hình 110 chi tiết các bộ phận của HC-05
Thông số kỹ thuật HC-05
- Bluetooth name: HC-05
- Password: 1234
- Có thể chọn giữa chế độ Master (Chủ) – Slave (Tớ)
Chế độ Master: Có thể nối cặp với bất kì thiết bị làm Slave nào Không phụtrợ thêm phần ghi nhớ thiết bị kết nối cuối cùng
Khi kết nối: Thiết bị Master không chỉ có thể kết nối với các thiết bị Bluetooth
có địa chỉ riêng khác Mà còn có thể tự động tìm kiếm và nối cặp với thiết bị Slave
Giao tiếp với nhiều thiết bị
Không có chế độ Sleep
Mức năng lượng tiêu thụ: Trong quá trình kết nối, dòng điện trong khoảng30-40 miliAmpe.Dòng chính là 25 mA Sau khi kết nối, dù có giao tiếp haykhông thì dòng điện là 8 mA
Trang 37 Tốc độ giao tiếp Baurd mặc định: 9600, 4800-1.3 M.
Nút nhấn KEY: chân số 34, được nhấn để vào chế độ AT Nó sẽ quay trở lạichế độ giao tiếp nếu chân 34 ngõ vào kéo xuống mức thấp
Bảng mô tả chức năng của các chân
Bảng 1.1 Các chân kết nối trong Bluetooth HC-05
PIN 1 Chân UART_TXD, có chức năng truyền dữ liệu
tới chân RXD, nối với chân RXD của vi điều khiển
PIN 2 Chân UART_R XD, chức năng nhận dữ liệu từ
chân TXD truyền tới, nối với chân RXD của vi điều khiển
PIN 11 Chân RESET, để khởi động lại Module cho chân
nối xuống GND, khi sử dụng Module thì không nối chân RESET
PIN 12 Chân VCC, sử dụng nguồn áp 3.3 V, dải áp hoạt
động từ 3.0 V -> 4.2 V
PIN 31 Chân nối LED 1, có 3 mode:
– Khi Module nối nguồn, và chân 34 được kéo lên mức cao, chân 31 cho ra sóng vuông tần số 1 Hz làm LED nháy sáng Phụ thuộc vào chế độ AT của Module, và tốc độ BAUD RATE là
38400.Còn khi chân 34 được kéo xuống mức thấp,chân 31 cho sóng vuông ra 2 Hz, LED nháy sáng Phụ thuộc vào chế độ Pairable
PIN 32 Chân nối ra Trước khi kết nối cặp, ngõ ra ở mức
thấp Sau lần kết nối đầu kết thúc, ngõ ra ở mức cao
PIN 34 Chọn mode vào Nếu ngõ vào ở mức thấp,
Module được kết nối hoặc vào chế độ giao tiếp Nếu ngõ vào kéo lên mức cao, Module sẽ vào chế
độ AT Cho dù Module đang được giao tiếp, cũng
có thể vào chế độ AT, nếu ngõ vào ở mức cao
Nó sẽ quay trở lại chế độ giao tiếp nếu chân 34 ngõ vào kéo xuống mức thấp