- Yêu cầu:
- Lập trình vi điều khiển PIC cho giao tiếp Bluetooth:
- Sơ đồ mạch và thiết lập phần cứng:
- Điều khiển đèn LED bằng Ứng dụng di động Bluetooth:
Trong hướng dẫn này, chúng ta sẽ tìm hiểu Cách thực hiện các dự án PIC không dây bằng cách kết nối Mô-đun Bluetooth (HC-06). Trong hướng dẫn trước, chúng ta đã học Cách sử dụng mô-đun USART trong Vi điều khiển PIC và thiết lập giao tiếp giữa PIC và Máy tính. Nếu bạn là người mới bắt đầu, hãy xem tại đây để xem tất cả các Hướng dẫn PIC của chúng tôi, nơi chúng tôi đã bắt đầu từ đầu, như học MPLAB và XC8, giao tiếp LED, LCD, sử dụng Bộ hẹn giờ, ADC, PWM, v.v.
Ở đây, chúng tôi đã sử dụng mô-đun Bluetooth phổ biến HC-06. Sử dụng mô-đun này, chúng tôi có thể nhận và gửi thông tin không dây từ MCU PIC của chúng tôi tới ứng dụng di động hoặc máy tính. Giao tiếp giữa PIC và HC-06 được thiết lập bằng cách sử dụng mô-đun USART có trong Vi điều khiển PIC. Bạn cũng có thể sử dụng HC-05. Chúng tôi lại hoạt động trên cùng một chế độ 8-bit Không đồng bộ, nhưng lần này chúng tôi sẽ sửa đổi mã của mình một chút để nó hoạt động với mô-đun Bluetooth. Do đó học trước hướng dẫn của UART là một lợi thế bổ sung cho dự án này.
Trong hướng dẫn này, chúng tôi sẽ bật tắt đèn LED bằng cách gửi lệnh bật hoặc tắt từ điện thoại thông minh của chúng tôi. Chúng tôi sẽ sử dụng một ứng dụng Android có tên Bluetooth Terminal có thể gửi và nhận dữ liệu qua Bluetooth. Nếu chúng tôi gửi một biểu tượng '1' từ ứng dụng, đèn sẽ được BẬT trong bảng PIC và chúng tôi sẽ nhận được xác nhận trở lại điện thoại rằng đèn đã được bật. Tương tự, chúng ta có thể gửi '0' từ điện thoại để tắt nó đi. Bằng cách này, chúng ta có thể điều khiển đèn LED trên bảng PIC của mình, tương tự như hướng dẫn UART nhưng bây giờ không dây. Chương trình hoàn chỉnh và Video chi tiết được đưa ra ở cuối hướng dẫn này.
Sơ đồ khối cơ bản để thiết lập được hiển thị bên dưới.
Yêu cầu:
Phần cứng:
- PIC16F877A Bảng hoàn hảo
- Mô-đun Bluetooth HC-05 hoặc HC-06
- Máy tính (để lập trình)
- Điện thoại di động
- Lập trình viên PICkit 3
Phần mềm:
- MPLABX
- Thiết bị đầu cuối Bluetooth (Ứng dụng di động)
Mô-đun Bluetooth HC-06:
Bluetooth có thể hoạt động ở hai chế độ sau:
- Chế độ lệnh
- Chế độ hoạt động
Trong Chế độ lệnh, chúng ta sẽ có thể định cấu hình các thuộc tính Bluetooth như tên của tín hiệu Bluetooth, mật khẩu của nó, tốc độ truyền hoạt động, v.v. Chế độ Điều hành là chế độ mà chúng ta có thể gửi và nhận dữ liệu giữa Vi điều khiển PIC và mô-đun Bluetooth. Do đó, trong hướng dẫn này, chúng tôi sẽ chỉ đùa giỡn với Chế độ vận hành. Chế độ Lệnh sẽ được để ở cài đặt mặc định. Tên Thiết bị sẽ là HC-05 (Tôi đang sử dụng HC-06) và mật khẩu sẽ là 0000 hoặc 1234 và quan trọng nhất là tốc độ truyền mặc định cho tất cả các mô-đun Bluetooth sẽ là 9600.
Mô-đun hoạt động trên nguồn cung cấp 5V và các chân tín hiệu hoạt động trên 3.3V, do đó, bộ điều chỉnh 3.3V có trong chính mô-đun. Do đó chúng ta không cần phải lo lắng về nó. Trong số sáu chân chỉ có bốn chân sẽ được sử dụng trong Chế độ vận hành. Bảng kết nối pin được hiển thị bên dưới
S. không |
Ghim trên HC-05 / HC-06 |
Ghim tên trên MCU |
Số pin trong PIC |
1 |
Vcc |
Vdd |
Chốt thứ 31 |
2 |
Vcc |
Gnd |
Chân thứ 32 |
3 |
Tx |
RC6 / Tx / CK |
Chốt thứ 25 |
4 |
Rx |
RC7 / Rx / DT |
Chốt thứ 26 |
5 |
Tiểu bang |
NC |
NC |
6 |
EN (Bật) |
NC |
NC |
Kiểm tra các dự án khác của chúng tôi để tìm hiểu thêm về mô-đun Bluetooth HC-05 với các bộ vi điều khiển khác:
- Ô tô đồ chơi điều khiển bằng Bluetooth sử dụng Arduino
- Hệ thống tự động hóa gia đình được điều khiển bằng Bluetooth sử dụng 8051
- Đèn điều khiển bằng giọng nói sử dụng Raspberry Pi
- Đài FM được điều khiển trên điện thoại thông minh bằng Arduino và Xử lý
- Xe rô bốt điều khiển bằng điện thoại di động sử dụng G-Sensor và Arduino
Lập trình vi điều khiển PIC cho giao tiếp Bluetooth:
Giống như tất cả các mô-đun (ADC, Bộ hẹn giờ, PWM), chúng ta cũng nên khởi tạo mô-đun Bluetooth của mình. Quá trình khởi tạo sẽ tương tự như khởi tạo UART nhưng chúng tôi cần thực hiện một số thay đổi để Bluetooth hoạt động hoàn hảo với MCU PIC16F877A của chúng tôi. Hãy xác định các bit cấu hình và bắt đầu với chức năng khởi tạo Bluetooth.
Khởi tạo Bluetooth:
Hầu như tất cả các mô-đun Bluetooth trên thị trường đều hoạt động ở tốc độ truyền là 9600, điều rất quan trọng là phải đặt tốc độ truyền của bạn giống như tốc độ truyền của mô-đun Bluetooth hoạt động, ở đây chúng tôi đặt SPBRG = 129 vì chúng tôi đang hoạt động ở tần số xung nhịp 20Mhz với 9600 dưới dạng tốc độ truyền. Do đó, quá trình khởi tạo ở trên sẽ chỉ hoạt động đối với các mô-đun Bluetooth hoạt động ở tốc độ truyền 9600. Cũng bắt buộc phải bật BRGH bit tốc độ truyền tốc độ cao. Điều này sẽ giúp thiết lập tốc độ truyền chính xác.
// ****** Khởi tạo Bluetooth bằng USART ******** // void Initialize_Bl Bluetooth () {// Đặt chân của RX và TX // TRISC6 = 1; TRISC7 = 1; // Đặt tốc độ truyền bằng cách sử dụng bảng tra cứu trong biểu dữ liệu (pg114) // BRGH = 1; // Luôn sử dụng tốc độ truyền tốc độ cao với Bluetooth nếu không nó sẽ không hoạt động SPBRG = 129; // Bật Asyc. Cổng nối tiếp // SYNC = 0; SPEN = 1; // Đặt nhận và truyền 8 bit RX9 = 0; TX9 = 0; // Cho phép truyền và nhận // TXEN = 1; CREN = 1; // Bật toàn cục và ph. ngắt // GIE = 1; PEIE = 1; // Bật ngắt cho Tx. và Rx.// RCIE = 1; TXIE = 1; } // ___________ BT được khởi tạo _____________ //
Nếu bạn có mô-đun BT hoạt động ở tốc độ truyền khác, thì bạn có thể tham khảo bảng tra cứu bên dưới để tìm ra giá trị của bạn cho SPBRG.
Tải dữ liệu vào Bluetooth:
Khi chức năng được khởi tạo, chúng tôi có ba chức năng trong chương trình của mình để gửi và nhận dữ liệu từ Bluetooth. Không giống như UART, chúng tôi có một số điều cần xem xét ở đây trước khi có thể truyền hoặc nhận dữ liệu. Mô-đun Bluetooth có bộ đệm Truyền và Nhận bên trong nó, dữ liệu được gửi đến nó sẽ được lưu trữ trong bộ đệm Tx. Dữ liệu này sẽ không được phát (gửi trực tuyến) trừ khi một dấu xuống dòng được gửi đến mô-đun. Do đó, để truyền dữ liệu, chúng ta phải tải bộ đệm Rx của BT và sau đó phát nó bằng cách sử dụng ký tự xuống dòng.
Công việc trên có thể dễ dàng đạt được bằng cách sử dụng các chức năng sau. Hàm dưới đây có thể được sử dụng khi chúng ta chỉ phải tải một ký tự vào bộ đệm Rx. Chúng tôi tải dữ liệu vào thanh ghi TXREG và đợi cho đến khi nó được xử lý bằng cách kiểm tra trên cờ TXIF và TRMT bằng cách sử dụng các vòng lặp while.
// Chức năng tải Bluetooth Rx. đệm với một ký tự.// void BT_load_char (char byte) {TXREG = byte; trong khi (! TXIF); trong khi (! TRMT); } // Kết thúc hàm //
Hàm dưới đây được sử dụng để tải một chuỗi vào bộ đệm Rx của mô-đun Bluetooth. Chuỗi được chia thành các ký tự và mỗi ký tự được gửi đến hàm BT_load_char () .
// Chức năng tải Bluetooth Rx. đệm với chuỗi // void BT_load_string (char * string) {while (* string) BT_load_char (* string ++); } // Kết thúc hàm /
Truyền dữ liệu qua Bluetooth:
Cho đến bây giờ chúng ta mới truyền thông tin vào bộ đệm Rx của mô-đun HC-05. Bây giờ chúng ta phải hướng dẫn nó phát dữ liệu qua mạng bằng cách sử dụng chức năng này.
// Hàm phát dữ liệu từ RX. bộ đệm // void broadcast_BT () {TXREG = 13; __delay_ms (500); } // Kết thúc hàm //
Trong hàm này, chúng tôi gửi một giá trị 13 vào thanh ghi TXREG. Giá trị 13 này không là gì ngoài giá trị thập phân tương đương cho dòng chữ (tham khảo biểu đồ ASCII). Sau đó, một độ trễ nhỏ được tạo ra để bộ phát sóng bắt đầu.
Đọc dữ liệu từ Bluetooth:
Tương tự như UART, chức năng dưới đây được sử dụng để đọc dữ liệu từ Bluetooth
// Hàm lấy một char từ Rx.buffer của BT // char BT_get_char (void) {if (OERR) // kiểm tra lỗi chạy quá mức {CREN = 0; CREN = 1; // Đặt lại CREN} if (RCIF == 1) // nếu người dùng đã gửi một char trả về giá trị char (ASCII value) {while (! RCIF); trả lại RCREG; } else // nếu người dùng chưa gửi tin nhắn return 0 return 0; } // Kết thúc hàm /
Nếu người dùng đã gửi một dữ liệu, hàm này sẽ trả về dữ liệu cụ thể đó có thể được lưu trong một biến và được xử lý. Nếu người dùng chưa gửi bất cứ điều gì, hàm sẽ trả về số không.
Chức năng chính:
Chúng tôi đã sử dụng tất cả các hàm được giải thích ở trên bên trong hoặc hàm chính. Chúng tôi gửi một số thông báo giới thiệu và sau đó đợi người dùng gửi một số giá trị dựa trên đó chúng tôi chuyển đổi đèn LED ĐỎ được kết nối với chân RB3 trên bảng Perf của chúng tôi.
void main (void) {// Khai báo biến phạm vi // int get_value; // Kết thúc khai báo biến // // Khai báo I / O // TRISB3 = 0; // Kết thúc khai báo I / O // Initialize_Bl Bluetooth (); // cho phép bluetooth của chúng tôi sẵn sàng hoạt động // Hiển thị một số thông báo giới thiệu sau khi bật nguồn // BT_load_string ("Bluetooth đã khởi tạo và sẵn sàng"); broadcast_BT (); BT_load_string ("Nhấn phím 1 để BẬT LED"); broadcast_BT (); BT_load_string ("Nhấn phím 0 để TẮT LED"); broadcast_BT (); // Kết thúc thông báo // while (1) // Lop vô hạn {get_value = BT_get_char (); // Đọc ký tự. nhận được qua BT // Nếu chúng ta nhận được một '0' // if (get_value == '0') {RB3 = 0; BT_load_string ("LED đã TẮT"); broadcast_BT (); } // Nếu chúng ta nhận được '1' // if (get_value == '1') {RB3 = 1; BT_load_string ("LED BẬT"); broadcast_BT ();}}}
Kiểm tra toàn bộ chương trình trong phần mã bên dưới.
Sơ đồ mạch và thiết lập phần cứng:
Kết nối mạch cho dự án này rất đơn giản, chúng ta chỉ cần cấp nguồn cho mô-đun Bluetooth và kết nối Tx với chân thứ 26 của PIC và Rx với chân thứ 25 của PIC như thể hiện trong sơ đồ mạch bên dưới:
Bây giờ chúng ta hãy tiến hành phần cứng. Sau khi kết nối được thực hiện, nó sẽ trông giống như thế này.
Điều khiển đèn LED bằng Ứng dụng di động Bluetooth:
Bây giờ hãy để chúng tôi chuẩn bị ứng dụng Android của chúng tôi. Tải xuống ứng dụng có tên Bluetooth Terminal từ App store hoặc sử dụng liên kết này. Sau khi ứng dụng được tải xuống và cài đặt, hãy bật bảng hiệu suất PIC của bạn mà chúng tôi đang sử dụng kể từ đầu. Đèn LED nhỏ trên Mô-đun Bluetooth của bạn sẽ nhấp nháy để cho biết rằng nó đã được bật nguồn và đang tích cực tìm kiếm điện thoại để thiết lập kết nối.
Bây giờ, hãy vào Cài đặt Bluetooth của điện thoại và tìm kiếm thiết bị Bluetooth mới, bạn sẽ có thể thấy tên HC-05 hoặc HC-06 dựa trên mô-đun của bạn. Tôi đang sử dụng HC-06 do đó điện thoại của tôi hiển thị màn hình sau. Sau đó, hãy thử ghép nối với nó và nó sẽ yêu cầu mật khẩu. Nhập mật khẩu là 1234 (đối với một số có thể là 0000) và bấm OK như hình bên dưới.
Sau khi phân tích cú pháp thành công, hãy mở ứng dụng Bluetooth Terminal mà chúng ta vừa cài đặt. Vào tùy chọn cài đặt và chọn “Kết nối thiết bị - Bảo mật” như hình dưới đây. Thao tác này sẽ mở ra một hộp bật lên nơi tất cả các thiết bị được ghép nối của chúng tôi sẽ được liệt kê như hình dưới đây. Chọn mô-đun HC-05 hoặc HC-06.
Sau khi kết nối được thiết lập, đèn trên mô-đun Bluetooth nhấp nháy cho đến nay phải không đổi để cho biết rằng nó đã kết nối thành công với điện thoại di động của bạn. Và chúng tôi sẽ nhận được thông báo giới thiệu từ Chương trình của chúng tôi như hình dưới đây.
Bây giờ nhấn '1' để bật đèn LED và nhấn '0' để tắt đèn. Quá trình làm việc hoàn chỉnh sẽ được hiển thị trong Video. Màn hình điện thoại di động của bạn sẽ giống như hình bên dưới.
Vậy là xong, chúng ta đã học Cách giao tiếp mô-đun Bluetooth với bộ vi điều khiển PIC của chúng ta, bây giờ với sự hỗ trợ của điều này, chúng ta có thể thử các dự án không dây. Có rất nhiều dự án sử dụng Bluetooth, bạn có thể thử chúng hoặc đưa ra Ý tưởng của riêng bạn và chia sẻ chúng trong phần bình luận. Ngoài ra, hãy kiểm tra dự án trước đây của chúng tôi với ứng dụng thiết bị đầu cuối Bluetooth và HC-05 như Tự động hóa nhà điều khiển bằng điện thoại thông minh bằng Arduino và Khóa mã kỹ thuật số được điều khiển bằng điện thoại thông minh bằng Arduino.
Hy vọng, hướng dẫn này đã giúp bạn! Nếu bạn gặp khó khăn ở đâu đó, vui lòng sử dụng phần bình luận.