/*=================================================================================
CETEC CAPACITAÇÕES
Capacitação no aplicativo Wokwi.
Coordenador: Professor Luiz Tetsuharu Saito
Professor: Juliano Koichi Tanabe
SETEMBRO DE 2024
Aluno: Carlos Barreira da Silva Farinhas
ETEC Aristóteles Ferrreira - Santos
PROJETO 2 - Montar um circuito ESP 32 conectado a um servo motor.
A programação (na linguagem C/Arduino) deverá acionar o servo motor que deverá
ser posicionado pelos valores recebidos de um tópico consultado no
broker test.mosquitto.org.
Um app deverá ser desenvolvido no App Inventor e deverá conectar-se e criar
um tópico, no test.mosquitto.org, via MQTT e deverá enviar valores de 0 a 180.
Esses valores do tópico de 0 a 180 deverão ser consultados pelo ESP32 para
posicionar o servo motor. Como opção, pode-se utilizar
o componente Deslizador (slider)
=================================================================================*/
//bibliotecas
#include <ESP32Servo.h>
#include <WiFi.h>
#include <PubSubClient.h>
//coneções
#define servoPin 18
#define potenciometro 34
//constantes
#define TOPIC "barPr2" //MUDAR O TÓPICO
//Dados do WiFi
const char* ssid = "Wokwi-GUEST";
const char* password = "";
const char* mqtt_server = "test.mosquitto.org";
//Declarações e classes
WiFiClient espClient;
PubSubClient client(espClient);
//variáveis
int angulo = 0;
int valorPot = 0;
//objeto servo
Servo servo1;
void setup() {
// relacionando o pino com o objeto servo
servo1.attach(servoPin);
//inicializando o monitor serial
Serial.begin(115200);
// Chamada das funções de configuração do WiFi, do MQTT
setup_wifi();
client.setServer(mqtt_server, 1883);
}
void loop() {
reconnect();
client.loop();
//leitura do potenciômetro
valorPot = analogRead(potenciometro);
//mapeamento do potenciômetro
angulo = map(valorPot,0,4095,0,180);
//movimenta o servo
servo1.write(angulo);
//mostra o angulo no monitor
Serial.println(angulo);
delay(20);
//Dados que serão enviados ao servidor MQTT
String payload = "{";
payload += "\"angulo \":";
payload += String(angulo);
payload += "}";
//Envio de dados ao servidor MQTT e mensagem de sucesso ou não
if (client.publish(TOPIC, (char*) payload.c_str(), true)) {
Serial.println("Mensagem publicada com sucesso");
} else {
Serial.println("Falha na publicação da mensagem");
}
}
//Funcão para configurar o WiFi
void setup_wifi() {
delay(10);
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}
//Função para reconectar ao servidor em caso de desconexão
void reconnect ( void ) {
if ( ! client.connected ( ) ) {
while ( ! client.connected ( ) ) {
Serial.print ( F ( "Conectando novamente ao servidor" ) );
if ( client.connect ( "Client_test" ) ) {
Serial.println ( F ( "Cliente conectado" ) );
} else {
Serial.print ( F ( "Falha ao conectar, tipo de erro: " ) );
Serial.print ( client.state ( ) ); // Tipo de erro de conexão
Serial.println ( F ( " Tentando novamente em 5 segundos" ) );
delay ( 5000 );
}
}
}
}