khriss75:
Come "scusa", ma verrò smentito (
), c'è che poi devo inviare la stringa (char array) via mqtt dove necessito di una sintassi quasi umana.
Non credo, in MQTT io vedo che payload è un unsigned int ossia uint8_t:
uint16_t publishPacket(uint8_t *packet, const char *topic, uint8_t *payload, uint16_t bLen, uint8_t qos)
Di fatto uint8_t, unsigned char o byte è la stessa cosa, non vedo il problema a mandare pacchetti come quelli che ti ho suggerito, e non vedo da nessuna parte un obbligo di usare nomi.. Tra l'altro anche inutilmente lunghi, ad esempio se anche volessi usare stringhe non farei "temperatura_nutella_nella_tazza" ma "TNutellaTazza", o "tNutTaz" o "NT".
Cosa che comunque è assolutamente irrilevante dal punto di vista della programmazione perché quelli che sono dei "token" fissi è sempre bene definirli a priori come costanti, per evitare che in una parte del codice magari ti dimentichi un "_" o metti un carattere maiuscolo al posto del minuscolo ed ecco che non ti funziona più bene, per cui fare:
#define VAL_NUTELLA 1
oppure
#define VAL_NUTELLA "temperatura_nutella_nella_tazza"
o
#define VAL_NUTELLA "supercalifragilisticespiralidoso-e-uscimmo-a-riveder-le-stelle-abcdefghi"
Non cambia nulla, nel codice userai sempre il simbolo "VAL_NUTELLA".
da inviare via mqtt del tipo "temperatura_nutella_nella_tazza" xxx. Potrei avere cose del tipo "temperatura_acqua_nel_bicchiere" xxx, oppure, "densità_olio_zuppiera" xxx.
Appunto, in ENTRAMBI i codici userai (devi usare) le STESSE definizioni costanti dei token, ma quindi, ripeto, se anche volessi a tutti i costi mettere delle stringhe, a che ti serve farle così lunghe? Non sei TU a doverle interpretare, ma il destinatario che è sempre un programma, e, oltre a non usare inutilmente un canale relativamente limitato come performance e senza alcun controllo di errore, per lui è più semplice confrontare due byte che due stringone non ti pare? Ancora peggio per i valori numerici, che invece di convertirli ins tringa e mandare la loro rappresentazione, per poi ricevere una stringa e riconvertirla in un valore, si fa prima a mandare qualche byte che ricomponi nel valore originario (vedi il mio esempio, con un byte per i gradi interi ed uno per i centesimi, eviti un parsing perché basta sommarli dividendo il secondo per 100).
Diciamo che vuoi a tutti i costi mantenere le stringhe, almeno usa comunque una sintassi breve, tipo:
CCCVVVV
dove "CCC" sono 3 caratteri per il "comando", e "VVVV" sono 4 byte con il valore (che a seconda del comando riconverti in un int, o float, o quello che ti pare) e terminati con CR+LF ("\r\n").
Esempio:
"temperatura_nutella_nella_tazza@23.5" -> "TNT2350"
"temperatura_acqua_nel_bicchiere@18.25" -> "TAB1825"
"densità_olio_zuppiera@6" -> DOZ0600"
e così via...
Insomma, sei gli "arduino sensore" inviano il dato machine like, poi "arduino base" dovrà comunque costruire la frasetta che a me serve.
Se parli del Serial.print() se vedi il codice che ti ho mandato, lo fa, ed il dato lo leggi in 2 istruzioni di numero... 
Fidati, un protocollo informatico va pensato per le macchine, non per gli umani. E questa cosa (unita all'uso delle costanti per definire i token del protocollo) è sempre più importante all'aumentare della complessità del programma e del protocollo...
Ma alla fine fai come vuoi, contento tu... 