Índice:
Em um mundo cada vez mais conectado, soluções de baixa potência e longo alcance são essenciais para levar dados de sensores a locais remotos e inóspitos. A tecnologia LoRaWAN (Long Range Wide Area Network) surge como resposta a esse desafio, permitindo que dispositivos IoT transmitam pequenas quantidades de informação por vários quilômetros consumindo apenas frações de energia.

Materiais Necessários
Componente | Quant. |
---|---|
Arduino Uno R3 ATmega328P | 1 |
Módulo LoRa 915 MHz SX1276 RFM95W | 1 |
Antena SMA 915 MHz | 1 |
Fonte 5 V (USB) | 1 |
Protoboard e jumpers | — |
Diagrama de Conexões
txtCopiarEditarArduino Uno SX1276 RFM95W
─────────── ─────────────
5 V (5V) ───────────▶ VCC
GND ───────────▶ GND
D10 ───────────▶ NSS (Chip Select)
D11 (MOSI)┼─────────▶ MOSI
D12 (MISO)┼─────────▶ MISO
D13 (SCK) ┼─────────▶ SCK
D2 ───────────▶ DIO0 (Interrupt)
Nota: o pino DIO0 do módulo SX1276 sinaliza quando uma transmissão ou recepção está completa.
Configuração no The Things Network
- Acesse https://console.thethingsnetwork.org/ e crie uma conta.
- Crie um Application → dê um nome (ex.: “EstacaoLoRa”).
- Dentro do Application, registre um Device:
- Device ID:
node-arduino-uno
- Device EUI, App EUI e App Key: gere automaticamente ou insira as chaves que preferir.
- Device ID:
- Anote as credenciais:
devEUI
,appEUI
,appKey
.
Código-fonte no Arduino IDE
- Instale a biblioteca MCCI LoRaWAN LMIC via Library Manager.
- Substitua as chaves do TTN no sketch abaixo.
cppCopiarEditar#include <lmic.h>
#include <hal/hal.h>
#include <SPI.h>
// Credenciais TTN (7 hexadecimais cada)
static const u1_t PROGMEM DEVEUI[8] = { /* copie seu devEUI */ };
static const u1_t PROGMEM APPEUI[8] = { /* copie seu appEUI */ };
static const u1_t PROGMEM APPKEY[16] = { /* copie sua appKey */ };
// Pinos SX1276 conforme diagrama
const lmic_pinmap lmic_pins = {
.nss = 10,
.rxtx = LMIC_UNUSED_PIN,
.rst = LMIC_UNUSED_PIN,
.dio = {2, LMIC_UNUSED_PIN, LMIC_UNUSED_PIN},
};
void os_getDevKey(u1_t* buf) { memcpy_P(buf, APPKEY, 16); }
void os_getArtEui(u1_t* buf) { memcpy_P(buf, APPEUI, 8); }
void os_getDevEui(u1_t* buf) { memcpy_P(buf, DEVEUI, 8); }
void onEvent(ev_t ev) {
Serial.print(os_getTime());
Serial.print(": Evento LMIC ");
Serial.println(ev);
if (ev == EV_TXCOMPLETE) {
Serial.println("Envio completo");
// Agendar próxima transmissão em 60 s
os_setTimedCallback(&sendjob, os_getTime()+sec2osticks(60), do_send);
}
}
static osjob_t sendjob;
void do_send(osjob_t* j) {
// Exemplo de payload: valor fixo simulando sensor
static uint8_t payload[2] = {0x01, 0x02};
LMIC_setTxData2(1, payload, sizeof(payload), 0);
Serial.println("Pacote enviado");
}
void setup() {
Serial.begin(9600);
while (!Serial);
// Inicializa LMIC
os_init();
// Desabilita link-check para usar ABP/OTAA simples
LMIC_reset();
do_send(&sendjob);
}
void loop() {
os_runloop_once();
}
Como funciona:
- OTAA (Over-The-Air Activation) conecta o dispositivo ao TTN usando
devEUI
,appEUI
eappKey
.do_send()
monta um payload e envia a cada 60 s.onEvent()
trata eventos de envio e agenda novos envios.
Teste e Monitoramento
- Após subir o código, abra o Monitor Serial (9600 bps) e observe: makefileCopiarEditar
0: Evento LMIC EV_JOINING … 5: Evento LMIC EV_TXCOMPLETE Pacote enviado
- No Console da TTN → Application → Data, você verá os uplinks chegando com payload em hex.

Próximos Passos
- Adicionar Sensor: integre DHT22, BMP280, etc., para enviar dados reais em vez de valores fixos.
- Gateway Privado: monte um gateway Raspberry Pi + concentrador LoRa para maior controle.
- Dashboard: consuma os dados via MQTT/HTTP e crie gráficos em Node-RED ou React.
- ABP: se preferir, use Activation By Personalization em vez de OTAA.
Com este projeto, você aproveita a tecnologia LoRaWAN e a rede The Things Network para conectar seus sensores a um backend global, tudo com componentes disponíveis em https://www.saravati.com.br/.