Skip to content

Hardware Setup

Alejandro Mora edited this page May 8, 2026 · 1 revision

Hardware Setup

InfraFi supports multiple receiver backends. Choose the one that matches your hardware.


IR Receiver Options

Option A - Built-in CIR (Recommended for Intel NUCs)

Many Intel NUCs and mini-PCs include an ITE8708 CIR (Consumer Infrared) chip. This is the simplest setup - no additional hardware needed.

Supported devices: Intel NUC8, NUC7, NUC6, and other systems with ITE8708 or compatible CIR controllers.

Verify your CIR receiver:

ls /dev/lirc*           # Should show /dev/lirc0
cat /sys/class/rc/rc0/protocols   # Should include [rc-6]

If RC-6 is not active:

echo "rc-6 nec" | sudo tee /sys/class/rc/rc0/protocols

The install.sh script handles this automatically and creates a udev rule to persist it across reboots.

Note on TX: Many NUCs (e.g. NUC8i5BEK) include the ITE8708 chip but have no physical IR LED wired for transmission. In this case, ACK TX requires an external IR blaster (see Option C below).

Daemon invocation:

sudo infrafid -d /dev/lirc0 -f -v

Option B - Arduino Pro Micro Transceiver

The Arduino Pro Micro firmware provides a universal IR transceiver via USB CDC serial. This works on any Linux machine regardless of built-in IR hardware. It supports both RX and TX (ACK), so no separate IR blaster is needed.

See Arduino Firmware for full build and wiring instructions.

Daemon invocation:

sudo infrafid -s /dev/ttyACM0 -f -v

Option C - External USB IR Blaster (ACK TX only)

If your CIR receiver works fine for RX but has no TX capability, you can add a USB IR blaster as a dedicated ACK transmitter (e.g. a USB FLIRC dongle configured for LIRC TX).

sudo infrafid -d /dev/lirc0 -a /dev/lirc1 -f -v
#                 ^RX              ^TX

Option D - evdev Input Device

Some embedded Linux devices (e.g. Squeezebox Touch) expose IR via the Linux input subsystem (/dev/input/eventN) using NEC protocol scancodes via MSC_RAW events.

sudo infrafid -e /dev/input/event1 -f -v

Find the right event device:

cat /proc/bus/input/devices   # Look for IR or remote entries

Arduino Pro Micro Wiring

The Arduino Pro Micro firmware uses the following pin assignments:

Pin Function Component
2 (INT0) IR Receive TSOP38238 data out
3 (PWM) IR Transmit IR LED via NPN transistor
4 Test Mode Jumper to GND to enable
17 (RX LED) Activity indicator Built-in LED

IR Receiver Circuit

TSOP38238
  Pin 1 (OUT) --> Arduino pin 2
  Pin 2 (GND) --> GND
  Pin 3 (VS)  --> 3.3V or 5V (with 100 ohm series + 100uF cap to GND)

IR Transmitter Circuit

Arduino pin 3 --> 100 ohm resistor --> NPN base (e.g. 2N3904)
NPN collector --> IR LED anode (940nm, e.g. TSAL6200)
IR LED cathode --> GND
NPN emitter   --> GND

A 100 ohm resistor on the base and a 10-33 ohm resistor in series with the LED are typical values. Higher LED current = longer range.

The SEND_PWM_BY_TIMER build flag is required for hardware PWM IR carrier generation on the Pro Micro. This is set in platformio.ini.


Flipper Zero IR Port

The Flipper Zero has a built-in IR transmitter and receiver on the top edge of the device. No modification needed. Aim this port at the server's IR receiver window.

Effective range depends on lighting conditions and line of sight. For best results:

  • Keep within 2-3 meters
  • Avoid bright ambient light directly on the receiver
  • Aim the Flipper top edge directly at the IR window

Protocol Compatibility Summary

Hardware RX Protocol TX (ACK)
ITE8708 CIR RC-6, NEC (kernel decoded) Rarely has TX LED wired
Arduino Pro Micro RC-6 (IRremote lib) RC-6 via IR LED
evdev input NEC via MSC_RAW No (use separate LIRC device)
USB IR Blaster N/A (TX only) RC-6 via LIRC

Clone this wiki locally