Для своего информационного табло я решил, что будет недостаточно просто отображать цифры и текст. Хочу погоду, да так, чтобы визуально было понятно. Было бы идеально рисовать картинки с погодой. Посмотрим, что из этого вышло.
Translation to English is here. Также, основной канал в telegram.
Данная статья потребовалась мне для того, чтобы раздробить на некоторые логические части проект по созданию метеостанции.
Во-первых, тут обсуждается вопрос, который актуален сам по себе, независимо от проекта, в котором этот опыт будет задействован.
Во-вторых, это уменьшит объем той самой публикации про метеостанцию.
В-третьих, так будет проще через поиск находить ответы на свои вопросы.
Итак, возможно, есть возможность выводить картинки на LCD2004 в ESPHome и другим способом, но в базовом описании я пока не нарвался на эту функцию. А вот что есть:
Тут есть возможность использовать 8 пользовательских символов. Нам дается пример кода для каких-то двух символов:
display:
- platform: lcd_pcf8574
id: mydisplay
# ...
user_characters:
- position: 0
data:
- 0b00000
- 0b01010
- 0b00000
- 0b00100
- 0b00100
- 0b10001
- 0b01110
- 0b00000
- position: 7
data:
- 0b00000
- 0b01010
- 0b00000
- 0b00100
- 0b00100
- 0b00000
- 0b01110
- 0b10001
lambda: |-
it.print("Hello, world \x08 \x07!");
Все здорово конечно, но кто-то может так сразу понять, что мы вывели?
Я - нет, но вот если взять в руки старый добрый Excel и нарисовать в нем по клеточкам? Я попробовал и результат меня - вполне устроил.
Все очень просто, 0 - не закрашенная клетка, 1 - закрашенная. Один символ в дисплее имеет 5*8 точек. Чертим таблицу и заливаем в каждой строке те клетки, где у нас 1. Фон символа сделал для удобства желтый. У нас же подсветка примерно такого же цвета...
Результат совсем другой:
Отлично, теперь, когда логика понятна, остается нарисовать свои символы.
Солнышко у меня заняло 2 символа, как, впрочем, и облако. Итого, использовали уже половину свободных слотов. Обозначить что-то вменяемо используя по одному символу - у меня не вышло.
Ну и код этих символов соответственно будет таким для солнца:
#Sun1
- position: 0
data:
- 0b00100
- 0b00001
- 0b10010
- 0b00100
- 0b00100
- 0b10010
- 0b00001
- 0b00100
#Sun2
- position: 1
data:
- 0b00100
- 0b10000
- 0b01001
- 0b00100
- 0b00100
- 0b01001
- 0b10000
- 0b00100
Для облака таким:
#Cloud1
- position: 2
data:
- 0b00010
- 0b01101
- 0b10000
- 0b10000
- 0b01000
- 0b01100
- 0b00111
- 0b00000
#Cloud2
- position: 3
data:
- 0b10110
- 0b01001
- 0b00001
- 0b00010
- 0b00010
- 0b00100
- 0b11000
- 0b00000
И теперь, когда у нас осталось только 4 свободных символа, то нужно как-то дорисовать все остальные состояния для погоды, а я пока могу только показать ясно, облачно и переменная облачность.
Для этого я решил, что строкой ниже я буду показывать осадки. Символы нужно рисовать так, чтобы они собирались в разные варианты, т.е. потратив на красивую снежинку 2 символа, уже не получится дорисовать дождь, грозу и туман. Поэтому было принято решение нарисовать символы так, чтобы они комбинировались между собой и одновременно их можно было бы использоваться в парной публикации.
Объяснил сложно, знаю, но сейчас все покажу. Рисуем в табличке следующее:
Использовав символ 6 мы покажем, что идет дождь, а показав его с символом 4 - дождь с грозой. 5 и 6, дождь со снегом, 6 и 6 - ливень, 5- снег, 5 и 5 - снегопад. Надеюсь, логику поняли. 8 символ у меня свободен, но я туда к лету туман запишу, пригодится. Код для этих символов такой:
#Storm
- position: 4
data:
- 0b00010
- 0b00100
- 0b01000
- 0b10111
- 0b11101
- 0b00010
- 0b00100
- 0b01000
#Smow
- position: 5
data:
- 0b10100
- 0b01000
- 0b10100
- 0b00000
- 0b00000
- 0b00101
- 0b00010
- 0b00101
#Rain
- position: 6
data:
- 0b01001
- 0b10010
- 0b00000
- 0b01001
- 0b10010
- 0b00000
- 0b01001
- 0b10010
Ну и для теста - публикуем разные комбинации в дисплей, смотрим что получилось:
Безусловно тут далеко не все комбинации и есть еще кучу других вариантов, но мне хватило и этого для понимания. Если кого-то что-то не устраивает - рисуем свои символы, делимся ими в комментариях. Меня же такой результат - вполне устроил.
Таким образом, у нас появилась уникальная возможность рисовать на символьном дисплее, что здорово украшает проект и придает ему настроение☺.
Всех с наступившим новым годом!
Мой блог является некоммерческим, поэтому позитивный комментарий, лайк или репост поможет публикациям выходить чаще и развивать канал☺.
Также публикации можно найти на других площадках: Instagram, telegram (RU, EN, DE), Medium, LiveJournal, YouTube, Reddit