Матричный дисплей на 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

 

 

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

Ваш отзыв