#include <stdio.h>
#include <string.h>
#include "driver/spi_master.h"
#include "driver/gpio.h"
#include "esp_log.h"
#include "TFT_eSPI.h" // Biblioteca para ILI9341
#include "TFT_eSPI_ES32Lab.h" // Biblioteca para ILI9341
#include "MPU6050.h" // Biblioteca para MPU6050
#include "esp_system.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/i2c.h"
#define TAG "MPU-ILI9341"
// Pinos do Display ILI9341 (configure no arquivo sdkconfig ou platformio.ini)
#define PIN_NUM_MISO 19
#define PIN_NUM_MOSI 23
#define PIN_NUM_CLK 18
#define PIN_NUM_CS 5
#define PIN_NUM_DC 2
#define PIN_NUM_RST 4
#define PIN_NUM_BL 15
// Configuração I2C para MPU6050
#define I2C_MASTER_SCL_IO 22 // Pino SCL do I2C
#define I2C_MASTER_SDA_IO 21 // Pino SDA do I2C
#define I2C_MASTER_NUM I2C_NUM_0
#define I2C_MASTER_FREQ_HZ 100000
#define MPU6050_ADDR 0x68 // Endereço I2C do MPU6050
TFT_eSPI tft = TFT_eSPI(); // Inicializa o display ILI9341
MPU6050 mpu; // Inicializa o sensor MPU6050
void display_init(void) {
tft.init();
tft.setRotation(1); // Rotação do display (ajuste conforme necessário)
tft.fillScreen(TFT_BLACK); // Limpa o display com fundo preto
tft.setTextColor(TFT_WHITE, TFT_BLACK); // Cor do texto: branco sobre fundo preto
tft.setTextSize(2); // Tamanho do texto
}
void mpu6050_init(void) {
i2c_config_t conf;
conf.mode = I2C_MODE_MASTER;
conf.sda_io_num = I2C_MASTER_SDA_IO;
conf.sda_pullup_en = GPIO_PULLUP_ENABLE;
conf.scl_io_num = I2C_MASTER_SCL_IO;
conf.scl_pullup_en = GPIO_PULLUP_ENABLE;
conf.master.clk_speed = I2C_MASTER_FREQ_HZ;
i2c_param_config(I2C_MASTER_NUM, &conf);
i2c_driver_install(I2C_MASTER_NUM, conf.mode, 0, 0, 0);
mpu.initialize();
if (mpu.testConnection()) {
ESP_LOGI(TAG, "MPU6050 conectado com sucesso");
} else {
ESP_LOGE(TAG, "Erro ao conectar MPU6050");
}
}
void app_main(void)
{
// Inicializa o display e o sensor MPU6050
display_init();
mpu6050_init();
while (1) {
// Leitura dos valores do MPU6050
int16_t ax, ay, az;
int16_t gx, gy, gz;
mpu.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);
// Exibe os dados no display ILI9341
tft.fillScreen(TFT_BLACK); // Limpa o display a cada iteração
tft.setCursor(0, 0); // Posição do texto no display
tft.printf("Acelerometro:\nX: %d\nY: %d\nZ: %d\n", ax, ay, az);
tft.printf("Giroscopio:\nX: %d\nY: %d\nZ: %d\n", gx, gy, gz);
// Pausa de 500 ms entre leituras
vTaskDelay(500 / portTICK_PERIOD_MS);
}
}