Envio de variáveis em comandos AT com ESP32

Projetos com LoRa
cleitonaps
Membro
Mensagens: 13
Registrado em: 21/Abr/2020, 15:09

Envio de variáveis em comandos AT com ESP32

Mensagem por cleitonaps » 21/Abr/2020, 15:13

Bom dia, preciso enviar uma variável via serial em comando AT com ESP32. Estou usando um módulo LoRaWAN da Radioenge com interface UART, o comando AT de envio é AT+SEND=porta:mensagem. Na mensagem preciso transmitir uma variável, na documentação de exemplo do fabricante é utilizada a biblioteca Software Serial que não é compatível com ESP32. Segue abaixo código.

Código: Selecionar todos

#include <HardwareSerial.h>

void setup() {
  Serial.begin(9600);
  Serial2.begin(9600, SERIAL_8N1, 16, 17); //usando RX2 e TX2 do ESP
}

void loop() {
  Serial.println("Teste de Envio");
  Serial2.write("AT+SEND=1:mensagem de envio\r"); //no lugar de mensagem de envio deve ser enviada uma variável
  delay(1000);
  while (Serial2.available()) {
    int g = Serial2.read();
    Serial.write(g);
  }
}

cleitonaps
Membro
Mensagens: 13
Registrado em: 21/Abr/2020, 15:09

Re: Envio de variáveis em comandos AT com ESP32

Mensagem por cleitonaps » 15/Mai/2020, 12:18

Bom dia, problema resolvido da seguinte maneira (exemplo de teste):

Código: Selecionar todos

int variavel_01 = 3; 
int variavel_02 = 74; 
char mensagem[100]; 
sprintf(mensagem, “AT+SEND=85:“variable_1”:“variavel_01”,“value”:%.d “variable_2”:“varialvel_02”,“value”:%d \r\n\0”, variavel_01, variavel_02);
Serial.println(mensagem);

cleitonaps
Membro
Mensagens: 13
Registrado em: 21/Abr/2020, 15:09

Re: Envio de variáveis em comandos AT com ESP32

Mensagem por cleitonaps » 03/Jul/2020, 14:57

Problema resolvido, usei a função sprintf. Vou compartilhar caso alguém tenha a mesma necessidade

Código: Selecionar todos

#include <HardwareSerial.h>
void setup(){
Serial2.begin(9600, SERIAL_8N1, 16, 17); //usando RX2 e TX2 do ESP, GPIO16 e 17
}
void transmissao_lora(String a, String b) {
char mensagem[100] = {0};
char a2[50];
a.toCharArray(a2, 49);//convertendo a String para char, algumas strings enviadas ficam com caracteres ilegíveis, 49 é o tamanho final, o último caractere indica final
sprintf(mensagem, "AT+SEND=1:%s-%s\n", a2, b);//porta 1, formato a2-b, pode usar uma função decoder na TTN para separar as strings pelo caractere -
Serial2.write(mensagem);//envia a mensagem pela porta serial do módulo
}
void loop(){
transmissao_lora(string1, string2);
}

Responder