Показаны различия между двумя версиями страницы.
| Следующая версия | Предыдущая версия | ||
| products:laboratory_iot_c:exp49 [2024/12/13 13:33] – создано labuser30 | products:laboratory_iot_c:exp49 [2024/12/13 15:23] (текущий) – [Программный код эксперимента] labuser30 | ||
|---|---|---|---|
| Строка 1: | Строка 1: | ||
| - | ==== Программный код эксперимента ==== | + | ===== Эксперимент |
| - | <file python Exp49.py[enable_line_numbers=" | + | Попробуем создать первое полезное устройство с использованием TFT дисплея. Пусть это будет простой секундомер. На дисплее будут отображаться часы, минуты и секунды, которые будет отсчитывать секундомер. Также снабдим его кнопкой по нажатию на которую, |
| - | from machine import Pin, SPI | + | |
| - | from tft import TFT_GREEN | + | |
| - | import font | + | |
| - | import time | + | |
| - | _init() | + | |
| - | machine.freq(160000000) | + | |
| + | Картинка с изображением секундомера | ||
| + | <WRAP center round download 60%> | ||
| + | {{ : | ||
| + | </ | ||
| + | Ее нужно загрузить во внутреннюю память микроконтроллера | ||
| - | dc | + | ==== Схема эксперимента ==== |
| - | cs | + | |
| - | rst = Pin(5, Pin.OUT) | + | |
| - | spi = SPI(1, baudrate=40000000, | + | {{ : |
| - | tft = TFT_GREEN(128, | + | // |
| - | tft.initr(tft.BGR) # tft.initr(tft.RGB) #Если вместо синего цвета | + | {{ : |
| - | tft.clear(tft.rgbcolor(255, | + | //Рисунок 2. Монтажная схема эксперимента для дисплея с 11 выводами// |
| - | tft.draw_bmp(0, | + | ==== Программный код эксперимента ==== |
| - | fontcolor = tft.rgbcolor(39,40,51) | + | <file arduino Exp49.ino[enable_line_numbers=" |
| + | #include < | ||
| + | #include < | ||
| + | #include " | ||
| - | tft.text(5, 125, ' | + | #define PIN_CS |
| - | tft.text(41, 125, ":", | + | #define PIN_DC |
| - | tft.text(55, 125, '00', font.terminalfont, fontcolor, 3) | + | #define PIN_RST 5 |
| - | tft.text(90, 130, ":" | + | |
| - | tft.text(98, 132, ' | + | Adafruit_ST7735 |
| + | LittleFS_ImageReader reader; | ||
| + | |||
| + | void setup() { | ||
| + | os_update_cpu_frequency(160); | ||
| + | LittleFS.begin(); | ||
| + | tft.initR(INITR_BLACKTAB); | ||
| + | tft.setRotation(2); | ||
| + | |||
| + | tft.fillScreen(tft.color565(255, 251, 240)); | ||
| + | reader.drawBMP("/time.bmp", | ||
| + | |||
| + | tft.setTextColor(tft.color565(39, 40, 51)); | ||
| + | tft.setTextSize(3); | ||
| + | tft.setCursor(8, 125); | ||
| + | tft.print(" | ||
| + | tft.setCursor(41, 125); | ||
| + | tft.print(":" | ||
| + | tft.setCursor(55, 125); | ||
| + | tft.print(" | ||
| + | tft.setTextSize(2); | ||
| + | tft.setCursor(88, 132); | ||
| + | tft.print(":" | ||
| + | tft.setCursor(98, 132); | ||
| + | tft.print(" | ||
| + | } | ||
| + | |||
| + | void loop() { | ||
| + | } | ||
| </ | </ | ||
| Этот код выводит интерфейс секундомера. | Этот код выводит интерфейс секундомера. | ||
| - | Этой строкой мы переключаем | + | Задаем |
| - | < | + | < |
| - | machine.freq(160000000) | + | #define PIN_CS |
| + | #define PIN_DC | ||
| + | #define PIN_RST 5 | ||
| </ | </ | ||
| - | Настройка выводов | + | Cоздаем объекты |
| - | < | + | < |
| - | dc | + | Adafruit_ST7735 tft = Adafruit_ST7735(PIN_CS, |
| - | cs = Pin(2, Pin.OUT) | + | LittleFS_ImageReader reader; |
| - | rst = Pin(5, Pin.OUT) | + | |
| </ | </ | ||
| - | Настраиваем аппаратный | + | Этой |
| - | < | + | < |
| - | spi = SPI(1, baudrate=40000000, | + | |
| - | tft = TFT_GREEN(128, | + | |
| </ | </ | ||
| - | Инициализируем дисплей, | + | Инициализируем |
| - | < | + | заливаем его фоновым цветом и отображаем картинку с секундомером. |
| - | tft.initr(tft.BGR) # tft.initr(tft.RGB) #Если вместо синего цвета отображается красный, | + | < |
| - | tft.clear(tft.rgbcolor(255, | + | |
| - | tft.draw_bmp(0, | + | tft.initR(INITR_BLACKTAB); |
| + | tft.setRotation(2); | ||
| </ | </ | ||
| - | Объявляем переменную с цветом | + | Закрашиваем дисплей RBG цветом, получая нужное значение с помощью метода '' |
| - | < | + | < |
| - | fontcolor = tft.rgbcolor(39,40,51) | + | tft.fillScreen(tft.color565(255, 251, 240)); |
| + | tft.draw_bmp(0, | ||
| </ | </ | ||
| - | Отображаем | + | Задаем |
| - | < | + | < |
| - | tft.text(5, 125, ' | + | tft.setTextColor(tft.color565(39, 40, 51)); |
| + | tft.setTextSize(3); | ||
| </ | </ | ||
| - | Отображаем | + | Отображаем часы, |
| - | < | + | < |
| - | tft.text(41, 125, ":" | + | tft.setCursor(8, 125); |
| + | tft.print(" | ||
| + | tft.setCursor(41, 125); | ||
| + | tft.print(":" | ||
| + | tft.setCursor(55, 125); | ||
| + | tft.print(" | ||
| </ | </ | ||
| - | Подобным образом отображаем | + | Уменьшаем размер шрифта, |
| - | < | + | < |
| - | tft.text(55, 125, ' | + | tft.setTextSize(2); |
| - | tft.text(90, 130, ":" | + | tft.setCursor(88, 132); |
| - | tft.text(98, 132, ' | + | tft.print(":" |
| + | tft.setCursor(98, 132); | ||
| + | tft.print(" | ||
| + | } | ||
| </ | </ | ||