• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Нужна помощь ucg + hspi + tft ili9341 = низкая скорость отрисовки

NAgain

New member
Всем доброго дня.

Говоря сразу - за ESP (конкретнее - devkit 0.9) сел пару дней назад, до этого AVR/STM на чистом Си. Так что и Lua, в принципе, тоже вижу то же время. Сопсна задача:

Поскольку в проекте нужен Wi-Fi, решил наконец то приобрести esp-шку и раскурить что к чему, ибо вешать ее как гейт - uart<->tcp слишком расточительно. По условиям задачи - нужно выводить информацию на экран (ili9341) при каких-либо движениях со стороны wi-fi. Тут сетевую сторону рассматривать не будем, я до нее еще не дошел, но различные примеры, найденный в сети, работают и воодушевляют.

Так вот, расстроила крайне медленная работа с дисплеем по аппаратному SPI. Полное заполнение экрана (на глаз) - где-то секунда, или чуть более того. Естественно это никуда не годится. Нужно никак не меньше 5-7 fps.

Поскольку дури у контроллера ведро (в том же сравнении с 8-битными avr-ками), не поверю что нельзя добиться нужного частоты обновления. Соответственно вопрос - куда копать, что делать ? Может ну ее эту Lua в топку тогда и стоит перелезать сразу же на SDK ? Только вот с SDK пока не разбирался. Заметил только то, что уже несколько кастомных вариантов существует.

Ну и код примера сопсна:

Код:
function init_spi_display()
    -- Hardware SPI CLK  = GPIO14
    -- Hardware SPI MOSI = GPIO13
    -- Hardware SPI MISO = GPIO12 (not used)
    -- CS, D/C, and RES can be assigned freely to available GPIOs
    local cs  = 8; -- GPIO15, pull-down 10k to GND
    local dc  = 2; -- GPIO4
    local res = 1; -- GPIO5

    spi.setup(1, spi.MASTER, spi.CPOL_LOW, spi.CPHA_LOW, 8, 1);
    disp = ucg.ili9341_18x240x320_hw_spi(cs, dc, res);
end

init_spi_display();

disp:begin(ucg.FONT_MODE_TRANSPARENT);
disp:clearScreen();

disp:setFont(ucg.font_helvB18_hr);
disp:setColor(255, 255, 255);
disp:setColor(1, 255, 0,0);

disp:setPrintPos(0, 25);
disp:print("Hello World!");
 

Maloi

New member
а зачем инитить ноги каждый раз ?
думаю из-за этого сильно тормозит.
 

-=Alx=-

New member
Посмотри Sming - там есть пример с этим дисплеем. На базе примеров достаточно легко делается получение данных с сервера и отображение на экране.
У меня собрана связка с тачем: rboot + обновление по воздуху + получение текста с сервера + получение графики с сервера. Ну и время оттуда же. Ресурсов хватает. Единственное для ускорения вывода графики в драйвере надо добавить функцию быстрого заполнения области по аналогии с drawFastVLine и drawFastHLine
 
Сверху Снизу