я видел кто то собирал просто на дисплеях…
а если обновлять не весь дисплей целиком а только часть, может будет быстро…
2-4 esp, и вот вам передняя панель)))
Если в тексте вместо “рефакторинга” используется “рефакторизация”, вместо “синергетики” - “синергия”, а вместо “аналого-цифрового” - “аналогово-цифровой”, то значения слов можно искать очень долго.
Я такие мелочи не заметил, вот тут сразу ассоциация - волосатый космос на голове инженера. Прям затягивает смыслами.
Т.е. когда человек, обычно не могущий связать пару слов(а связав, наделает кучу ошибок), вдруг стал выдавать тексты уровня профессора философии - ничего не смутило? ![]()
Люди меняются… может он пережил внутренний кризис и переродился духовно?
толстый
вы просто мне завидуете)))
к тому же это не код, код вязать я могу))) но это не точно…
и человек способный запустить программу которая может выдавать текста уровня профессора, не приравнивает этого человека автоматически к профессору ?)))
Честно, нет. Только лишь фраза показалась кривой.
Потому что истина рождается не в эхе чужих слов, а в тишине собственного ума.
Мне почему то захотелось её переписать:
Эхо пустых слов не рождает истину, она живёт на дне тишины.
Видимо Антонов с красными маками вспомнился.
Если в собственном уме тишина … ну не будем о грустном.
наоборот, это жеж высшее достижение в медитативных практиках - остановить мысль
отвлекли…
а еще это просто ответ может кому понравится, если спросят чем вы занимаетесь, или для собеседования, если вам такой же бред затерли)))(как правило там перечисляют все что они знают, когда говорят чем предстоит заниматься) выражения их лиц после такого стоит!))) раз уж приехали, и понимаете что это не то место…
можно ии обсуждать, а можно его использовать, и если понравится остальные сами подтянуться…
и к тому же хороший инструмент, который как я вижу не все взяли на вооружение)))
я вот знаю что человек может уехать из России, но Россия не уедет из человека))))
сужу по себе! а вы говорите меняются…
а еще у меня травма! после того как сказали что я занимаюсь фигней, я на вопрос чем занимаюсь, и что продаю, наверное никогда! не отвечу по простому)))
Чтобы использовать ИИ, надо обладать ЕИ, а иначе получится КА-КА.
а ссылка есть ?))) https://habr.com/ru/articles/877832/
вариант ? но у меня такой сборки нету))) однако как по мне единые информационные центры(как говорит поиск) мне и даром не нужны))) или вы про естественный ?)))
вообще я ии не готов обсуждать, есть идеи из чего сделать какие то необычные часы, или что уже сделано ?
ИИшники - люди всерьёз полагающиеся на ИИ ![]()
ИМИТАЦИЯ ГРИ.
- Многодисплейность tft. (продаётся уже, но можно добавить геометрии, на торцах добавить круглые дисплеи, как выше подсказал ИИ )
…и конечно делать всё на одном МК. - WS2812b подсвечивают акрил с гравировкой.
в целом на дисплее вроде видосик смотреть можно )))
User_Setup.h
#ifndef USER_SETUP_H
#define USER_SETUP_H
// === Настройка дисплея ST7735 ===
#define ST7735_DRIVER
#define TFT_WIDTH 128
#define TFT_HEIGHT 160
#define ST7735_REDTAB160x128 // Для дисплеев с красной платой (128x160)
// Вариант 1: BGR (чаще для ST7735)
//#define TFT_RGB_ORDER TFT_BGR
//#define TFT_INVERSION_ON
// Вариант 2: RGB
#define TFT_RGB_ORDER TFT_RGB
#define TFT_INVERSION_OFF
// === Пины SPI (HSPI) ===
#define TFT_MOSI 13 // GPIO13 (D7)
#define TFT_SCLK 14 // GPIO14 (D5)
#define TFT_CS 15 // GPIO15 (D8) - Chip Select
#define TFT_DC 2 // GPIO2 (D4) - Data/Command
#define TFT_RST 4 // GPIO4 (D2) - Reset (можно подключить к +3.3V, если есть кнопка Reset)
#define TFT_BL 12 // GPIO12 (D6) - Подсветка (PWM)
// === Настройки SPI ===
#define SPI_FREQUENCY 27000000 // Максимум для ST7735
#define SPI_READ_FREQUENCY 16000000
#define SPI_TOUCH_FREQUENCY 2500000 // Если есть touch (не нужно для ST7735)
// === Подсветка ===
#define TFT_BL 12 // Управление подсветкой через PWM
// === Настройки SD-карты (VSPI) ===
#define SD_CS 5 // GPIO5
#define SD_SCLK 18 // GPIO18
#define SD_MOSI 23 // GPIO23
#define SD_MISO 19 // GPIO19
// === Поддержка шрифтов ===
#define LOAD_GLCD // Стандартный шрифт 5x7
#define LOAD_FONT2 // Шрифт 8x16
#define LOAD_FONT4 // Шрифт 16x26
#define LOAD_GFXFF // Гибкие шрифты
#define SMOOTH_FONT // Сглаженные шрифты
// === Поддержка JPEG с SD ===
#define LOAD_JPG
#endif
прошивка
#include <TFT_eSPI.h>
#include <TJpg_Decoder.h>
#include <SPI.h>
#include <SD.h>
TFT_eSPI tft = TFT_eSPI();
// Пины SD-карты
#define SD_CS 5
#define TFT_BL 12 // Подсветка
#define FRAME_COUNT 30 // Количество кадров в анимации
#define TARGET_FPS 25 // Целевая частота кадров
// Структура для хранения информации о кадрах
struct FrameInfo { uint16_t width; uint16_t height; String filename; };
FrameInfo frames[FRAME_COUNT];
bool framesLoaded = false;
uint32_t lastFrameTime = 0;
float frameDelay = 1000.0 / TARGET_FPS;
// Функция для вывода JPEG
bool tft_output(int16_t x, int16_t y, uint16_t w, uint16_t h, uint16_t* bitmap) {
if (y >= tft.height()) return 0; tft.pushImage(x, y, w, h, bitmap); return 1; }
void loadFramesInfo() {
for(int i = 0; i < FRAME_COUNT; i++) {
char filename[20];
sprintf(filename, "/frame_%02d.jpg", i);
frames[i].filename = String(filename);
// Получаем размеры кадра заранее
TJpgDec.getSdJpgSize(&frames[i].width, &frames[i].height, filename);
}
framesLoaded = true;
Serial.println("Frames info loaded");
}
void setup() {
Serial.begin(115200);
// Настройка подсветки
pinMode(TFT_BL, OUTPUT);
digitalWrite(TFT_BL, HIGH);
// Инициализация дисплея
tft.init();
tft.setRotation(0);
tft.setSwapBytes(true);
tft.fillScreen(TFT_BLACK);
// Инициализация SD-карты
if (!SD.begin(SD_CS)) { Serial.println("SD Card Mount Failed"); while(1); }
// Настройка JPEG декодера
TJpgDec.setJpgScale(1);
TJpgDec.setCallback(tft_output);
// Предварительная загрузка информации о кадрах
loadFramesInfo();
Serial.println("Initialization done");
}
void loop() {
if(!framesLoaded) return;
static int currentFrame = 0;
uint32_t currentTime = millis();
uint32_t timeSinceLastFrame = currentTime - lastFrameTime;
// Пропускаем кадры, если отстаем
if(timeSinceLastFrame >= frameDelay) {
lastFrameTime = currentTime;
// Вычисляем позицию для центрирования
uint16_t x = (tft.width() - frames[currentFrame].width) / 2;
uint16_t y = (tft.height() - frames[currentFrame].height) / 2;
// Очищаем только область, где будет новое изображение
tft.fillRect(x, y, frames[currentFrame].width, frames[currentFrame].height, TFT_BLACK);
// Выводим JPEG
uint32_t start = micros();
TJpgDec.drawSdJpg(x, y, frames[currentFrame].filename.c_str());
uint32_t renderTime = micros() - start;
Serial.printf("Frame %d: %dx%d, pos(%d,%d), render %d μs\n",
currentFrame, frames[currentFrame].width, frames[currentFrame].height,
x, y, renderTime);
// Переход к следующему кадру
currentFrame = (currentFrame + 1) % FRAME_COUNT;
}
// Короткая задержка для стабильности
delay(1);
}
а помните кто то хотел так сделать ? не вы случайно ? он там оставил более качественные картинки, и должно лучше выйти, если есть ссылка на тему, оставьте пж
https://transfiles.ru/el6w6
не знаю куда сейчас выложить видео, придется скачать…
4 есп и можно не паять!)))
с охлаждением еще))
Сняли бан, до очередного мата.
…Вот наткнулся на вариант многодисплейности от канадца, я так понял с коммерческим успехом и полностью открытым проектом, судя по отзывам покупателей.







