mirror of
https://github.com/adrigongv23/G26---Telemetry-Software.git
synced 2026-08-25 11:33:17 +02:00
103 lines
No EOL
3.1 KiB
C++
103 lines
No EOL
3.1 KiB
C++
#include "include/data_processor.hpp"
|
|
#include "include/can.hpp"
|
|
#include "include/common_libraries.hpp"
|
|
|
|
DataProcessor dataProcessor;
|
|
CAN canController;
|
|
|
|
// Objeto UDP para manejar la conexión UDP
|
|
WiFiUDP udp;
|
|
|
|
//Envio de datos a través de UDP
|
|
void TaskUdpSender(void *pvParameters){
|
|
|
|
Serial.println("Iniciando tarea de envío...");
|
|
|
|
while (true){
|
|
if(WiFi.status() == WL_CONNECTED){
|
|
|
|
//Obtenemos el dato actual
|
|
int tempActual = dataProcessor.current_ect_value;
|
|
int rpmActual = dataProcessor.current_rpm_value;
|
|
float battActual = dataProcessor.current_vbatt_value;
|
|
|
|
//Pasamos el dato actual a mensaje para enviarlo
|
|
String mensaje = String(tempActual) + "|" + String(rpmActual) + "|" + String(battActual, 1);
|
|
|
|
//Enviamos el paquete por broadcast a toda la red local (no hace falta conocer la IP del portátil)
|
|
udp.beginPacket(IPAddress(255,255,255,255), UDP_PORT);
|
|
udp.print(mensaje);
|
|
udp.endPacket();
|
|
|
|
//Para comprobar que el paquete se está enviado correctamente podemos usar estos prints
|
|
//Serial.print("UDP Enviado: ");
|
|
//Serial.println(mensaje);
|
|
}
|
|
|
|
else {
|
|
//Si no hay Wifi o no se consigue conectar, lo intentamos reconectar
|
|
Serial.println("[WIFI] Desconectado...");
|
|
WiFi.disconnect();
|
|
WiFi.reconnect();
|
|
}
|
|
|
|
//Ponemos de velocidad de envio 50ms, es ajustable
|
|
vTaskDelay(50 / portTICK_PERIOD_MS);
|
|
}
|
|
}
|
|
|
|
|
|
void setup() {
|
|
Serial.begin(115200);
|
|
|
|
// 1. INICIAR CAN Y PANTALLA
|
|
// Pasamos el puntero de dataProcessor al controlador CAN
|
|
canController.set_data_proccessor(&dataProcessor);
|
|
canController.start();
|
|
canController.start_listening_task();
|
|
|
|
// 2. INICIAR WIFI
|
|
Serial.println("--- CONECTANDO WIFI ---");
|
|
|
|
//IP estática dentro de la red del CPE (DHCP desactivado en el CPE)
|
|
IPAddress local_IP(192, 168, 0, 50);
|
|
IPAddress gateway(192, 168, 0, 254);
|
|
IPAddress subnet(255, 255, 255, 0);
|
|
|
|
if (!WiFi.config(local_IP, gateway, subnet)) {
|
|
Serial.println("[ERR] Fallo al configurar IP estática");
|
|
}
|
|
|
|
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
|
|
|
|
int intentos = 0;
|
|
while (WiFi.status() != WL_CONNECTED && intentos < 20) {
|
|
delay(500);
|
|
Serial.print(".");
|
|
intentos++;
|
|
}
|
|
|
|
if(WiFi.status() == WL_CONNECTED){
|
|
Serial.println("\n[OK] WiFi Conectado.");
|
|
} else {
|
|
Serial.println("\n[ERR] No se pudo conectar WiFi (Continuando offline).");
|
|
}
|
|
|
|
//Creamos la tarea UDP para el envio de datos
|
|
//Usaremos el núcleo 1 o 0 ya que la ESP32 es Dual Core
|
|
xTaskCreatePinnedToCore(
|
|
TaskUdpSender, // Función que debe de ejecutar
|
|
"UdpSender", // Nombre de la tarea
|
|
4096, // Stack size
|
|
NULL, // Parámetros extras?
|
|
1, // Prioridad (1 = Baja, 10 = Alta, la ponemos 1 ya que el CAN debe de tener más prioridad)
|
|
NULL, // Handle
|
|
0 // Núcleo
|
|
);
|
|
|
|
Serial.println("OK CAN + UDP Sender ");
|
|
}
|
|
|
|
void loop(){
|
|
vTaskDelay(5 / portTICK_PERIOD_MS);
|
|
} |