我希望能够通过HDMI电缆打开(和关闭)三星电视,将树莓派连接到电视上。

我堂兄已经在其他电视上做到了这一点,并且可以,但是三星似乎不起作用。


最简单的方法是什么?
这怎么可能?

感谢您的帮助!

#1 楼

正如@lenik的回答所说,您的电视需要支持CEC。我使用以下命令从SourceForge安装了libcec的编译版本,其中包括命令行实用程序cec-client

wget http://sourceforge.net/projects/selfprogramming/files/libCEC.deb/libcec_2.1.0-1_armhf.deb/download -O libcec_2.1.0-1_armhf.deb

sudo dpkg -i libcec_2.1.0-1_armhf.deb


更新:2017-02-27

上面到SourceForge的链接不再存在。根据本文的介绍,您可以使用以下命令安装cec-client

    sudo apt-get install cec-utils


该答案的其余部分仍然有效。


这是raspberrypi.org上的一个线程,讨论使用cec-client发出命令。

该线程说以下命令已成功打开三星电视:

echo "on 0" | cec-client -s




以下命令将源从电视调谐器更改为Raspi HDMI:

echo "as" | cec-client -s




echo "tx 1f 82 30 00" | cec-client -s




以下命令未能关闭电视:

echo "tx 10 36" | cec-client -s 




echo "standby 0" | cec-client -s

standby 0
DEBUG: [ 56474] << putting 'TV' (0) in standby mode
TRAFFIC: [ 56476]   << 10:36
DEBUG: [ 56477] sending data: len = 1, payload = 10:36
DEBUG: [ 56538] received data: header:00020001 p0:00003610 p1:00000000 p2:00000000 p3:00000000 reason:1
DEBUG: [ 56539] command transmitted
DEBUG: [ 56660] received data: header:00040002 p0:04360001 p1:00000000 p2:00000000 p3:00000000 reason:2
TRAFFIC: [ 56661]   >> 01:00:36:04
NOTICE: [ 56661]    >> TV (0) -> Recorder 1 (1): feature abort ( 0)
DEBUG: [ 56661] marking opcode 'standby' as unsupported feature for device 'TV'


评论


FWIW回显“待机0” | cec-client -s对于我的Panasonic TV正常工作,尽管此过程在此后停止,我不得不将它杀死-9。

– Sparhawk
2014年7月7日,0:16

链接断开。

– jjmontes
17年2月25日在0:57

@jjmontes谢谢,我用有关如何安装cec-client的替代信息更新了答案

–热火约翰
17年2月27日在20:59

我能够待机三星电视。我在电视上更改了以下设置:应用程序/ AnyNet +(HDMI-CEC)/设置/自动关闭。将其设置为true后,当我发送待机0时,电视将进入待机状态。

–filhit
17 Mar 9 '17 at 22:42



#2 楼

您需要一台通过HDMI支持CEC(消费者电子控制)协议的电视机。最好查阅您的电视手册或公司网站,以找到有关您特定情况的详细信息,也可以快速搜索“ TV_model + CEC”,这将为您提供一些提示。

基本上,如果您的电视机是几年前生产的,很有可能您会找到如何设置和启用CEC的机会,但是对于较旧的型号,机会并不那么好。

三星的CEC实现称为Anynet+,您也可以尝试搜索。

评论


我还发现,在HDMI-CEC工作和电视继续播放之前,我需要启动XMBC。

–索比昂·拉文·安德森(ThorbjørnRavn Andersen)
13年7月31日在1:05

#3 楼

您可以制作带有IR LED的电视遥控器。有一个关于Adafruit的教程,介绍您想做什么。这是关于同一主题的另一篇博客文章。

注意:您将必须使用GPIO引脚。我不确定您是否在寻找不使用它们的解决方案。

评论


您需要一个红外灯,而不是传感器,来从Pi发送命令到电视。

–格尔本
13年7月31日在12:11

@Gerben编辑以修复。您现在可以删除不赞成票吗?

–syb0rg
13年7月31日在16:15

-(-1)=> +1 :-)

–格尔本
13年7月31日在19:20

这将是一个很好的技巧,但是无论您的信号是否按照他们的预期去做,都无法获得任何反馈。源切换菜单中选项的顺序也取决于其当前源。

– EDP
15年8月27日在14:56

#4 楼

按照HeatfanJohn的上述回答安装cec-client后,我就能够成功打开/关闭Vizio E390i-A1 LED HDTV的电源。我为社区编写了一个脚本:

通过以下方式创建新文件:

mkdir /opt/scripts; vi /opt/scripts/turntv.sh


粘贴以下内容:

#!/bin/bash
#Written by CaptainRewind for the RaspberryPi community
#Modify as needed
#Updated 2014-01-22:
#Now includes full path to cec-client (for cron purposes)
#Also includes "input" command to switch TV Input to RaspberryPi

action=

cecBin="/usr/local/bin/cec-client"

onCommand='echo "on 0" | ${cecBin} -s'
offCommand='echo "standby 0" | ${cecBin} -s'
inputCommand='echo "as" | ${cecBin} -s'

do_on()
{
eval ${onCommand} > /dev/null 2>&1
}

do_off()
{
eval ${offCommand} > /dev/null 2>&1
}

do_input()
{
eval ${inputCommand} > /dev/null 2>&1
}

case ${action} in

        on)
                do_on
                exit 0
                ;;

        off)
                do_off
                exit 0
                ;;

        input)
                do_input
                exit 0
                ;;

        *)
                echo $"Usage: 
sudo chmod +x /opt/scripts/turntv.sh
{on|off|input}" exit 1 ;; esac


使其可执行:

vi /home/pi/.bashrc


然后创建别名:

alias tvon="/opt/scripts/turntv.sh on"
alias tvoff="/opt/scripts/turntv.sh off"
alias input="/opt/scripts/turntv.sh input"


添加以下内容:

crontab -e


保存,退出,注销/登录(或仅获取.bashrc的源代码)。现在,您可以使用“ tvon”和“ tvoff”打开或关闭电视。

现在,您可以安排夜间工作以在入睡时关闭电视:

00 03 * * * /opt/scripts/turntv.sh off


添加以下内容:

q4312078q

#5 楼

我还写了一些脚本来帮助解决这个问题。我比CaptainRewind跑得更远,尽管他做得很好。这只是一个用于控制电视的Shell脚本,所以我没有包含它不支持的任何内容(例如音量和频道控制;我仍在寻找一种无需购买任何额外东西即可完成上述任何一项操作的方法)硬件),并且包含特定于安装程序的详细信息,例如“电视输入raspi”与“电视输入3”同义,但是我将其保留了下来,以便您了解如何为自己进行此类自定义。

您可以轻松使用它如果通过发出诸如“ tv on”,“ tv off”或“ tv input 1”之类的命令将其放在/ usr / local / bin / tv上,或者可以将其作为tv.sh放在主目录中并直接从那里使用。

我希望这对某些人有所帮助。


#!/bin/bash



# must be called with a parameter
# tv.sh [command]
# will send the associated command to the TV over CEC.

if [ $# -lt 1 ] #Check to see if at least one parameter was supplied
then
  echo "Must be called with the command to send to the television"
  echo "Examples include on, off, and input."
  echo "example: " q4312078q "input PC"        # q4312078q is the name of the program
  echo "For help, use: " q4312078q " -? "
  exit 1
fi

case  in
  "-?")       echo "Supported commands include: on, off, status, as,"
              echo "input [source]" ;;
  ## begin list of commands.
  ## most of these came from http://www.cec-o-matic.com/
  ## more can be added, including proprietary commands.
  "on")       echo "on 0" | cec-client -s ;;
  "off")      echo "standby 0" | cec-client -s ;;
  "status")   echo "pow 0" | cec-client -s |grep "power status:" ;;
  "as")       echo "as" | cec-client -s ;;
  "input")
  if [ $# -ge 2 ]       # if there were 2 or more parameters
  then
    case  in          # check the second one
        # NOTE: These must all be broadcast to work. (2nd nibble must be F)
      "1")      echo "tx 1F 82 10 00" | cec-client -s ;;
      "bluray") echo "tx 1F 82 10 00" | cec-client -s ;; # same as 1
      "2")      echo "tx 1F 82 20 00" | cec-client -s ;;
      "3")      echo "tx 1F 82 30 00" | cec-client -s ;;
      "pc")     echo "tx 1F 82 30 00" | cec-client -s ;; # same as 3
      "raspi")  echo "tx 1F 82 30 00" | cec-client -s ;; # same as 3
      "4")      echo "tx 1F 82 40 00" | cec-client -s ;;
    esac
  else
    echo "input needs a second parameter"
    echo "usage: " q4312078q " input [input name]"
    echo "input name is 1-4, bluray, pc, or raspi"
  fi
  ;;  # end of the input case

  *) echo  "is not a recognized parameter. " q4312078q " -? for a list." ;;
esac
exit 0


#6 楼

您可能想重试最新版本的XBMC(现在称为Kodi')
我最好使用Samsung UE46F6500电视和OpenELEC(官方)版本:Kodi 5.95.3,尽管CEC控制丢失了将电视置于待机状态或重新打开电视后:

待机:


echo“ standby 0” | cec-client -s


打开:


echo“ on 0” | cec-client -s


更改源:


echo“ as” | cec-client -s


但是,这些功能在远离Kodi的情况下独占了CEC接口的控制权,因此在这些命令中的任何一个操作之后,Kodi都将失去CEC控制,并且遥控器将停止工作。您需要重新启动Kodi才能使其再次工作:


systemctl restart kodi


Kodi(> = 13)内置功能CECToggleState,CECActivateSource,CECStandby
有人正在使用这些内置功能通过python传递这些cec命令,或者正在寻找以共享模式打开cec硬件的可能性:http:// forum。 kodi.tv/showthread.php?tid=207524和https://discourse.osmc.tv/t/control-tv-on-standby-toggle-using-cec-kodi-built-in-functions/3638/4