Hola y gracias por vuestra atención.
Estoy intentando realizar una lectura por termocupla con circuito MAX6675 y una pantalla ILI9341 (TFT SPI Táctil). Ambos funcionan por SPI y utilizo un ESP32 Dev Board de 30 pines. Por separado funcionan perfectamente, pero a la vez no consigo que MAX6675 de un valor que no sea 0ºC/32ºF . He separado ambos, uno en VSPI y otro en HSPI, y a la inversa, y tampoco responde. He probado librerias TFT_eSPI.h y SPI.h, en el mismo bus SPI o en buses separados, sin éxito. Aquí os dejo el código por si se os ocurre cual puede ser el problema.
#include <TFT_eSPI.h> // Librería para ILI9341
#include <XPT2046_Touchscreen.h> // Librería para XPT2046
#include <max6675.h> // Librería para MAX6675
// Pines HSPI (TFT + Touch)
#define TFT_CS 15
#define TFT_DC 2
#define TFT_RST 4
#define TOUCH_CS 33
#define TOUCH_IRQ 36 // Opcional, puedes omitirlo si no usas la interrupción
#define HSPI_MOSI 13
#define HSPI_MISO 12
#define HSPI_SCLK 14
// Pines VSPI (MAX6675)
#define MAX6675_CS 5
#define VSPI_MISO 19
#define VSPI_MOSI 23 // No usado en MAX6675 pero requerido por VSPI
#define VSPI_SCK 18
// Inicialización de SPI y periféricos
SPIClass hspi(HSPI);
TFT_eSPI tft = TFT_eSPI();
XPT2046_Touchscreen touch(TOUCH_CS, TOUCH_IRQ);
// Para el MAX6675 usando VSPI
SPIClass vspi(VSPI);
MAX6675 thermocouple(VSPI_SCK, MAX6675_CS, VSPI_MISO); // Adafruit lib: SCK, CS, SO (MISO)
unsigned long lastTempRead = 0;
float lastTemp = 0;
void setup() {
Serial.begin(115200);
// Inicializa SPI HSPI (TFT y Touch)
hspi.begin(HSPI_SCLK, HSPI_MISO, HSPI_MOSI, -1);
tft.init();
tft.setRotation(1);
tft.fillScreen(TFT_BLACK);
tft.setTextColor(TFT_WHITE, TFT_BLACK);
touch.begin();
touch.setRotation(1);
tft.drawString("TFT, Touch y MAX6675 OK!", 30, 50, 2);
// Inicializa VSPI para MAX6675
vspi.begin(VSPI_SCK, VSPI_MISO, VSPI_MOSI, -1);
}
void loop() {
// Lectura del touch
if (touch.touched()) {
TS_Point p = touch.getPoint();
int x = p.x;
int y = p.y;
tft.fillCircle(x, y, 5, TFT_RED);
Serial.printf("Touch: x=%d, y=%d\n", x, y);
delay(100);
}
// Lectura del MAX6675 cada segundo
if (millis() - lastTempRead > 1000) {
lastTemp = thermocouple.readCelsius();
Serial.printf("Temp: %.2f°C\n", lastTemp);
// Muestra en la pantalla
tft.fillRect(30, 80, 150, 30, TFT_WHITE);
tft.setTextColor(TFT_GREEN, TFT_BLACK);
tft.drawString("Temp: " + String(lastTemp, 2) + " C", 30, 80, 2);
lastTempRead = millis();
}
}
Gracias por vuestra atención y perdonar si no he creado bien el tema, soy nuevo en estas lares.
