IRremoteESP8266库通过MQTT提取Raw格式红外编码-Arduino中文社区 - Powered by Discuz! Archiver

mossan 发表于 2020-12-9 12:12

IRremoteESP8266库通过MQTT提取Raw格式红外编码

本帖最后由 mossan 于 2020-12-9 12:14 编辑

IRremoteESP8266库示例IRMQTTServer.ino可以接收红外编码并通过MQTT发送到ir_server/received,但格式是“协议+16进制”的。
其实可以做2个IRMQTTServer,一个发送ir_server-send(相当于平常的遥控器),一个接收ir_server-receive/received。
发送端可以web控制,也可以通过MQTT控制,以及本地管理端控制(通过MQTT),这样可以连接物联网平台。

发送端IRMQTTServer.ino不需要修改。
接收端IRMQTTServer.ino通过修改,可以获取Raw红外编码(参考IRutils.cpp):
添加:
String resultToRaw(const decode_results * const results) {
String output = "";
output.reserve(1024);

for (uint16_t i = 1; i < results->rawlen; i++) {
    uint32_t usecs;
    for (usecs = results->rawbuf * kRawTick; usecs > UINT16_MAX; usecs > UINT16_MAX; usecs -= UINT16_MAX) {
      output += uint64ToString(UINT16_MAX);
      output += F(",0,");
    }
    output += uint64ToString(usecs, 10);
    if (i < results->rawlen - 1)
      output += F(",");
}

return output;
}


将IRMQTTServer.ino的:
    lastIrReceived = String(capture.decode_type) + kCommandDelimiter +
      resultToHexidecimal(&capture);

修改为:
    lastIrReceived = resultToRaw(&capture);


这样,接收端web页面可以看到Raw红外编码,通过订阅ir_server-receive/received,也可以接收到Raw红外编码。
页: [1]
查看完整版本: IRremoteESP8266库通过MQTT提取Raw格式红外编码