HDMI CEC Interface

This is meant to be a continuation of the now read-only thread 'Forum 2005-2010 (read only) :: Hardware :: Interfacing :: HDMI CEC interface'

I'm looking to jump into this for use with my MythTV box. While I really like the idea of interfacing via the video card's DDC (I2C) lines, I'd like the ability to wake the PC up when the PC's input is selected. For this I need a wake method and the most obvious is the USB port of the Arduino board (with the ring line connected appropriately). Other options would have been the serial port, the ps/2 port, or a FET connected to the PCs power button.

With that in mind, I'm getting ready to send off a two layer PCB that connects to the Arduino nano, has the circuit described here:


And has an HDMI passthrough. I'm using a SMT HMDI receptacle and a reverse SMT HDMI receptacle placed back to back for the passthrough. The reverse receptacle is used to avoid having to "swizzle" the TMDS lines. I'd like to be able to use a HMDI plug and receptacle back to back instead, but I can't find any HDMI plugs in single quantities.

I'll post the schematics and gerbers later today. I'm trying to get the boards into a DortBoxPBX run that is on June 27th, so if anyone has any suggestions for additions or things they wished their CEC setup had, let me know, thanks!

Here's the page where I'm currently hosting the design:

Here are the two HDMI receptacles I'm planning on using:

Interesting project, good luck with it and I would like to see it once your done.

Very nice. I can't wait to see some pics of it working.

To wakeup your pc, you can try this maybe... Remotely Waking Up Your PC
What is this MythTV box? And what do you want with this?
Any way, good luck ;D

Thank you for trying to be helpful.

MythTV is a DVR system (http://mythtv.org). In my particular configuration, I have a backend server that is always on. It performs the data storage, recording of new shows, streaming, etc. I also have a frontend that is located underneath the TV. The frontend system is a little on the beafy side, so it wastes a lot of power to have it on all the time.

I currently have an MCE USB receiver that I can both control the MythTV frontend and wake and suspend it. This requires a separate remote.

With a CEC interface, I can send and receive commands from the TV. So not only can I receive commands from the TV remote, I can also know when the frontend’s video source is selected and wake a suspend it as necessary. So its the Arduino that is connected to the HDMI CEC line that needs to do the waking. Since the USB chip built into the Arduino board can perform the wake function, that’s what I’ll be using.

However, it definitely would be a fun project to interface your TVs CEC line with ethernet via Arduino, thus providing interfacing to your entire network.

Hey guys, just stumbling back into this. If anyone wants access to the google code site Google Code Archive - Long-term storage for Google Code Project Hosting., let me know. There are some folks on the XBMC project who are interested in a CEC adapter, so I'm hoping we can work towards a solid library.

New product (about 35 EUR) : Control your TV from Kodi, or vice versa! USB - CEC Adapter

I got some PCBs spun using the gerbers on gedasymbols: Arduino HDMI-CEC

There is no BOM on the website, and I'm confused as to why there are 2 different types of HDMI connectors. (something like USB-A vs B?)
Also, how does the Aduino Nano mount?


To answer my own question, looks like one of the hdmi connectors has reverse pinout. I guess that simplified the PCB layout?

I created a BOM here. cec-arduino/BOM.tsv at master · phatpaul/cec-arduino · GitHub

Now to build it and see if this thing is going to work...
The hdmi connectors are aweful close together on the PCB. It is going to be a challenge to solder this by hand!

I try to upload to Arduino cec_player nano,error:
sketch_feb15c.cpp: In function 'void setup()':
sketch_feb15c:30: error: 'l' was not declared in this scope

#include "CEC_Player.h"

#define IN_LINE 10 // was 2
#define OUT_LINE 11 // was 3

CEC_Player device(0x1000);

bool XX_GetLineState()
int state = digitalRead(IN_LINE);
return state == LOW;

void XX_SetLineState(CEC_Device* device, bool state)
digitalWrite(OUT_LINE, state?LOW:HIGH);
// give enough time for the line to settle before sampling
// it
device->_lastLineState2 = XX_GetLineState();

void setup()
pinMode(IN_LINE, INPUT);

digitalWrite(OUT_LINE, LOW);

l = '\0';

//device.MonitorMode = true;
device.Promiscuous = true;

void loop()
if (Serial.available())
unsigned char c = Serial.read();

switch (c)
case 'd':
device.debug = ! device.debug;
Serial.print("DEBUG ");
case 'r':
device.raw = ! device.raw;
Serial.print("RAW ");
case '0':
device.Transmit(15, 1, COP_STANDBY);
case '1':
device.Transmit(0, 1, COP_IMAGE_VIEW_ON);
case '2':
device.Transmit(15, 3, COP_ACTIVE_SOURCE, 0x10, 0x00);
Serial.println("HELP (d) DEBUG (r) RAW (0) TV OFF (1) TV ON (2) HTPC");

any idea?

any idea?

Don't try to assign a value to an undefined variable.

Why do you think I is defined, when, clearly, it isn't?


I hate to start a new thread so I am going to bring this one back from the dead.

I have a quick question what pins are required from the arduino to the HDMI connection I am planning to ad the circuit directly to the motherboard rather than a pass-thru connector. I notice in the pcb linked above it appears to have about 5 pins soldered in. However in the electrical diagram posted in the original thread they only have 2 pins listed.

So I will be totally honest here and say Help I am totally new with the arduinos and am completly lost.


Forgive me for posting in this old thread, but I didn't get a reaction in my new thread. I am struggling to get an Arduino HDMI CEC setup to work.

Maybe some of you still are subscribed to this original thread and may be able to help me. :relaxed: