Para enviar uma String deve-se usar os comandos de aplicação, ou seja, no byte[2] colocar um comando com valor maior que 12 e menor que 128.
Obs.: O ID 2047 é o ID de broadcast (todos os rádios da rede que “ouvirem” o pacote irão trará-lo)
exemplo enviando uma string para o ID 1 usando o comando 0x10:
ASCII: <1><\0><16>Radioenge_payload+_LoRaMESH<\0>V?
HEX: 01 00 10 52 61 64 69 6F 65 6E 67 65 5F 70 61 79 6C 6F 61 64 2B 5F 4C 6F 52 61 4D 45 53 48 00 56 A8
Usando o exemplo do ESP32 … inclua a função (declare o protótipo da função e cole a função no final do código):
char CMD_aplicacao(int id, char cmd, String mensagem);
String s_msg="Radioenge_payload+_LoRaMESH";
char c_cmd_app = 0x10; // qualquer valor de comando acima de 0x0B e menor que 0x7F
int i_id= 0x01;
CMD_aplicacao(i_id, c_cmd_app, s_msg);
//====================== Comando de Aplicação = Envio de string ====================
char CMD_aplicacao(int id, char cmd, String mensagem)
{
char id_lsb = id&0xFF; //separando o ind em dois bytes para enviar no pacote; &0xFF pega somente os 8 bits menos significativos
char id_msb = (id>>8)&0xFF;//bitwise desloca os 8 bits mais signficativos e pega somente a parte msb do int
char comando = cmd; // comando referente a GPIO
int tamanho = mensagem.length()+1;//inclui o fim de string 0x00
char payload[tamanho];
mensagem.toCharArray(payload, tamanho);
char pacote[tamanho+5]; // 03 bytes do cabeçalho (id_lsb, id_msb e comando) e 2 bytes do crc
pacote[0] = id_lsb;
pacote[1] = id_msb;
pacote[2] = cmd;
int count = 0;
for (count=3; count<(tamanho+3); count++)
{
pacote[count] = payload[count-3];
}
int crc = CalculaCRC(pacote, tamanho+3);
pacote[tamanho+3] = crc&0xFF;
pacote[tamanho+4]= ((crc>>8)&0xFF);
SWSerial.write(pacote,tamanho+5);
Serial.print(“Envio string para o ID: “);//somente para aparecer no monitor serial do Arduino
Serial.print(id);
Serial.println(” — — —”);
return(1);
}
//==========================================================================
Exemplo modificado no github