Protocolo - Parladuino/Arduino-Esp8266 GitHub Wiki

El servicio de mensajes de Parladuino esta montado sobre tecnología websocket. Lo que permite una comunicación full-duplex entre cliente y servidor. Sobre este canal de comunicación se ha montado un protocolo en formato JSON, simple, reducido y lo suficientemente ductil como para que cualquier dispositivo con muy pocos recursos pueda implementar.

El protocolo tiene el siguiente formato:

{"fi":"xxxxxxxx",
 "fg":"xxxxxxxx",
 "ti":"xxxxxxxx",
 "tg":"xxxxxxxx",
 "ac":###,
 "an":[{"p":###,
        "n":"xxxx",
        "v":#####}
      ,{...}],
 "dg":[{"p":###,
        "n":"xxxx",
        "v":#####},
       {...}]
}

donde:

Propiedad Descripción Tipo bytes
fi ID remitente char 8
fg grupo remitente char 8
ti ID destinatario char 8
tg grupo destinatario char 8
ac acción uint8_t 3
an pines analógicos array ---
dg pines digitales array ---

Pines analógicos y digitales:

Propiedad Descripción Tipo bytes
p numero de pin uint8_t 3
n nombre referencia char 4
v valor int 5

La longitud en bytes representada en las tablas anteriores fue reducida para que un Arduino pueda implementarla sin problemas de memoria. Del lado del servidor esta longitud puede ser mas grandes.

Constantes definidas en la clase para manejar la serialización y deserialización del mensaje.

// Constantes para Pin
prog_char  PARLADUINO_PIN[] PROGMEM= "\"p\":";
prog_char  PARLADUINO_NAME[] PROGMEM=  "\"n\":\"";
prog_char  PARLADUINO_VALUE[] PROGMEM=  "\"v\":";

// Constantes para Mesnajes
prog_char  PARLADUINO_FROM_ID[] PROGMEM= "\"fi\":\"";
prog_char  PARLADUINO_FROM_GROUP[] PROGMEM=  "\"fg\":\""; 
prog_char  PARLADUINO_TO_ID[] PROGMEM=  "\"ti\":\"";
prog_char  PARLADUINO_TO_GROUP[] PROGMEM= "\"tg\":\""; 
prog_char  PARLADUINO_ACTION[] PROGMEM= "\"ac\":";
prog_char  PARLADUINO_ANALOGS[] PROGMEM=  "an\":["; 
prog_char  PARLADUINO_DIGITALS[] PROGMEM=  "dg\":[";



// estructura que representa un pin 
PROGMEM const  char* pinStruct[] =
{   
	PARLADUINO_PIN,
	PARLADUINO_NAME,
	PARLADUINO_VALUE
};

// estructura que representa un mensaje
PROGMEM const  char* messageStruct[] =
{   

	PARLADUINO_FROM_ID,
	PARLADUINO_FROM_GROUP, 
	PARLADUINO_TO_ID,
	PARLADUINO_TO_GROUP,
	PARLADUINO_ACTION,
	PARLADUINO_ANALOGS, 
	PARLADUINO_DIGITALS
};