Page 1 of 1

有人在esp32上面实现过红外解码的工作吗?

Posted: Tue Aug 06, 2019 9:23 am
by lqzero
我原来在ST的单片机上实现过,具体是进IO中断然后判断高电平时常来进行解码的,但是我在esp32中试过,感觉不太好搞啊(中断时试过,通过信号量在线程中也试过)。求教求教~

Re: 有人在esp32上面实现过红外解码的工作吗?

Posted: Wed Aug 07, 2019 2:18 am
by ESP_houwenxiang
ESP32 有 RMT 模块, 可以接收不带载波的序列, 然后软件进行解码, 是否可以尝试一下?

示例代码路径为 IDF_PATH/example/peripherals/rmt_nec_tx_rx

谢谢

Re: 有人在esp32上面实现过红外解码的工作吗?

Posted: Wed Aug 07, 2019 5:47 am
by lqzero
好的。我详细看一下。谢谢谢

Re: 有人在esp32上面实现过红外解码的工作吗?

Posted: Mon Aug 12, 2019 3:13 am
by lqzero
ESP_houwenxiang wrote:
Wed Aug 07, 2019 2:18 am
ESP32 有 RMT 模块, 可以接收不带载波的序列, 然后软件进行解码, 是否可以尝试一下?

示例代码路径为 IDF_PATH/example/peripherals/rmt_nec_tx_rx

谢谢
demo详细看过啦,想请教两个问题1、我发连续发码改为了只发一次,为什么接收不到2、tx rx没连接有时会出现rx buffer full的情况,干扰问题?

Re: 有人在esp32上面实现过红外解码的工作吗?

Posted: Thu Aug 15, 2019 2:41 am
by ESP_houwenxiang
demo详细看过啦,想请教两个问题1、我发连续发码改为了只发一次,为什么接收不到2、tx rx没连接有时会出现rx buffer full的情况,干扰问题?
1. 请问你是将 ESP32 的发送引脚与接收引脚连接进行的测试吗?

2. 是否可以提供一下测试代码? 我将测试代码修改后, 发送一次是可以接收到的

Re: 有人在esp32上面实现过红外解码的工作吗?

Posted: Thu Aug 15, 2019 6:39 am
by lqzero
ESP_houwenxiang wrote:
Thu Aug 15, 2019 2:41 am
demo详细看过啦,想请教两个问题1、我发连续发码改为了只发一次,为什么接收不到2、tx rx没连接有时会出现rx buffer full的情况,干扰问题?
1. 请问你是将 ESP32 的发送引脚与接收引脚连接进行的测试吗?

2. 是否可以提供一下测试代码? 我将测试代码修改后, 发送一次是可以接收到的
测试demo时是发送与接收连接测试的。
代码如下
static void rmt_example_nec_tx_task()
{
vTaskDelay(10);
nec_tx_init();
esp_log_level_set(NEC_TAG, ESP_LOG_INFO);
int channel = RMT_TX_CHANNEL;
uint16_t cmd = 0x0;
uint16_t addr = 0x11;
int nec_tx_num = RMT_TX_DATA_NUM;
for(;;) {
ESP_LOGI(NEC_TAG, "RMT TX DATA");
size_t size = (sizeof(rmt_item32_t) * NEC_DATA_ITEM_NUM * nec_tx_num);
//each item represent a cycle of waveform.
rmt_item32_t* item = (rmt_item32_t*) malloc(size);
int item_num = NEC_DATA_ITEM_NUM * nec_tx_num;
memset((void*) item, 0, size);
int i, offset = 0;
//To build a series of waveforms.
i = nec_build_items(channel, item + offset, item_num - offset, ((~addr) << 8) | addr, ((~cmd) << 8) | cmd);
if(i < 0) {
break;
}
offset += i;
//To send data according to the waveform items.
rmt_write_items(channel, item, item_num, true);
//Wait until sending is done.
rmt_wait_tx_done(channel, portMAX_DELAY);
//before we free the data, make sure sending is already done.
free(item);
vTaskDelay(2000 / portTICK_PERIOD_MS);
}
vTaskDelete(NULL);
}

接收函数没怎么修改。
还有一个关键问题是RX buffer full问题怎么解决 。
求教。

Re: 有人在esp32上面实现过红外解码的工作吗?

Posted: Thu Aug 29, 2019 6:36 am
by lqzero
等回复好久啦 :geek:

Re: 有人在esp32上面实现过红外解码的工作吗?

Posted: Sun Sep 08, 2019 6:32 am
by ESP_houwenxiang
:shock: , 还是不能复现你描述的问题, 我将 GPIO18,GPIO19 短接, 测试这个代码.可以正常运行. 是否可以提供复现该问题的测试工程?