Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
products:laboratory_iot:exp46 [2020/05/25 18:47] labuser29products:laboratory_iot:exp46 [2024/11/30 20:33] (текущий) – [Программный код эксперимента] labuser30
Строка 1: Строка 1:
 ===== Эксперимент 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%>
Строка 9: Строка 9:
 Управление матрицей кристаллов берет на себя встроенный в дисплей контроллер. А мы будем управлять этим контроллером. Для этого нам потребуется специальная библиотека. Кроме того нам потребуется библиотека со шрифтом, чтобы отображать текст. Управление матрицей кристаллов берет на себя встроенный в дисплей контроллер. А мы будем управлять этим контроллером. Для этого нам потребуется специальная библиотека. Кроме того нам потребуется библиотека со шрифтом, чтобы отображать текст.
  
 +<WRAP center round download 60%>
 {{ :products:esp-iot:tft.zip |}} {{ :products:esp-iot:tft.zip |}}
 +</WRAP>
 +
  
 Как и в прошлый раз, в архиве находятся два варианта файлов — в виде исходный текстов (в папке py) и предварительно откомпилированные (в папке mpy). Мы рекомендуем загружать в микроконтроллер откомпилированные версии файлов, а файлы в исходных кодах использовать только для самостоятельного изучения. Как и в прошлый раз, в архиве находятся два варианта файлов — в виде исходный текстов (в папке py) и предварительно откомпилированные (в папке mpy). Мы рекомендуем загружать в микроконтроллер откомпилированные версии файлов, а файлы в исходных кодах использовать только для самостоятельного изучения.
  
 +Для обмена данными с дисплеем используется шина 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 |}}
 +//Рисунок 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"]>
 +from machine import Pin, SPI
 +from tft import TFT_GREEN
 +import font
 +_init()
 +
 +dc  = Pin(4, Pin.OUT) 
 +cs  = Pin(2, Pin.OUT)
 +rst = Pin(5, Pin.OUT)
 +
 +spi = SPI(1, baudrate=40000000, polarity=0, phase=0)
 +
 +tft = TFT_GREEN(128, 160, spi, dc, cs, rst, rotate=0)
 +
 +tft.initr()
 +
 +tft.clear(tft.rgbcolor(0,0, 0))
 +tft.text(0,0,"Hello, World!", font.terminalfont, tft.rgbcolor(255, 255, 255), 1)
 +</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>