Mục lục:
- Bước 1: Giới thiệu đôi chút về Bluetooth năng lượng thấp (BLE)
- Bước 2: Chỉ báo quét và kết nối
- Bước 3: Giải mã sự kiện cần điều khiển và nút
- Bước 4: Hoạt động VR Box: Cần điều khiển
- Bước 5: Hoạt động hộp VR: Các nút kích hoạt
- Bước 6: Hoạt động của VR Box: Các nút A / B
- Bước 7: Hoạt động hộp VR: Các nút C / D
- Bước 8: Kết luận
Video: Điều khiển từ xa ESP32 Bluetooth BLE: 8 bước
2024 Tác giả: John Day | [email protected]. Sửa đổi lần cuối: 2024-01-30 13:35
Dự án này là một ví dụ về cách kết nối cần điều khiển Bluetooth BLE rẻ tiền với ESP32. Mã được viết bằng Arduino IDE Ver 1.8.5 với phần bổ trợ ESP32. Cần điều khiển BLE được sử dụng là một thiết bị thương mại mà bạn có thể mua trên Internet với giá dưới $ 20,00 hoặc từ cửa hàng fiveBELoW tại địa phương của bạn với giá $ 5.
Cần điều khiển mà tôi sử dụng cho dự án này là Bộ điều khiển từ xa Bluetooth Spektrum VR Control. Nó đang được tiếp thị là hoạt động với máy tính bảng Android và IOS như một phím điều khiển / chuột để sử dụng với tai nghe VR.
Bộ điều khiển từ xa Bluetooth Control VR có một cần điều khiển duy nhất với trục X và Y, hai nút kích hoạt ở phía trước và sáu nút trên tay cầm. Hai trong số các nút là để bật / tắt nguồn và điều khiển chế độ. Bốn nút còn lại có thể được sử dụng cho bất cứ điều gì bạn muốn. Dự án này là một khung hoặc khung xử lý tất cả giao diện Bluetooth và giải mã các nút và cần điều khiển. Tất cả những gì bạn phải làm là thêm các lệnh gọi hàm để xử lý những gì bạn muốn các nút và phím điều khiển thực hiện. Bạn không cần biết bất cứ điều gì về Bluetooth để sử dụng khuôn khổ này.
Có rất nhiều trang web có hướng dẫn chi tiết để cài đặt Arduino IDE và phần bổ trợ ESP32. Tôi sẽ không cố gắng lặp lại thông tin đó ở đây. Google nó và làm theo hướng dẫn.
Khung công tác này là sự điều chỉnh của một ví dụ khách hàng BLE được xuất bản bởi IoT Sharing. Bạn có thể tìm thấy nó ở đây. Bạn có thể nghiên cứu mã này để biết cách hoạt động của BLE. Expressif có một ví dụ hoàn chỉnh cho ứng dụng khách GATT BLE và giải thích chi tiết hoạt động (không được viết cho Arduino IDE). Bạn có thể lấy nó ở đây.
Đây không phải là một hướng dẫn BLE. Tôi sẽ không giải thích cách mã hoạt động chi tiết. Tôi sẽ sử dụng thuật ngữ BLE để mô tả một số tính năng của cần điều khiển. Phần mã mà bạn cần sửa đổi cho dự án của mình sẽ được giải thích chi tiết để giúp bạn sửa đổi nó. Phạm vi được giới hạn để giữ cho Tài liệu hướng dẫn này ngắn gọn và tập trung vào việc sử dụng cần điều khiển.
Bước 1: Giới thiệu đôi chút về Bluetooth năng lượng thấp (BLE)
Đây không phải là một hướng dẫn về BLE. Khi tôi bắt đầu dự án này, tôi không biết sự khác biệt giữa BLE và Classic Bluetooth. Tôi chỉ muốn xem liệu tôi có thể lấy cần điều khiển mà tôi đã mua để hoạt động với ESP32 hay không. Trong văn bản sau, tôi sử dụng thuật ngữ BLE để cung cấp một cái nhìn tổng quan đơn giản về cách BLE hoạt động.
BLE sử dụng kiến trúc máy khách / máy chủ. Một thiết bị là một máy chủ cung cấp dịch vụ. Thiết bị còn lại là một máy khách sử dụng dịch vụ. Để giảm yêu cầu về nguồn, BLE chỉ truyền các gói thông tin nhỏ khi có sự thay đổi. Trong trường hợp cần điều khiển, thiết bị cần điều khiển là một máy chủ. Là một máy chủ, nó tự quảng cáo và sẽ truyền danh sách các dịch vụ mà nó cung cấp khi được yêu cầu. Thiết bị cần điều khiển quảng cáo năm dịch vụ. Dịch vụ duy nhất mà chúng tôi quan tâm là dịch vụ BLE HID (Thiết bị giao diện người). Một dịch vụ BLE có những gì được gọi là Đặc điểm đi kèm với nó. Đặc điểm thường là một nguồn dữ liệu. Dịch vụ HID của cần điều khiển có mười Đặc điểm. Một số Đặc điểm là trùng lặp và bị bỏ qua. Chúng tôi chỉ quan tâm đến các Đặc điểm Báo cáo BLE có khả năng Đọc và Thông báo. Ba trong số các đặc điểm đáp ứng các yêu cầu này và cung cấp dữ liệu về vị trí của cần điều khiển và trạng thái của các nút. Khi kích hoạt thông báo, máy chủ sẽ gửi các gói dữ liệu khi phát hiện thấy sự thay đổi trên đặc tính liên quan.
Khung xác minh rằng máy chủ mà nó tìm thấy có dịch vụ BLE HID và sau đó sẽ bật Thông báo trên ba Đặc điểm Báo cáo cung cấp thông tin trạng thái nút và phím điều khiển. Sau đó, khi nhấn hoặc nhả nút hoặc di chuyển cần điều khiển, ESP32 sẽ nhận được một gói dữ liệu cho biết vị trí cần điều khiển mới là gì và / hoặc trạng thái của một số nút.
Bước 2: Chỉ báo quét và kết nối
Khung định nghĩa hai LEDS, GREENLED và BLUELED và gán chúng cho hai trong số các chân GPIO của ESP32. GREENLED sáng lên khi ESP32 đang tìm kiếm cần điều khiển BLE. Khi cần điều khiển được tìm thấy, GREENLED được tắt và BLUELED sáng lên để cho biết rằng kết nối đã được thiết lập và bạn đã sẵn sàng sử dụng. Nếu mất kết nối, BLUELED bị tắt, ESP32 được đặt lại, GREENLED sáng và quá trình quét bắt đầu lại. Nếu không tìm thấy cần điều khiển trong vòng ba mươi giây thì quá trình quét sẽ dừng và GREENLED sẽ tắt. Sau năm giây, quá trình quét sẽ bắt đầu lại và GREENLED được bật.
Kết quả cuối cùng là ESP32 sẽ tiếp tục quét cần điều khiển cho đến khi tìm thấy nó. Sau khi kết nối được thực hiện, nếu sau đó bị mất, ESP32 sẽ tự thiết lập lại và bắt đầu quét lại. ESP32 được đặt lại vì không có chức năng SDK ESP32 nào để đặt lại ngăn xếp Bluetooth để bắt đầu lại quá trình quét.
Bước 3: Giải mã sự kiện cần điều khiển và nút
Một sự kiện gọi lại trên ESP32 nhận ba gói dữ liệu khác nhau từ máy chủ cho ba Đặc điểm đã được thiết lập để cung cấp Thông báo. Một gói dài bốn byte. Ba trong số các byte chứa vị trí trục X, vị trí trục Y và các nút kích hoạt, được ánh xạ bit trong byte. Hai gói còn lại mỗi gói là hai byte và có một byte duy nhất có trạng thái nút được ánh xạ bit. Các gói nhận được sẽ được giải mã và sao chép vào một mảng byte trong bộ nhớ. Dữ liệu trục cần điều khiển đi vào các byte dữ liệu X và Y và mỗi byte trong số ba byte nút được ánh xạ bit được chuyển hướng vào byte thích hợp cho các nút đó.
Nhiệm vụ FreeRTOS được tạo để xử lý dữ liệu nhận được từ các thông báo. Một tác vụ cho phím điều khiển và các nút kích hoạt, một tác vụ cho các nút A & B và một tác vụ cho các nút C & D. Mỗi nhiệm vụ này có các khu vực được đánh dấu rõ ràng mà bạn nên thêm mã để làm những gì bạn muốn với sự kiện. Tìm nhận xét "// ===== thêm mã của bạn ở đây =====" trong phần nội dung của nhiệm vụ và thêm mã của bạn sau đó. Mỗi tác vụ có một chú thích cho biết nó được sử dụng để làm gì và sử dụng Serial.println () để in một thông báo về sự kiện đã xảy ra.
Đây là một ví dụ từ nhiệm vụ nút A / B;
void taskButtonAB (void * tham số) {các nút uint8_t;
// ===== nếu nhiệm vụ yêu cầu khởi tạo một lần bất kỳ, hãy đặt nó ở đây =====
while (true) {// nhường CPU, đợi dữ liệu mới vTaskSuspend (NULL); // chúng ta vừa ngủ dậy, dữ liệu mới có sẵn button = VrBoxData [VB_BTNAB]; Serial.printf ("Các nút A / B:% 02X / n", các nút); if (button & VB_BUTTON_A) {// nút A được nhấn hoặc đang bị nhấn giữ Serial.println ("Nút A"); // ===== thêm mã của bạn vào đây =====}
if (nút & VB_BUTTON_B)
{// nút B được nhấn hoặc đang bị nhấn giữ Serial.println ("Nút B");
// ===== thêm mã của bạn vào đây =====
}} // cho} // taskButtonAB
Bước 4: Hoạt động VR Box: Cần điều khiển
Nếu cần điều khiển được để ở vị trí trung tâm, sẽ không có thông báo về phím điều khiển nào được gửi đi. Sau khi di chuyển cần điều khiển ra khỏi trung tâm, một tin nhắn thông báo với dữ liệu cần điều khiển và dữ liệu nút kích hoạt sẽ được gửi khoảng 15 phút một lần. Khi cần điều khiển được di chuyển trở lại trung tâm, một thông báo rằng nó đã di chuyển vào giữa sẽ không được gửi. Nói cách khác, nó cho bạn biết cần điều khiển đã di chuyển ra khỏi trung tâm, nhưng không phải là nó đã di chuyển vào trung tâm. Kết quả cuối cùng là bạn nhận được thông báo cho biết cần điều khiển đang di chuyển về phía giữa, nhưng không phải là nó đã đến giữa. Rất phiền toái. Hai nút kích hoạt được bao gồm với dữ liệu cần điều khiển. Nhấn một trong các nút kích hoạt sau khi đưa cần điều khiển về giữa sẽ cập nhật vị trí cần điều khiển về không. Framework được tích hợp sẵn bộ hẹn giờ thời gian chờ để tự động mô phỏng thông báo thông báo trên phím điều khiển một thời gian ngắn sau khi tất cả các thông báo thông báo trên phím điều khiển / nút kích hoạt ngừng đến. Bộ hẹn giờ đặt phím điều khiển thành 0. Cần điều khiển có phạm vi khoảng +/- 25 trên mỗi trục.
Bước 5: Hoạt động hộp VR: Các nút kích hoạt
Các nút kích hoạt sẽ gửi một tin nhắn thông báo một lần khi được nhấn và một lần nữa khi được nhả ra. Thông báo được nhấn sẽ cho biết nút đã được nhấn. Thông báo phát hành cho biết rằng cả hai nút đều được phát hành.
Giữ nút kích hoạt phía dưới sẽ ngăn máy chủ phát hiện rằng nút kích hoạt phía trên đã được nhấn. Giữ nút kích hoạt phía trên và nhấn nút kích hoạt phía dưới dẫn đến máy chủ sẽ gửi một thông báo rằng nút kích hoạt phía dưới được nhấn (nút kích hoạt phía trên sẽ bằng 0!). Việc nhả nút kích hoạt bên dưới sẽ khiến máy chủ gửi thông báo rằng nút kích hoạt phía trên được nhấn và nút kích hoạt phía dưới được giải phóng.
Nói cách khác, nút kích hoạt bên dưới chiếm ưu thế so với nút kích hoạt phía trên và sẽ ghi đè nó khi cả hai được nhấn. Bạn phải xác định cách xử lý trường hợp cả hai nút đều bấm được.
Bước 6: Hoạt động của VR Box: Các nút A / B
Các nút A và B hoạt động giống như phím điều khiển và liên tục gửi tin nhắn thông báo khi nhấn và giữ. Các thông báo dừng lại khi nút được nhả ra. Các nút A và B hoạt động tương tự như các nút Kích hoạt trong đó nút A chiếm ưu thế so với nút B giống như nút kích hoạt dưới chiếm ưu thế cho nút kích hoạt trên.
Bước 7: Hoạt động hộp VR: Các nút C / D
Các nút C và D gửi tin nhắn thông báo một lần khi được nhấn và một lần nữa khi nhả ra. Nếu nhấn giữ, không có tin nhắn nào khác được gửi cho đến khi chúng được phát hành. Nhấn giữ một trong hai nút C hoặc D sẽ ngăn máy chủ phát hiện hoạt động trên nút kia.
Bước 8: Kết luận
Hoạt động của các nút theo ý kiến của tôi là một chút khó khăn. Framework cung cấp các vị trí để đặt mã của bạn hoạt động khi một nút được nhấn. Nếu bạn cũng cần phát hiện các nút phát hành, bạn cần tìm cách thực hiện.
Bạn hoàn toàn phụ thuộc vào việc xác định những gì bạn muốn mỗi nút làm và việc di chuyển cần điều khiển nên làm. Cách bạn xử lý sự khác biệt trong trình kích hoạt, nút A & B và C & D là tùy thuộc vào bạn.
Tìm trong mã cho; các hàm taskJoyStick (), taskButtonAB (), taskButtonCD () và thêm mã của bạn sau nhận xét "// ===== add your code here =====".
Bạn sẽ cần đến bốn chức năng để xử lý phím điều khiển (tiến, lùi, phải & trái) và tối đa sáu chức năng để xử lý các nút khác nhau. Thực hiện tất cả hoặc chỉ những gì bạn cần. Sự lựa chọn là của bạn.
Nếu bạn sử dụng khuôn khổ này. Tôi rất muốn được biết bạn đã sử dụng nó để làm gì và nếu bạn thấy nó dễ sử dụng.
Nếu bạn có thắc mắc về cách nó hoạt động hoặc cần trợ giúp để nó hoạt động, hãy liên hệ với tôi.
Mã có sẵn trên GitHub tại đây.
Thưởng thức.
Đề xuất:
Ô tô được điều khiển từ xa - Được điều khiển bằng Bộ điều khiển Xbox 360 không dây: 5 bước
Ô tô được điều khiển từ xa - Được điều khiển bằng Bộ điều khiển Xbox 360 không dây: Đây là các hướng dẫn để tạo ô tô được điều khiển từ xa của riêng bạn, được điều khiển bằng bộ điều khiển Xbox 360 không dây
ESP8266 RGB LED STRIP Điều khiển WIFI - NODEMCU làm điều khiển từ xa hồng ngoại cho dải đèn Led được điều khiển qua Wi-Fi - Điều khiển điện thoại thông minh RGB LED STRIP: 4 bước
ESP8266 RGB LED STRIP Điều khiển WIFI | NODEMCU làm điều khiển từ xa hồng ngoại cho dải đèn Led được điều khiển qua Wi-Fi | Điều khiển bằng điện thoại thông minh RGB LED STRIP: Xin chào các bạn trong hướng dẫn này, chúng ta sẽ học cách sử dụng gật đầu hoặc esp8266 làm điều khiển từ xa IR để điều khiển dải LED RGB và Nodemcu sẽ được điều khiển bằng điện thoại thông minh qua wifi. Vì vậy, về cơ bản bạn có thể điều khiển DÂY CHUYỀN LED RGB bằng điện thoại thông minh của mình
Tự làm bộ điều khiển bay điều khiển đa hệ điều khiển Arduino: 7 bước (có hình ảnh)
Tự làm bộ điều khiển máy bay đa năng điều khiển Arduino: Dự án này là tạo ra một bảng logic máy bay không người lái đa năng linh hoạt nhưng tùy chỉnh dựa trên Arduino và Multiwii
Robot lăn với trình điều khiển ESP32 Thing và TB6612FNG, được điều khiển bởi Android Over BLE: 11 bước
Robot lăn với trình điều khiển ESP32 Thing và TB6612FNG, được điều khiển bởi Android Over BLE: Xin chào mọi người Đây là hướng dẫn đầu tiên của tôi. Một robot lăn (biệt danh Raidho - từ rune có liên quan đến chuyển động) dựa trên ESP32 Thing, TB6612 FNG và BLE. Một phần có vẻ đặc biệt là những bức ảnh không phải từ các chuyên gia tạo ra
Điều khiển các thiết bị điện của bạn bằng Điều khiển từ xa Tv (Điều khiển từ xa) với Màn hình nhiệt độ và độ ẩm: 9 bước
Điều khiển thiết bị điện của bạn bằng Điều khiển từ xa Tv (Điều khiển từ xa) Có Hiển thị nhiệt độ và độ ẩm: xin chào, tôi là Abhay và đây là blog đầu tiên của tôi về Các thiết bị điện và hôm nay tôi sẽ hướng dẫn bạn cách điều khiển các thiết bị điện bằng điều khiển từ xa bằng cách xây dựng cái này dự án đơn giản. cảm ơn atl lab đã hỗ trợ và cung cấp tài liệu