红外发射
库: IRremote (#include <IRremote.hpp>)
访问: IrSender 全局对象
发射引脚: GPIO 44
M5Cardputer 内置红外 LED,可发射红外信号。支持 NEC、Sony、RC5 等多种协议,通过 IRremote 库实现。
初始化
#define DISABLE_CODE_FOR_RECEIVER // 节省内存(ADV 版键盘已占用 RMT)
#define SEND_PWM_BY_TIMER
#define IR_TX_PIN 44
#include <IRremote.hpp>
void setup() {
IrSender.begin(DISABLE_LED_FEEDBACK);
IrSender.setSendPin(IR_TX_PIN);
}
| 宏 | 用途 |
|---|---|
DISABLE_CODE_FOR_RECEIVER |
节省 Flash/RAM — Cardputer 不需要接收 |
SEND_PWM_BY_TIMER |
使用定时器 PWM 代替 RMT(避免 RMT 通道冲突) |
IR_TX_PIN 44 |
M5Cardputer 红外 LED 引脚 |
发送 NEC 指令
NEC 是最常用的红外协议(大多数电视、空调等)。
| 参数 | 类型 | 说明 |
|---|---|---|
address |
uint16_t |
设备地址(如 0x1111) |
command |
uint8_t |
指令码(如 0x34 表示电源) |
repeats |
uint8_t |
重复次数(0 = 发送一次) |
示例:电视电源开关
示例:用键盘控制音量
void loop() {
M5Cardputer.update();
if (M5Cardputer.Keyboard.isChange()) {
M5Cardputer.Keyboard.updateKeysState();
for (char c : M5Cardputer.Keyboard.keysState().word) {
switch (c) {
case '+':
IrSender.sendNEC(0x1111, 0x10, 0); // 音量+
break;
case '-':
IrSender.sendNEC(0x1111, 0x11, 0); // 音量-
break;
}
}
}
}
其他协议
IrSender.sendSony(address, command, repeats); // Sony SIRCS
IrSender.sendRC5(address, command, repeats); // Philips RC5
IrSender.sendRC6(address, command, repeats); // Philips RC6
IrSender.sendRaw(data, length, frequency); // 原始脉冲串
协议详情请参阅 IRremote 文档。
快速示例:红外遥控模拟器
完整示例见 examples/Basic/ir_nec:
#define DISABLE_CODE_FOR_RECEIVER
#define SEND_PWM_BY_TIMER
#define IR_TX_PIN 44
#include <IRremote.hpp>
#include <M5Cardputer.h>
void setup() {
M5Cardputer.begin();
IrSender.begin(DISABLE_LED_FEEDBACK);
IrSender.setSendPin(IR_TX_PIN);
M5Cardputer.Display.println("红外 NEC 发射器");
M5Cardputer.Display.println("按任意键发送红外指令");
}
void loop() {
M5Cardputer.update();
if (M5Cardputer.Keyboard.isChange() && M5Cardputer.Keyboard.isPressed()) {
IrSender.sendNEC(0x1111, 0x34, 0);
M5Cardputer.Display.println("已发送 NEC 0x1111 0x34");
}
}