Discusión: GPS en ordenador
Ver mensaje
  #15  
Antiguo 16-01-2023, 12:21
Avatar de Osr75
Osr75 Osr75 esta desconectado
Pirata
 
Registrado: 08-04-2021
Mensajes: 195
Agradecimientos que ha otorgado: 171
Recibió 116 Agradecimientos en 78 Mensajes
Sexo:
Predeterminado Re: GPS en ordenador

Hola,

Si genera un punto de acceso Local, OP lo genera.

Al Esp32, Con Arduino, que viene a ser C, le mandas un JSON (con los datos de los sensores conectados) que lo recibe Signal K, este los lee y los pone disponibles.

La cosa fué complicada de c*j*n*s.... sudor y lagrimas. Al final generé una función (recopilando info de varios foros/webs) que le mandas la palabra clave y valor y esta se ocupa de mandar a signal K, es rudimentario pero funciona.

La ventaja es que le das voltaje al esp32, y ni cables de datos ni nada...


esta es la funcion:
void Send_to_SignalK(String path, float value){
String cmd;
char valuestring[6]; // Valor suficiente mente largo para acomodar el espacio
int len;
// Preparamos el string para mandar:
cmd = "{\"updates\": [{\"$source\": \"ESP32\",\"values\":[ {\"path\":\"";
cmd += path; cmd += "\","; cmd += "\"value\":";
dtostrf(value,4,1,valuestring); // Convierte el flota en una cadena, el ancho debe ser suficiente, el desbordamiento causa error.
cmd += valuestring;
cmd += "}]}]}\0";
len=cmd.length(); // Obten la longitud del mensaje que necesita la escritura UDP.

//la preparamos para mandar a SignalK server
uint8_t buffer[len]; // Búfer para contener los caracteres de la cadena cmd.
memcpy(buffer,&cmd[0],len); // Convierte la cadena a bytes, udp.write no acepta el búfer de tipo de cadena como entrada vaya por Dios....
//vamos a mandar buffer to server
Udp.beginPacket(udpAddress, udpPort);
Udp.write(buffer, len);
Udp.endPacket();
delay(10);
} /* final Send_to_SignalK */

(copiar y pegar en arduino ide)

Falta la preparación:

const char * ssid = "x"; // ssid del wifi, el que declaremos en OP
const char * pwd = "x"; // la password del wifi
const char * udpAddress = "x"; // ip de signal K Server
const int udpPort = 20220; // wifi puerto que signal K escucha


Sin problemas y para no meter un tocho ( que ya es un tocho) puedo mandar un programa entero de arduino, donde mande por ejemplo algo básico, temperatura, humedad... etc...

Ahora bien, y para no engañar a nadie, he tenido que tirar de conocimientos de programación en C que ya tenia... si no, no lo logro ni a tiros...

Saludos
Citar y responder
Los siguientes cofrades agradecieron este mensaje a Osr75
McIan (16-01-2023)