Различия

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

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

Следующая версия
Предыдущая версия
products:laboratory_iot_c:exp49 [2024/12/13 13:33] – создано labuser30products:laboratory_iot_c:exp49 [2024/12/13 15:23] (текущий) – [Программный код эксперимента] labuser30
Строка 1: Строка 1:
-==== Программный код эксперимента ====+===== Эксперимент 49. Графический интерфейс секундомера =====
  
-<file python Exp49.py[enable_line_numbers="2"start_line_numbers_at="1"]> +Попробуем создать первое полезное устройство с использованием TFT дисплеяПусть это будет простой секундомер. На дисплее будут отображаться часыминуты и секундыкоторые будет отсчитывать секундомер. Также снабдим его кнопкой по нажатию на которую, секундомер будет запускаться и останавливаться. Для красоты дополнительно выведем на дисплей картинку.
-from machine import PinSPI +
-from tft import TFT_GREEN +
-import font +
-import time +
-_init() +
-machine.freq(160000000)+
  
 +Картинка с изображением секундомера
 +<WRAP center round download 60%>
 +{{ :products:esp-iot:time.zip |}}
 +</WRAP>
 +Ее нужно загрузить во внутреннюю память микроконтроллера
  
-dc  Pin(4, Pin.OUT)  +==== Схема эксперимента ====
-cs  Pin(2, Pin.OUT) +
-rst Pin(5, Pin.OUT)+
  
-spi = SPI(1, baudrate=40000000, polarity=0, phase=0) +{{ :products:esp-iot:exp24.1_mont.png?direct&600 |}} 
-tft = TFT_GREEN(128, 160, spi, dc, cs, rst, rotate=0)+//Рисунок 1. Монтажная схема эксперимента для дисплея с 8 выводами//
  
-tft.initr(tft.BGR) # tft.initr(tft.RGB) #Если вместо синего цвета отображается красный, а вместо красного синий +{{ :products:esp-iot:exp24.1_mont_11pin.png?direct&600 |}} 
-tft.clear(tft.rgbcolor(255,251,240))  +//Рисунок 2. Монтажная схема эксперимента для дисплея с 11 выводами// 
-tft.draw_bmp(0,0,'time.bmp')+==== Программный код эксперимента ====
  
-fontcolor = tft.rgbcolor(39,40,51)+<file arduino Exp49.ino[enable_line_numbers="2"start_line_numbers_at="1"]> 
 +#include <SPI.h> 
 +#include <Adafruit_ST7735.h> 
 +#include "LittleFS_ImageReader.h" 
  
-tft.text(5125'00', font.terminalfont, fontcolor, 3+#define PIN_CS 
-tft.text(41125, ":", font.terminalfontfontcolor, 3) +#define PIN_DC 
-tft.text(55, 125, '00', font.terminalfontfontcolor, 3+#define PIN_RST 5 
-tft.text(90, 130, ":", font.terminalfont, fontcolor, 2) + 
-tft.text(98, 132, '00', font.terminalfontfontcolor, 2)+Adafruit_ST7735 tft = Adafruit_ST7735(PIN_CS PIN_DCPIN_RST); 
 +LittleFS_ImageReader reader; 
 + 
 +void setup() { 
 +  os_update_cpu_frequency(160); 
 +  LittleFS.begin(); 
 +  tft.initR(INITR_BLACKTAB); 
 +  tft.setRotation(2);  
 +   
 +  tft.fillScreen(tft.color565(255251240)); 
 +  reader.drawBMP("/time.bmp", tft, 0, 0); 
 + 
 +  tft.setTextColor(tft.color565(394051)); 
 +  tft.setTextSize(3); 
 +  tft.setCursor(8, 125); 
 +  tft.print("00"); 
 +  tft.setCursor(41125); 
 +  tft.print(":"); 
 +  tft.setCursor(55125); 
 +  tft.print("00"); 
 +  tft.setTextSize(2); 
 +  tft.setCursor(88, 132); 
 +  tft.print(":"); 
 +  tft.setCursor(98132)
 +  tft.print("00"); 
 +
 + 
 +void loop() { 
 +}
 </file> </file>
  
 Этот код выводит интерфейс секундомера.  Этот код выводит интерфейс секундомера. 
  
-Этой строкой мы переключаем частоту микроконтроллера на максимальные для него  160 мегагерц. Это нужно для увеличения скорости его работы, что ускоряет работу с дисплеем. +Задаем псевдонимы выводов микроконтроллера, к которым подключается дисплей 
-<code python[enable_line_numbers="2", start_line_numbers_at="6"]> +<code arduino[enable_line_numbers="2", start_line_numbers_at="5"]> 
-machine.freq(160000000)+#define PIN_CS 
 +#define PIN_DC 
 +#define PIN_RST 5
 </code> </code>
  
-Настройка выводов микроконтроллера, к которым подключается дисплей +Cоздаем объекты дисплея дисплея и считывателя изображений 
-<code python[enable_line_numbers="2", start_line_numbers_at="9"]> +<code arduino[enable_line_numbers="2", start_line_numbers_at="13"]> 
-dc  Pin(4Pin.OUT)  +Adafruit_ST7735 tft Adafruit_ST7735(PIN_CS,  PIN_DCPIN_RST); 
-cs  = Pin(2Pin.OUT+LittleFS_ImageReader reader;
-rst = Pin(5, Pin.OUT)+
 </code> </code>
  
-Настраиваем аппаратный контроллер шины SPI и создаем объект дисплея +Этой строкой мы переключаем частоту микроконтроллера на максимальные для него  160 мегагерц. Это нужно для увеличения скорости его работы, что ускоряет работу с дисплеем. 
-<code python[enable_line_numbers="2", start_line_numbers_at="13"]> +<code arduino[enable_line_numbers="2", start_line_numbers_at="13"]> 
-spi = SPI(1, baudrate=40000000, polarity=0, phase=0) +  os_update_cpu_frequency(160);
-tft = TFT_GREEN(128, 160, spi, dc, cs, rst, rotate=0)+
 </code> </code>
  
-Инициализируем дисплей, заливаем его фоновым цветом и отображаем картинку с секундомером. Меняем настройку цвета в ''initr'' при необходимости+Инициализируем файловую систему и дисплей, устанавливаем поворот изображения на 180°.  
-<code python[enable_line_numbers="2", start_line_numbers_at="16"]> +заливаем его фоновым цветом и отображаем картинку с секундомером.  
-tft.initr(tft.BGR# tft.initr(tft.RGB) #Если вместо синего цвета отображается красный, а вместо красного синий +<code arduino[enable_line_numbers="2", start_line_numbers_at="14"]> 
-tft.clear(tft.rgbcolor(255,251,240))  +  LittleFS.begin(); 
-tft.draw_bmp(0,0,'time.bmp')+  tft.initR(INITR_BLACKTAB); 
 +  tft.setRotation(2)
 </code> </code>
  
-Объявляем переменную с цветом шрифта +Закрашиваем дисплей RBG цветом, получая нужное значение с помощью метода ''color565'', выводим картинку секундомера 
-<code python[enable_line_numbers="2", start_line_numbers_at="20"]> +<code arduino[enable_line_numbers="2", start_line_numbers_at="18"]> 
-fontcolor = tft.rgbcolor(39,40,51)+  tft.fillScreen(tft.color565(255251240)); 
 +  tft.draw_bmp(0,0,'time.bmp')
 </code> </code>
  
-Отображаем часы шрифтом 3 с началом в координате 5, 125 +Задаем цвет шрифта и его размер 
-<code python[enable_line_numbers="2", start_line_numbers_at="22"]> +<code arduino[enable_line_numbers="2", start_line_numbers_at="21"]> 
-tft.text(5125'00', font.terminalfont, fontcolor, 3)+ tft.setTextColor(tft.color565(394051)); 
 + tft.setTextSize(3);
 </code> </code>
  
-Отображаем двоеточние- разделитель +Отображаем часы, разделитель — двоеточие, и минуты. 
-<code python[enable_line_numbers="2", start_line_numbers_at="23"]> +<code arduino[enable_line_numbers="2", start_line_numbers_at="23"]> 
-tft.text(41, 125, ":", font.terminalfontfontcolor, 3)+  tft.setCursor(8, 125); 
 +  tft.print("00"); 
 +  tft.setCursor(41125); 
 +  tft.print(":"); 
 +  tft.setCursor(55125); 
 +  tft.print("00");
 </code> </code>
  
-Подобным образом отображаем остальные данные: минуты и секунды +Уменьшаем размер шрифта, отображаем разделитель и секунды 
-<code python[enable_line_numbers="2", start_line_numbers_at="24"]> +<code arduino[enable_line_numbers="2", start_line_numbers_at="29"]> 
-tft.text(55, 125, '00', font.terminalfontfontcolor, 3+  tft.setTextSize(2); 
-tft.text(90, 130, ":", font.terminalfont, fontcolor, 2+  tft.setCursor(88132); 
-tft.text(98, 132, '00', font.terminalfont, fontcolor, 2)+  tft.print(":"); 
 +  tft.setCursor(98, 132); 
 +  tft.print("00")
 +}
 </code> </code>