Arduino-IRremote VS FastLED

Compare Arduino-IRremote vs FastLED and see what are their differences.


Infrared remote library for Arduino: send and receive infrared signals with multiple protocols (by Arduino-IRremote)


The FastLED library for colored LED animation on Arduino. Please direct questions/requests for help to the FastLED Reddit community: We'd like to use github "issues" just for tracking library bugs / enhancements. (by FastLED)
InfluxDB - Power Real-Time Data Analytics at Scale
Get real-time insights from all types of time series data with InfluxDB. Ingest, query, and analyze billions of data points in real-time with unbounded cardinality.
SaaSHub - Software Alternatives and Reviews
SaaSHub helps you find the best software and product alternatives
Arduino-IRremote FastLED
33 344
4,336 6,263
1.3% 0.6%
7.8 7.4
3 days ago 10 days ago
C++ C++
GNU General Public License v3.0 or later MIT License
The number of mentions indicates the total number of mentions that we've tracked plus the number of user suggested alternatives.
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.


Posts with mentions or reviews of Arduino-IRremote. We have used some of these posts to build our list of alternatives and similar projects. The last one was on 2023-06-20.
  • Connect to wand?
    1 project | /r/MagiQuest | 10 Sep 2023
    However, there are plenty of libraries at this point which can handle the signal to varying degrees (some cant handle cast type but many dont care about that feature, including the game itself). I believe the most up to date currently is:
  • ffffffff error in serial monitor
    1 project | /r/arduino | 8 Jul 2023
    RTFM. : " must use the statement #include instead of #include in your main program..."
  • IRremote SendAndReceive
    1 project | /r/arduino | 6 Jul 2023
    /* * SendAndReceive.cpp * * Demonstrates sending IR codes and receiving it simultaneously * * This file is part of Arduino-IRremote * ************************************************************************************ * MIT License * * Copyright (c) 2021-2023 Armin Joachimsmeyer * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is furnished * to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in all * copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * ************************************************************************************ */ #include // select only NEC and the universal decoder for pulse distance protocols #define DECODE_NEC // Includes Apple and Onkyo #define DECODE_DISTANCE_WIDTH // In case NEC is not received correctly. Universal decoder for pulse distance width protocols #define DECODE_SAMSUNG //#define EXCLUDE_UNIVERSAL_PROTOCOLS // Saves up to 1000 bytes program memory. //#define EXCLUDE_EXOTIC_PROTOCOLS // saves around 650 bytes program memory if all other protocols are active //#define NO_LED_FEEDBACK_CODE // saves 92 bytes program memory //#define RECORD_GAP_MICROS 12000 // Default is 5000. Activate it for some LG air conditioner protocols //#define SEND_PWM_BY_TIMER // Disable carrier PWM generation in software and use (restricted) hardware PWM. //#define USE_NO_SEND_PWM // Use no carrier PWM, just simulate an active low receiver signal. Overrides SEND_PWM_BY_TIMER definition //#define DEBUG // Activate this for lots of lovely debug output from the decoders. #include "PinDefinitionsAndMore.h" // Define macros for input and output pin etc. #include #define DELAY_AFTER_SEND 2000 #define DELAY_AFTER_LOOP 5000 void setup() { Serial.begin(9600); #if defined(__AVR_ATmega32U4__) || defined(SERIAL_PORT_USBVIRTUAL) || defined(SERIAL_USB) /*stm32duino*/|| defined(USBCON) /*STM32_stm32*/|| defined(SERIALUSB_PID) || defined(ARDUINO_attiny3217) delay(4000); // To be able to connect Serial monitor after reset or power up and before first print out. Do not wait for an attached Serial Monitor! #endif // Just to know which program is running on my Arduino Serial.println(F("START " __FILE__ " from " __DATE__ "\r\nUsing library version " VERSION_IRREMOTE)); // Start the receiver and if not 3. parameter specified, take LED_BUILTIN pin from the internal boards definition as default feedback LED IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK); Serial.print(F("Ready to receive IR signals of protocols: ")); printActiveIRProtocols(&Serial); Serial.println(F("at pin " STR(IR_RECEIVE_PIN))); IrSender.begin(); // Start with IR_SEND_PIN as send pin and enable feedback LED at default feedback LED pin Serial.println(F("Send IR signals at pin " STR(IR_SEND_PIN))); #if FLASHEND >= 0x3FFF // For 16k flash or more, like ATtiny1604 // For esp32 we use PWM generation by ledcWrite() for each pin. # if !defined(SEND_PWM_BY_TIMER) && !defined(USE_NO_SEND_PWM) && !defined(ESP32) /* * Print internal software PWM generation info */ IrSender.enableIROut(38); // Call it with 38 kHz to initialize the values printed below Serial.print(F("Send signal mark duration is ")); Serial.print(IrSender.periodOnTimeMicros); Serial.print(F(" us, pulse correction is ")); Serial.print(IrSender.getPulseCorrectionNanos()); Serial.print(F(" ns, total period is ")); Serial.print(IrSender.periodTimeMicros); Serial.println(F(" us")); # endif // infos for receive Serial.print(RECORD_GAP_MICROS); Serial.println(F(" us is the (minimum) gap, after which the start of a new IR packet is assumed")); Serial.print(MARK_EXCESS_MICROS); Serial.println(F(" us are subtracted from all marks and added to all spaces for decoding")); #endif } uint16_t sAddress = 0xB24D; uint16_t sCommand = 0x3FD; uint8_t sRepeats = 1; /* * Send NEC IR protocol */ void send_ir_data() { Serial.print(F("Sending: 0x")); Serial.print(sAddress, HEX); Serial.print(sCommand, HEX); Serial.println(sRepeats, HEX); Serial.flush(); // To avoid disturbing the software PWM generation by serial output interrupts // clip repeats at 4 if (sRepeats > 4) { sRepeats = 4; } // Results for the first loop to: Protocol=NEC Address=0x102 Command=0x34 Raw-Data=0xCB340102 (32 bits) IrSender.sendSamsung48(sAddress, sCommand, sRepeats); } void receive_ir_data() { if (IrReceiver.decode()) { Serial.print(F("Decoded protocol: ")); Serial.print(getProtocolString(IrReceiver.decodedIRData.protocol)); Serial.print(F(", decoded raw data: ")); #if (__INT_WIDTH__ < 32) Serial.print(IrReceiver.decodedIRData.decodedRawData, HEX); #else PrintULL::print(&Serial, IrReceiver.decodedIRData.decodedRawData, HEX); #endif Serial.print(F(", decoded address: ")); Serial.print(IrReceiver.decodedIRData.address, HEX); Serial.print(F(", decoded command: ")); Serial.println(IrReceiver.decodedIRData.command, HEX); IrReceiver.resume(); } } void loop() { /* * Print loop values */ Serial.println(); Serial.print(F("address=0x")); Serial.print(sAddress, HEX); Serial.print(F(" command=0x")); Serial.print(sCommand, HEX); Serial.print(F(" repeats=")); Serial.println(sRepeats); Serial.flush(); send_ir_data(); IrReceiver.restartAfterSend(); // Is a NOP if sending does not require a timer. // wait for the receiver state machine to detect the end of a protocol delay((RECORD_GAP_MICROS / 1000) + 5); receive_ir_data(); delay(2000); // Loop delay }
  • pls need help with school project
    1 project | /r/arduino | 26 Jun 2023
    Maybe your use of decode() is not correct, it seems to have changed in newer versions.
  • How do i build a homemade Infrared Sender?
    2 projects | /r/diyelectronics | 20 Jun 2023
    Use this library
  • IR receiver returns the same code for every button input
    2 projects | /r/arduino | 23 Mar 2023
    if (IrReceiver.decodedIRData.flags & IRDATA_FLAGS_WAS_OVERFLOW) { Serial.println(F("Overflow detected")); Serial.println(F("Try to increase the \"RAW_BUFFER_LENGTH\" value of " STR(RAW_BUFFER_LENGTH) " in " __FILE__)); // see also } else { Serial.println(divider); Serial.print("protocol: "); Serial.print(getProtocolString(IrReceiver.decodedIRData.protocol)); Serial.print(" (0x"); Serial.print(IrReceiver.decodedIRData.protocol, HEX); Serial.println(")"); if (IrReceiver.decodedIRData.protocol != 0) { // Unknown protocol (typically due to a misread) is ignored. Serial.print("address: "); Serial.println(IrReceiver.decodedIRData.address, HEX); Serial.print("command: "); Serial.println(IrReceiver.decodedIRData.command, HEX); Serial.print("data: "); Serial.println(IrReceiver.decodedIRData.decodedRawData, HEX);
  • IRremote only returns ffffffff value
    1 project | /r/arduino | 22 Mar 2023
    GitHub - Arduino-IRremote/Arduino-IRremote: Infrared remote library for Arduino: send and receive infrared signals with multiple protocols
  • MQTT &amp; IR Receiver
    2 projects | /r/esp32 | 3 Feb 2023
    I have tried and, both cause the same error.
  • IRemote Library
    1 project | /r/arduino | 30 Nov 2022
    This is the library:
  • Question about the possibility of automating a humidifier
    1 project | /r/arduino | 26 Nov 2022
    Easy! I've done something similar with a fan & light combo, basically if you use a library such as IRremote and an IR receiver, you can record all the it signals that the remote puts out, IRremote might even be able to automatically decode the signal into a code, but if not then you can record a raw sequence; then using an IR transmitter, you can resend those codes.


Posts with mentions or reviews of FastLED. We have used some of these posts to build our list of alternatives and similar projects. The last one was on 2023-07-10.

What are some alternatives?

When comparing Arduino-IRremote and FastLED you can also consider the following projects:

IRremoteESP8266 - Infrared remote library for ESP8266/ESP32: send and receive infrared signals with multiple protocols. Based on:

WLED - Control WS2812B and many more types of digital RGB LEDs with an ESP8266 or ESP32 over WiFi!

Adafruit_IO_Arduino - Arduino library to access Adafruit IO from WiFi, cellular, and ethernet modules.

FastLED-esp32 - Parallel outputs for esp32

AGirs - A Girs infrared server for the Arduino


ESP32_FFT_VU - A spectrum analyzer VU meter for the ESP32 and a FastLED matrix

Tasmota - Alternative firmware for ESP8266 and ESP32 based devices with easy configuration using webUI, OTA updates, automation using timers or rules, expandability and entirely local control over MQTT, HTTP, Serial or KNX. Full documentation at

ExtremeRacers-Speedometer - In-game speedometer brought to the real world

FastLED_NeoMatrix - Adafruit GFX compatible library for NeoPixel based Matrices using FastLED library

StepperDriver - Arduino library for A4988, DRV8825, DRV8834, DRV8880 and generic two-pin (DIR/STEP) stepper motor drivers

OctoWS2811 - Control thousands of WS2811/2812 LEDs at video refresh speeds

InfluxDB - Power Real-Time Data Analytics at Scale
Get real-time insights from all types of time series data with InfluxDB. Ingest, query, and analyze billions of data points in real-time with unbounded cardinality.
SaaSHub - Software Alternatives and Reviews
SaaSHub helps you find the best software and product alternatives