Cách sử dụng HDMI-CEC trên Raspberry Pi

HDMI-CEC là một giao thức đặc biệt được thiết kế để TV giao tiếp với một thiết bị khác qua cáp HDMI. Giao thức này cho phép TV điều khiển thiết bị khác đồng thời cho phép thiết bị đó điều khiển TV.

Hầu hết các TV hiện đại đã triển khai hỗ trợ cho giao thức này, nhưng nó thường phải được bật trong cài đặt của TV. Tìm kiếm model TV sẽ giúp bạn biết cài đặt này được gọi là gì.

Sử dụng giao thức HDMI-CEC, bạn có thể sử dụng Raspberry Pi để điều khiển TV theo nhiều cách khác nhau, chẳng hạn như tắt và bật hoặc thay đổi âm lượng.

Bạn có thể sử dụng Raspberry Pi để điều khiển TV theo nhiều cách khác nhau
Bạn có thể sử dụng Raspberry Pi để điều khiển TV theo nhiều cách khác nhau

Cài đặt cec-client vào Raspberry Pi

Trong phần này, bài viết sẽ chỉ cho bạn các bước đơn giản để cài đặt phần mềm cec-client trên Raspberry Pi. cec-client là gói phần mềm sẽ sử dụng trên Raspberry Pi để điều khiển thiết bị qua giao thức HDMI-CEC.

1. Nhiệm vụ đầu tiên là cập nhật danh sách gói trên Raspberry Pi cũng như nâng cấp các gói hiện được cài đặt. Chạy hai lệnh sau.

sudo apt update
 sudo apt upgrade

Lệnh đầu tiên sẽ cập nhật danh sách gói. Lệnh thứ hai sẽ nâng cấp các gói đã cài đặt.

2. Bước tiếp theo là cài đặt gói cec-utils. Gói này chứa phần mềm cec-client sẽ sử dụng ở phần sau của hướng dẫn này.

Bạn có thể cài đặt gói này vào Raspberry Pi của mình bằng cách chạy lệnh sau.

sudo apt install cec-utils

Bằng cách sử dụng các công cụ được cung cấp bởi gói này, bạn có thể gửi lệnh bằng CEC qua cáp HDMI được kết nối với Raspberry Pi.

Tương tác với TV qua HDMI-CEC bằng Raspberry Pi

Trong phần này, bài viết sẽ chỉ cho bạn các cách sử dụng phần mềm cec-client khác nhau để tương tác với những thiết bị khác.

Trong suốt phần này, bạn sẽ nhận thấy có một số điều sẽ thực hiện cho mỗi bước.

Đầu tiên là sử dụng echo |. Sử dụng hai thứ này để chuyển lệnh trực tiếp đến phần mềm cec-client mà không cần phải khởi chạy nó.

Ngoài ra, cả hai tùy chọn -s-d cũng đang được sử dụng với phần mềm cec-client.

Tùy chọn -s cho phần mềm biết rằng bạn sẽ đưa ra một lệnh duy nhất. Phần mềm sẽ khởi động, ra lệnh sau đó thoát ngay lập tức.

Tùy chọn -d 1 đặt mức gỡ lỗi cho phần mềm. Bằng cách đặt nó thành 1, phần mềm cec-client sẽ chỉ hiển thị lỗi.

Cài đặt này làm giảm đáng kể lượng văn bản sẽ tràn vào bảng điều khiển.

Quét thiết bị HDMI-CEC từ Raspberry Pi

1. Điều đầu tiên bạn sẽ cần làm là quét các thiết bị có sẵn đang quảng cáo rằng chúng có khả năng CEC. Quét các thiết bị hỗ trợ HDMI-CEC bằng cách chạy lệnh sau trên Raspberry Pi.

echo 'scan' | cec-client -s -d 1

2. Từ lệnh này, bạn sẽ thấy danh sách các thiết bị mà Raspberry Pi hiện có quyền truy cập.

Bạn cần xác định thiết bị mà bạn muốn tương tác. Điển hình là trường “os string:” ” vendor:” sẽ giúp bạn xác định thiết bị bạn muốn tương tác.

Khi bạn đã xác định đúng thiết bị, hãy ghi lại “address:” hoặc số thiết bị.

opening a connection to the CEC adapter...
 requesting CEC bus information ...
 CEC bus information
 ===================
 device #0: TV
 address:       0.0.0.0
 active source: no
 vendor:        Sony
 osd string:    TV
 CEC version:   1.4
 power status:  standby
 language:      eng
 
 
 device #1: Recorder 1
 address:       1.0.0.0
 active source: no
 vendor:        Pulse Eight
 osd string:    CECTester
 CEC version:   1.4
 power status:  on
 language:      eng
 
 
 device #4: Playback 1
 address:       3.0.0.0
 active source: no
 vendor:        Sony
 osd string:    PlayStation 4
 CEC version:   1.3a
 power status:  standby
 language:      ???

Xin lưu ý rằng “device #1: Recorder 1” trong ví dụ này là kết nối CEC riêng của Raspberry Pi nên bạn có thể bỏ qua nó một cách an toàn.

3. Ví dụ, nếu muốn điều khiển “Sony TV”, bạn có thể thấy rằng số thiết bị sẽ là “0” và địa chỉ của thiết bị sẽ là “0.0.0.0”.

Khi có số thiết bị hoặc địa chỉ thiết bị, bạn có thể bắt đầu gửi lệnh đến nó.

Gửi lệnh “on” qua HDMI-CEC

Sử dụng cec-client để bật thiết bị là một quá trình tương đối dễ dàng.

echo 'on <DEVICEADDRESS>' | cec-client -s d 1

Như bạn có thể thấy ở trên, tất cả những gì cần làm là gửi lệnh on theo sau là địa chỉ thiết bị hoặc số thiết bị.

Ví dụ về việc bật thiết bị qua HDMI-CEC

Ví dụ, nếu muốn bật TV Sony có địa chỉ là “0.0.0.0”, bạn sẽ sử dụng lệnh như bên dưới.

echo 'on 0.0.0.0' | cec-client -s -d 1

Gửi lệnh “standby” qua HDMI-CEC

Nếu bạn muốn tắt TV (đặt nó ở chế độ chờ) bằng Raspberry Pi, bạn cũng có thể thực hiện việc này dễ dàng bằng HDMI-CEC.

echo 'standby <DEVICEADDRESS>' | cec-client -s d 1

Để đặt TV ở chế độ chờ, tất cả những gì bạn cần làm là gửi lệnh "standby", theo sau là địa chỉ hoặc số của thiết bị.

Ví dụ về cách tắt thiết bị qua HDMI-CEC

Sử dụng lệnh này tương đối đơn giản. Để đặt TV Sony ở chế độ chờ, tất cả những gì cần làm là gửi “standby”, sau đó là địa chỉ thiết bị “0.0.0.0”.

echo 'standby 0.0.0.0 | cec-client -s -d 1

Nhận trạng thái nguồn qua HDMI-CEC

Bạn thậm chí có thể sử dụng HDMI-CEC trên Raspberry Pi để truy xuất trạng thái nguồn của thiết bị.

echo 'pow <DEVICEADDRESS>' | cec-client -s d 1

Sử dụng lệnh pow, bạn có thể tìm hiểu xem thiết bị bạn đang kết nối hiện đang được bật nguồn hay ở chế độ chờ. Lệnh này có thể hữu ích để quyết định xem bạn cần bật hay tắt TV, đặc biệt là khi quản lý thiết bị từ xa.

Ví dụ về việc nhận trạng thái nguồn qua HDMI-CEC

Giống như hầu hết các lệnh HDMI-CEC, việc thực hiện điều này tương đối dễ dàng. Tất cả những gì bạn cần làm là tham chiếu pow, theo sau là địa chỉ thiết bị.

echo 'pow 0.0.0.0' | cec-client -s -d 1

Nếu thiết bị ở chế độ chờ, bạn sẽ thấy một cái gì đó giống như những gì bên dưới xuất hiện trong Terminal.

opening a connection to the CEC adapter...
 power status: standby

Truy xuất các lệnh CEC-Client bổ sung

Nếu muốn kiểm tra xem mình có thể đưa ra các lệnh nào khác cho TV từ Raspberry Pi bằng HDMI-CEC không, bạn có thể sử dụng lệnh sau.

echo 'h' | cec-client -s -d 1

Những gì lệnh này làm là truy xuất các lệnh có sẵn mà phần mềm cec-client biết cách xử lý.

Từ lệnh này, bạn sẽ nhận được một danh sách các lệnh, như ví dụ có bên dưới.

================================================================================
 Available commands:
 
 [tx] {bytes}              transfer bytes over the CEC line.
 [txn] {bytes}             transfer bytes but don't wait for transmission ACK.
 [on] {address}            power on the device with the given logical address.
 [standby] {address}       put the device with the given address in standby mode.
 [la] {logical address}    change the logical address of the CEC adapter.
 [p] {device} {port}       change the HDMI port number of the CEC adapter.
 [pa] {physical address}   change the physical address of the CEC adapter.
 [as]                      make the CEC adapter the active source.
 [is]                      mark the CEC adapter as inactive source.
 [osd] {addr} {string}     set OSD message on the specified device.
 [ver] {addr}              get the CEC version of the specified device.
 [ven] {addr}              get the vendor ID of the specified device.
 [lang] {addr}             get the menu language of the specified device.
 [pow] {addr}              get the power status of the specified device.
 [name] {addr}             get the OSD name of the specified device.
 [poll] {addr}             poll the specified device.
 [lad]                     lists active devices on the bus
 [ad] {addr}               checks whether the specified device is active.
 [at] {type}               checks whether the specified device type is active.
 [sp] {addr}               makes the specified physical address active.
 [spl] {addr}              makes the specified logical address active.
 [volup]                   send a volume up command to the amp if present
 [voldown]                 send a volume down command to the amp if present
 [mute]                    send a mute/unmute command to the amp if present
 [self]                    show the list of addresses controlled by libCEC
 [scan]                    scan the CEC bus and display device info
 [mon] {1|0}               enable or disable CEC bus monitoring.
 [log] {1 - 31}            change the log level. see cectypes.h for values.
 [ping]                    send a ping command to the CEC adapter.
 [bl]                      to let the adapter enter the bootloader, to upgrade
                           the flash rom.
 [r]                       reconnect to the CEC adapter.
 [h] or [help]             show this help.
 [q] or [quit]             to quit the CEC test client and switch off all
                           connected CEC devices.
 ================================================================================

Tại thời điểm này, bạn đã học cách sử dụng cec-client trên Raspberry Pi của mình để điều khiển các thiết bị hỗ trợ giao thức HDMI-CEC.

Chúc bạn thành công!

Xem thêm:

Thứ Năm, 15/10/2020 11:51
51 👨 93
0 Bình luận
Sắp xếp theo