7 "screen which has 2 versions of resolution, 1024*600 and 800*480, the different resolutions will affect the display on the same size screen, and the 1024*600 is used in this project.
In this article, I'm going to make a Relay Controller, which integrated LVGL and Home Assistant, based on ESP32-S3 Parallel TFT with Touch 7
To make the experience fit your profile, pick a username and tell us what interests you.
We found and based on your interests.
7 "screen which has 2 versions of resolution, 1024*600 and 800*480, the different resolutions will affect the display on the same size screen, and the 1024*600 is used in this project.
video_20231208_104401_edit.mp4the video of resultMPEG-4 Video - 7.63 MB - 12/11/2023 at 09:25 |
|
In the result video, when I press the button, the relay will react accordingly. Of course, it not only just simply control relay, the HA is powerful, by configuring Devices, setting up Automation, and finally requesting webhook using 7" screen, you can control the devices you want with a 7" screen.
Since I did not use the TFT_eSPI library, it is needed to delete or comment all the codes related to the TFT_eSPI library.
#include <tft_espi.h> TFT_eSPI tft = TFT_eSPI(screenWidth, screenHeight); /* TFT instance */ tft.startWrite(); tft.setAddrWindow( area->x1, area->y1, w, h ); tft.pushColors( ( uint16_t * )&color_p->full, w * h, true ); tft.endWrite(); tft.begin(); /* TFT init */ tft.setRotation( 3 ); /* Landscape orientation, flipped */</tft_espi.h>
When I use the GFX library, it is needed to define the GFX Library For the Arduino Interface pin.
Arduino_ESP32RGBPanel *bus = new Arduino_ESP32RGBPanel( GFX_NOT_DEFINED /* CS */, GFX_NOT_DEFINED /* SCK */, GFX_NOT_DEFINED /* SDA */, 40 /* DE */, 41 /* VSYNC */, 39 /* HSYNC */, 42 /* PCLK */, 45 /* R0 */, 48 /* R1 */, 47 /* R2 */, 21 /* R3 */, 14 /* R4 */, 5 /* G0 */, 6 /* G1 */, 7 /* G2 */, 15 /* G3 */, 16 /* G4 */, 4 /* G5 */, 8 /* B0 */, 3 /* B1 */, 46 /* B2 */, 9 /* B3 */, 1 /* B4 */ ); Arduino_RPi_DPI_RGBPanel *gfx = new Arduino_RPi_DPI_RGBPanel( bus, SCREEN_W /* width */, 1 /* hsync_polarity */, 40 /* hsync_front_porch */, 48 /* hsync_pulse_width */, 128 /* hsync_back_porch */, SCREEN_H /* height */, 1 /* vsync_polarity */, 13 /* vsync_front_porch */, 3 /* vsync_pulse_width */, 45 /* vsync_back_porch */, 1 /* pclk_active_neg */, 16000000 /* prefer_speed */, true /* auto_flush */);
void my_touchpad_read(lv_indev_drv_t *indev_driver, lv_indev_data_t *data) { if (touch_has_signal()) { if (touch_touched()) { data->state = LV_INDEV_STATE_PR; /*Set the coordinates*/ data->point.x = touch_last_x; data->point.y = touch_last_y; } else if (touch_released()) { data->state = LV_INDEV_STATE_REL; } } else { data->state = LV_INDEV_STATE_REL; } }
#define SSID "Makerfabs" #define PWD "20160704" void wifi_init() { String temp = "WiFi Connecting"; lv_label_set_text(ui_Label5,temp.c_str()); WiFi.begin(SSID, PWD); int connect_count = 0; while (WiFi.status() != WL_CONNECTED) { vTaskDelay(500); USBSerial.print("."); temp = temp + "."; lv_label_set_text(ui_Label5,temp.c_str()); connect_count++; } lv_label_set_text(ui_Label5,"WiFi Connect Over"); net_flag = 1; } if (net_flag != 1) if ((millis() - task_runtime_1) > 1000) { wifi_init(); task_runtime_1 = millis(); }
int index1; int http_flag = 0; void http_func(int index) { HTTPClient http; USBSerial.print("[HTTP] begin...\n"); String url = ""; switch (index) { case 0: url = "http://homeassistant.local:8123/api/webhook/-LYt299nHgzxcCD95yct-G2jJ"; break; case 1: url = "http://homeassistant.local:8123/api/webhook/-BhCrGgyQALW6F7b58N2PtoE7"; break; case 2: url = "http://homeassistant.local:8123/api/webhook/-uWCIeRoUjy-lzQ7vbxnFQI3i"; break; case 3: url = "http://homeassistant.local:8123/api/webhook/-0LPYwfu5Rr-1XTOGTnCDRmEU"; break; default: USBSerial.println("Input error"); return; } http.begin(url); USBSerial.print("[HTTP] GET...\n"); // start connection and send HTTP header int httpCode = http.GET(); // httpCode will be negative on error if (httpCode > 0) { // HTTP header has been send and Server response header has been handled USBSerial.printf("[HTTP] GET... code: %d\n", httpCode); // file found at server if (httpCode == HTTP_CODE_OK) { String payload = http.getString(); USBSerial.println(payload); } } else { USBSerial.printf("[HTTP] GET... failed, error: %s\n", http.errorToString(httpCode).c_str()); } http.end(); }
Choose the Arduino and enter in parameters. According to the features of MaTouch ESP32-S3 Parallel TFT with Touch 7" ,the resolution is 1024*600, the shape is rectangle, and the color depth is 16-bit.
Add the images and fonts you like to assets, and then it allows you to select them and widget components to design the scenes. After, clicking the widget of the list on the Hierarchy panel, you can modify the parameters of the select widget on the Inspector panel, all is determined by your preference.
We need to set up events for each button to go to the interrupt function when the button is pressed;
once the file is exported, we need to copy the UI library folder to Document >> Arduino >> libraries;
and modify the events.c file in the UI folder so that it enables the http_func call.
extern int index1; extern int http_flag; void button1_func(lv_event_t * e) { http_flag = 1; index1 = 0; } void button2_func(lv_event_t * e) { http_flag = 1; index1 = 1; } void button3_func(lv_event_t * e) { http_flag = 1; index1 = 2; } void button4_func(lv_event_t * e) { http_flag = 1; index1 = 3; }
Display supports 5 points capacitive touch and WiFi, great for applications such as home automation.
Create an account to leave a comment. Already have an account? Log In.
Become a member to follow this project and never miss any updates