Выгорание OLED на витрине
Взбрело мне как-то в голову купить телек. И не абы какой, а именно OLED с фичей 3D. Вариантов нашлось всего два, и оба от ЛыЖы. Как раз в это время в МВидео на один из них была скидка, ещё и с акцией. Выходило со всеми плюшками 80к.
Вот он, сейчас и без плюшек 80 стоит:
Ну да ладно, повёлся на уловки маркетологов. Погуглил немного про OLED, взял ноут, кабель и картинок тестовых на флешке (битые пиксели смотреть и прочее).
Приезжаю в магаз - оказывается, их осталось 4 штуки по всей Москве и все на витрине в разных магазинах. Ну ладно, думаю, потестирую уже раз приехал. Подключаю ноут, нахожу пару битых пикселей. Подождите-ка, а это что?! На синем тесте вижу примерно такую картину (сварганил в пеинте, тогда не сфоткал):
Нехилые темноватые пятна по всему экрану правильных форм! Причём на красном и зелёном такого нет. Соответственно, вместо чисто белой картинки он мне показал унылые желтоватые разводы. И тут догоняю, что телевизор на витрине стоит уже два года, и с утра до вечера крутит один и тот же ролик! Короче, деградация синих OLED во всей красе.
В итоге пришлось брать более дорогую модель, но со склада. Кто покупает OLED - будьте осторожны. Потом будете смотреть на фильм сквозь желтые разводы логотипа магазина.
P.S. Как оказалось, у OLED есть похожий эффект остаточного изображения. Увидеть его можно на сплошной тёмно-серой картинке (все OLED телевизоры "с витрины" точно будут его иметь). Длительный просмотр статичной картинки или фильма с полосами по краям тоже вызовет этот эффект.
Свой текст для OLED 128x64
В очередном своём проекте я решил использовать китайский OLED дисплей разрешением 128х64 точки с интерфейсом подключения I2C.
Но после курения весьма немногочисленных и однотипных гайдов по работе с такими экранами я понял, что круче руководств как подключить его к дуньке (4 провода, смех) и вывода на него стандартного примера, ничего во всеобъемлющем интернете толком то и нет... Да и ещё у него есть такой недостаток как скудность стандартных шрифтов – в стандартной библиотеке их всего 5, два из которых буквенные и три циферные, причём самый большой циферный выполнен в каком-то псевдоготическом стиле.
В общем ни один из стандартных шрифтов мне не подходил категорически. Ну чтож, подумал я, значит надо сделать свой шрифт с блекджеком и шлюхами. Дело за малым – найти гайд и бабахнуть. Но тут всплыла ещё одна проблема – гайдов по этому делу нет, только ссылки на мёртвые сайты, хождения вокруг да около, троллинг, закольцованные комментарии. Ныть на форумах я не собирался, ожидая что кто-то сделает всю работу за меня, поэтому принял решение расковырять библиотеку, а конкретнее файл DefaultFonts.c, лежащий в её папке. Итак, открываем его и видим портянку из шестнадцатеричного кода с комментами.
Ну думаю круто, сейчас возьму фотошоп, нарисую в монохроме шрифт, загоню его в прогу конвертер картинок в хекс-код, забью в наш DefaultFonts.c и дело в шляпе. Ок, рисую шрифт 20х40:
Сохраняю в картинку каждый символ, перегоняю его в хекс с помощью DotFactory (скрин наспех, делал уже потом, для данного поста, восьмёрка кривая, как видно по визуализатору, не исправлял настройки программы):
Вставляю в файл шрифта, в скопированный блок с новообозванным шрифтом. Затем загружаю в ардуино тестовый скетч и получаю сраку на дисплее (фото не делал, там просто россыпь хаотичных пикселей, как будто гном чихнул).
Значит не так всё просто как кажется… В конечном итоге разобрался и опишу процесс пошагово на примере одного символа.
Начну пожалуй с того, что каждый шрифт в файле DefaultFonts.c представляет собой блок с заголовком в виде:
Где MediumNumbers - имя шрифта, а набор из четырёх байтов - параметры. Итак по порядку:
0x0c - ширина шрифта, в данном случае 12 пикселей
0x10 - высота шрифта, тут равна 16ти пикселям
0x2d - порядковый номер первого символа согласно таблице ASCII
0x0d - общее количество символов в шрифте (блоке)
Теперь постараюсь ещё подробнее, чтобы не извращаться с дорисовкой ноликов, ширину принимаем кратной 4ке, то есть 4, 8, 12, 16 и тд. С высотой попроще, позже объясню как правильно её корректировать. Количество символов наверное можно не объяснять, в данном примере она равна 13ти и можно тупо посчитать строки - их ровно 13, справа даже комментарии есть какой символ зашифрован. По поводу кода символа согласно ASCII - ниже таблица, например если нужно чтобы шрифт начинался с двойки - пишем 0x32 (50 номер в десятичной), если например с буквы Q - пишем 0x51 (81 в десятичной).
В данном примере сделаем шрифт из одного символа, с размерами 24х32, который будет печататься на экран вместо цифры "0". Так как все делают метеостанции и умные дома, то решил нарисовать наспех такой символ:
Заметьте, картинка 24х30 пикселей, нестандартная высота для примера, цвет неважен. Хоть сине-зелёную сделайте.
Дальше валим её набок вправо, затем делим её справа налево на колонки по 8 пикселей, открываем любой текстовый редактор (или тетрадку). Я предпочитаю обычный Microsoft Word, где делаю таблицу из двух колонок - в первой у нас будут двоичные числа, во второй - перевод в 16тиричную. В принципе всё видно на картинках ниже:
Забиваем в таблицу числа в виде ХХХХХХХХ (8 бит или 1 байт) согласно заполненности цветом, у меня белый - 0, чёрный - 1. Занятие муторное, но нормальных программ для этого дела я не нашёл, наверное плохо искал.
В итоге получаем 4 блока, нумерация идёт справа налево, повторюсь. В фотошопе прекрасно видно - фон как раз таки состоит из клеток 8х8 пикселей.
Вы наверное заметили, что получилось 3 блока по 8 пикселей и последний на 6 пикселей. Как быть с последним? Просто допишем нули в начало:
После того, как все значения записаны в двоичном коде - переводим их в шестнадцатиричную систему счисления, я делаю это с помощью калькулятора из 10ой винды, можно приспособить любой онлайн конвертер или прогу BinDecHex. В принципе наверное можно забить в файл шрифтов и в двоичном коде, но я не пробовал, можете попробовать и отписаться. В двоичном формате наверняка портянка получится дай боже.
Не забываем отделять все числа запятыми!
Когда мучения закончатся - вставляем полученное содержимое в файл DefaultFonts.c в новый свеженький блок:
Обзовём шрифт Symbol, параметры будут "0x18, 0x20, 0x30, 0x01," что равнозначно 24х32 пикселя, 48 стартовый номер (цифра "0") и всего 1 символ в шрифте.
Далее осталось дело за малым - накидать скетч и залить в ардуино:
В итоге получаем это:
Толком сфокусироваться не смог, дисплей слишком контрастный, да и поздно было) Но в принципе видно что всё у нас вышло.
Как обычно замечу что на гениальность не претендую, возможно есть способы быстрее и продуктивнее. Но этот пост позволит разобраться в принципах формирования шрифта в этой библиотеке. Гайд не исчерпывающий и для меня остались некоторые пробелы - почему например нельзя сделать шрифт произвольного размера, допустим 37х21. Если ответ на этот вопрос появится в комментариях - буду рад. Так же если имеются дополнения и вопросы - пишите, не стесняйтесь.
Концепт телефона. Мой взгляд
Всем привет! Давно созрела идея нарисовать свой концепт телефона настоящего, который можно производить уже сейчас, которым было бы удобно пользоваться каждый день, и который привнесет хоть что-то новое в однотипные устройства, заполонившие рынок. На суд пикабушников выкладываю свои "творения")
LG тизерит первые "тв-обои"
Я бы очень насторожился на месте производителей домашних проекторов.
150-200" 4K тв, который можно будет смотреть не только в темноте, но и днем/вечером, без всяких геморов с установкой, шумом и громоздкостью. Это ли не мечта. Да еще и с пассивным 3D (у нынешних домашних проекторов возможно только активное).
Умные часы своими руками на ESP8266 #1
Решил тут собрать что-то мелкое и эффектное, ну и не долго подумав, решил начать изобретать велосипед разработку своих "умных часов", да так, чтобы повторить мог любой, и без сложных схем.
Монитор выбрал OLED на драйвере ssd1306, так как он работает по интерфейсу I2C, а значит займет всего 2 пина микроконтроллера и это то что надо! Платой с ESP8266 изначально была ESP-07, но позже ей стал модуль ESP-01, хоть на нем и мало разведенных пинов, но их вполне хватит даже для подключения нескольких датчиков (пульс, температура тела...), ведь даже RX и TX можно использовать как GPIO любого назначения.
Первым этапом стало написание скетча, умеющего получать из интернет данные о погоде и времени, далее задумался "куда же засунуть RTC для счета времени" и в итоге решил вообще от него отказаться, пусть сам микроконтроллер считает время, а когда появится "родная" WIFI сеть, время синхронизируется и снова станет точным. За десять часов работы часов, они отстали примерно на минуту, что вполне приемлемо (ужин с обедом уже не перепутаешь).
Конечно же я не учитывал тогда, что девайс будет не только показывать время, но и считать пульс, показывать погоду и прочее, по этому задачку со временем еще предстоит решить.
На этом этапе устройство отображает в течении 10 секунд время, за тем 3 секунды температуру, что берет из интернета, за тем влажность в течении 3-х секунд, источник данных тот же.
Для корректного отображения русского шрифта и вообще для работы ESP8266 с OLED 128X64 библиотеки adafruit слегка модифицированы и прилагаются к статье вместе со скетчем ессно
https://yadi.sk/d/l7dh85d932YizK
Продолжение конечно же следует!
Видео по статье:
Поиграем в бизнесменов?
Одна вакансия, два кандидата. Сможете выбрать лучшего? И так пять раз.