teste — ESP32-S3 simulation

An interactive ESP32-S3 circuit simulation you can run free in your browser on Velxio, by francisco.

Components

Sketch code

#include <WiFi.h> 
#include <PubSubClient.h>
#include <EMailSender.h>

#define velxio_ID "ESP32-S3 - id xiao-esp32-s3" 
#define velxio_usuario "aj62zv99yrxrg61kdbm8"
#define velxio_senha "" 

#define velxio_TOPICO "v1/devices/me/telemetry"

#define MQTT_SERVIDOR "thingsboard.cloud"
#define MQTT_PORTA 1883
#define TOKEN "aj62zv99yrxrg61kdbm8"

#define WIFI_SSID "velxio-GUEST"
#define WIFI_SENHA ""
#define CANAL_WIFI 6

#define SMTP_HOST "smtp.gmail.com"
#define SMTP_PORT 587
#define AUTOR_EMAIL "[email protected]"
#define AUTOR_SENHA "" 
#define DESTINATARIO "[email protected]"

const char* ID_MQTT_cliente = "Meu_esp32s3_virtual";

float vibracao = 0;
float leituravibracao = 0;
int alertavibracao = 0;
int ledvibracao = 8; 
int sensorvibracao = 9;
int ledverde = 4; 
int ledamarelo = 5; 
int ledvermelho = 6; 
int sensor = 1; 
int alertas = 0;
int alertavermelho = 0;
unsigned long tempoanterior_MQTT = 0; 
unsigned long tempoanterior = 0; 
unsigned long tempoAnteriorTentativaMQTT;
EMailSender emailSender(AUTOR_EMAIL, AUTOR_SENHA, AUTOR_EMAIL, SMTP_HOST, SMTP_PORT);

WiFiClient espClient;
PubSubClient client(espClient);

void conectawifi();
void conectaMQTT();
void enviarEmail(float temperatura);
void enviarEmail(float vibracao);
void conectawifi() {
  WiFi.begin(WIFI_SSID, WIFI_SENHA, CANAL_WIFI);
  while(WiFi.status() != WL_CONNECTED) {
    Serial.print(".");
    delay(500);
  }
  Serial.println("\n\n Wifi conectado com sucesso!!! ");
}

void conectaMQTT () {
  while (!client.connected() && millis() - tempoAnteriorTentativaMQTT >= 5000) {
    tempoAnteriorTentativaMQTT = millis();
    Serial.println("Conectando MQTT...");
    if (client.connect(ID_MQTT_cliente, velxio_usuario, NULL)) {
      Serial.println("Conectado ao MQTT");

    } else {
      Serial.print("Falha, codigo de erro: ");
      Serial.println(client.state());
      delay(1000);
    }      
  }
}

void enviarEmail (float temperatura) {
  Serial.println("Preparando envio de e-mail...");

  EMailSender::EMailMessage message;
  message.subject = "ALERTA CRÍTICO: Temperatura Alta!";
  
  String textoMensagem = "Atenção!\n\nO sensor detectou temperatura crítica.\n";
  textoMensagem += "Temperatura atual registrada: " + String(temperatura) + " °C\n";
  textoMensagem += "Verifique o equipamento imediatamente.";
  message.message = textoMensagem;

  EMailSender::Response resp = emailSender.send(DESTINATARIO, message);
  
  if (resp.status == 1) {
    Serial.println("E-mail de alerta enviado com sucesso!");
  } else {
    Serial.print("Erro ao enviar o e-mail. Código: ");
    Serial.println(resp.code);
    Serial.println(resp.desc);
  }
}

void enviarEmail (float vibracao) { 
  Serial.println("Preparando envio de e-mail...");

  EMailSender::EMailMessage message;
  message.subject = "ALERTA: vibração saindo do padrão";
  
  String textoMensagem = "Atenção!\n\nO sensor detectou vibração fora do padrão.\n";
  textoMensagem += "vibração atual registrada: " + String(vibracao) +