Arduino

LoRaWAN com Arduino e The Things Network

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.

image Saravati

Materiais Necessários

ComponenteQuant.
Arduino Uno R3 ATmega328P1
Módulo LoRa 915 MHz SX1276 RFM95W1
Antena SMA 915 MHz1
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

  1. Acesse https://console.thethingsnetwork.org/ e crie uma conta.
  2. Crie um Application → dê um nome (ex.: “EstacaoLoRa”).
  3. 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.
  4. Anote as credenciais:
    • devEUI, appEUI, appKey.

Código-fonte no Arduino IDE

  1. Instale a biblioteca MCCI LoRaWAN LMIC via Library Manager.
  2. 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 e appKey.
  • do_send() monta um payload e envia a cada 60 s.
  • onEvent() trata eventos de envio e agenda novos envios.

Teste e Monitoramento

  1. Após subir o código, abra o Monitor Serial (9600 bps) e observe: makefileCopiarEditar0: Evento LMIC EV_JOINING … 5: Evento LMIC EV_TXCOMPLETE Pacote enviado
  2. No Console da TTN → Application → Data, você verá os uplinks chegando com payload em hex.
image 1 Saravati

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/.