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

сгенерировать png или jpg на esp

oikj

New member
Доброго времени суток, други!

Возникла такая вроде стандартная задача, слать графики с датчиков висящих на есп посредством бота в телегу. Помимо всяких народных мониторигов и сингспиков и им подобных, есть ли способ рендерить простенькую картинку на самом контроллере и слать сразу в чат, пир ту пир тык скыть? Единственное что я нашел, это библа plotutils, примеры из которой у меня вообще ни в какую не компилятся.
Но может есть иной вариант как сгенерить png или иной графический файл? Ведь ресурсов мк более чем достаточно для такой задачи
 

fps

Active member
Почитайте про графический формат svg - это достаточно компактный формат описания векторной графики на базе xml. То есть не бинарный формат, как png, а текстовый. Его несложно генерить на основе шаблона вообще без доп. библиотек.
Или можно аналогично использовать html5 canvas.
 

fps

Active member
Проверив свой совет с удивлением обнаружил, что телеграм не показывает ни svg картинки, ни html :)
 

Atom

Member
самый простой картиночный формат, подерживаемый телеграммом - bitmap.
может проще в нем графики строить?
 

Atom

Member
дело вовсе не в машине.
был питон там под капотом.

ищите как оптимизировать, почему такие тормоза при постройке простого графика.
 

fps

Active member
ищите как оптимизировать, почему такие тормоза при постройке простого графика.
Да мне то оно не надо. И да, я в курсе чем питон отличается от си )
Зато с питоном я смог просто из любопытства за несколько минут скачать библиотеку, загрузить её в контроллер и запустить на нем тестовый скрипт просто на посмотреть что оно работает. Ничего не компилируя, не устанавливая и не отлаживая 😛.
 

oikj

New member
у alexgyver есть билиотека рисования графиков с помощью псевдографики в телеге.
попробовал, интересное решение, спасибо гайверу за креатив, но не особо юзабельное. Работает кривовато: отображается везде по разному, строки съезжают рандомно и само собой разрешение при таком подходе никакое, как следствие информативность графика почти нулевая.
 

oikj

New member
Ну так код открытый, поправьте и пользуйтесь.
сам подход тупиковый, ширина отображаемого поля разнится от устройства к устройству, даже на одном устройстве графики превращаются в чудоюдо, если телефон не в горизонтальной ориентации, а если подстраиваться под ширину строки для вертикалки, то там получается разрешение абсолютно никакущее
 

oikj

New member
нашел рабочее решение, вдруг кому потребуется. Можно таки сгенерить bmp файл и прямо из оперативки и сразу отправлять в телегу, написал очень простой класс, а дальше гайверовским фастботом, который умеет слать файлы массивом байт. Генерим заголовок, а потом построчно пиксели, складываем в массив байт и вуаля. Реализацию сборки бмп файла смотреть тут
. Напрямую с оперативки получается отправить картинку размером в зависимости от количества свободной памяти, максимум что получалось это где то 248 на 120, что соответсвует 248х120х3 байт ~90кб, что вполне приличных размеров полноценное изображение, график смотрится куда интересней, чем символьный вариант. Буду пробовать сохранять в spiffs и слать оттуда
 

nikolz

Well-known member
т е вы сами на убогом микропроцессоре реализуете пиксельную графику вместо того чтобы это делал многоядерный сервер. Вы еще бы руками этот график рисовали. Было бы совсем круто.
 

pvvx

Активный участник сообщества
Но может есть иной вариант как сгенерить png или иной графический файл? Ведь ресурсов мк более чем достаточно для такой задачи
У данных SoC нет памяти для стека TCP, а вы хотите ещё графику.
На первых компах с малой RAM изображение генерировали символами. Примерно это у вас и получится.
Нормальный современный график это график составленный из кол-ва переменных больше чем точек на изображении с размытием и прочими эффектами по макс. мин. и средним значениям по дискретности точек поля изображения.
 

pvvx

Активный участник сообщества
Напишите пару строк на Питоне в свой роутер и обращайтесь к ним из ESP для генерации изображений. Делов-то на вечер с нуля.
 

oikj

New member
все шикарно работает 1680756823747.png


эта еспиха стоит за несколько тыщ км от меня, в роутере удаленно ковыряться мне вообще не улыбается. Да еще и openwrt городить на чужой древний роутер, норм совет! точно на один вечер, ага
 

nikolz

Well-known member
все шикарно работает Посмотреть вложение 13035


эта еспиха стоит за несколько тыщ км от меня, в роутере удаленно ковыряться мне вообще не улыбается. Да еще и openwrt городить на чужой древний роутер, норм совет! точно на один вечер, ага
Прикольно.
Нет никаких масштабов.
Ну и какой смысл рисовать синус?
лучше, информативнее и быстрее написать например синус 2 вольта частота 1 Гц
 

pvvx

Активный участник сообщества
эта еспиха стоит за несколько тыщ км от меня, в роутере удаленно ковыряться мне вообще не улыбается. Да еще и openwrt городить на чужой древний роутер, норм совет! точно на один вечер, ага
То был самый простой пример для сравнения качества графики :p
Вам никто не мешает поставить подобие Linux на ESP :) Займитесь, через годы посмотрим что у вас получится и сравним.
 
Сверху Снизу