0
0
Lập trình
Harry Tran
Harry Tran106580903228332612117

Giải Pháp Tự Chế Điều Khiển Google Meet Với ESP32-S3

Đăng vào 5 giờ trước

• 10 phút đọc

Giới Thiệu

Nếu bạn giống như nhiều người trong chúng ta, hội nghị video đã trở thành một phần thiết yếu trong quy trình làm việc hàng ngày. Tuy nhiên, đi kèm với đó là những trải nghiệm chung—và thường là đầy thất vọng:

Cuộc Chiến Chung Của Các Điều Khiển Rải Rác

  • Tìm kiếm nút tắt tiếng trong khi thuyết trình hoặc vẽ bảng
  • Có thể bạn đã thử sử dụng phím tắt trên bàn phím, nhưng chỉ phát huy tác dụng với ứng dụng đang hoạt động hoặc xung đột với các ứng dụng khác
  • Khoảnh khắc khó xử khi "Người tổ chức đã tắt tiếng bạn" vì không ai biết mic của bạn đã để mở từ khi nào
  • Hoặc ngược lại, nhận ra rằng bạn đã nhiệt tình phát biểu mà không ai nghe, vì bạn đã tắt tiếng suốt thời gian đó... 🤦

Là một người thường xuyên thuyết trình cho khách hàng, việc tìm kiếm biểu tượng mở âm thanh là một nỗi thất vọng quen thuộc. Nó làm gián đoạn dòng chảy của bài thuyết trình và, thật sự mà nói, cảm giác không chuyên nghiệp.

Đây là câu chuyện về cách tôi xây dựng một bộ điều khiển điện thoại mã nguồn mở để lấy lại quyền kiểm soát đó. Đây là một thiết bị ESP32 được thiết kế để giải quyết một vấn đề phức tạp trong việc điều khiển từ xa, sử dụng Bluetooth đa thiết bị, giúp tôi có thể kiểm soát cuộc gọi một cách hữu hình và trực quan.


Bộ Điều Khiển Google Meet Thông Minh, Chuyên Dụng

Để đối mặt với những thách thức này, tôi đã phát triển Yapper cho Google Meet. Thực chất chỉ là một nút tắt tiếng với một vài tính năng bổ sung, nhưng nó được thiết kế để tích hợp vào một quy trình làm việc phức tạp, liên quan đến nhiều ứng dụng và kết nối từ xa.

Tính Năng Chính:

  • 🎯 Nhiều Đầu Vào: Cảm biến cảm ứng điện dung, nút cơ học và bộ mã hóa quay cung cấp nhiều tùy chọn điều khiển cảm giác cho các hành động khác nhau.
  • 🔄 Chế Độ HID Đôi: Có thể gửi lệnh bàn phím USB HID cho các thao tác như điều chỉnh âm lượng, đồng thời cung cấp thông tin trạng thái qua Bluetooth.
  • 📡 Bluetooth Đa Khách Hàng: Cho phép kết nối đồng thời với nhiều máy tính.
  • 🌐 Hỗ Trợ Đa Nền Tảng: Thiết bị tương thích với Windows, macOS, Linux, và các thiết bị di động sử dụng giao thức HID.
  • 💡 Hệ Thống Phản Hồi Hình Ảnh: Một dải LED RGB cung cấp cho bạn xác nhận rõ ràng về trạng thái tắt tiếng với độ sáng có thể tùy chỉnh được lưu trong bộ nhớ flash của thiết bị.

Bạn có thể xem ngay tại repo này: rolandostar/google-meet-yapper

Khám Phá Kỹ Thuật: Câu Chuyện Đằng Sau Việc Xây Dựng

Mỗi phần của dự án này đều kể một câu chuyện về sự lặp lại và khám phá. Thiết bị cuối cùng là kết quả của việc giải quyết những vấn đề không ngờ và suy nghĩ lại về những giả định ban đầu. Dưới đây là một cái nhìn tổng quan về hành trình và những quyết định phần cứng quan trọng mà tôi đã thực hiện.

Tôi chắc chắn không phải là người đầu tiên giải quyết vấn đề nút tắt tiếng. Có nhiều dự án tuyệt vời khác như nút tắt tiếng USB xuất sắc này.

Tuy nhiên, cách tiếp cận của tôi tập trung nhiều hơn vào các quyết định giao diện phần cứng—câu chuyện về cách những lựa chọn đó đã hình thành thiết bị cuối cùng.


Từ USB Đến Bluetooth Đa Khách Hàng

Lựa chọn đầu tiên của tôi cho bộ não của bộ điều khiển là ESP32-S3 DevKit-C-1. Nó có vẻ hoàn hảo. Tôi đặc biệt muốn sử dụng hỗ trợ USB HID của nó để mô phỏng một bàn phím trực tiếp. Kế hoạch rất đơn giản: thiết bị sẽ kết nối qua USB và giao tiếp với Google Meet thông qua các sự kiện và đầu ra điện thoại HID.

Sau Đó Tôi Đã Gặp Vấn Đề 🚧

Khi tôi kết nối với máy tính xách tay làm việc của mình qua Remote Desktop, cách tiếp cận USB đơn giản của tôi đã hoàn toàn thất bại. Tôi cần hai điều: gửi các thao tác bàn phím và ghi lại dữ liệu Telephony HID. Nếu tôi kết nối thiết bị với máy tính xách tay làm việc thì máy khách RDP sẽ ghi lại các đầu vào bàn phím từ máy của tôi, có nghĩa là bất kỳ lệnh bàn phím nào từ thiết bị USB được kết nối với máy tính xách tay sẽ bị bỏ qua.

Ngược lại, nếu tôi kết nối thiết bị với PC của mình, thì các sự kiện Telephony sẽ không được chuyển qua giao thức Remote Desktop, vì vậy ngay cả khi thiết bị "được kết nối" với máy tính xách tay, nó không thể nhận dữ liệu liên quan đến cuộc gọi. Nếu đây là một thiết lập đơn giản với một thiết bị và một máy, tôi có thể đã đạt được điều này và kết thúc. (Tôi sẽ chia sẻ một phiên bản mã này như là một "điểm khởi đầu" cho các triển khai khác.)

Nhưng đối với tôi và thiết lập thực tế của tôi, dự án của tôi đã chết ngay từ đầu—cho đến khi tôi có một nhận thức.

BLE-HID là một thứ, nó chỉ đơn giản là vấn đề triển khai. Thay vì một thiết bị USB đơn giản, tôi quyết định xây dựng một thiết bị BLE HID với hỗ trợ đa khách hàng. Điều này sẽ cho phép bộ điều khiển kết nối với cả máy tính xách tay chủ và máy khách RDP của tôi cùng một lúc, định tuyến các lệnh đến cả hai.


Sự Tiến Hóa Của Nút Tắt Tiếng

Tạo một nút tắt tiếng hiệu quả đã đặt ra một thách thức kỹ thuật chính. Tôi đã quyết định ngay từ đầu rằng điều khiển chính nên là một cảm biến cảm ứng điện dung im lặng, tránh các tiếng click gây phân tâm trong các cuộc gọi.

Khái niệm ban đầu của tôi liên quan đến một "màn hình" phẳng, đẹp mắt với ánh sáng viền, sử dụng một tấm acrylic bọc giấy nhôm để cải thiện độ sáng. Tôi đã tìm thấy một video trên YouTube, chứng minh những kết quả hứa hẹn trong việc khuếch tán ánh sáng LED với các tấm acrylic và băng dính nhôm.

Nguyên Mẫu Đã Thất Bại ❌

Ánh sáng không chiếu sáng màn hình một cách chính xác, dẫn đến ánh sáng không đồng đều với các điểm sáng rõ ràng. Tôi gặp khó khăn trong việc kết hợp các yêu cầu cảm ứng điện dung, chẳng hạn như một mặt phẳng dẫn điện hoặc ít nhất một tấm đồng cảm ứng như một khu vực cảm ứng, với các lớp vật liệu mỏng. Độ tin cậy của cảm biến điện dung vẫn là một thách thức đáng kể. Nó rất kén chọn, kích hoạt nhầm hoặc không phản hồi chút nào. Sau một thời gian thất vọng và nghiên cứu, tôi đã khám phá ra một bước đột phá: tôi có thể sử dụng một mặt phẳng đất phía sau khu vực cảm ứng, dưới dạng một tấm đồng nữa.

Sự bổ sung đơn giản này đã làm cho cảm biến có hướng và cải thiện đáng kể tính nhất quán của nó, cung cấp khả năng phát hiện cảm ứng đáng tin cậy mà tôi cần, đồng thời vẫn phù hợp với giải pháp ánh sáng viền không phụ thuộc vào việc bật ánh sáng trong tấm acrylic.

Xin lỗi về việc dây điện, ahem...


Từ Màn Hình Đến Nút Silicon

Khi tôi đang thử nghiệm ý tưởng màn hình cảm ứng điện dung, tôi chỉ có màn hình trên thiết bị—không có các nút khác được lắp đặt. Về mặt thẩm mỹ, nó trông sạch sẽ. Nhưng khi tôi thêm các nút cơ học cho các chức năng khác, màn hình phẳng đột nhiên trông quá thấp và không phù hợp. Toàn bộ thiết kế cảm thấy không cân bằng.

Điều này dẫn đến một chu kỳ lặp lại khác. Được truyền cảm hứng từ cảm giác thỏa mãn của MIDI launchpads, tôi quyết định tạo ra một nút silicon mềm, nhô lên thay vì một màn hình phẳng.

Tôi đã in 3D một khuôn tùy chỉnh và đổ đầy nó bằng súng silicon tiêu chuẩn. Rõ ràng đây không phải là phương pháp sản xuất lý tưởng, nhưng nó hoạt động rất tốt. Nó đã giải quyết vấn đề chiều cao và mang đến cho thiết bị cảm giác độc đáo, chuyên nghiệp — ngay cả với những bọt khí bị mắc kẹt, nó cũng không tệ lắm.

Là một bước cuối cùng, tôi đã chấm một ít mực từ bút máy lên phần nổi của văn bản, và kết quả cuối cùng đạt tiêu chuẩn đủ tốt.


Nhãn Cho Các Nút Cơ Khí

Đối với các chức năng phụ, tôi muốn cảm giác phản hồi xúc giác thỏa mãn của các công tắc Cherry MX kiểu cơ học. Chúng rất tuyệt khi nhấn, nhưng tôi ngay lập tức gặp phải một vấn đề mới: làm thế nào tôi có thể gán nhãn cho chúng? Tôi không sở hữu một máy khắc laser, và tôi muốn một giải pháp cho phép tôi thay đổi nhãn khi tôi làm quen hơn với thiết bị.

Giải pháp của tôi là chỉnh sửa một mô hình 3D hiện có. Tôi đã in 3D một bộ phím thấp nhưng thêm một "cửa sổ" vào thiết kế. Điều này cho phép một mảnh giấy nhỏ được chèn vào như một nhãn, giúp tôi có các nút tùy chỉnh, trông chuyên nghiệp.

Giấy sẽ mòn theo thời gian, tất nhiên, nhưng đó là một minh chứng tuyệt vời cho khái niệm cho đến khi tôi có thể lấy một số vật liệu trong suốt để nâng cấp.

Tôi đã tạo cửa sổ với thể tích hình hộp âm trong SuperSlicer, và đây là một tài liệu với các biểu tượng thay thế khác mà bạn có thể in và cắt cho bản xây dựng của riêng bạn: Icons for Keycaps Labels


Tích Hợp Google Meet

Google Meet cung cấp các điều khiển điện thoại tích hợp, nhưng chúng không được bật theo mặc định. Để sử dụng một thiết bị tùy chỉnh như Yapper cho Google Meet, bạn cần bật các cài đặt này trong phần điều khiển cuộc gọi của Google Meet.

Khi thiết bị của bạn được kết nối qua Bluetooth và báo cáo đúng mô tả điện thoại của nó, nó sẽ xuất hiện như một tùy chọn có sẵn trong các cài đặt này. Điều này cho phép Google Meet nhận diện và phản hồi với các lệnh của thiết bị, tích hợp liền mạch bộ điều khiển phần cứng vào trải nghiệm hội nghị của bạn.

Một điểm nhỏ bất lợi là cơ chế BLE HID không hỗ trợ tên thiết bị, vì vậy ngay cả khi đã được thiết lập, nó sẽ luôn hiển thị là "Thiết bị không xác định" trong màn hình ghép nối, mà tôi có thể chấp nhận.

Cuối cùng, một số video, đây là thiết bị chủ đẩy trạng thái tắt tiếng đến thiết bị:

Và chức năng Push-to-Talk:

Và phát sóng đa khách hàng:

(Lưu ý trạng thái tắt tiếng trên cả hai cuộc gọi được cập nhật cùng một lúc)


Những Suy Nghĩ Cuối Cùng

Toàn bộ quá trình lặp lại này—từ USB đến BLE, từ màn hình acrylic đến nút silicon—là một ví dụ hoàn hảo về cách các dự án kỹ thuật phát triển. Tôi thấy dự án này là một cách tiếp cận nghệ thuật đối với kỹ thuật, một hành trình rất tự nhiên đã dạy tôi rằng thiết kế tốt nhất thường xuất hiện từ việc vượt qua những rào cản không ngờ.


Sẵn Sàng Xây Dựng? 🚀

Sẵn sàng xây dựng một công cụ thực sự hiểu quy trình làm việc của bạn? Tìm tất cả các tài nguyên bạn cần dưới đây. Các đóng góp cho dự án mã nguồn mở luôn được hoan nghênh.

Tài Nguyên:

  • 📂 Mã Nguồn: Github Repo
  • 🔧 Kết Nối Phần Cứng: Cấu Hình Chân
  • 🖨️ Mô Hình 3D (bao gồm khuôn silicon): Tập Tin Công Khai OnShape
  • 💬 Cộng Đồng: Hãy thoải mái thảo luận về bất kỳ vấn đề nào
Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào