Сколько лент WS2812 можно подключить к ESP32 одновременно?
Обновлено Редакция GAW
Сигнал для адресных светодиодов на ESP32 удобнее всего формировать периферией RMT: канал сам выдаёт биты нужной длительности, и процессор только готовит данные. Один канал передачи — одна лента или одна цепочка лент.
Каналы по чипам
| Чип | Каналы передачи | Память RMT | Блок канала |
|---|---|---|---|
| ESP32 | до 8, каждый на передачу или приём | 512 слов | 64 символа |
| ESP32-S2 | до 4, каждый на передачу или приём | 256 слов | 64 символа |
| ESP32-S3 | 4 (и 4 приёмных отдельно) | 384 слова | 48 символов |
| ESP32-C3, C6, H2 | 2 (и 2 приёмных отдельно) | 192 слова | 48 символов |
Данные — технические руководства Espressif и заголовки ESP-IDF v6.1. Память общая на все каналы: у ESP32 она поделена на восемь блоков по 64 слова, и если дать одному каналу больше одного блока, он займёт блоки следующих каналов. Наш вывод: увеличивая mem_block_symbols против мигания при Wi-Fi (см. «Почему WS2812 мигают на ESP32»), вы уменьшаете число лент, которые можно подключить.
Частота кадров
Каждый светодиод получает 24 бита. Наш расчёт при бите 1,2 мкс, как в примере ESP-IDF:
| Светодиодов в ленте | Время кадра | Наибольшая частота |
|---|---|---|
| 60 | 2,0 мс | около 500 кадров/с |
| 300 | 8,9 мс | около 112 кадров/с |
| 1000 | 29,1 мс | около 34 кадров/с |
Каналы работают параллельно, поэтому четыре ленты по 300 светодиодов на ESP32-S3 обновляются с той же частотой, что одна. Если всё же не хватает каналов, на ESP32 доступны и другие способы выдать сигнал — например, через SPI, как описывает калькулятор WS2812, но это уже отдельная периферия со своими ограничениями.
Разрешение канала и длительности битов для своего чипа посчитает калькулятор RMT ESP32, ток ленты и блок питания — калькулятор WS2812.
Похожие вопросы
Можно ли повесить на один вывод ESP32 несколько лент?
Можно соединить их цепочкой: выход DO последнего светодиода одной ленты — на вход DIN следующей. Для ESP32 это одна длинная лента на одном канале RMT, и кадр становится длиннее. Параллельно на один вывод две ленты включают, только если они должны показывать одно и то же (наш вывод).
Будут ли ленты на разных каналах обновляться одновременно?
Каналы RMT работают независимо, и каждый начинает передачу по своему вызову rmt_transmit(), поэтому между ними возможен небольшой сдвиг. Если нужен старт без сдвига во времени, ESP-IDF предлагает менеджер синхронизации (Sync Manager): каналы объединяют в группу, и передача начинается одновременно. У классического ESP32 его нет: в драйвере v6.1 rmt_new_sync_manager() для чипов без аппаратной синхронизации возвращает ESP_ERR_NOT_SUPPORTED, она есть у S2, S3, C3, C6 и H2.
Сколько светодиодов выдержит одна лента?
По даташиту WS2812B-V5/W при 30 кадрах в секунду в цепочке может быть не меньше 1024 светодиодов. Наш расчёт: при бите 1,2 мкс это около 29,5 мс на кадр плюс сброс — укладывается в 33 мс. Длиннее ленту делят на несколько каналов.
Источники
- Espressif. ESP32 Technical Reference Manual v5.8, гл. 30; TRM ESP32-S2 v1.3, S3 v1.8, C3 v1.4, C6 v1.2, H2 v1.2 — главы RMT — ESP32: 8 каналов, ОЗУ RMT из восьми блоков по 64 слова, по умолчанию у каждого канала свой блок, RMT_MEM_SIZE_CHn > 1 забирает память следующих каналов; S2 — 4 канала, 256 слов; S3 — 4 TX и 4 RX, 384 слова блоками по 48; C3, C6, H2 — 2 TX и 2 RX, 192 слова
- Espressif. ESP-IDF Programming Guide v6.1: Remote Control Transceiver (RMT) — каждый канал настраивается на передачу или приём независимо; mem_block_symbols без DMA — размер собственного блока канала, не меньше 64 (48 у S3, C3, C6, H2); Sync Manager — одновременный старт нескольких каналов; rmt_tx.c — без RMT_LL_SUPPORT(TX_SYNCHRO) возвращает ESP_ERR_NOT_SUPPORTED, макрос есть в rmt_ll.h у S2, S3, C3, C6, H2 и нет у ESP32; пример led_strip — бит 0,3 + 0,9 мкс; soc_caps.h: SOC_RMT_MEM_WORDS_PER_CHANNEL 64 и 48
- Worldsemi. WS2812B-V5/W datasheet V6.1 — 24 бита на светодиод, сброс дольше 280 мкс; при 30 кадрах в секунду — не меньше 1024 светодиодов в цепочке
Нашли ошибку?
Смотрите также
- RMT ESP32Разрешение канала, символы WS2812 и NEC, несущая, код ESP-IDF
- Лента WS2812BТок и мощность, время кадра, проверка таймингов SPI
- RMT (импульсные последовательности ESP32)Периферия ESP32 для передачи и приёма последовательностей импульсов
- Почему WS2812 мигают на ESP32?Подкачка RMT опаздывает из-за Wi-Fi, 3,3 В ниже порога ленты