Hola a todos y bienvenidos, en esta ocasión les enseñaré cómo manipular datos en formato JSON con Arduino. Este formato es ideal porque permite almacenar múltiples variables relacionadas entre sí.
El formato JSON se organiza utilizando llaves {} para delimitar un objeto, y en su interior, las variables se definen como pares clave-valor. Cada clave está separada de su valor por dos puntos, y los diferentes ítems se dividen mediante comas. Así, pueden incluir tantas variables como necesiten dentro de un objeto JSON.
En el caso de Arduino, los datos se procesan inicialmente como cadenas de texto (String). Para realizar la conversión al formato JSON, utilizaremos la librería ArduinoJson. Les dejaré un enlace en la descripción del vídeo para que puedan descargarla desde GitHub. El creador de esta útil librería es bblanchon.
Para instalarla, descarguen el archivo ZIP y extráiganlo. Dentro de la carpeta extraída, encontrarán un directorio llamado ArduinoJson-master. Diríjanse a la subcarpeta src y copien los archivos que contiene. Luego, vayan al directorio de librerías de Arduino, ubicado en Archivos de Programa > Arduino > Libraries (o en Archivos de Programa (x86) si usan una arquitectura de 64 bits). Si no existe una carpeta llamada ArduinoJson, créenla y peguen los archivos allí.
Una vez instalada la librería, podrán compilar su código sin problemas. Ahora bien, para realizar la conversión de los datos leídos desde la tarjeta SD, primero concatenamos la cadena obtenida y procedemos a convertirla al formato JSON. El proceso comienza declarando un buffer en memoria y luego un objeto JSON. Para ello, utilizaremos las funciones proporcionadas por la librería ArduinoJson, especificando el dato que queremos transformar.
Por ejemplo, al crear una variable JSON llamada root, esta contendrá todas las propiedades del objeto JSON. Si deseamos acceder a un valor específico, como "mes", lo hacemos utilizando la sintaxis root["mes"], asegurándonos de respetar mayúsculas y minúsculas. Esto nos permite trabajar con cada dato de manera individual, como "semana1", "semana2" y así sucesivamente, dependiendo de la información almacenada en el JSON.
Estos datos pueden imprimirse fácilmente a través del puerto serial, lo que facilita su visualización y manejo. Con la conversión de cadenas a JSON, es posible manipular la información de manera más eficiente, mostrarlas en pantallas LCD o matrices de LEDs, o incluso utilizarlas para crear servicios web (API REST) y transmitirlas a través de redes.
Conectando el módulo de la memoria SD al Arduino y energizando el dispositivo, podemos observar cómo los datos JSON se procesan y se imprimen correctamente en el puerto serial. Esto demuestra que convertir datos de String a JSON simplifica enormemente su manejo, ya sea para mostrar valores individuales o para aplicaciones más complejas.
Convertir Datos a Formato Tipo JSON en Arduino con ArduinoJson.h
-Libreria ArduinoJson.h: https://github.com/bblanchon/ArduinoJson
Tutorial para Leer Ultimo Dato Almacenado en una Memoria SD con ARDUINO y el Modulo microSD
¿Qué es JSON y por qué es importante?
JSON es un formato de intercambio de datos que representa objetos y arreglos de forma legible para humanos y máquinas. Su simplicidad y compatibilidad lo han convertido en el estándar para la comunicación entre dispositivos IoT, APIs y bases de datos en tiempo real como Firebase.
Cuando trabajamos con placas como Arduino, especialmente en proyectos donde necesitamos interactuar con servicios web, convertir datos entre formatos es esencial. Por ejemplo, podrías recibir datos como una cadena de texto de un servidor y necesitar convertirlos en un objeto JSON para analizarlos o utilizarlos en tu aplicación.
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="";
}
Requisitos para este Proyecto
- Una placa Arduino compatible (Arduino UNO, Mega, ESP32, ESP8266, etc.).
- La librería ArduinoJson.h instalada en tu IDE de Arduino.
- Un editor de código con acceso a internet (opcional, para pruebas con APIs).
- Un puerto serie o conexión WiFi para la recepción/envío de datos en tiempo real.
Instalación de la Librería ArduinoJson
- Abre tu IDE de Arduino.
- Ve a la pestaña Herramientas > Gestionar bibliotecas.
- En la barra de búsqueda, escribe “ArduinoJson”.
- Selecciona la librería de Benoit Blanchon y haz clic en instalar.
Convertir una Cadena “String” a JSON: Paso a Paso
Definir una Cadena de Texto (String):
Supongamos que recibes la siguiente cadena de texto desde un servidor:
String jsonString = "{\"nombre\":\"Arduino\",\"version\":1.0,\"activa\":true}";
Crear un Objeto JSON:
Utiliza la librería ArduinoJson para analizar esta cadena. Crea un objeto StaticJsonDocument que almacenará los datos.
#include <ArduinoJson.h>
void setup() {
Serial.begin(9600);
// Definir el JSON en un StaticJsonDocument
StaticJsonDocument<200> doc;
// Convertir String a JSON
String jsonString = "{\"nombre\":\"Arduino\",\"version\":1.0,\"activa\":true}";
DeserializationError error = deserializeJson(doc, jsonString);
// Validar si la conversión fue exitosa
if (error) {
Serial.print("Error al convertir JSON: ");
Serial.println(error.c_str());
return;
}
// Acceder a los datos
const char* nombre = doc["nombre"];
float version = doc["version"];
bool activa = doc["activa"];
Serial.println("Datos obtenidos:");
Serial.print("Nombre: ");
Serial.println(nombre);
Serial.print("Versión: ");
Serial.println(version);
Serial.print("Activa: ");
Serial.println(activa);
}
void loop() {
// No se requiere código en el loop para este ejemplo
}
Interpretar los Datos JSON:
Una vez analizada la cadena, puedes acceder fácilmente a sus valores a través de las claves, como "nombre", "version" y "activa".
Validar Errores de Deserialización:
La función deserializeJson() devuelve un objeto DeserializationError que te permite identificar problemas en la conversión. Siempre verifica este paso para evitar fallos en tu código.
Aplicaciones Prácticas
- Dispositivos IoT: Recibir datos JSON de un servidor y convertirlos en variables manipulables en Arduino.
- APIs Web: Integrar servicios como OpenWeatherMap o Firebase que envían datos en formato JSON.
- Bases de Datos en Tiempo Real: Procesar información estructurada enviada desde bases de datos como Firebase.
- Control Remoto: Recibir instrucciones JSON para controlar dispositivos conectados a Arduino.
Extiende tu Proyecto
- Envío de Datos JSON: Además de recibir, puedes usar ArduinoJson para construir y enviar datos JSON a otros dispositivos o servicios web.
- Compatibilidad con ESP32 o ESP8266: Prueba este proyecto con placas WiFi para expandir tus aplicaciones IoT.
- Interacción con Sensores: Usa sensores conectados a Arduino para generar datos dinámicos en formato JSON.
La librería ArduinoJson.h es una herramienta imprescindible para cualquier desarrollador que quiera trabajar con JSON en proyectos de Arduino. Con ella, puedes manejar datos complejos de manera eficiente y sencilla, abriendo la puerta a un sinfín de posibilidades en el mundo del IoT y la electrónica.
Como siempre, espero que estos videos e información les sea muy útil, no olvides suscribirte a mi canal en YouTube. Saludos 😎
Tags
Arduino
ArduinoJson.h
Convertir Datos
Formato Tipo JSON
JSON
JSON en Arduino
Leer ultima linea
tarjeta SD