| Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версия |
| products:laboratory_iot:exp46 [2020/05/25 19:07] – [Эксперимент 46. Подключаем TFT дисплей] labuser29 | products:laboratory_iot:exp46 [2024/11/30 20:33] (текущий) – [Программный код эксперимента] labuser30 |
|---|
| ===== Эксперимент 46. Подключаем TFT дисплей ===== | ===== Эксперимент 46. Подключаем TFT дисплей ===== |
| |
| В комплектаицю конструктора в версии MAXI входит TFT дисплей. Thin Film Transistor (TFT) – это система производства жидкокристаллических дисплеев, в основе которой лежит активная матрица из тонкопленочных транзисторов. При подаче напряжения на такую матрицу, кристаллы поворачиваются друг к другу, что приводит к образованию черного цвета. Отключение электричества дает противоположный результат — кристаллы образовывают белый цвет. Изменения подаваемого напряжения позволяет формировать любой цвет на каждом отдельно взятом пикселе. Дисплей имеет сложное многослойное строение и чтобы понять его принцип действия потребуются некоторые знания физики, поэтому здесь мы не будем рассказывать это. | В комплектацию конструктора в версии MAXI входит TFT дисплей. Thin Film Transistor (TFT) – это система производства жидкокристаллических дисплеев, в основе которой лежит активная матрица из тонкопленочных транзисторов. При подаче напряжения на такую матрицу, кристаллы поворачиваются друг к другу, что приводит к образованию черного цвета. Отключение электричества дает противоположный результат — кристаллы образовывают белый цвет. Изменения подаваемого напряжения позволяет формировать любой цвет на каждом отдельно взятом пикселе. Дисплей имеет сложное многослойное строение и чтобы понять его принцип действия потребуются некоторые знания физики, поэтому здесь мы не будем рассказывать это. |
| |
| <WRAP center round info 60%> | <WRAP center round info 60%> |
| |
| Для обмена данными с дисплеем используется шина SPI. SPI (англ. Serial Peripheral Interface, SPI bus — последовательный периферийный интерфейс, шина SPI) — последовательный синхронный стандарт передачи данных в режиме полного дуплекса, предназначенный для обеспечения простого и недорогого высокоскоростного сопряжения микроконтроллеров и периферии. SPI также иногда называют четырёхпроводным (англ. four-wire) интерфейсом. | Для обмена данными с дисплеем используется шина SPI. SPI (англ. Serial Peripheral Interface, SPI bus — последовательный периферийный интерфейс, шина SPI) — последовательный синхронный стандарт передачи данных в режиме полного дуплекса, предназначенный для обеспечения простого и недорогого высокоскоростного сопряжения микроконтроллеров и периферии. SPI также иногда называют четырёхпроводным (англ. four-wire) интерфейсом. |
| | |
| | Для работы с SPI требуется специальная библиотека, но она уже встроена, поэтому дополнительно загружать ее не потребуется. |
| | |
| | <WRAP center round info 60%> |
| | [[https://ru.wikipedia.org/wiki/Serial_Peripheral_Interface|Подробнее о шине SPI]] |
| | </WRAP> |
| | |
| | В разных партиях конструктора версии MAXI может лежать дисплей одного из двух видов − либо с 8 выводами, либо с 11. В дальнейшем мы будем приводить монтажную схему для обоих дисплеев, но вам необходимо руководствоваться схемой для своего типа дисплея. |
| |
| ==== Схема эксперимента ==== | ==== Схема эксперимента ==== |
| |
| {{ :products:esp-iot:exp21_mont.png?direct&600 |}} | {{ :products:esp-iot:exp21_mont.png?direct&600 |}} |
| //Рисунок 1. Монтажная схема эксперимента// | //Рисунок 1. Монтажная схема эксперимента для дисплея с 8 выводами// |
| |
| | {{ :products:esp-iot:exp21_mont_11pin.png?direct&600 |}} |
| | //Рисунок 2. Монтажная схема эксперимента для дисплея с 11 выводами// |
| ==== Программный код эксперимента ==== | ==== Программный код эксперимента ==== |
| Теперь напишем программный код. Пусть, когда кнопка не нажата, светодиод не горит. А при нажатии кнопки— горит. | Напишем приветственную надпись на дисплее. |
| |
| <file python Exp46.py[enable_line_numbers="2", start_line_numbers_at="1"]> | <file python Exp46.py[enable_line_numbers="2", start_line_numbers_at="1"]> |
| tft.initr() | tft.initr() |
| |
| tft.clear(tft.rgbcolor(0,0, 0)) #b, g, r | tft.clear(tft.rgbcolor(0,0, 0)) |
| tft.text(0,0,"Hello, World!", font.terminalfont, tft.rgbcolor(255, 255, 255), 1) | tft.text(0,0,"Hello, World!", font.terminalfont, tft.rgbcolor(255, 255, 255), 1) |
| </file> | </file> |
| | |
| | Подключаем библиотеки для работы в портами ввода-вывода, шиной SPI, дисплеем и шрифт. |
| | <code python[enable_line_numbers="2", start_line_numbers_at="1"]> |
| | from machine import Pin, SPI |
| | from tft import TFT_GREEN |
| | import font |
| | </code> |
| | |
| | TFT дисплей не имеет встроенного знакогенератора, он ничего не знает о буквах и о том как они выглядят. Дисплей — это просто большой массив точек, которые могут светиться различным цветом. Чтобы иметь возможность выводить на дисплей текст, нужно описать какие точки светятся, а какие нет в каждом из символов. Именно эти данные и находятся в файле шрифта ''font''. |
| | |
| | Настраиваем выводы, используемые для дисплея |
| | <code python[enable_line_numbers="2", start_line_numbers_at="6"]> |
| | dc = Pin(4, Pin.OUT) |
| | cs = Pin(2, Pin.OUT) |
| | rst = Pin(5, Pin.OUT) |
| | </code> |
| | |
| | Настраиваем шину SPI. Объявляем скорость шины и ее параметры. |
| | <code python[enable_line_numbers="2", start_line_numbers_at="10"]> |
| | spi = SPI(1, baudrate=40000000, polarity=0, phase=0) |
| | </code> |
| | |
| | Создаем объект дисплея и задаем его параметры, такие как ширина и высота дисплея в пикселях и какие выводы микроконтроллера используются для управления. |
| | <code python[enable_line_numbers="2", start_line_numbers_at="12"]> |
| | tft = TFT_GREEN(128, 160, spi, dc, cs, rst, rotate=0) |
| | </code> |
| | |
| | Вызываем функцию инициализации дисплея. Прежде чем мы сможем работать с дисплеем, мы должны настроить встроенный в него контроллер. Это делает функция инициализации. |
| | <code python[enable_line_numbers="2", start_line_numbers_at="14"]> |
| | tft.initr() |
| | </code> |
| | |
| | Когда дисплей инициализирован мы можем управлять изображением на нем. Сначала закрасим его черным цветом, а потом напишем текст. |
| | <code python[enable_line_numbers="2", start_line_numbers_at="16"]> |
| | tft.clear(tft.rgbcolor(0, 0, 0)) |
| | tft.text(0,0,"Hello, World!", font.terminalfont, tft.rgbcolor(255, 255, 255), 1) |
| | </code> |
| | |
| | Как мы уже знаем из [[products:laboratory_iot:exp11|эксперимента с RGB светодиодом]] любой цвет можно отобразить с помощью трех составляющих: красного, зеленого и синего. Для задания цвета мы используем ''tft.rgbcolor(0, 0, 0)''. В качестве параметров передаем соответственно красный, зеленый, синий. Если все нули, никакой цвет не светится — это черный. |
| | |
| | Для вывода текста используем метод ''tft.text''. Параметры: |
| | * координата X |
| | * координата Y |
| | * строка для отображения |
| | * шрифт |
| | * цвет шрифта |
| | * размер шрифты |
| | |
| | Координата 0,0 находится в верхнем левом углу. Максимальная — в нижнем правом. |
| | {{ :products:esp-iot:exp21_coords.png?nolink |}} |
| | //Рисунок 3. Отсчет координат на дисплее// |
| | |
| | ==== Дополнительное задание ==== |
| | <WRAP center round tip 60%> |
| | - Выведи другой текст по середине дисплея |
| | - Выведи несколько строк разными цветами друг под другом |
| | </WRAP> |
| | |