#include <Adafruit_GFX.h>
#include <SPI.h>
#include <Adafruit_ILI9341.h>
#include <Adafruit_FT6206.h>
#include <WiFi.h>
#include <WiFiClient.h>
#include <PubSubClient.h>
#define WIFI_SSID "Wokwi-GUEST"
#define WIFI_PASSWORD ""
#define WIFI_CHANNEL 6
#define TFT_DC 2
#define TFT_CS 15
#define I2C_cap_SDA 21
#define I2C_cap_SCL 22
const char *MQTT_BROKER_ADRESS = "test.mosquitto.org";
const uint16_t MQTT_PORT = 1883;
const char *MQTT_CLIENT_NAME = "mario_pub";
WiFiClient espClient;
PubSubClient mqttClient(espClient);
Adafruit_FT6206 ctp = Adafruit_FT6206();
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC);
void ConnectWiFi() {
WiFi.begin(WIFI_SSID, WIFI_PASSWORD, WIFI_CHANNEL);
Serial.print("Connecting to WiFi ");
while (WiFi.status() != WL_CONNECTED) {
delay(100);
Serial.print(".");
}
Serial.println(" Connected!");
}
void InitMqtt() {
mqttClient.setServer(MQTT_BROKER_ADRESS, MQTT_PORT);
}
void ConnectMqtt() {
while (!mqttClient.connected()) {
Serial.print("Starting MQTT connection...");
if (mqttClient.connect(MQTT_CLIENT_NAME)) {
Serial.println("Client connected");
} else {
Serial.print("Failed, rc=");
Serial.println(mqttClient.state());
delay(5000);
}
}
}
void HandleMqtt() {
if (!mqttClient.connected()) {
ConnectMqtt();
}
mqttClient.loop();
}
void PublishMessage(const char* message) {
mqttClient.publish("mmggjj/palabra", message);
}
void DrawButtons() {
// Botón 1 - Rojo
tft.fillRect(20, 40, 100, 60, ILI9341_RED);
tft.setCursor(45, 65);
tft.setTextColor(ILI9341_WHITE);
tft.setTextSize(2);
tft.print("Rojo");
// Botón 2 - Azul
tft.fillRect(140, 40, 100, 60, ILI9341_BLUE);
tft.setCursor(165, 65);
tft.setTextColor(ILI9341_WHITE);
tft.setTextSize(2);
tft.print("Azul");
// Botón 3 - Verde
tft.fillRect(80, 120, 100, 60, ILI9341_GREEN);
tft.setCursor(95, 145);
tft.setTextColor(ILI9341_WHITE);
tft.setTextSize(2);
tft.print("Verde");
}
void setup() {
Serial.begin(115200);
tft.begin();
tft.setRotation(0); // Cambia la orientación
tft.fillScreen(ILI9341_BLACK);
if (!ctp.begin(40)) {
Serial.println("No se pudo inicializar el controlador FT6206");
while (true);
}
ConnectWiFi();
InitMqtt();
DrawButtons();
}
void loop() {
HandleMqtt();
if (ctp.touched()) {
TS_Point point = ctp.getPoint();
// Ajustar las coordenadas según la orientación
int x = map(point.x, 0, 240, 0, 240);
int y = map(point.y, 0, 320, 0, 320);
Serial.printf("Touched at x: %d, y: %d\n", x, y);
if (x > 122 && x < 220 && y > 220 && y < 280) {
PublishMessage("Rojo");
Serial.println("Enviando: Rojo");
} else if (x > 0 && x < 100 && y > 220 && y < 280) {
PublishMessage("Azul");
Serial.println("Enviando: Azul");
} else if (x > 60 && x < 160 && y > 140 && y < 200) {
PublishMessage("Verde");
Serial.println("Enviando: Verde");
}
}
delay(100);
}
/*
void PublishMqtt(const char* word, int number) {
// Crear el mensaje en formato JSON
String message = "{\"word\": \"" + String(word) + "\", \"number\": " + String(number) + "}";
// Publicar el mensaje en un único topic
mqttClient.publish("mmggjj/punto", message.c_str());
}
*/