Estou usando o módulo LoRaWAN EndDevice com ESP32, algum exemplo de código-fonte com este MCU? Vi que no GitHub tem exemplo com Arduino UNO, não sei se seria o mesmo código. Fico no aguardo, obrigado.
Amigo,
Dá uma olhada aqui:https://www.thethingsnetwork.org/community/sorocaba/post/guia-para-desenvolvimento-de-um-dispositivo-lorawan-na-infraestrutura-ttn-parte-1
Acho que pode te ajudar.
Att.,
Prof. Eduardo
Boa noite, minha pesquisa partiu desse projeto. Porém no meu caso estou utilizando o módulo EndDevice da Radioenge com ESP32, mas agradeço pela resposta, vou novamente analisar os códigos e verificar a possibilidade de uso no projeto. Obrigado.
Consegui enviar comandos AT do ESP32 para o módulo e cadastrar na TTN, vou compartilhar o código caso mais alguém precise, estou realizando as operações manualmente sem a biblioteca LoRaWAN.h.
#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(“Verificar baud rate”);
Serial2.write(“AT+BAUDRATE=?\r”);
delay(1000);
while(Serial2.available()){
int b = Serial2.read();
Serial.write(b);
}
}
Demais comandos só seguir o datasheet do módulo. Qualquer dúvida estou à disposição.
Alguém já conseguir realizar o código LoRaWan para esp32?
Use esse código como teste, só substituir pelos comandos AT que estão no datasheet do módulo.
#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(“Verificar baud rate”);
Serial2.write(“AT+BAUDRATE=?\r”);
delay(1000);
while(Serial2.available()){
int b = Serial2.read();
Serial.write(b);
}
}
posso migrar os códigos do uno diretamente para a esp pela adaptação da IDE?
Neste exemplo do git tem alguns passos que podem ser úteis.
Não foi usada a biblioteca lora.h e sim os comandos AT que estão disponíveis no manual.
link
Algumas bibliotecas do exemplo do GitHub para Arduino não são compatíveis com ESP32. No projeto que estou trabalhando fiz da mesma forma que o Fábio sugeriu, usando os comandos AT do manual diretamente, sem a biblioteca LoRaWAN.h.
No início inclui a biblioteca:
#include <HardwareSerial.h>
No setup inicializa a Serial2:
Serial2.begin(9600, SERIAL_8N1, 16, 17); //usando RX2 e TX2 do ESP, GPIO16 e 17
Depois vc cria uma função que será chamada no loop ou coloca o código abaixo no loop:
Serial.println("Verificar baud rate");
Serial2.write("AT+BAUDRATE=?\r");//envio do comando AT para verificar baudrate
delay(1000);//aguarda 1 segundo
while(Serial2.available()){
int b = Serial2.read();//recebe resposta do módulo
Serial.write(b);//imprime na tela serial a resposta
}
Para os demais comandos é só seguir o manual do módulo.
Exemplo: para definir autenticação ABP:
Serial.println("Definindo autenticação ABP");
Serial2.write("AT+NJM=0?\r");//envio do comando AT definindo modo de autenticação
delay(1000);//aguarda 1 segundo
while(Serial2.available()){
int e = Serial2.read();//recebe resposta do módulo
Serial.write(e);//imprime na tela serial a resposta
}
Para enviar uma mensagem:
Serial.println("Teste de Envio");
Serial2.write("AT+SEND=1:teste\r");//envio da string teste na porta 1
delay(1000);//aguarda 1 segundo
while(Serial2.available()){
int g = Serial2.read();//recebe resposta do módulo
Serial.write(g);//imprime na tela serial a resposta
}
Para definir a máscara de canais da TTN:
Serial.println("Definindo Máscara TTN");
Serial2.write("AT+CHMASK=FF00:0000:0000:0000:0001:0000\r");
delay(1000);
while (Serial2.available()) {
int k = Serial2.read();
Serial.write(k);
}
Só seguir essa ideia, lembrando que dependendo do tipo de autenticação utilizada vc precisa definir as chaves no módulo e executar o Join (se usar OTAA).
Boa tarde
Tentei, sem sucesso, ativar com ABP na rede LoRaWAN NLT/ATC e EndDevice com ESP32, mas não estou tendo sucesso.
Agradeço caso alguem possa ajudar a corrigir ou acrescentar parâmetros ou mesmo fornecer um exemplo que funcione
Desde já os agradeço.
Segue meu código
#include <HardwareSerial.h>
char str_counter[128];
int counter = 0;
void setup(){
//No setup inicializa a Serial2:
Serial.begin(9600);
Serial2.begin(9600, SERIAL_8N1, 16, 17); //usando RX2 e TX2 do ESP, GPIO16 e 17
Serial.println(“Reset…”);
Serial2.write(“ATZ\r\n”);
delay(5000);
Serial.println(“Verificar baud rate”);
Serial2.write(“AT+BAUDRATE=?\r”);//envio do comando AT para verificar baudrate
delay(2000);//aguarda 2 segundos
while(Serial2.available()){
int b = Serial2.read();//recebe resposta do módulo
Serial.write(b);//imprime na tela serial a resposta
}
Serial.println(“Definindo autenticação ABP”);
Serial2.write(“AT+NJM=0?\r”);//envio do comando AT definindo modo de autenticação
delay(2000);
while(Serial2.available()){
int e = Serial2.read();//recebe resposta do módulo
Serial.write(e);//imprime na tela serial a resposta
}
//--------------------------
Serial.println(“Configurando DADDR…”);
Serial.write(“AT+DADDR=12:D6:D8:43\r\n”); //12D6D843
//AT+DEUI = 0012F8000000xxxx
delay(2000);
while(Serial2.available()){
int w = Serial2.read();//recebe resposta do módulo
Serial.write(w);//imprime na tela serial a resposta
}
Serial.println(“Configurando APPEUI…”);
Serial.write(“AT+APPEUI=CD:B1:D3:FE:CB:14:xx:xx\r\n”); //APPEUI = CDB1D3FECB14xxxx // Na NLT
delay(2000);
while(Serial2.available()){
int r = Serial2.read();//recebe resposta do módulo
Serial.write®;//imprime na tela serial a resposta
}
// Configurando EndDevice como ABP
Serial.println(“Sending Nwk Key…”);
Serial2.write(“AT+NWKSKEY=B3:8A:C5:44:54:1B:97:ED:D4:B2:BE:86:18:AC:6b:xx”); //B38AC544541B97EDD4B2BE8618AC6bxx
delay(2000);
while(Serial2.available()){
int x = Serial2.read();//recebe resposta do módulo
Serial.write(x);//imprime na tela serial a resposta
}
Serial.println(“Sending App Key…”);
Serial2.write(“AT+APPSKEY=7B:66:D9:F5:A5:DA:E9:EB:A4:32:C8:33:71:64:6c:xx”); //7B66D9F5A5DAE9EBA432C83371646cxx
delay(2000);
while(Serial2.available()){
int y = Serial2.read();//recebe resposta do módulo
Serial.write(y);//imprime na tela serial a resposta
}
Serial.println(“Sending Channel Mask…”);
//SendRaw(“AT+CHMASK=FF00:0000:0000:0000:0000:0000”); // TTN
Serial2.write(“AT+CHMASK=FF00:0000:0000:0000:0000:0000”); // TTN
delay(2000);
while(Serial2.available()){
int z = Serial2.read();//recebe resposta do módulo
Serial.write(z);//imprime na tela serial a resposta
}
//Para definir a Classe:
Serial.println(“Definindo Classe”);
Serial2.write(“AT+CLASS=C\r”);
delay(2000);
while (Serial2.available()) {
int k = Serial2.read();
Serial.write(k);
}
//-----------------------
//Para enviar uma mensagem:
Serial.println(“Teste de Envio”);
Serial2.write(“AT+SEND=1:teste\r”);//envio da string teste na porta 1
delay(2000);//aguarda 1 segundo
while(Serial2.available()){
int g = Serial2.read();//recebe resposta do módulo
Serial.write(g);//imprime na tela serial a resposta
}
//========================
Serial.println(“Verificando DevAddr”);
Serial2.write(“AT+DADDR=?\r”);
delay(2000);
while (Serial2.available()) {
int r = Serial2.read();
Serial.write®;
}
Serial.println("Verificando AppKey ");
Serial2.write(“AT+APPKEY=?\r”);
delay(2000);
while (Serial2.available()) {
int r = Serial2.read();
Serial.write®;
}
Serial.println("Verificando AppSKey ");
Serial2.write(“AT+APPSKEY=?\r”);
delay(2000);
while (Serial2.available()) {
int r = Serial2.read();
Serial.write®;
}
Serial.println("Verificando NwkSKey ");
Serial2.write(“AT+NWKSKEY=?\r”);
delay(2000);
while (Serial2.available()) {
int r = Serial2.read();
Serial.write®;
}
Serial.println("Verificando AppEui/JoinEui ");
Serial2.write(“AT+APPEUI=?\r”);
delay(1000);
while (Serial2.available()) {
int r = Serial2.read();
Serial.write®;
}
Serial.println("Verificando ADR ");
Serial2.write(“AT+ADR=?\r”);
delay(1000);
while (Serial2.available()) {
int r = Serial2.read();
Serial.write®;
}
Serial.println("Verificando Tx Power ");
Serial2.write(“AT+TXP=?\r”);
delay(2000);
while (Serial2.available()) {
int r = Serial2.read();
Serial.write®;
}
Serial.println(“Verificando Public Network”);
Serial2.write(“AT+PNM=?\r”);
delay(2000);
while (Serial2.available()) {
int r = Serial2.read();
Serial.write®;
}
Serial.println("Verificando Network ID ");
Serial2.write(“AT+NWKID=?\r”);
delay(2000);
while (Serial2.available()) {
int r = Serial2.read();
Serial.write®;
}
Serial.println("Verificando modo Join (0:ABP/1:OTAA) ");
Serial2.write(“AT+NJM=?\r”);
delay(2000);
while (Serial2.available()) {
int r = Serial2.read();
Serial.write®;
}
}
//============================
Colega. Bom dia. Sou iniciante neste assunto e estou com um projeto similar a este topico criado (ESP32 com LoRawan Radioenge). Para os meus estudos iniciais, estou me baseando neste seu código para enviar os comandos AT e primeiramente gostaria de parabeniza-lo e agradecer pelo compartilhamento do memso.Eu consegui utilizar ele porem tive que aumentar o delay para 6000, assim sincronizando os envios para a TTN. Acontece que no momento estou com duvidas para receber os Downlinks da TTN. Teria alguma experiência ou dica para conseguir receber as msg no ESP32?