Матричный дисплей на MAX7219. Делаем часы с погодой.

htb1ci2ispxxxxc3xpxxq6xxfxxxh

Микросхема MAX7219 — готовый драйвер для семисегментных и матричных светодиодных индикаторов.  В семисегментном индикаторе я уже использовал ее в контроллере вентилятора  и погодной станции. В этой статье я напишу о применении готовых светодиодных модулей с MAX7219.

Модули 8×8 с MAX7219 продаются поштучно либо готовыми сборками 8×32. Я брал отдельные модули  8×8 с ценой чуть больше доллара за штуку. Так как при количестве больше 1 шт получалась платная доставка, не поленился, сделал 8 заказов.

100

В комплекте платка с микросхемой, сам индикатор, разъемы для индикатора и для соединения каждой платы.

101

Размеры индикатора 3.2 см Х 3.2 см. Подключение к микроконтроллеру по SPI «в один конец» по трем проводам. Модули подключаются каскадно — DIN->DOUT. Все остальные выводы запаралелены.
Подключив один модуль к ардуинке (фоток не осталось) решил сразу собирать дисплей.
Из двух конфигураций 8×64 и 16×32 выбрал вторую, так как решил в конечном итоге делать часы.
Первая же это классическая «бегущая строка».
Чтобы меньше возиться с проводами, развел плату под дисплей (и чего бы на нее сразу контроллер не установить было?)

200

201

Готовый собранный экран подключил к ESP8266.
Для таких модулей обычно используется ардуиновская библиотека LedControl . Но мне больше приглянулся драйвер для модулей MAX7219 к графической библиотеке AdafruitGFX.
В отличие от LedControl, где с каждому модулю обращаются по номеру, Max72xxPanel позволяет работать со всеми модулями, как с едиными пиксельным дисплеем.
К ESP8266 подключение такое:

  • DIN -> GPIO13 (MOSI)
  • SCK -> GPIO14 (SCK)
  • CS -> GPIO16 (к любому свободному)

В конструкторе объекта матрицы определяем PinCS, а также количество модулей по вертикали и по горизонтали

В секции SETUP программы нужно сконфигурировать наш дисплей, то есть задать последовательность подключения модулей и ориентацию каждого модуля.

Микросхема MAX7219 поддерживает 16 градаций яркости светодиодов. Ставим максимальную:

Дисплей превращается в яркий красный фонарь

302

мощностью более 12Вт

301

К тому же довольно ощутимо нагревающийся

101

Собственно удивляться нечему — все написано в даташите на MAX7219, Максимальный ток на всех сегментах одного модуля — 330мА, что при умножении на 8 и дает 2.6А. Минимальный ток — 1/16 от этой цифры. В нашем случае около 160мА. При установке интенсивности ток будем меняться с шагом 1/16 от максимального.
При такой яркости дисплея не вижу смысла устанавливать значение интенсивности больше 7.
С током разобрались, перейдем к выводу информации на наш дисплей.
В примерах к библиотеке Max72xxPanel есть простенькая программа — вывод бегущей строки. По умолчанию, строка выдается стандартным шрифтом библиотеки GFX 5×7.
Русификация данной библиотеки подробно рассмотрена здесь.
Суть сводится к тому, что нужно скачать по ссылке архив, взять оттуда русский фонт и положить его в папку AdafruitGFX-master. Остальные файлы, это примеры, как перекодировать константы, введенные в среде Arduino в UTF-8 в кодировку фонта 1251.
Там есть для этого функция utf8rus 

Небольшое отступление про кодировку русских букв в среде Ардуино

Тут должно быть много русского мата. Про всех родственников этого итальянца.
Сперва я долго возился с выводом русских слов, введенных в редакторе Arduino IDE на дисплей. Выяснил, что в функции utf8rus нужно смещать на 1 меньше. Как я радовался получив «Привет» на экран. Но в какой то момент времени вместо внятных слов опять получалась белиберда. Смещение в кодировки было то на 1, то на 2 символа. Причем, во вновь созданном скетче все было нормально. До поры, до времени.
Я уже было решил хранить русские константы в отдельном файле либо кодировать в виде ‘\234’. Пока не стал открывать программу в редакторе NotePad++. Тот определял кодировку UTF8, то UTF8 без BOM.
Путем натурального эксперимента было определено, что если брать файл, и преобразовывать его в UTF без BOM, то следующая сборка проходит нормально и русские константы нормально отображаются.
Документированный «баг» стал «фичей».

scr1

С отображением текста теперь все ясно. Но дисплей у на ГРАФИЧЕСКИЙ. Значит без отображения графики, хотя бы статической, никуда.
Чтобы подсунуть графику библиотеке GFX, нужно запихнуть ее в байтовый массив.
Для этого можно воспользоваться онлайн-сервисом
Рисуем картинку или иконку в любом редакторе, подсовываем ее этому сервису. Шаманим с параметрами, если нужно и получаем готовый массив

scr2

Теперь если скормить этот массив функции drawBitmap, то получаем ее на дисплее

300

Интересно смотреть в тепловизор, как нагреваются отдельные пикселы

100

С дисплеем все понятно. Теперь можно сделать из него что-нибудь полезное. В интернете ходит шутка, что бы вы не делали с ESP8266 — получается метеостанция. ))) Вот ее то мы и будем делать, только без датчиков. Погоду пусть контроллер берет из интернета, с бесплатного сервиса openweathermap.org и отображает попеременно со временем, которое получает по NTP. Погода получается в формате jSON. Пытался договориться с Яндексом на получение погоды, но служба поддержки меня послала объяснила, что бесплатный доступ к API погоды они дают только СМИ.
Под цифры полной высоты шрифт не подобрал, поэтому нарисовал 10 картинок

303 304 305

Значок подключения к WiFi

306

Полный скетч который запрашивает время и погоду и выводит на экран выложил на GITHUB
Осталось подобрать подходящий корпус

401

Вытравливаю плату с контроллером (и что бы ее с платой дисплея не совместить?)

402

Прошиваю ESP8266 на программаторе.

403

Паяю плату контроллера

404

Монтирую в корпусе

405

406

Закрываю прозрачным стеклом с красным светофильтром (хорошо подходят цветные файлы для бумаг )

411

410

Питание — старый зарядник от телефона. При яркости 50% и не полном заполнении экрана ток потребления получается порядка 0.5А, так что зарядника вполне хватит. И часы в черновом варианте готовы.

407 408 409

Видео работы часов с погодой

осторг кота слышен на заднем плане )))

Пора подводить итог.
Модули вполне годные, но работать мне с ними не понравилось. Слишком много возьни, избыточное количество микросхем, хотя лучше, чем на WS2812, где микросхема в каждом диоде.
Все же лучше применять готовые дисплеи. Например, P6 RGB гораздо большего размера обойдется в $11

В целом проект удачный, часы после небольшой доработки корпуса пойдут в подарок.
Доделаю выдачу даты, снижение яркости дисплея после захода солнца (сервис openweathermap.org lдает эту информацию) и прогноз погоды, а также отображения температуры в корпусе часов в комнате. Разъем для DS18B20 предусмотрен.
Всем хорошего дня и солнечных выходных. А то пока делал часы, больше 21С они не вещали. И это в июле!

Правда похоже получилось?

c1

c2

Пока писалась статья, приехал дисплецсик P6. Так что скоро будет новый материал

l001 l100

 

 

Вы можете оставить отзыв или трекбек со своего сайта.

Один отзыв на «Матричный дисплей на MAX7219. Делаем часы с погодой.»

  1. Кирилл:

    Отлчиная идея с красным акрилом.А если применить черный,миллиметра в три,будет достаточно читаемо?

Ваш отзыв