IR custom not working on Bruce Firmware (M5StickS3) while TV-B-Gone works is almost always a software or driver issue, not a hardware problem.
Most likely causes:
- LEDC PWM misconfiguration (ESP32-S3 specific)
The IR signal on ESP32-S3 relies on LEDC hardware PWM. If it is misconfigured, the carrier frequency may not be 38kHz, the duty cycle may be wrong, or the LEDC channel may conflict with other peripherals. TV-B-Gone can still work because it uses very tolerant burst patterns, while custom IR requires precise timing.
- Broken raw IR transmission
In some Bruce builds, raw IR sending is unstable. The microsecond timing values may be incorrectly converted to hardware ticks, or the buffer may be partially corrupted or truncated. This results in incomplete or invalid IR waveforms.
- Protocol encoding issues
For protocols like NEC, Sony, or RC5, the firmware must encode bits with strict timing and modulation accuracy. On unstable S3 implementations, bits may still be sent but with incorrect timing, making the signal unreadable for receivers.
Why TV-B-Gone still works:
TV-B-Gone uses long, repetitive, and simple IR bursts that are very tolerant to timing errors. Even with imperfect PWM configuration, it can still successfully trigger devices.
Real debugging steps:
- Ensure a stable 38kHz carrier frequency on LEDC
- Use a dedicated LEDC channel not shared with other peripherals
- Avoid raw IR mode and test with simple NEC protocol first
- Test IR outside Bruce using a minimal Arduino IRremote sketch to isolate whether the issue is firmware or hardware
Conclusion:
The issue is almost certainly caused by instability in LEDC PWM configuration or IR encoding in Bruce firmware on ESP32-S3. The hardware is functioning correctly, but the software layer responsible for precise timing is unreliable.
If needed, I can help you patch the IR module or build a minimal working IR test for ESP32-S3.
IR custom not working on Bruce Firmware (M5StickS3) while TV-B-Gone works is almost always a software or driver issue, not a hardware problem.
Most likely causes:
The IR signal on ESP32-S3 relies on LEDC hardware PWM. If it is misconfigured, the carrier frequency may not be 38kHz, the duty cycle may be wrong, or the LEDC channel may conflict with other peripherals. TV-B-Gone can still work because it uses very tolerant burst patterns, while custom IR requires precise timing.
In some Bruce builds, raw IR sending is unstable. The microsecond timing values may be incorrectly converted to hardware ticks, or the buffer may be partially corrupted or truncated. This results in incomplete or invalid IR waveforms.
For protocols like NEC, Sony, or RC5, the firmware must encode bits with strict timing and modulation accuracy. On unstable S3 implementations, bits may still be sent but with incorrect timing, making the signal unreadable for receivers.
Why TV-B-Gone still works:
TV-B-Gone uses long, repetitive, and simple IR bursts that are very tolerant to timing errors. Even with imperfect PWM configuration, it can still successfully trigger devices.
Real debugging steps:
Conclusion:
The issue is almost certainly caused by instability in LEDC PWM configuration or IR encoding in Bruce firmware on ESP32-S3. The hardware is functioning correctly, but the software layer responsible for precise timing is unreliable.
If needed, I can help you patch the IR module or build a minimal working IR test for ESP32-S3.