
CharliePlex 15×7: https://ali.click/pc7i11i?erid=2SDnje9wUhX
Начнём с того, что лучше эффекта горения свечи электронного я просто не встречал. Этот вариант настолько крутой, что хочется на него смотреть (как и на огонь) вечно.
Данная матрица светодиодная, имеет обычные светодиоды 15×7 размером. Но на плате еще есть шим контроллер IS31FL3731, который управляет этими светодиодами уменьшая их яркость, тем самым получается очень крутой эффект, как будто это адресная матрица, только имеет совершенно другие светодиоды.
Ну оно и получается так, что можно зажечь любой светодиод по отдельности.
Я делал подобный проект, но на матрице 16×8 размером и там шим контроллера на самой плате матрицы нет, там шим контроллер припаивался отдельно к матрице сзади. Но шим контроллер там тот же IS31FL3731:
И по этой же аналогии свечи, я захотел сделать и на матрице 15×7 данный эффект. Но оказалось, что это не так просто, как кажется. Готовых рабочих примеров я попросту не нашёл. Ничего не работало, на матрице все билось, эффект кривой получался, перевёрнутый и разбит на две части.
Но спустя некоторые усилия, мне всё-же удалось сделать рабочий вариант горения этой свечи.
Сначала я пытался это все делать в ESPHome и на esp32c3, но оказалось, что в yaml это очень сложно реализовать и я бросил эту затею.
Но в arduino ide был же прошлый вариант, по этому с него и начал новый делать.
Мне пришлось карту адресов светодиодов заново узнать и написать, так как адресация из библиотеки Adafruit_IS31FL3731.h была совсем другая и по этому все эффекты бились. И тут непонятно, толи эта матрица – это клон adafruit со своим шимом, которые имеет уникальные адреса. Толи просто матрицы уже другая и адреса другие.
Помимо анимации свечения, я еще сделал так, чтоб она управлялась из умного дома Home Assistant (да по сути и не только из него) по MQTT. А именно включалась и выключалась.
Я подумал, что это полезная функция. Если делать такой ночник, как свеча – то полезно его включать при наступлении темноты и выключать соответственно когда светло.
Схема подключение:
Питание подключается по следующей схеме:

Слева плюс, с права минус и подаётся 3 вольта.
i2c у матрицы на этих пинах:

i2c адрес по умолчанию 0x74, если запаять перемычку, то будет 0x77.

Ну а пины esp32c3 контроллера, это gpio 5 – sda и gpio 6 – scl. Ну а питание 3.3 вольта подаём прям от контроллера. Этого достаточно для матрицы.
Программа:
Код написан в Arduino ide. Для работы нужны библиотеки:





const uint8_t ledMap[15][7] = { {2, 3, 4, 5, 6, 7, 8}, {18, 19, 20, 21, 22, 23, 24}, {34, 35, 36, 37, 38, 39, 40}, {50, 51, 52, 53, 54, 55, 56}, {66, 67, 68, 69, 70, 71, 72}, {82, 83, 84, 85, 86, 87, 88}, {98, 99, 100, 101, 102, 103, 104}, {114, 115, 116, 117, 118, 119, 120}, {127, 126, 125, 124, 123, 122, 121}, {111, 110, 109, 108, 107, 106, 105}, {95, 94, 93, 92, 91, 90, 89}, {79, 78, 77, 76, 75, 74, 73}, {63, 62, 61, 60, 59, 58, 57}, {47, 46, 45, 44, 43, 42, 41}, {31, 30, 29, 28, 27, 26, 25}}; - name: "Магическая свеча" unique_id: esp32_candle_01_switch command_topic: "hmd/switch/esp32_candle_01/set" state_topic: "hmd/switch/esp32_candle_01/state" payload_on: "ON" payload_off: "OFF" state_on: "ON" state_off: "OFF" optimistic: false qos: 1 retain: true device: identifiers: ["esp32_candle_01"] name: "Магическая свеча" manufacturer: "DIY" model: "ESP32-C3 Candle“