Авторизация
Регистрация

Напомнить пароль

IPS-дисплей1.44", 128х128. Укрощение маленького экранчика

Купил дешёвый IPS-экранчик 1.44" для того, чтобы выводить на нём значения CO2 у самодельного устройства управления вентиляцией. Экранчик оказался не совсем стандартным, и чтобы заставить его работать правильно, пришлось повозиться и применить волшебные костыли.


У этого экранчика разрешение 128x128 точек и последовательный интерфейс SPI. На пакетике написано «IC: ST7735S», но похоже это не правда — с драйвером для чипа ST7735S он не работает, а с драйвером для ST7735 работает, но кривовато: неправильно определяется размер и положение экрана.

Для начала я скачал с LCDWiki набор софта для этого экрана, подключил его, как там написано, и проверил — работает.



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

Конкретно этого экрана в списке поддерживаемых библиотекой нет, но есть несколько других на ST7735 и ST7735S. Экранчик заработал при указании типа ST7735, но при его очистке снизу оставалось три строки мусора, а при выводе текста по центру всё смещалось влево и первый символ портился. Пришлось применять костыли: вместо очистки рисовать чёрный прямоугольник 160x130 точек (экран, напомню, 128x128), а текст выводить, жёстко указывая координаты (смещение 26 по оси X оказалось на самом деле первой точкой экрана).

Для того, чтобы выводить четыре максимально больших цифры, я сделал шрифт 32x60 точек.



Шрифт для этой библиотеки делается достаточно просто: создаётся вот такая картинка, на которой каждая цифра занимает ровно одну десятую ширины и обрабатывается онлайн-инструментом на сайте автора библиотеки, в результате получается файл шрифта с расширением .c, который нужно положить в папку с библиотекой.

Цифры на экране получаются большие и красивые (в жизни они гораздо ровнее, чем на фото). Высота цифр 11 мм, ширина всех четырёх цифр 26 мм.



Вот весь скетч, выводящий на экран четыре цифры.



Пока датчик CO2 не пришёл, я ради эксперимента подключил к Arduino цифровой термодатчик DS1820 и сделал простейший термометр. Специально для него за пару минут создал огромный шрифт с размером символа 64x120 точек, на экран помещаются два таких символа.



Скетч термометра. Главное, не пытаться измерять им отрицательные температуры (символ «минус» отсутствует в шрифте и на экран не влезет) :)



Я подключил экранчик к Arduino Uno R3 просто потому, что она «попалась под руку». С тем же успехом этот экран можно подключить к Arduino Nano или любой другой плате.

На всякий случай я сохранил скетчи, все библиотеки, шрифты и схемы подключения в одном архиве.

© 2020, Алексей Надёжин
Планирую купить +26 Добавить в избранное
+69 +101
свернутьразвернуть
Комментарии (64)
RSS
+
avatar
+3
  • ielnino
  • 02 ноября 2020, 19:08
Буду ждать когда будет готовый проект. Сам давно облизываюсь на самодельный измеритель CO2
+
avatar
+17
  • Ammo1
  • 02 ноября 2020, 19:27
Когда сделаю, обязательно напишу и выложу всё для самостоятельного повторения.
+
avatar
0
Так этих измерителей куча, как и экранов с библиотеками. Но все-равно везде костыли. Как минимум с самими измерителями СО2
+
avatar
0
Код работы с датчиком СО2 MH-Z19B можно взять отсюда. Само устройство можно сделать согласно своим представлениям о костылях
+
avatar
0
  • Ammo1
  • 02 ноября 2020, 20:26
У меня Z19B таможня похоже потеряла (уже месяц в статусе «начато таможенное оформление»). Я наверное раз так куплю датчик получше — Sensair S8.
+
avatar
+17
«Главное, не пытаться измерять им отрицательные температуры»
Просто надо данные выводить в Кельвинах, там не бывает отрицательных температур.
+
avatar
+2
  • Lvenok
  • 02 ноября 2020, 19:44
Все равно 3 знакоместа…
+
avatar
+2
  • Alexx_B
  • 02 ноября 2020, 20:11
тогда выход — фаренгейты :)
от -9 до 99 F — это от -22 до +37 по-нашему. Для уличных температур средней полосы вполне норм :)

бонусом будет прокачивание скила устного счета для перевода значений в привычные Цельсии
+
avatar
+2
не нужно их переводить они читаются как процент жары (0 — холод, 70 — комнатная, 100 — жара), американец недавно научил как их прогнозы понимать)
+
avatar
+5
Да зачем эти сложности с цифрами? Ещё и знаки… Сяоми уже давно сделали проще. Рисуйте морду -улыбается, значит всё норм. И так в каждый датчик, влажность, температура, давление…

*сарказм…
+
avatar
0
0 — холод
0 по фаренгейту, это ~ -18 по цельсию, да у нас с таким нулем мужики зимой в гаражах в тельняшках ходят и это тепло. Холод блин.
+
avatar
+2
понятно оно относительно, но для большинства населения планеты -18 это задница)
+
avatar
+14
«А еще можно просто цвет менять в зависимости от того отрицательное число и положительное.»
+
avatar
0
  • qzsev
  • 02 ноября 2020, 19:44
Просто надо данные выводить в Кельвинах, там не бывает отрицательных температур.
В Кельвинах комнатная температура будет трехразрядной, опять места не хватит. А если сделать шрифт поменьше — то тогда удобнее «минус» рисовать.

Да и лично я в Кельвинах не очень привык, не очень удобно будет…
+
avatar
+10
А не нагляднее ли выводить положительные градусы, например, красным, а отрицательные синим?
+
avatar
0
  • Ammo1
  • 02 ноября 2020, 20:27
Это просто сделано для проверки. Не надо делать термометры на Ардуино. :)
+
avatar
+5
почему не надо? Дешево и сердито))) Думаю, многие набрали ардуин и не знают, что с ними теперь делать
+
avatar
+1
  • Ammo1
  • 03 ноября 2020, 08:31
Потому, что термометр можно купить готовый за три копейки.
На Ардуинах нужно делать только то, что невозможно купить или то, что стоит слишком дорого, если покупать готовое.
+
avatar
0
  • Lvenok
  • 02 ноября 2020, 21:03
Профессионалы меряют в Кельвинах перепады температур. Там это не так страшно выглядит, и сразу понятно отличие от абсолютных значений температуры…
+
avatar
+3
  • LeTaon
  • 03 ноября 2020, 14:24
Я в кельвинах считаю отклонение температуры от точки замерзания воды. Советую, очень удобно. Знаком «минус» обозначаю отрицательное отклонение.
+
avatar
0
  • Lvenok
  • 03 ноября 2020, 19:30
И как ни странно получаем температуру в градусах по Цельсию… Поздравляю, мы вернулись к тому же, с чего и начали ))))
+
avatar
+2
в Кельвинах, там не бывает отрицательных температур
справедливости ради — бывают, системы с таким распределением энергий частиц, которое описываются только через отрицательную температуру в распределении Максвелла
+
avatar
+4
Если у вас дома образовалась такая система, число разрядов на экране термометра станет вашей меньшей из проблем :)
+
avatar
+1
  • Alax
  • 04 ноября 2020, 00:49
Или добавить в шрифт узкие цифры со знаком минус в одно знакоместо
+
avatar
+13
Я дико извиняюсь, а может стоило чуток разобраться, как работать с экраном и откуда там мусор?

Там контроллер матричный, написать вывод туда чб битмапа по координатам X, Y, шириной W и высотой H и цветом C — час от силы, тем более что библиотека для работы есть — требуется выкинуть все кроме отрисовки из нее и запилить на этой основе свое. Можно ещё и с бэкбуфером.

И костыли были бы не нужны и знаний бы прибавилось.
+
avatar
-9
  • Ammo1
  • 02 ноября 2020, 20:28
+
avatar
+19
Извините, но это не может служить оправданием. Любая самоделка есть в той или иной мере растрата сил времени и финансов. А наличие и обилие костылей лишь описывает, насколько хватило желания сделать всё по феншую.
+
avatar
+19
  • Dimon_
  • 02 ноября 2020, 21:39
Я силы и время своей жизни не буду тратить на такое.
Алексей, это самообман и лукавство.
Если вам действительно жалко своего времени и сил, вы бы купили готовый девайс (коих воз), а время его доставки посвятили бы чему-то другому. Время действительно стóит дороже денег.
А если уж вы решили что-то делать самостоятельно, вы по-любому тратите своё время и силы…
+
avatar
+4
Dimon_, ваше высказывание — это глупость и наивность. И безудержное стремление поучать и вешать недобрые ярлыки. Ну покушайте вашего же.
В любом проекте главное умение, которое приходит с опытом — это вовремя остановиться.
Да, именно это, заветное — «И так сойдёт!»
Потому что улучшать и дорабатывать почти любой проект можно бесконечно, и на определённом уровне это превращается в трату сил и времени жизни.
В любом проекте есть цель. И цель это не «добиться абсолютного идеала», сюрприз.
У меня много «проектов» по электронике. Иногда цель — просто убедиться что это работает, хоть на соплях. Иногда — получить конкретный числовой результат (например, посмотреть кривую микроколебаний атмосферного давления, измерить динамику какой-то механики), иногда — сделать прототип и даже упаковать в какой-то корпус для практического использования.
Я программист, и всегда использую принцип минимальной разумной достаточности. Не добавлять свистелки и мигалки без необходимости, решать проблемы предельно просто и понятно.
Жаль, что этого здесь почти никто не понимает. «што поделать, молодёжь. И что можно, что не можно — в наши дни не разберёшь».
Минусуйте.
+
avatar
+2
Ага, типа глючит — разбираться не буду, подопру костылями — и так сойдет.
Да, да. У меня джуны так себя ведут.

Не надо путать прототип — там да, многое позволительно, и прод. ТС выкатил это в прод на костылях.
Я программист, и всегда использую принцип минимальной разумной достаточности.
Этот принцип не подразумевают использование костылей, не надо его коверкать.
решать проблемы предельно просто и понятно
Вот именно, что решать. А не обходить.

Придерживаться KISS-а — это верно и хорошо, только искажать этот принцип не надо.

Так что ваше «ваше высказывание — это глупость и наивность» возвращается обратно к вам, Dimon_ все верно написал.

Ну и «у меня много «проектов» по электронике» никак не коррелирует с тем, что Вы — нормальный разработчик.
+
avatar
0
скажите, вам лет так 16? Судя по безудержному максимализму и желанию поучать?
«костыли» — define «костыли». По моему опыту в корпоративных серьёзных решений в коде — уйма «костылей». Временных заплаток, ставших постоянными, заглушек, обходных решений. Не всем проблемы даже и в программировании можно решить окончательно и бесповоротно здесь и сейчас, а приложение должно работать и в срок. Пример — повторный вызов db-link по таймеру несколько раз подряд. Никто не знает почему удалённое приложение не сразу отвечает, а иногда только на второй-третий раз. Ничего плохого в «костылях». Если «костыли» работают.
Еще пример — баг в серьёзном и большом сервере баз данных. Никто его устранять не собирается в разумное время. Значит, нужно писать обход этого бага, а не «разбираться».
«обход» проблемы это еще лучше чем «решение». Если проблему можно обойти, это не проблема, а пустая трата времени ©еврейский анекдот
+
avatar
+1
Года на 24 ошиблись, комплимент, однако :-)

Одно дело — обход того, что нет возможности вменяемо исправить, другое дело — сознательное использование костылей там, где их запросто избежать. Так гнкод и рождается. И это как раз и отличает джуна от сеньера.

Если проблему можно обойти, она потом обязательно вас догонит и ударит гораздо сильней.
+
avatar
0
  • Alax
  • 04 ноября 2020, 00:52
Как я понял из предыдущего обзора, готовых измерителей СО2 у Алексея и так воз)
+
avatar
0


Ну… я даже не знаю что сказать… в принципе, тут все уже сказали.

Вы даже для себя сделали «и так сойдет», ну ок, так и живем. Надеюсь, вы никаких производителей не ругаете?
Если ругаете — каждый раз вспоминайте себя и этот экранчик.
+
avatar
+6
  • Afalin
  • 03 ноября 2020, 04:37
Дружище StainlessSoul, не впадайте в грех снобизма. Если вам легко переписать прошивку матричного контроллера и ее туда пробить- молодец, завидую. А ТС поставил себе задачу вывести цифры на экран- и вывел, причем так, как ему надо было. Ваша идеальная прошивка, возможно, будет работать на сотую секунды быстрее ( а, скорее всего, нет- костыли нужны только при старте)- и оно надо? Надежность работы та же. При чем здесь «и так сойдет»? ИМХО, наоборот: ТС полностью решил задачу минимумом затрат- красавчик.
+
avatar
-2
Снобизм тут не причем. Автор даже для себя вместо решения использовал костыли.

Все библиотеки с открытым исходным кодом, кода там — кот наплакал, т.е. даже разбираться-то особо не надо было — все на блюдечке лежит.

ТС полностью решил задачу
ТС не решил задачу — он подпер ее костылями — в этом и весь смысл.

Т.е. люди даже для себя родимого разбираться и решать не хотят, при этом хотят, чтобы что-то хорошо работало. А вот хз к чему такое приведет — может быть там в регистры что-то не то пишется или, например, выходит за пределы адресного пространства — запросто может что-то рано или поздно начать глючить.

Но главное — бац-бац и в продакшн — поколение одноразовых решений и таких-же людей.
Потом народ удивляется — а че так криво все реализовано :D
+
avatar
+3
  • sobakak
  • 03 ноября 2020, 12:25
Так он не «даже для себя», а наоборот для себя делал а не на продажу и поэтому костыли простительны.
+
avatar
-1
Вам усилий на 5 минут — кидайте свой вариант.
+
avatar
+1
Кидайте денежку и экран.
Делать то не ради себя буду, а под заказ.
+
avatar
-1
Ничего, сейчас он всё напишет как надо, будет у него на ассемблере ОС реального времени с многозадачностью.
+
avatar
+1
Петросян.
+
avatar
+1
  • dixi
  • 03 ноября 2020, 21:11
На самом деле — это очень простой экранчик.
На него есть подробный даташит.
Например за полчаса можно наваять нечто такое.
Небольшой пример
+
avatar
+3
  • sobakak
  • 02 ноября 2020, 23:59
Костылями обычно пользуються в двух случаях, когда не могут сделать нормально в силу внешних обстоятельств, и когда не могут сделать нормально потому что не хватает знаний. Возможно знаний автора недостаточно.
+
avatar
+3
  • Ammo1
  • 03 ноября 2020, 08:33
И это тоже. Я не знаю ни одного языка программирования, кроме ассемблера БК0010, который давно забыл. Мне довольно сложно с этим всем разбираться.
+
avatar
+1
А как же самый распространенный третий случай:
Сроки — вчера!
? :)
+
avatar
+5
  • ACE
  • 02 ноября 2020, 21:16
И насколько этот экран реально IPS? Ну т.е. какие углы обзора? Со всех четырех сторон под углом нормально?
+
avatar
0
  • Ammo1
  • 02 ноября 2020, 22:17
Отличные углы. Даже затемнения нет под большими углами.
+
avatar
+4
  • u3712
  • 02 ноября 2020, 23:04
И в обзоре это показывать не надо?
+
avatar
0
  • Ammo1
  • 03 ноября 2020, 08:33
Я подумал, что это очевидно, раз экран IPS.
+
avatar
+2
Очевидно, что китаец написал про IPS в описании лота. Все прочее — совсем не очевидно. Он вот и про модель контроллера написал… а в результате контроллер оказался «странный».
+
avatar
+5
  • wired
  • 02 ноября 2020, 22:31
для шрифтов рекомендую
www.eran.io/the-dot-factory-an-lcd-font-and-image-generator/
любой виндовьій шрифт — у тебя на екране :)
+
avatar
0
шрифты проще свои нарисовать, чем прилаживать виндовые, иногда еще и символы какие нибудь нужны, лучше для этого древняя прога SG Font Editor
+
avatar
0
  • wired
  • 03 ноября 2020, 11:39
имел я и с єтой прогой любофф, но оказалось проще адаптировать понравившийся виндовьій шрифт, благо их тьісячи
+
avatar
0
  • Ammo1
  • 03 ноября 2020, 08:34
А как это всё к экрану Ардуино применить?
+
avatar
0
  • vismyk
  • 03 ноября 2020, 07:19
Китайские экраны и костыли — созданы друг для друга, однако. ;) Недавно тоже прикупил экранчик 1,8" 128х160 якобы на ST7735 — библиотеки Adafruit подпиливать пришлось, т.к. по краям экрана мусор рисовался и цвета перепутаны были (красный с синим, кажись). :/
+
avatar
0
  • Ammo1
  • 03 ноября 2020, 08:35
Мой на красном текстолите почти на доллар дешевле. :)
А проблемы почти те же.
+
avatar
0
Благодарю. Как раз предстоит любовь с этим (или просто очень похожим внешне) экраном.
+
avatar
+3
Вообще, скорее всего ковыряние в tft_drivers\st7735\initlcd.h поможет вам отбросить костыли. В духе (цифры смещения естественно будут другие):

LCD_Write_COM(0x2a);
LCD_Write_DATA(0x00);
LCD_Write_DATA(0x00);
LCD_Write_DATA(0x00);
LCD_Write_DATA(0x7f); // прибавить +0x02 = 0x81
LCD_Write_COM(0x2b);
LCD_Write_DATA(0x00);
LCD_Write_DATA(0x00);
LCD_Write_DATA(0x00);
LCD_Write_DATA(0x9f); // прибавить +0x01 = 0xA0
+
avatar
0
  • figvam
  • 03 ноября 2020, 12:06
Да, прикручивать китайские экранчики к самоделкам — это то ещё развлечение. Я брал маленький TFT экран на ST7735 для прикручивания к Raspberry Pi. Библиотек для ST7735 вроде много, но с тем экраном работает всего пара, и то пришлось допиливать напильником — была инверсия цветов и неправильные размеры.

Потом взял IPS экранчик 240x240 на ST7789, уже вторая библиотека завелась, но тоже с небольшим допилингом. С этими дисплеями постоянное ощущение лотереи.
+
avatar
0
  • iamjdoe
  • 03 ноября 2020, 15:22
Попробуйте библиотеку товарища cbm80amiga для ST7789. Думаю, вам понравится.
+
avatar
0
  • figvam
  • 03 ноября 2020, 17:05
Мне для Raspberry Pi нужно было, а не для Arduino. Впрочем, если понадобится Arduino, положу в закладки.
+
avatar
0
Пина CS у этого дисплея нет, это существенный минус
+
avatar
0
  • Ammo1
  • 03 ноября 2020, 22:37
есть
+
avatar
0
  • v0ltage
  • 08 февраля 2021, 18:27


Подключил этот экран к Arduino Nano
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.