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
};