Convertir Datos a Formato Tipo JSON en Arduino con ArduinoJson.h

Convertir cadena de texto “String” a dato tipo “JSON” en Arduino con librería ArduinoJson.h


Convertir Datos a Formato Tipo JSON en Arduino con ArduinoJson.h

-Libreria ArduinoJson.h: https://github.com/bblanchon/ArduinoJson


Leer Ultimo Dato (Linea) de Memoria SD con ARDUINO – Modulo microSD

Código Leer Ultima Linea de Memoria SD en Arduino

#include <SD.h>
#include <ArduinoJson.h>
#include <SoftwareSerial.h>
#include <Wire.h>
#include <LCD.h>
#include <LiquidCrystal_I2C.h>

SoftwareSerial BTSerial(10,11);
LiquidCrystal_I2C lcd(0x3f,2,1,0,4,5,6,7,3, POSITIVE);

File myFile;

String mensaje="Prueba1";
int referencia=0;

String cadena="";


void setup()
{
  Serial.begin(9600);
  BTSerial.begin(9600);
  
  Wire.begin();
  lcd.backlight();
  lcd.begin(20,4);
  
  Serial.print("Iniciando SD ...");
  if (!SD.begin(4)) {
    Serial.println("No se pudo inicializar");
    return;
  }
  Serial.println("inicializacion exitosa");

 
}

void loop()
{
  
//BLUETOOTH/////////////////////////////////////////////////////////////////////  
  while(BTSerial.available()>0)
  {
    lcd.clear();
    if(referencia==0)
    {
      mensaje="";
    }
     char mensaje1 = BTSerial.read();
     mensaje+=mensaje1;
     referencia++;
     delay(100);
  }

    if(referencia!=0)
    {
      escribirSD();
      delay(1000);
    }
  referencia=0;
  
  Serial.println(mensaje); 

////////////////////////////////////////////////////////////////////////////////


///////////////////////////////////////////////////////////////////////////////
  leerSD();
  
  delay(1000);
}

void escribirSD()
{
    myFile=SD.open("datos.txt",FILE_WRITE);
  if(myFile)
  {
    Serial.println("Escribiendo en SD: ");
    myFile.println();
    myFile.print("{Mes:");
    myFile.print(mensaje);
    myFile.print(", Semana1:7");
    myFile.print(", Semana2:7");
    myFile.print(", Semana3:7");
    myFile.print(", Semana4:7");
    myFile.print(", Objetivo:7}");

    myFile.close();
  }

}

void leerSD()
{
  myFile = SD.open("datos.txt",FILE_READ);//abrimos  el archivo 

  if (myFile) 
  {
    bool line=false;
    myFile.seek(myFile.size()-1); //Ubicacion en posicion anterior a ultimo caracter
   
    while (myFile.available()) 
    {
      if(line==false) //Primero leer en reversa para buscar salto de linea
      {
        char caracter=myFile.read();
        //Serial.println(caracter);
        myFile.seek(myFile.position()-2);   
        
          if(caracter=='\n') //Cuando encuentra salto de linea cambia estado
          {
            line=true;
          }   
      }

      if(line==true) //Empieza a leer normalmente de izquierda a derecha
      {
          char caracter=myFile.read();
         //Serial.println(caracter);
          cadena=cadena+caracter;
        
          if(caracter=='}') //La cadena termina en este caracter para formato JSON
          {
            break;
          }      
      }
    }
    
    myFile.close(); //cerramos el archivo
    delay(300);  
    StaticJsonBuffer<200> jsonBuffer;
    JsonObject& root = jsonBuffer.parseObject(cadena);
    const char* Mes = root["Mes"];
    const char* Semana1 = root["Semana1"];
    const char* Semana2 = root["Semana2"];
    const char* Semana3 = root["Semana3"];
    const char* Semana4 = root["Semana4"];
    const char* Objetivo = root["Objetivo"];

     
     lcd.setCursor(0,0);
     lcd.print("Mes: ");
     lcd.print(Mes);
     lcd.setCursor(0,1);
     lcd.print("Semana 1: ");
     lcd.print(Semana1);
     lcd.setCursor(0,2);
     lcd.print("Semana 2: ");
     lcd.print(Semana2);
     lcd.setCursor(0,3);
     lcd.print("Semana 3: ");
     lcd.print(Semana3);
     lcd.setCursor(0,4);
     lcd.print("Semana 4: ");
     lcd.print(Semana4);
     
      Serial.println("*****************");
      Serial.println("datos.txt: ");
      Serial.print("cadena Leida: ");
      Serial.print(cadena);
      Serial.println("");
      Serial.print("Mes: ");
      Serial.println(Mes);
      Serial.print("Semana 1: ");
      Serial.println(Semana1);
      Serial.print("Semana 2: ");
      Serial.println(Semana2);
      Serial.print("Semana 3: ");
      Serial.println(Semana3);
      Serial.print("Semana 4: ");
      Serial.println(Semana4);
      Serial.print("Objetivo: ");
      Serial.println(Objetivo);   
    
  } 
  else 
  {
    Serial.println("Error al abrir el archivo");
  }

  cadena="";
}

Hola amigos bienvenidos a este nuevo vídeo, continuando con el vídeo anterior donde les mostré cómo leer la última línea de nuestro archivo de texto en una memoria SD usando Arduino, les voy a continuar explicando cómo podemos manipular estos datos en formato JSON así podemos tener un dato con varias variables almacenadas que se relacionen entre sí, entonces el formato JSON generalmente se compone por la variable que esté encerrada entre corchetes y si tiene diferentes ítems entonces el nombre del ítem separado por dos puntos y su valor, los items se separan por comas entonces el siguiente va a ser este separado por dos puntos y su valor y así sucesivamente, pueden tener todas las variables que quieran.

Bueno, en Arduino para realizar la conversión o el parseo del tipo de datos, porque esto lo va a leer como un “string” como una cadena de caracteres y va a ser esta librería la que nos va a ayudar a la conversión, la librería se llama ArduinoJson, la librería ArduinoJson les voy a dejar el enlace en la descripción del vídeo para que la puedan descargar, aquí en esta página de git hub el creador es bblanchon. Bueno aquí descargamos el contenido como un zip y allí lo van a extraer, le va a abrir esta carpeta ArduinoJson-master y van a la carpeta de de “src” de source para copiar estos tres componentes la librería junto con esta carpeta y este archivo se van a ir a escritorio, abren en archivos de programa y buscan la carpeta de Arduino.

Si no está entonces busquen siempre la carpeta de archivos de programa x86, se van a las librerías y se crean una carpeta que se llame arduino Json y pegan ahí los tres archivos ok.

Una vez ya tenga la librería incluida ya pueden compilar sin problema, bueno para realizar la conversión de datos, en este caso, pues este es el código que les mostré en mi anterior vídeo, de cómo leíamos en la última línea de una tarjeta SD en Arduino.

Entonces una vez tengan ya la cadena compilada, concatenada, la vamos a convertir a formato JSON que sería esto, el detecta a las dos o tres o todas las variables que estén dentro de los corchetes, entonces aquí lo primero que hay que declarar es un buffer en memoria y luego el objeto tipo JSON en Arduino, para hacer el parseo o la conversión de datos, se utiliza esta función de la librería ArduinoJson y le ingresamos el dato que deseen o que queremos convertir de “String a JSON” en Arduino.

Entonces ya nuestra variable en este caso se llama “root”, va a tener todas las propiedades que tiene el objeto JSON, entonces podemos almacenar en la variable independiente, digamos la propiedad o variable “mes” nos va a almacenar este valor declarando de esta forma “root” y entre llaves y entre corchetes cuadrados declaramos igual como se llama aquí si tiene una mayúscula aquí también debe ser mayúscula entre comillas y así ya obtenemos solo el dato de mes en este caso sólo el dato de semana 1, semana 2, bueno y así sucesivamente según los datos que tengan.

Ahora ya podemos imprimirlos por el puerto serial independientemente y podemos ver imprimiendo la variable mes que obtiene sólo el dato del mes del objeto JSON, bueno voy a extraer la memoria SD aquí la tengo y ahora la voy a poner en el módulo la memoria SD para Arduino, bueno ya con la memoria puesta en el módulo conectamos y energizamos el Arduino para probar los datos JSON y la librería ArduinoJson.

Conectado a el computador vamos a leer el puerto serial y allí podemos ver cómo nos está imprimiendo toda esa cadena de caracteres que obtuve de la memoria SD y cada variable independientemente el valor de este dato y así sucesivamente y bueno así ya podemos discriminar los datos y manejarlos más fácil, con la conversión de datos de String a JSON ya es más fácil manipularlos, mostrarlos y transmitirlos, así si también, si sólo tenemos un dato muy extenso con diferentes variables puede mostrar una variable independiente, otro ejemplo es para mostrar un valor especifico JSON en una pantalla LCD o en una matriz de LEDs como quiera, incluso hacer un servicio Web (API Rest) para enviarlo o transmitirlo en Red.

Eso es todo amigos, espero que este vídeo les haya gustado, no olvides regalarme un “me gusta” suscribirte ahí abajo que es gratis y nos vemos en el próximo vídeo hasta la próxima. 🙂

Please follow and like us:
error
2 comentarios

Añadir un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *