In contrast to our previous example from ESP32 RMT pulse generation minimal example using Arduino & PlatformIO this example uses the new rmt_tx
API.
#include <driver/rmt_tx.h>
rmt_channel_handle_t channel; rmt_tx_channel_config_t tx_chan_config = { .gpio_num = GPIO_NUM_19, // GPIO number .clk_src = RMT_CLK_SRC_DEFAULT, // select source clock .resolution_hz = 1 * 1000 * 1000, // 1 MHz resolution .mem_block_symbols = 64, // memory block size, 64 * 4 = 256 Bytes .trans_queue_depth = 1, // set the number of transactions that can pend in the background }; ESP_ERROR_CHECK(rmt_new_tx_channel(&tx_chan_config, &channel)); ESP_ERROR_CHECK(rmt_enable(channel)); rmt_symbol_word_t txdata[64]; txdata[0] = { .duration0 = 100, .level0 = 1, .duration1 = 0, .level1 = 0, }; // Create simple encoder rmt_copy_encoder_config_t encoder_config; rmt_encoder_handle_t encoder; ESP_ERROR_CHECK(rmt_new_copy_encoder(&encoder_config, &encoder)); rmt_transmit_config_t tx_config = { .loop_count = 0, // no transfer loop }; while(true) { ESP_ERROR_CHECK(rmt_transmit(channel, encoder, pulseRMT, 1*sizeof(rmt_symbol_word_t), &tx_config)); // Wait for one second vTaskDelay(10 / portTICK_PERIOD_MS); }
Result: