Manual
do
Maker
.
com
O TTGO smartwatch traz algumas vantagens sobre outras placas maker. Primeiramente em relação a custos, um display touch 240x240 com RTC, bateria, ESP32, case e cabo de conexão sairiam a um custo superior do que o produto final, com case e pronto para uso. Outra vantagem é a simplicidade de programação, já que temos tudo pronto para simplesmente criar. É a oportunidade perfeita de oferecer um produto final para monitoramento de variáveis de ambiente com um ótimo acabamento!
Se não leu o artigo anterior, eis o link. Nesse artigo veremos um pouco mais a respeito das configurações desse dispositivo.
A LilyGo já oferece uma biblioteca completa, citada no artigo anterior. Mas no meu caso, fiz todas as configurações independentes e estou apenas focando em um funcionamento completo inicial antes de seguir com casos de uso.
Essa biblioteca é incluída por padrão, se utilizar a biblioteca própria desenvolvida pela LilyGo. A abstração será muito maior, mas se seguir pelo mesmo caminho que eu, deverá fazer uma modificação no arquivo User_setup.h, que está dentro do diretório da biblioteca. Essa modificação é exclusivamente relacionada aos pinos de GPIO utilizados pelo display. Deve ficar dessa maneira:
#define TFT_MISO -1
#define TFT_MOSI 19
#define TFT_SCLK 18
#define TFT_CS 5 // Chip select control pin
#define TFT_DC 27 // Data Command control pin
#define TFT_RST -1 // Reset pin (could connect to RST pin)
#define TFT_BL 12 // LED back-light (only for ST7789 with backlight control pin)
Em relação ao texto, uma fonte deve ser incluída. A maneira mais simples é utilizando o include Free_Fonts.h, passando o caminho absoluto do arquivo. No meu caso:
#include "/home/djames/.platformio/lib/TFT_eSPI_ID1559/examples/320 x 240/Free_Font_Demo/Free_Fonts.h"
Referente ao bitmap carregado, utilize o programa lcd-image-converter e salvar o array em um arquivo a ser incluído, como por exemplo, bitmap.h.
const uint16_t mercy [] PROGMEM = {aqui dentro}
E então inclua-o no sketch principal.
O chipset do touch screen é o FT5206, cuja biblioteca deve ser clonada para dentro do diretório de bibliotecas do Arduino.
No sketch, devemos incluir a biblioteca FT5206.h e definir os pinos relacionados ao touch:
#include
#define TP_SDA 23
#define TP_SCL 32
#define TP_INT 38
Devemos então instanciar o display e o touch screen, que são dispositivos independentes (tenha isso em mente):
TFT_eSPI tft = TFT_eSPI();
FT5206 cts = FT5206(TP_INT);
Mas onde estão os pinos relacionados ao i2c, hum? Bem, eles estão na própria biblioteca. Eu editei e passei hardcoded os pinos SDA e SCL, mas o certo é fazer um overload ou um método extra para passar os pinos. Fiz dessa maneira para agilizar o processo. Edite o arquivo FT5206.cpp e deixe essa parte assim:
void FT5206::begin(enum FT5206isr init)
{
_isrMode = init;
Wire.begin(23,32,400000UL);
Apenas para testes (no próximo artigo começo a implementar threads), marquei visualmente o toque na tela. Não estou pegando a posição, apenas o evento. Com esse evento, trocarei de tela ou função, como veremos em artigos posteriores. O sketch final para esse artigo ficou desse modo:
#include
#include
#include
#include
#include "bitmap.h" //(Bitmap generated with LCD Image Converter) https://sourceforge.net/projects/lcd-image-converter/
#include "/home/djames/.platformio/lib/TFT_eSPI_ID1559/examples/320 x 240/Free_Font_Demo/Free_Fonts.h"
#include "time.h"
#include
#define TP_SDA 23
#define TP_SCL 32
#define TP_INT 38
const char* ntpServer = "pool.ntp.org";
const long gmtOffset_sec = 0;
const int daylightOffset_sec = -3600*3;
const char* ssid = "SuhankoFamily";
const char* password = "fsjmr112";
TFT_eSPI tft = TFT_eSPI();
FT5206 cts = FT5206(TP_INT);
void printLocalTime()
{
struct tm timeinfo;
if(!getLocalTime(&timeinfo)){
Serial.println("Failed to obtain time");
return;
}
char myTimeIs[64];
memset(myTimeIs,0,sizeof(myTimeIs));
timeinfo.tm_hour = timeinfo.tm_hour - 3;
strftime(myTimeIs, 64, " %H:%M:%S", &timeinfo);
int xpos = 00;
int ypos = 80;
tft.setTextColor(TFT_DARKCYAN);
tft.setCursor(xpos, ypos);
tft.pushImage(0,0,240,240,mercy);
tft.setFreeFont(FSS24); // Select Free Serif 12 point font
tft.println(); // Move cursor down a line
tft.print(myTimeIs);
}
void setup(void) {
Serial.begin(9600);
vTaskDelay(pdMS_TO_TICKS(5000));
cts.begin();
WiFi.begin(ssid, password);
while (WiFi.waitForConnectResult() != WL_CONNECTED){
Serial.print(".");
}
Serial.println();
Serial.println(WiFi.localIP());
configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
tft.begin();
tft.setSwapBytes(true);
tft.fillScreen(TFT_BLACK);
tft.pushImage(0,0,240,240,mercy);
}
void loop() {
printLocalTime();
if (cts.touched()){
// Mark touches on screen
tft.fillCircle(120, 120, 30, TFT_BLACK);
tft.fillCircle(120, 120, 40, TFT_DARKCYAN);
}
vTaskDelay(pdMS_TO_TICKS(1000));
}
E por enquanto é isso.
Assim que disponível, você o encontrará em nosso canal DobitaobyteBrasil no Youtube. Se não é inscrito ainda, inscreva-se e clique no sininho para receber notificações.
Como ainda não temos no Brasil algum representante, a aquisição deverá ser feita por importação. Um dos links para compra é esse. Se desejar ver as variações para esse dispositivo, o site da LilyGo é esse.
Inscreva-se no nosso canal Manual do Maker no YouTube.
Também estamos no Instagram.
Autor do blog "Do bit Ao Byte / Manual do Maker".
Viciado em embarcados desde 2006.
LinuxUser 158.760, desde 1997.