RSS блога
Подписка
Матричный дисплей на MAX7219. Делаем часы с погодой.
- Цена: $1.01 x 8
- Перейти в магазин
Микросхема MAX7219 — готовый драйвер для семисегментных и матричных светодиодных индикаторов. Как подключать маленькие и большие цифровые индикаторы я уже писал. Теперь решил попробовать собрать матричный дисплей.
Много DIY, печатных плат и программирования микроконтроллера под катом.
Заказал 8 матричных модулей 8x8 с ценой чуть больше доллара за штуку. Так как при количестве больше 1 шт получалась платная доставка, не поленился, сделал 8 заказов. Сейчас товар не доступен, но легко можно найти такой же, может чуть дороже.
Ехало все это богатство больше двух месяцев.
В комплекте платка с микросхемой, сам индикатор, разъемы для индикатора и для соединения каждой платы.
Размеры индикатора 3.2 см Х 3.2 см. Подключение к микроконтроллеру по SPI «в один конец» по трем проводам. Модули подключаются каскадно — DIN->DOUT. Все остальные выводы запаралелены.
Подключив один модуль к ардуинке (фоток не осталось) решил сразу собирать дисплей.
Из двух конфигураций 8x64 и 16x32 выбрал вторую, так как решил в конечном итоге делать часы.
Первая же это классическая «бегущая строка».
Чтобы меньше возиться с проводами, развел плату под дисплей (и чего бы на нее сразу контроллер не установить было?)
Готовый собранный экран подключил к ESP8266.
Для таких модулей обычно используется ардуиновская библиотека LedControl . Но мне больше приглянулся драйвер для модулей MAX7219 к графической библиотеке AdafruitGFX.
В отличие от LedControl, где с каждому модулю обращаются по номеру, Max72xxPanel позволяет работать со всеми модулями, как с едиными пиксельным дисплеем.
К ESP8266 подключение такое:
В конструкторе объекта матрицы определяем PinCS, а также количество модулей по вертикали и по горизонтали
В секции SETUP программы нужно сконфигурировать наш дисплей, то есть задать последовательность подключения модулей и орентацию каждого модуля.
Микросхема MAX7219 поддерживает 16 градаций яркости светодиодов. Ставим максимальную:
Дисплей превращается в яркий красный фонарь
мощностью более 12Вт
К тому же довольно ощутимо нагревающийся
Собственно удивляться нечему — все написано в даташите на MAX7219, Максимальный ток на всех сегментах одного модуля — 330мА, что при умножении на 8 и дает 2.6А. Минимальный ток — 1/16 от этой цифры. В нашем случае около 160мА. При установке интенсивности ток будем меняться с шагом 1/16 от максимального.
При такой яркости дисплея не вижу смысла устанавливать значение интенсивности больше 7.
С током разобрались, перейдем к выводу информации на наш дисплей.
В примерах к библиотеке Max72xxPanel есть простенькая программа — вывод бегущей строки. По умолчанию, строка выдается стандартным шрифтом библиотеки GFX 5x7.
Русификация данной библиотеки подробно рассмотрена здесь.
Суть сводится к тому, что нужно скачать по ссылке архив, взять оттуда русский фонт и положить его в папку AdafruitGFX-master. Остальные файлы, это примеры, как перекодировать константы, введенные в среде Arduino в UTF-8 в кодировку фонта 1251.
Там есть для этого функция utf8rus
С отображением текста теперь все ясно. Но дисплей у на ГРАФИЧЕСКИЙ. Значит без отображения графики, хотя бы статической, никуда.
Чтобы подсунуть графику библиотеке GFX, нужно запихнуть ее в байтовый массив.
Для этого можно воспользоваться онлайн-сервисом
Рисуем картинку или иконку в любом редакторе, подсовываем ее этому сервису. Шаманим с параметрами, если нужно и получаем готовый массив
Теперь если скормить этот массив функции drawBitmap, то получаем ее на дисплее
Интересно смотреть в тепловизор, как нагреваются отдельные пикселы
С дисплеем все понятно. Теперь можно сделать из него что-нибудь полезное. В интернете ходит шутка, что бы вы не делали с ESP8266 — получается метеостанция. ))) Вот ее то мы и будем делать, только без датчиков. Погоду пусть контроллер берет из интернета, с бесплатного сервиса openweathermap.org и отображает попеременно со временем, которое получает по NTP. Погода получается в формате jSON. Пытался договориться с Яндексом на получение погоды, но служба поддержкименя послала объяснила, что бесплатный доступ к API погоды они дают только СМИ.
Под цифры полной высоты шрифт не подобрал, поэтому нарисовал 10 картинок
Значок подключения к WiFi
Полный скетч который запрашивает время и погоду и выводит на экран выложил на GITHUB
Осталось подобрать подходящий корпус
Вытравливаю плату с контроллером (и что бы ее с платой дисплея не совместить?)
Прошиваю ESP8266 на программаторе.
Паяю плату контроллера
Монтирую в корпусе
Закрываю прозрачным стеклом с красным светофильтром (хорошо подходят цветные файлы для бумаг )
Для крепление с ходу не придумалось ничего лучше стяжек
Питание — старый зарядник от телефона. При яркости 50% и не полном заполнении экрана ток потребления получается порядка 0.5А, так что зарядника вполне хватит. И часы в черновом варианте готовы.
Смотреть работу часов лучше на видео
Восторг кота слышен на заднем плане )))
Пора подводить итог.
Модули вполне годные, но работать мне с ними не понравилось. Слишком много возьни, избыточное количество микросхем, хотя лучше, чем на WS2812, где микросхема в каждом диоде.
Все же лучше применять готовые дисплеи. Например,P6 RGB гораздо большего размера обойдется в $11
В целом проект удачный, часы после небольшой доработки корпуса пойдут в подарок.
Доделаю выдачу даты, снижение яркости дисплея после захода солнца (сервис openweathermap.org lдает эту информацию) и прогноз погоды, а также отображения температуры вкорпусе часов в комнате. Разъем для DS18B20 предусмотрен.
Всем хорошего дня и солнечных выходных. А то пока делал часы, больше 21С они не вещали. И это в июле!
Много DIY, печатных плат и программирования микроконтроллера под катом.
Заказал 8 матричных модулей 8x8 с ценой чуть больше доллара за штуку. Так как при количестве больше 1 шт получалась платная доставка, не поленился, сделал 8 заказов. Сейчас товар не доступен, но легко можно найти такой же, может чуть дороже.
Ехало все это богатство больше двух месяцев.
В комплекте платка с микросхемой, сам индикатор, разъемы для индикатора и для соединения каждой платы.
Размеры индикатора 3.2 см Х 3.2 см. Подключение к микроконтроллеру по SPI «в один конец» по трем проводам. Модули подключаются каскадно — DIN->DOUT. Все остальные выводы запаралелены.
Подключив один модуль к ардуинке (фоток не осталось) решил сразу собирать дисплей.
Из двух конфигураций 8x64 и 16x32 выбрал вторую, так как решил в конечном итоге делать часы.
Первая же это классическая «бегущая строка».
Чтобы меньше возиться с проводами, развел плату под дисплей (и чего бы на нее сразу контроллер не установить было?)
Готовый собранный экран подключил к ESP8266.
Для таких модулей обычно используется ардуиновская библиотека LedControl . Но мне больше приглянулся драйвер для модулей MAX7219 к графической библиотеке AdafruitGFX.
В отличие от LedControl, где с каждому модулю обращаются по номеру, Max72xxPanel позволяет работать со всеми модулями, как с едиными пиксельным дисплеем.
К ESP8266 подключение такое:
- DIN -> GPIO13 (MOSI)
- SCK -> GPIO14 (SCK)
- CS -> GPIO16 (к любому свободному)
В конструкторе объекта матрицы определяем PinCS, а также количество модулей по вертикали и по горизонтали
int pinCS = 16; // Attach CS to this pin, DIN to MOSI and CLK to SCK (cf http://arduino.cc/en/Reference/SPI )
int numberOfHorizontalDisplays = 4;
int numberOfVerticalDisplays = 2;
Max72xxPanel matrix = Max72xxPanel(pinCS, numberOfHorizontalDisplays, numberOfVerticalDisplays);
В секции SETUP программы нужно сконфигурировать наш дисплей, то есть задать последовательность подключения модулей и орентацию каждого модуля.
У меня получилось так:
// Порядок матриц
matrix.setPosition(0, 3, 1);
matrix.setPosition(1, 2, 1);
matrix.setPosition(2, 1, 1);
matrix.setPosition(3, 0, 1);
matrix.setPosition(4, 3, 0);
matrix.setPosition(5, 2, 0);
matrix.setPosition(6, 1, 0);
matrix.setPosition(7, 0, 0);
// Ориентация каждой матрицы
matrix.setRotation(0, 3);
matrix.setRotation(1, 3);
matrix.setRotation(2, 3);
matrix.setRotation(3, 3);
matrix.setRotation(4, 3);
matrix.setRotation(5, 3);
matrix.setRotation(6, 3);
matrix.setRotation(7, 3);
Микросхема MAX7219 поддерживает 16 градаций яркости светодиодов. Ставим максимальную:
matrix.setIntensity(15);
Дисплей превращается в яркий красный фонарь
мощностью более 12Вт
К тому же довольно ощутимо нагревающийся
Собственно удивляться нечему — все написано в даташите на MAX7219, Максимальный ток на всех сегментах одного модуля — 330мА, что при умножении на 8 и дает 2.6А. Минимальный ток — 1/16 от этой цифры. В нашем случае около 160мА. При установке интенсивности ток будем меняться с шагом 1/16 от максимального.
При такой яркости дисплея не вижу смысла устанавливать значение интенсивности больше 7.
С током разобрались, перейдем к выводу информации на наш дисплей.
В примерах к библиотеке Max72xxPanel есть простенькая программа — вывод бегущей строки. По умолчанию, строка выдается стандартным шрифтом библиотеки GFX 5x7.
Русификация данной библиотеки подробно рассмотрена здесь.
Суть сводится к тому, что нужно скачать по ссылке архив, взять оттуда русский фонт и положить его в папку AdafruitGFX-master. Остальные файлы, это примеры, как перекодировать константы, введенные в среде Arduino в UTF-8 в кодировку фонта 1251.
Там есть для этого функция utf8rus
Небольшое отступление про кодировку русских букв в среде Ардуино
Тут должно быть много русского мата. Про всех родственников этого итальянца.
Сперва я долго возился с выводом русских слов, введенных в редакторе Arduino IDE на дисплей. Выяснил, что в функции utf8rus нужно смещать на 1 меньше. Как я радовался получив «Привет» на экран. Но в какой то момент времени вместо внятных слов опять получалась белиберда. Смещение в кодировки было то на 1, то на 2 символа. Причем, во вновь созданном скетче все было нормально. До поры, до времени.
Я уже было решил хранить русские константы в отдельном файле либо кодировать в виде '\234'. Пока не стал открывать программу в редакторе NotePad++. Тот определял кодировку UTF8, то UTF8 без BOM.
Путем натурального эксперимента было определено, что если брать файл, и преобразовывать его в UTF без BOM, то следующая сборка проходит нормально и русские константы нормально отображаются.
Документированный «баг» стал «фичей».
Сперва я долго возился с выводом русских слов, введенных в редакторе Arduino IDE на дисплей. Выяснил, что в функции utf8rus нужно смещать на 1 меньше. Как я радовался получив «Привет» на экран. Но в какой то момент времени вместо внятных слов опять получалась белиберда. Смещение в кодировки было то на 1, то на 2 символа. Причем, во вновь созданном скетче все было нормально. До поры, до времени.
Я уже было решил хранить русские константы в отдельном файле либо кодировать в виде '\234'. Пока не стал открывать программу в редакторе NotePad++. Тот определял кодировку UTF8, то UTF8 без BOM.
Путем натурального эксперимента было определено, что если брать файл, и преобразовывать его в UTF без BOM, то следующая сборка проходит нормально и русские константы нормально отображаются.
Документированный «баг» стал «фичей».
С отображением текста теперь все ясно. Но дисплей у на ГРАФИЧЕСКИЙ. Значит без отображения графики, хотя бы статической, никуда.
Чтобы подсунуть графику библиотеке GFX, нужно запихнуть ее в байтовый массив.
Для этого можно воспользоваться онлайн-сервисом
Рисуем картинку или иконку в любом редакторе, подсовываем ее этому сервису. Шаманим с параметрами, если нужно и получаем готовый массив
Теперь если скормить этот массив функции drawBitmap, то получаем ее на дисплее
const unsigned char logo2 [] PROGMEM = {
0xff, 0xff, 0xdf, 0xfd, 0xcf, 0xf9, 0xc7, 0xf1, 0xc0, 0x01, 0xe0, 0x03, 0xe0, 0x03, 0xc2, 0x11,
0xc7, 0x39, 0xc2, 0x11, 0x80, 0x01, 0x00, 0xc1, 0x00, 0x03, 0x00, 0x03, 0x00, 0x07, 0x00, 0x0f };
matrix.drawBitmap(0, 0, logo2, 16, 16, 0, 1);
matrix.write();
Интересно смотреть в тепловизор, как нагреваются отдельные пикселы
С дисплеем все понятно. Теперь можно сделать из него что-нибудь полезное. В интернете ходит шутка, что бы вы не делали с ESP8266 — получается метеостанция. ))) Вот ее то мы и будем делать, только без датчиков. Погоду пусть контроллер берет из интернета, с бесплатного сервиса openweathermap.org и отображает попеременно со временем, которое получает по NTP. Погода получается в формате jSON. Пытался договориться с Яндексом на получение погоды, но служба поддержки
Под цифры полной высоты шрифт не подобрал, поэтому нарисовал 10 картинок
Значок подключения к WiFi
Полный скетч который запрашивает время и погоду и выводит на экран выложил на GITHUB
Осталось подобрать подходящий корпус
Вытравливаю плату с контроллером (и что бы ее с платой дисплея не совместить?)
Прошиваю ESP8266 на программаторе.
Паяю плату контроллера
Монтирую в корпусе
Закрываю прозрачным стеклом с красным светофильтром (хорошо подходят цветные файлы для бумаг )
Для крепление с ходу не придумалось ничего лучше стяжек
Питание — старый зарядник от телефона. При яркости 50% и не полном заполнении экрана ток потребления получается порядка 0.5А, так что зарядника вполне хватит. И часы в черновом варианте готовы.
Смотреть работу часов лучше на видео
Восторг кота слышен на заднем плане )))
Пора подводить итог.
Модули вполне годные, но работать мне с ними не понравилось. Слишком много возьни, избыточное количество микросхем, хотя лучше, чем на WS2812, где микросхема в каждом диоде.
Все же лучше применять готовые дисплеи. Например,P6 RGB гораздо большего размера обойдется в $11
В целом проект удачный, часы после небольшой доработки корпуса пойдут в подарок.
Доделаю выдачу даты, снижение яркости дисплея после захода солнца (сервис openweathermap.org lдает эту информацию) и прогноз погоды, а также отображения температуры в
Всем хорошего дня и солнечных выходных. А то пока делал часы, больше 21С они не вещали. И это в июле!
Кот заставку одобрил
Самые обсуждаемые обзоры
+69 |
3258
133
|
+50 |
3523
65
|
+28 |
2457
46
|
+37 |
2771
40
|
+55 |
2022
37
|
А так здорово!
Электричество не знаю, смарт придеться стационарно тогда запитать.
Что то, типа Окей Гугл и Дуси.
Какой нибудь смарт с раздолбаным экраном приспособить. Подвесить динамик помощней и голосовой пульт с микрофоном безпроводный. Когда нужно включил пульт и спросил что нужно.
Чтобы не подслушивали.
Лежишь на диване, включаешь этот пультик и спрашиваешь. Последние местные новости или еще что.
Например.
— А сейчас будет дискотека, включай группу Авария, песня такая то.
То есть и муз. центр подключить с хорошим звуком.
блин… почти умный дом получается.
Детишек убаюкивать.
— Влючай колыбельную или сказку.
Что то меня понесло. Органайзер, будильник, трансляция звуков природы, соловья там. шум прибоя и далее. Предлагайте?
И как еще китайцы до этого не додумались. Считай нужный удобный девайс. Который спросом будет пользоваться.
На котором из за новизны можно кучу денег срубить.
ЗЫ: запрещено вроде только громатикэ обзора обсуждать.
vk.com/app3441822
Хотя есть и блютуз гарнитуры. Превратить в удобный брелок пульт.
Ну тогда полный комплект есть.
Осталось только реализовать, программно удобно.
По колонкам, не понял зачем wifi, есть опять же блютуз. По всей квартире достанет.
mysku.club/blog/usa-stores/53297.html
Единственное — я бы скорость бегущей строки уменьшил, хорошо и с первого раза его прочитает только тот, кто уже знает, что там написано, имхо.
А еще лучше, чтобы слова менялись полностью. Или сокращенно: Ясно +21
На ней 747 сегодня для Перми.
А вот у яндекса 752
Кому верить?
Заморачивался однажды на счёт давления, да, поправка на высоту нужна, ибо влияет очень сильно. Благо, в квартале от меня есть работающая метеостанция (думал, с советского времени умерла — нет, работает, имеет общемировой идентификатор и сливает данные ежечасно), к ней и привязывался для калибровки.
В помещении, даже у окна все плохо с сигналом GPS.
И высота, да и координаты как правило «прыгают»
Недавно яндекс опубликовал API к погоде. Но ключи только продает.
А у HTML самый большой недостаток кроме объема кода — после смены дизайна, его придется заново писпть
Как вы страницу в несколько десятков килобайт засунете в память?
— куплены готовые модули индикации
— куплены индикаторы
— самостоятельно сделана монтажная плата. Без процессора.
— самостоятельно сделан переходник под процессорный модуль. Модуль покупной.
— использованы готовые библиотеки работы с железом
— использован существующий сервис по переводу картинок в экранные примитивы
— сделан большой шрифт
— сделан корпус
Что-же автор сделал сам? Удаляем купленное-скачанное. Остается:
1. самостоятельно сделана монтажная плата. Без процессора.
2. самостоятельно сделан переходник под процессорный модуль. Модуль покупной.
3. сделан большой шрифт
4. сделан корпус
п1 — с недостатком. Модуль процессора не установлен. Недостаток спорный, но он есть.
п2 — хорошая вещь, низкие трудозатраты
п3 — шрифт жуткий. Цифры сливаются. Особенно неприятен контраст с «готовыми» шрифтами — они-то сделаны нормально.
п4 — задняя часть нормальная (IMHO), но что прилеплено спереди? Пленка от «файлов» не подходит, она имеет прямо противоположные свойства к тому, что надо — размазывает изображение и не обеспечивает должную степень фильтрации по цвету. И «это» вы собрались использовать в качестве подарка? Гм… вообще-то, внешний вид, это основное. Откровенный колхоз в подарке чаще всего приводит к прямо противоположному.
О чем статья? Как собрать часы?… да нее, скорее руководство по применению процессорного модуля. Автор отмечает, что «все» делают на нем именно метеостанции, в том или ином виде. Знаете, остается только чесать репу — в статье нет ни интересных идей, ни нормальных самостоятельных разработок. Фонт — жуткий, корпус — колхоз.
Что полезного можно взять из статьи? Только идею. Платы все равно надо переделывать, ставить модуль процессора.
P.S.
Общался с модулями MAX7219. На них НЕ ставят блокировочные конденсаторы по питанию. Поэтому, динамическая индикация и программная регулировка «яркости» приводят к сильным броскам тока. Причем, пиковый ток не зависит от «яркости» и всегда максимален. Это создает очень высокий уровень пульсаций по питанию. Это создает проблемы у БП, вплоть до скорой его смерти. В статье я не увидел акцента по данной проблеме, поэтому отметил особо.
Хотя лично мне он нравится.
Когда-то и mysku таким же способом же на бывшем ebay-forum «отмечался» :).
Главная цель общение, потому что здесь бывают дают очень много ценных советов.
Потом я дорабатываю поделку, чаще программу и пишу обновленную статью на своем сайте или гиктаймсе.
Мог бы сделать лучше, но не сделал.
P.S. Бросков питания при старте не наблюдаю, может потому что не поленился сам на плате кондер поставить?
И управлять 80-. светиками по 1-му проводу
Что-нибудь типа этого
samopal.pro/ws28120-3/
типа таких
Т.е. вся конструкция — это 70 светодиодов, как вы показали на картинке выше + 70 токоограничительных резисторов + сама Ардуина-мега. Всё.
Для подключения 80 диодов достаточно 18 ног.
Можно и 8-й мегой обойтись. А так как индикация динамическая, то с яркостью никаких проблем
Только вот 80 проводков это ад для монтажника. Как то бы на плате их развести
На Алиэкспресс я покупал 8-канальные там
и 16-канальные там
Только нужно понимать, что всю логику с дисплеем (знакогенератор и пр) придется реализовывать самому, так как стандартные библиотеки работают либо с семисегментниками,, либо с матрицами. И микросхема по даташиту преднаначена для работы на это же.
Тут сперва нужно определиться в приорететах
— Приоритет цены
— Простоты аппаратной части
— Простоты программирования
Ну и саму констуркцию желательно обозначить
Иногда дешевле купить готовые индикаторы или тот же P6 дисплей за $11
вот допустим у меня она работает и там у нее есть 2 вывода 0 и 2
img12.deviantart.net/4335/i/2015/337/e/2/esp8266_esp_01_module_pinout_diagram_cheat_sheet_by_adlerweb-d9iwm7a.png
как на картинке
чтобы ее прошить — надо притянуть 2 к земле и потом дернуть ресет?
что-то я забыл совсем
и зачем на ноде мцу сброс и гпио2 подключены через транзистор с усб мосту?
почему не напрямую?
вот правильная
почему так включены?
но люди разные бывают и иногда такие схемы или код наделают, что индусы отдыхают
mysku.club/blog/aliexpress/43668.html
работает норм
Ищется на Aliexpress по запросу «виниловая пленка для задних фонарей». Цена чуть больше доллара. Я брал черную. Получилось так:
Яркость на матрице 1. То есть на минимуме.
Нужно прицениться
Но ей ведь только плоскость можно обклеить?
То есть только стекло переднее
Скоро приедет, сделаю обзор
Ваш обзор отличный стимул к изучению матчасти и распрямлению изогнутых конечностей в так называемые «прямые руки» )
В тему yadi.sk/i/Ew0egvWq3Hg48u