6 октября 2018
Всем привет.
Сегодня для тестирования, подключаем к Arduino Nano, четырех значный, 7 х 4 сегментный, I2C дисплей TM1637.
Еще несколько лет назад подключить такой дисплей было не так просто и приходилось использовать все выводы платы Ардуино. Но сейчас благодаря микросхеме TM1637, преобразующей данные с шины I2C, в параллельные сигналы, эти дисплеи стало очень просто подключать к контроллерам. Так как для подключения этого дисплея нужно всего 4 провода, мама-мама или если использовать макетную плату, то 4 провода папа-папа. Из них 2 повода это питание +5 В, GND и оставшиеся 2 провода это шина I2C.
Вкратце расскажу про характеристики дисплея:
Микросхема драйвера дисплея TM1637
Логические уровни толерантные как к уровням напряжения 5 В и 3.
И так, перейдем к подключению сегментного экрана к Arduino nano. Подключение занимает всего несколько секунд.
Схема подключения:
Принципиальная схема:
Для того что бы на экране индикатора появилась какая либо информация, нужно скачать и установить библиотеку TM1637, потом запустить Arduino IDE и выбрать “Файлы – примеры – TM1637” и после чего нажать кнопочку “Загрузка в контроллер”, кнопку обозначил на изображении
Если все прошло успешно , то Ваш дисплей начнет демонстрировать свои возможности.
В выше приведенной библиотеке есть много разных эффектов, такие как бегущая строка, скроллинг, вращение, управление яркостью и пр.
Что бы создать и загрузить в дисплей свой символ, для его расчета нужно воспользоваться инструкций на изображении ниже. Если в двух словах, то значение каждого включенного сегмента нужно суммировать
Например нам нужно на экране получить цифру 4. Для этого нужно суммировать следующие значения 2 + 4 + 32 + 64 = 102. Переводим в шестнадцатеричную систему исчисления и получаем 0x66.
Ну вот как бы и все, что я хотел Вам рассказать про этот замечательный I2C экранчик. Надеюсь ничего не упустил. Если будут вопросы. Не стесняйтесь задавайте. Я отвечаю всегда, но может не всегда быстро как многим хотелось бы.
И на последок видео демонстрация возможностей сегментного индикатора TM1637
7-сегментные дисплеи, которые можно найти на старых цифровых будильниках, отлично подходят для проектов Raspberry Pi, в том числе тех, которые вы делаете с Raspberry Pi Pico. Вы можете использовать 7-сегментный дисплей, чтобы вести счет в игре, отображать данные датчиков, такие как температура или расстояние, или отслеживать время. Вы даже можете показать несколько букв.
На рынке существует множество видов 7-сегментных дисплеев, и они различаются не только в зависимости от количества цифр и цвета, но и от платы контроллера или от ее отсутствия. Некоторые дешевые 7-сегментные дисплеи не имеют контроллера и используют отдельные контакты для каждого источника света. Если учесть, что каждая цифра имеет семь разных индикаторов (отсюда и название «7-сегментный дисплей»), это много выводов.
Однако более совершенные 7-сегментные дисплеи имеют платы контроллеров, которые используют соединение I2C, использующее всего четыре контакта, с питанием от платы контроллера TM1637. Ниже мы покажем вам, как использовать один из этих 7-сегментных дисплеев с питанием от TM1637 с Raspberry Pi Pico.
7-сегментный дисплей имеет четыре контакта: CLK, DIO, GND и VCC. Если вы используете перемычки «мама-мама», вам не понадобится макетная плата для подключения.
Подключите следующие контакты 7-сегментного дисплея к PIco:
Вы можете подключить контакты CLK и DIO к любым двум контактам GPIO на Pico, которые поддерживают I2C SCL и SDA соответственно, и вы можете подключить контакт GND к любому из 8 контактов GND Pico.
Мы во многом полагаемся на отличную библиотеку TM1637 MicroPython от Майка Каузера и попробуем создать сценарий, который показывает различные варианты отображения, которые вы можете использовать в своих собственных проектах.
5. Загрузите файл tm1637.py из проекта Mike Causer TM1637 на github. Другие файлы вам не нужны.
6. Скопируйте tm1637.py в корневой каталог вашего Pico . Поскольку Pico с MicroPython не отображается как буква диска, самый простой способ сделать это — открыть tm1637.py в Thonny или IDE или на ваш выбор и сохранить его оттуда.
7. Создайте новый скрипт MicroPython в Thonny или в IDE MicroPython по вашему выбору.
8. Импортируйте необходимые библиотеки.
import tm1637 from machine import Pin from utime import sleep
Мы будем использовать библиотеку utime, чтобы установить односекундную задержку «сна» между каждой функцией, чтобы у вас было время посмотреть их на дисплее.
9. Создайте экземпляр объекта tm1637.TM1637 с именем «mydisplay» и введите правильные номера контактов для контактов CLK и DIO в качестве параметров.
mydisplay = tm1637. TM1637(clk=Pin(16), dio=Pin(17))
10. Используйте метод «показать», чтобы отобразить любые четыре символа. Это могут быть буквы или цифры, но обратите внимание, что многие буквы, например W, будут выглядеть неудобно. Если вы введете более четырех символов, будут показаны только первые четыре. Обязательно заключите строку параметра в кавычки.
mydisplay.show(“Pico”) sleep(1)
11. Очистите экран , используя «показать» с четырьмя пробелами (при условии, что на вашем экране четыре цифры).
mydisplay.show(“ “) sleep(1)
Обратите внимание, что если вы не очистите дисплей, он останется включенным, когда ваша программа завершит выполнение. Вам не нужно очищать дисплей при его изменении, но если вы используете другую команду show с меньшим, чем максимальное количество символов, любые символы, которые вы не заменяете, останутся на экране. Например, если вы показываете («ореол»), а затем показываете («20»), на экране будет отображаться 20lo.
12. Используйте «числовой» метод, чтобы показать целое число. Не заключайте параметр в кавычки. Вы можете отображать отрицательное или положительное число, но если это отрицательное число, он должен зарезервировать один символ для знака минус. Обратите внимание, что если вы вводите число, большее доступного количества цифр (например, ввод 12345 на четырехзначном дисплее), на экране будет отображаться «9999» или «-999» для отрицательных чисел.
mydisplay.number(-123) sleep(1)
Используйте метод «чисел», чтобы показать время видимым цветом. Введите в качестве параметров два двузначных числа, и двоеточие, если оно есть на вашем экране, будет отображаться между ними. Этот пример будет отображаться как 12:59.
13. Учитывая, что вы можете использовать метод «show» для отображения цифр или букв, вы можете задаться вопросом, зачем вам использовать числовой метод. Одна из причин заключается в том, что вам не нужно преобразовывать целые числа в строки, а другая заключается в том, что на экране будет использоваться только необходимое количество цифр, поэтому вам не нужно вводить пробелы, чтобы выровнять номер по правому краю.
mydisplay.numbers(12,59) sleep(1)
14. Отрегулируйте яркость с помощью метода яркости. В качестве параметра можно ввести число от 0 (наименьшее) до 7 (наибольшее).
#adjust the brightness to make it loewr mydisplay.brightness(0) sleep(1)
15. Используйте метод «прокрутки» для отображения прокручиваемого текста. Введите строку (в кавычках) в качестве первого параметра и добавьте «delay =» и количество миллисекунд, чтобы контролировать скорость прокрутки. Если вы пропустите параметр задержки, по умолчанию будет 250 мс.
mydisplay.scroll("Hello World 123", delay=200) sleep(1)
16. Используйте метод «температуры», чтобы показать температуру в градусах Цельсия. Этот метод добавляет символ градуса и букву C после цифр. Вы вводите одно или двузначное целое число в качестве температуры, и вы можете делать отрицательные температуры, но это может быть только одна цифра.
mydisplay.temperature(99) sleep(1)
17. Снова отключите экран, чтобы он не оставался гореть после завершения программы.
mydisplay.show(“ “)
Вот итоговый код:
import tm1637 from machine import Pin from utime import sleep mydisplay = tm1637.TM1637(clk=Pin(16), dio=Pin(17)) # Show a word mydisplay.show("Pico") sleep(1) #blank the screen mydisplay.show(" ") sleep(1) #show numbers mydisplay.number(-123) sleep(1) #show a time with colon mydisplay.numbers(12,59) sleep(1) #adjust the brightness to make it loewr mydisplay.brightness(0) sleep(1) #show scrolling text mydisplay.scroll("Hello World 123", delay=200) sleep(1) #show temperature mydisplay.temperature(99) sleep(1) #blank the screen again mydisplay.show(" ")
В моей руке модуль 4-разрядного 7-сегментного дисплея.
Сердцем этого модуля является недорогой последовательный драйвер светодиодов от Titan Micro Electronics под названием TM1637.
В этом уроке я покажу вам, как управлять 4-значным 7-сегментным дисплеем TM1637 с помощью Arduino. Если вы хотите отображать данные датчика, температуру и влажность или хотите спроектировать часы, таймер или счетчик, вам понадобится этот 4-разрядный семисегментный дисплей.
В моей руке модуль 4-разрядного 7-сегментного дисплея.
Сердцем этого модуля является недорогой последовательный драйвер светодиодов от Titan Micro Electronics под названием TM1637.
В этом уроке я покажу вам, как управлять 4-значным 7-сегментным дисплеем TM1637 с помощью Arduino. Если вы хотите отображать данные датчика, температуру и влажность или хотите спроектировать часы, таймер или счетчик, вам понадобится этот 4-разрядный семисегментный дисплей.
В этом уроке мы поговорим о:
Затем мы рассмотрим некоторые из этих быстрых примеров:
И, наконец, мы рассмотрим некоторые распространенные ошибки.
7-сегментный дисплей состоит из 7 светодиодов, образующих десятичную цифру 8. Эти светодиоды называются сегментами, потому что, когда они загораются, каждый сегмент участвует в формировании части десятичной или шестнадцатеричной цифры.
Эти отдельные сегменты помечены буквами от «a» до «g», что соответствует каждому отдельному светодиоду. Установив определенный сегмент ВЫСОКИМ или НИЗКИМ, можно сгенерировать желаемый шаблон символов.
Модуль поставляется с 4 вилками под прямым углом. Меня немного раздражает, что разъемы контактов находятся на верхней стороне платы. Впрочем, их всегда можно выпаять и поставить внизу платы.
Теперь давайте взглянем на контакты GPIO:
CLK — это контакт входа часов. Вы можете подключить его к любому цифровому выводу Arduino.
DIO — контакт ввода/вывода данных. Это также может быть подключено к любому цифровому выводу Arduino.
ВКК — Подключается к источнику питания от 3,3 В до 5 В.
GND — контакт заземления.
Контакты CLK и DIO можно подключить к любому цифровому выводу Arduino. Это дает нам возможность подключить множество этих модулей к Arduino, если у каждого экземпляра есть собственная пара контактов. При написании кода нам просто нужно указать пару контактов, а затем просто использовать их в своем проекте.
Если у вас закончились контакты на плате Arduino, вы можете использовать удлинители контактов GPIO, такие как PCF8574. Пожалуйста, ознакомьтесь с моим руководством по модулю Extender, ссылка находится в описании ниже.
PCF8574 GPIO Extender: https://diyfactory007.blogspot.com/2018/12/pcf8574-gpio-extender-with-arduino-and.html
Модуль имеет 4 x 0,36-сегментных 7-сегментных дисплея и «двоеточие» в центре создания часов или проектов, основанных на времени.
Для простого четырехразрядного 7-сегментного дисплея обычно требуется 12 соединительных контактов, но драйвер светодиодов TM1637 устраняет необходимость в дополнительной проводке для 7-сегментного дисплея, и всей настройкой можно управлять только с помощью 2 проводов (DIO и CLK) и еще два для питания, уменьшая общее количество проводов до 4,
Эти модули обмениваются данными с процессором, используя «протокол, подобный I2C». Реализация представляет собой чистую программную эмуляцию и не использует какое-либо специальное оборудование (кроме контактов GPIO).
Модуль работает от 3,3В до 5В с потреблением тока 80мА и позволяет регулировать яркость светодиодов на программном уровне. Они доступны в нескольких различных цветах.
Для модуля TM1637 доступно множество библиотек. В этом уроке мы будем использовать «TM1637Display Library», написанную «Avishay Orpaz». Скачать библиотеку можно с помощью менеджера библиотек или с Github, ссылка в описании ниже.
Чтобы установить библиотеку с помощью «Диспетчера библиотек», перейдите к Sketch > Include Library > Manage Libraries…
Найдите « TM1637 » и найдите «Avishay Orpaz». Нажмите кнопку «Установить»…
Подробнее »
Посмотреть все подробности
Порт Python 3 из библиотеки MicroPython для модулей четырехъядерных 7-сегментных светодиодных дисплеев на основе светодиодного драйвера TM1637, реализованного на Raspberry Pi.
Например, модуль Grove — 4-значный дисплей
Этот проект доступен через pip. Убедитесь, что вы используете Python 3.
$ pip3 install raspberrypi-tm1637
Основное использование
импорт tm1637
tm = tm1637.TM1637 (clk = 5, dio = 4)
# все светодиоды на "88:88"
tm.write([127, 255, 127, 127])
# все светодиоды выключены
tm.write([0, 0, 0, 0])
# показать "0123"
tm.write([63, 6, 91, 79])
# показать "Круто"
tm.write([0b00111001, 0b00111111, 0b00111111, 0b00111000])
# показать "ПОМОЩЬ"
тм.шоу('помощь')
# отображать "dEAd", "bEEF"
tm.hex(0xdead)
tm.hex(0xbeef)
# показать "12:59"
тм.номера(12, 59)
# показать "-123"
тм.номер(-123)
# показать температуру '24*C'
тм.температура(24)
Более подробные примеры см. в demo.py
Они называются 7-сегментными дисплеями, поскольку на каждую цифру (сегмент) приходится 7 светодиодов. Один байт (7 младших бит) для каждого сегмента. 8-й бит (MSB) предназначен для двоеточия и только во 2-м сегменте.
А --- Ф | | Б * -G-H (на 2-м сегменте) Е | | С * --- Д HGFEDCBA 0b01101101 = 0x6D = 109 = показать "5"
Дисплей | Корзина | Шестигранник | декабрь |
---|---|---|---|
0 | 0b00111111 | 0x3F | 63 |
1 | 0b00000110 | 0x06 | 6 |
2 | 0b01011011 | 0x5B | 91 |
3 | 0b01001111 | 0x4F | 79 |
4 | 0b01100110 | 0x66 | 102 |
5 | 0b01101101 | 0x6D | 109 |
6 | 0b01111101 | 0x7D | 125 |
7 | 0b00000111 | 0x07 | 7 |
8 | 0b01111111 | 0x7F | 127 |
9 | 0b01101111 | 0x6F | 111 |
А | 0b01110111 | 0x77 | 119 |
б | 0b01111100 | 0x7C | 124 |
С | 0b00111001 | 0x39 | 57 |
д | 0b01011110 | 0x5E | 94 |
Е | 0b01111001 | 0x79 | 121 |
Ф | 0b01110001 | 0x71 | 113 |
Г | 0b00111101 | 0x3D | 61 |
Н | 0b01110110 | 0x76 | 118 |
я | 0b00000110 | 0x06 | 6 |
Ж | 0b00011110 | 0x1E | 30 |
К | 0b01110110 | 0x76 | 118 |
Л | 0b00111000 | 0x38 | 56 |
М | 0b01010101 | 0x55 | 85 |
п | 0b01010100 | 0x54 | 84 |
О | 0b00111111 | 0x3F | 63 |
П | 0b01110011 | 0x73 | 115 |
q | 0b01100111 | 0x67 | 103 |
р | 0b01010000 | 0x50 | 80 |
С | 0b01101101 | 0x6D | 109 |
т | 0b01111000 | 0x78 | 120 |
У | 0b00111110 | 0x3E | 62 |
против | 0b00011100 | 0x1C | 28 |
Ш | 0b00101010 | 0x2A | 42 |
Х | 0b01110110 | 0x76 | 118 |
и | 0b01101110 | 0x6E | 110 |
З | 0b01011011 | 0x5B | 91 |
пустой | 0b00000000 | 0x00 | 0 |
— | 0b01000000 | 0x40 | 64 |
* | 0b01100011 | 0x63 | 99 |
Получить или установить яркость.
яркость (значение=нет)
Запись одного или нескольких сегментов с заданным смещением.
запись (сегменты, позиция = 0)
Преобразование одной шестнадцатеричной цифры (0x00-0x0f) в сегмент.
encode_digit(цифра)
Преобразование строки в список сегментов.
encode_string(строка)
Преобразование одного символа в сегмент.
encode_char(char)
Отображение числа в шестнадцатеричном формате от 0000 до FFFF.
шестнадцатеричный (значение)
Отображение числа от -999 до 9999 с выравниванием по правому краю.
номер(число)
Отображение 2 независимых чисел по обе стороны от (необязательного) двоеточия с ведущими нулями.
чисел (число1, число2, двоеточие = Истина)
Отображает температуру от -9 до 99, а затем градусы C.
температура (число)
Показать строку на дисплее.