Отображение изображений на ЖК-экране Arduino с ПК

Я новичок в Arduino, и мне интересно, можно ли хранить данные изображения на моем компьютере и отправлять их на Arduino через USB-кабель (который также используется для питания) для отображения на имеющемся у меня TFT-дисплее подключился. Во всех обучающих материалах, которые я вижу, используется SD-карта для предварительной загрузки на нее данных изображения.

Тем не менее, на моем дисплее нет слота для SD-карты, и это непрактично для моего приложения, поскольку изображения, которые я хочу отображать, будут определяться во время выполнения. Я отправил небольшие фрагменты данных через COM-порт на свой Arduino со своего ПК, но не знаю, как я мог бы сделать это с потенциально большими данными изображений. Arduino будет подключен к моему компьютеру круглосуточно и без выходных. Если это возможно, могу ли я получить небольшое руководство о том, с чего начать? Спасибо

, 👍2

Обсуждение

получать данные и отображать их по мере их получения, @jsotola


3 ответа


1

Вы можете «транслировать»; данные передаются с ПК на ЖК-дисплей, а это означает, что вам не нужно будет их хранить (или, возможно, хранить строку или около того).

Не зная, какой Arduino и какой ЖК-дисплей, трудно дать больший совет.

,

0

Существует так много разных ЖК-дисплеев, что без указания конкретного ЖК-дисплея можно дать только очень общие ответы, которые могут иметь ограниченную ценность.

  • Практически все платы Arduino поддерживают буквенно-цифровые ЖК-дисплеи. Но у них очень ограниченная графика, если она вообще есть.

  • Большинство из них поддерживают черно-белые графические ЖК-дисплеи.

  • Большинство из них могут обрабатывать отправку геометрических фигур и буквенно-цифровых изображений на (умные) цветные ЖК-дисплеи с последовательным портом. Только некоторые Arduino смогут обрабатывать отправку произвольных изображений (например, фотографий) на (умные) цветные ЖК-дисплеи с последовательным портом.

И немногие смогут справиться с отправкой данных на обычный TTL или LVDS цветной ЖК-дисплей.

,

3

Поскольку вы не имеете ни малейшего представления о TFT, который имеете в виду, я попытаюсь описать процесс, используя следующие предположения о TFT, которые должны быть верными, чтобы все остальное работало:

  • один полный кадр данных пикселей для используемого TFT не поместится в ОЗУ Arduino, но одна строка этого кадра поместится,
  • данные пикселей можно отправлять построчно в TFT без необходимости начинать следующую строку в течение определенного периода времени (т. е. теоретически вы могли бы просто сказать TFT обновить строку 42 не по порядку, как пример) ),
  • TFT имеет собственный способ запоминания отображаемых данных (т.е. не требует постоянного обновления 60 раз в секунду).

В этом сценарии ваш конвейер обработки изображений выглядит следующим образом:

  • Программа, запущенная на вашем ПК, распаковывает (и, возможно, изменяет размер) файл изображения, чтобы получить доступ к необработанным данным пикселей в том виде, в котором они будут отображаться на TFT. Это означает, что этой программе необходимо знать разрешение и «порядок подачи данных»; вашего TFT.
  • Затем этот процесс берет одну строку необработанных данных пикселей и преобразует ее в пакет данных для отправки через последовательный порт. Здесь вам нужно будет разработать протокол связи, с которым сможет работать ваш скетч Arduino. Самый простой, но не самый эффективный способ — преобразовать его в Base64, поскольку библиотеки для этого существуют практически на каждом языке и платформе, и тогда вы сможете использовать текстовые разделители, такие как разрыв строки, для обозначения конца пикселя. линия данных. (Отправка двоичных данных более эффективна, но сложнее и более подвержена ошибкам синхронизации, поскольку у вас нет внутриполосной сигнализации «конца строки данных».)
  • Ваш скетч Arduino считывает этот пакет данных (если он закодирован в Base64: с помощью Serial.read, пока не встретится разрыв строки) и преобразует его обратно в необработанные пиксельные данные в любом формате вашего TFT ( или библиотека для этого TFT) нужны данные (возможно, потребуется цветовой формат, например, GRB вместо RGB).
  • Эта строка необработанных данных пикселей затем отправляется в TFT.

Вам нужно будет определить скорость передачи данных, которую вы можете отправить по последовательному каналу связи (определяется максимальной скоростью передачи данных ПК и Arduino, а иногда и качеством кабеля между ними). Имейте в виду, что последовательное соединение медленное; вы, вероятно, сможете построчно наблюдать за рендерингом изображения на TFT.

Возможно, вы сможете сделать это более эффективным, применив что-то вроде RLE (кодирование длины прогона) к пиксельным данным, передаваемым по последовательной линии, но это будет еще одна итерация вашего протокола.

,

Возможно, я ошибаюсь, но [TFT LCD означает Thin Film Transistor LCD](https://en.wikipedia.org/wiki/TFT_LCD), верно? Это описание применимо ко многим типам ЖК-дисплеев. Подавляющее большинство из них не работают так, как описано в ответе. В частности, Arduino Uno будет очень сложно или невозможно отображать что-либо на подавляющем большинстве TFT-дисплеев., @st2000

@st2000 ОП намекнул, что они уже нашли руководство по отображению чего-либо на своем TFT, поэтому в своих предположениях я указал, что должен уметь этот TFT или библиотека, чтобы поддерживать это решение., @orithena

Хорошо. Скажите это в ответе (что-то вроде: «Я предполагаю, что у вас есть тот или иной умный ЖК-дисплей с последовательным портом»), и я проголосую за это. Напомним, что цель сайтов stackexchange — помочь другим людям с похожими проблемами найти четкие/краткие ответы., @st2000