Learning IR Remote with BLE Interface

Leonid Blouvshtein and Yosi Roitman


This work demonstrates how to use the cc2650 device for recording and transmitting IR signals of IR remote controllers.

We support two basic actions:

The commands are sent over BLE using a GATT profile. The BLE implementation is based on the project-zero example (supplied by TI).

Infrared Controllers - Background

A good and simple explanation can be found here.

Because there are many IR protocols and we want to support all of them, we do not interpret the IR code. We just save the timestamps of the neg/pos edge events.


We will use the following components:

Implementation Details


During the recording stage an interrupt is registered on both edges of the IR receiver pin. The interrupt saves the timestamp of the event to memory.

The timestamp is 32 bits long so for memory utilization we save only the delta from the previous event using 2 bytes.


We need to modulate the pulses with a 38KHz signal. For that purpose we configured a GPT in the cc2650 to function as a PWM. The GPT is turned on and off according to the pulse recorded widths.

Note that the IR LED ideally needs 50mA of current which the board cannot supply, hence we used a BJT transistor in our circuit.

Code Structure

Example signals

We recorded multiple button presses of a remote control used for controlling an air conditioner.

Here we can see that the remote uses a protocol sends pulses of lengths 1, 2, 3, 4 milliseconds. event lengths

In the following two charts we see that the different messages are very similar except for minor variations. message plots message plots