Skip to content

Protocolo de comunicación

Alex Spataru edited this page Dec 27, 2020 · 3 revisions

Serial Studio visualiza información en tiempo real (provista por un microcontrolador / puerto serial) a través de un documento JSON con la siguiente estructura:

  • t: título del proyecto (string, obligatorio)
  • g: grupos de datos (arreglo)
    • t: título del grupo (string, obligatorio)
    • w: tipo de widget (string; opcional, puede tener los siguientes valores:)
      • map: crear un widget que muestre una ubicación en un mapa
      • bar: barra de progreso vertical (con valores max y min)
      • gyro: indicador de giro
      • accelerometer: indicador de aceleración
    • d: conjuntos de datos de grupo (arreglo)
      • t: título del conjunto de datos (string, optional)
      • v: valor del conjunto de datos (variante, obligatorio)
      • u: unidad del conjunto de datos (string, opcional)
      • g: gráficar conjunto de datos (boolean, opcional)
      • w: tipo de widget (string, depende del tipo de widget de grupo, los valores posibles son:)
        • Para los widgets gyro y acelerometer:
          • x: valor para eje X
          • y: valor para eje Y
          • z: valor para eje Z
        • Para el widget map:
          • lat: latitud
          • lon: longitud
        • Para los widgets bar:
          • max: valor máximo
          • min: valor mínimo

Esta información es procesada por Serial Studio, que construye la interfaz de usuario de acuerdo con la información contenida en cada marco. Esta información también se utiliza para generar un archivo CSV con todas las lecturas recibidas del dispositivo en serie, el archivo CSV se puede utilizar para análisis y procesamiento de datos dentro de MATLAB.

NOTA: los tipos de widgets se pueden repetir en diferentes grupos sin ningún problema.

Modos de comunicación

Serial Studio puede procesar la información serial entrante de dos formas:

  1. El dispositivo serie envía periódicamente una trama de datos JSON completa (modo automático).
  2. El usuario especifica la estructura JSON en un archivo y el dispositivo serie solo envía datos separados por comas (modo manual).

El modo manual es útil si no desea utilizar una biblioteca JSON en su programa de microcontrolador, o si necesita enviar grandes cantidades de información. Un ejemplo de un archivo JSON es:

{
   "t":"%1",
   "g":[
      {
         "t":"Estado de Misión",
         "d":[
            {
               "t":"Tiempo",
               "v":"%2",
               "u":"s"
            },
            {
               "t":"Número de trama",
               "v":"%3"
            },
            {
               "t":"Voltaje de bateria",
               "v":"%4",
               "g":true,
               "u":"V"
            }
         ]
      },
      {
         "t":"Lecturas",
         "d":[
            {
               "t":"Temperatura",
               "v":"%5",
               "g":true,
               "u":"C"
            },
            {
               "t":"Altitud",
               "v":"%6",
               "u":"m"
            },
            {
               "t":"Presión",
               "v":"%7",
               "u":"KPa",
               "g":true
            },
            {
               "t":"Temperatura Externa",
               "v":"%8",
               "g":true,
               "u":"C"
            },
            {
               "t":"Humedad Externa",
               "v":"%9",
               "g":true,
               "u":"C"
            }
         ]
      },
      {
         "t":"GPS",
         "w":"map",
         "d":[
            {
               "t":"Tiempo GPS",
               "v":"%10"
            },
            {
               "t":"Longitud",
               "v":"%11",
               "u":"°N",
               "w":"lon"
            },
            {
               "t":"Latitud",
               "v":"%12",
               "u":"°E",
               "w":"lat"
            },
            {
               "t":"Altitud",
               "v":"%13",
               "u":"m"
            },
            {
               "t":"Num. Sats",
               "v":"%14"
            }
         ]
      },
      {
         "t":"Acelerómetro",
         "w":"accelerometer",
         "d":[
            {
               "t":"X",
               "v":"%15",
               "u":"m/s^2",
               "g":true,
               "w":"x"
            },
            {
               "t":"Y",
               "v":"%16",
               "u":"m/s^2",
               "g":true,
               "w":"y"
            },
            {
               "t":"Z",
               "v":"%17",
               "u":"m/s^2",
               "g":true,
               "w":"z"
            }
         ]
      },
      {
         "t":"Giróscopo",
         "w":"gyro",
         "d":[
            {
               "t":"X",
               "v":"%18",
               "u":"rad/s",
               "g":true,
               "w":"x"
            },
            {
               "t":"Y",
               "v":"%19",
               "u":"rad/s",
               "g":true,
               "w":"y"
            },
            {
               "t":"Z",
               "v":"%20",
               "u":"rad/s",
               "g":true,
               "w":"z"
            }
         ]
      }
   ]
}

Cómo puede suponer, Serial Studio reemplazará los valores %1,%2, %3,...,%20 por los valores del índice correspondientes en una trama con valores separados por comas. El formato de datos correspondiente enviado por el microcontrolador para el mapa JSON dado es:

/*KAANSATQRO,%s,%s,%s,%s,%s,%s,%,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s*/

Secuencias de inicio/fin de trama

Para procesar todas las tramas, Serial Studio necesita tener una forma confiable de saber cuándo comienza y cuándo termina una trama. La solución con la que vine es tener una secuencia de inicio/finalización específica, que corresponde a:

  • /* Inicio de trama
  • */ Fin de trama

Las secuencias de inicio/fin se aplican en ambos modos de comunicación (automático y manual).

Ejemplo

Suponga que recibe los siguientes datos de un microcontrolador:

/*KAANSATQRO,2051,2,5,26,10,101.26,27,32,1001,21.1619,86.8515,10,4,1.23,9.81,0.23,0,0,0*/

Serial Studio está configurado para interpretar los datos entrantes utilizando el archivo de mapeo JSON presentado anteriormente. Los datos se separarán como:

Índice 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
Match en archivo JSON %1 %2 %3 %4 %5 %6 %7 %8 %9 %10 %11 %12 %13 %14 %15 %16 %17 %18 %19 %20
Valor remplazado con KAANSATQRO 2051 2 5 26 10 101.26 27 32 1001 21.1619 86.8515 10 4 1.23 9.81 0.23 0 0 0