diff --git a/ADC_ZX47/ADC_ZX47.ino b/ADC_ZX47/ADC_ZX47.ino index 0671ca7..0a068a6 100644 --- a/ADC_ZX47/ADC_ZX47.ino +++ b/ADC_ZX47/ADC_ZX47.ino @@ -27,48 +27,27 @@ void setup() { Serial.print("Voltaje pkpk:"); Serial.print(" "); Serial.println(Vpk); } void loop() { - total=0; - //analogValue = analogRead(pinADC); - /* - for (int i = 0; i < numSamples; i++) { - total += analogRead(pinADC); - }*/ - //int averageValue = total / numSamples; int averageValue=analogRead(pinADC); Vout = 0.8291*averageValue+90.27;//Ajuste realizado para el ADC - //Serial.println(Vout); Plcal=5*pow((Vout+101),2)/(2*175.19*175.19);//Calculamos la potencia en la línea //dif=abs(Plinea-Plcal)*100/Plinea;//Hallamos la diferencia porcentual - if (Plcal>3){//valores por debajo de este umbral serán leidos como tierra + if (Plcal>4){//valores por debajo de este umbral serán leidos como tierra Parray[contador]=Plcal; contador =contador+1; } //cuando llenamos los valores hacemos la - if (contador==SIZE){ + if (contador>(SIZE-1)){ p=&Parray[0]; Pmax=find_maximun(p); contador=0; dif=abs(Plinea-Pmax)*100/Plinea; difPlow=abs(Plinea-Pmax); - if(dif>10 && difPlow>7) Serial.println(Pmax); - } - - - /* - if(dif>10 && Vout>120 ){ - Parray[contador]=Plcal; - contador =contador+1; - if(contador==SIZE){ - p=&Parray[0]; - Pmax=find_maximun(p); - contador=0; - difPlow=abs(Plinea-Pmax); - if (difPlow>8) { - Serial.print("Potencia anomala en el transmisor: "); - Serial.println(Pmax); - } + Serial.print("Valor normal: "); Serial.println(Pmax); + if(dif>10 && difPlow>9) { + Serial.print("Nivel anómalo: "); + Serial.println(Pmax); } - } */ + } } float ecuacionLineal(float Vpk){ float m=175.19,b=-101; diff --git a/MQTT_start/MQTT_start.ino b/MQTT_start/MQTT_start.ino index 95c2b6e..7f130a5 100644 --- a/MQTT_start/MQTT_start.ino +++ b/MQTT_start/MQTT_start.ino @@ -1,9 +1,83 @@ -void setup() { - // put your setup code here, to run once: +#include +#include + +const char *ssid = "HUAWEI P smart"; +const char *password = "12345678"; +const char *mqtt_server = "192.168.43.149"; +const int mqtt_port = 1883; +const char *mqtt_client_id = "ESP32_Client"; +const char *subscribe_topic = "tesis/potenciaNominal"; +const char *publish_topic = "tesis/potencia"; +const char *publish_topic_voltage = "tesis/ReferenceVoltage"; +WiFiClient espClient; +PubSubClient client(espClient); +float Vpk=0,Vout=0; +void setup_wifi() { + delay(10); + Serial.println(); + Serial.print("Conectando a "); + Serial.println(ssid); + WiFi.begin(ssid, password); + while (WiFi.status() != WL_CONNECTED) { + delay(500); + Serial.print("."); + } + Serial.println(""); + Serial.println("Conectado a la red WiFi"); + Serial.println("Dirección IP: "); + Serial.println(WiFi.localIP()); } -void loop() { - // put your main code here, to run repeatedly: +void callback(char *topic, byte *payload, unsigned int length) { + Serial.print("Mensaje recibido en el tópico: "); + Serial.println(topic); + // Convierte el payload a una cadena de caracteres + char receivedValue[length + 1]; + strncpy(receivedValue, (char *)payload, length); + receivedValue[length] = '\0'; + // Convierte la cadena a un número (en este caso, asume que es un float) + float potenciaNominal = atof(receivedValue); + // Realiza cálculos basados en la potencia nominal recibida (sustituye con tu lógica) + Vpk= sqrt(10*potenciaNominal)/5; + Vout=175.19*Vpk-101; + + // Publica el resultado en el tópico de voltaje + char result[10]; + snprintf(result, sizeof(result), "%.2f", Vout); + client.publish(publish_topic_voltage, result); +} + +void reconnect() { + while (!client.connected()) { + Serial.print("Intentando conexión MQTT..."); + if (client.connect(mqtt_client_id)) { + Serial.println("Conectado al servidor MQTT"); + client.subscribe(subscribe_topic); + } else { + Serial.print("Falló, rc="); + Serial.print(client.state()); + Serial.println(" Intentando de nuevo en 5 segundos"); + delay(5000); + } + } +} + +void setup() { + Serial.begin(115200); + setup_wifi(); + client.setServer(mqtt_server, mqtt_port); + client.setCallback(callback); +} + +void loop() { + if (!client.connected()) { + reconnect(); + } + client.loop(); + char str[16]; + sprintf(str, "%u", random(100)); + client.publish(publish_topic, str); + delay(500); }