Criar uma rede de sensores LoRa é uma das formas mais eficientes de monitorar variáveis ambientais em locais distantes ou sem infraestrutura de internet. Essa abordagem combina sensores de baixo consumo com comunicação de longo alcance, ideal para aplicações em agricultura, cidades inteligentes, automação residencial e monitoramento ambiental.
Neste projeto, usamos dois modelos do Arduino Uno R4 para construir uma rede de sensores sem fio: o Uno R4 Minima atua como nó transmissor, coletando dados de sensores ambientais e enviando via LoRa; já o Uno R4 WiFi funciona como receptor e gateway, recebendo os dados e encaminhando para a Arduino Cloud, onde são exibidos em um painel online.
A rede integra dois sensores populares: o BME680, que mede temperatura, umidade, pressão e qualidade do ar, e o BH1750, para medição de luminosidade. Ao final, o sistema é capaz de coletar e exibir essas informações em tempo real, acessíveis de qualquer lugar com conexão à internet.

Este passo a passo cobre desde a montagem e programação dos dispositivos até a criação do dashboard na nuvem, servindo como base para projetos mais complexos e escaláveis com tecnologia LoRa.
Materiais necessários
Para este projeto você vai precisar de:
- Arduino Uno R4 Minima (nó transmissor)
- Arduino Uno R4 WiFi (receptor/gateway)
- Módulo LoRa 915 MHz (SX1276) – dois módulos (um em cada Arduino)
- Sensor BME680 (temperatura, umidade, pressão e qualidade do ar)
- Sensor BH1750 (nível de luminosidade)
- Jumpers macho-macho
- Protoboard
- Cabo USB tipo C
Circuito da rede de sensores LoRa
A seguir estão os esquemas de ligação para cada um dos Arduinos utilizados no projeto.
- Transmissor (Arduino Uno R4 Minima): Responsável por ler os dados dos sensores e enviá-los via LoRa.

Os sensores BME680 e BH1750 compartilham o mesmo barramento I2C. O Arduino lida com isso automaticamente se os endereços forem diferentes (como é o padrão).
- Receptor (Arduino Uno R4 WiFi): Recebe os dados LoRa e envia para a Arduino Cloud via Wi-Fi.
Importante: o módulo LoRa deve ser alimentado com 3.3V, não 5V. Verifique a compatibilidade antes de ligar.
Configuração e teste dos sensores da rede LoRa
Antes de integrar tudo na rede LoRa, é importante garantir que os sensores estão funcionando corretamente de forma independente. Neste projeto, utilizamos dois sensores conectados via barramento I2C: o BH1750 para luminosidade e o BME680 para temperatura, umidade, pressão e qualidade do ar.
Os testes a seguir devem ser feitos utilizando o Arduino Uno R4 Minima, já que ele atuará como nó transmissor.
Teste do sensor BH1750 (Luminosidade)
O sensor BH1750 mede a intensidade de luz em lux, que é a unidade padrão para iluminação percebida. A conexão é simples via I2C.
Biblioteca necessária:
- BH1750 (Disponível via Gerenciador de Bibliotecas da IDE Arduino)
Código de exemplo:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
#include <Wire.h> #include <BH1750.h> BH1750 lightMeter; void setup() { Serial.begin(115200); Wire.begin(); lightMeter.begin(); Serial.println("Sensor BH1750 iniciado"); } void loop() { float lux = lightMeter.readLightLevel(); Serial.print("Luminosidade: "); Serial.print(lux); Serial.println(" lux"); delay(1000); } |
Teste do Sensor BME680 (Temperatura, Umidade, Pressão e Gás)
O BME680 é um sensor completo que fornece múltiplas variáveis ambientais. Ele também se comunica via I2C.
Bibliotecas necessárias:
- Adafruit BME680
- Adafruit Sensor
Ambas podem ser instaladas pelo Gerenciador de Bibliotecas da IDE Arduino.
Código de exemplo:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
#include <Wire.h> #include <Adafruit_Sensor.h> #include <Adafruit_BME680.h> Adafruit_BME680 bme; void setup() { Serial.begin(115200); if (!bme.begin()) { Serial.println("Sensor BME680 não encontrado."); while (1); } bme.setTemperatureOversampling(BME680_OS_8X); bme.setHumidityOversampling(BME680_OS_2X); bme.setPressureOversampling(BME680_OS_4X); bme.setGasHeater(320, 150); // 320°C por 150ms } void loop() { if (!bme.performReading()) { Serial.println("Falha na leitura do BME680"); return; } Serial.print("Temperatura: "); Serial.print(bme.temperature); Serial.println(" °C"); Serial.print("Pressão: "); Serial.print(bme.pressure / 100.0); Serial.println(" hPa"); Serial.print("Umidade: "); Serial.print(bme.humidity); Serial.println(" %"); Serial.print("Resistência dos Gases: "); Serial.print(bme.gas_resistance / 1000.0); Serial.println(" kΩ"); Serial.println("--------------------"); delay(2000); } |
Se tudo estiver funcionando corretamente, os valores serão exibidos no monitor serial a cada 2 segundos.
Comunicação LoRa da rede de sensores
Com os sensores já testados e funcionando, é hora de integrar os dados à comunicação LoRa. Utilizamos dois módulos LoRa 915 MHz baseados no chip SX1276, conectados a dois Arduinos: o Uno R4 Minima (transmissor) e o Uno R4 WiFi (receptor).
A biblioteca utilizada para a comunicação é a LoRa.h, desenvolvida pela comunidade Arduino e compatível com a maioria dos módulos LoRa baseados no SX127x.
O transmissor coleta os dados dos sensores, os organiza em uma mensagem de texto (por exemplo, CSV ou JSON simples), e envia essa string via LoRa. O receptor aguarda essa mensagem, interpreta os dados e os exibe (ou, no nosso caso, envia para a Arduino Cloud).
Biblioteca necessária:
- LoRa (Disponível via Gerenciador de Bibliotecas da IDE Arduino)
Código do transmissor (Uno R4 Minima)
Este código lê os dados dos sensores BH1750 e BME680 e envia via LoRa.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
#include <Wire.h> #include <Adafruit_Sensor.h> #include <Adafruit_BME680.h> #include <BH1750.h> #include <SPI.h> #include <LoRa.h> // Pinos LoRa #define SS 10 #define RST 9 #define DIO0 2 BH1750 lightMeter; Adafruit_BME680 bme; void setup() { Serial.begin(115200); Wire.begin(); lightMeter.begin(); if (!bme.begin()) { Serial.println("Sensor BME680 não encontrado."); while (1); } bme.setTemperatureOversampling(BME680_OS_8X); bme.setHumidityOversampling(BME680_OS_2X); bme.setPressureOversampling(BME680_OS_4X); bme.setGasHeater(320, 150); LoRa.setPins(SS, RST, DIO0); if (!LoRa.begin(915E6)) { Serial.println("Erro ao iniciar LoRa"); while (1); } Serial.println("Transmissor LoRa iniciado"); } void loop() { if (!bme.performReading()) { Serial.println("Erro na leitura do BME680"); return; } float temperatura = bme.temperature; float umidade = bme.humidity; float pressao = bme.pressure / 100.0; float gas = bme.gas_resistance / 1000.0; float luz = lightMeter.readLightLevel(); // Monta mensagem no formato CSV String mensagem = String(temperatura, 2) + "," + String(umidade, 2) + "," + String(pressao, 2) + "," + String(gas, 2) + "," + String(luz, 2); LoRa.beginPacket(); LoRa.print(mensagem); LoRa.endPacket(); Serial.print("Enviado: "); Serial.println(mensagem); delay(5000); // Aguarda antes do próximo envio } |
Código do receptor (Uno R4 WiFi)
Este código escuta os pacotes LoRa, separa os dados e exibe no monitor serial. A versão final também enviará esses dados para a Arduino Cloud (ver próxima seção).
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
#include <SPI.h> #include <LoRa.h> // Pinos LoRa #define SS 10 #define RST 9 #define DIO0 2 void setup() { Serial.begin(115200); LoRa.setPins(SS, RST, DIO0); if (!LoRa.begin(915E6)) { Serial.println("Erro ao iniciar LoRa"); while (1); } Serial.println("Receptor LoRa iniciado"); } void loop() { int packetSize = LoRa.parsePacket(); if (packetSize > 0) { String mensagem = LoRa.readString(); Serial.print("Recebido: "); Serial.println(mensagem); // Aqui, os dados podem ser processados e enviados à nuvem // (implementaremos isso na próxima seção) } } |
Integração com a Arduino Cloud
Com os dados sendo recebidos via LoRa no Arduino Uno R4 WiFi, o próximo passo é conectá-lo à Arduino Cloud. Isso permite visualizar os valores em tempo real em um painel online, acessível de qualquer dispositivo com internet.
A Arduino Cloud é uma plataforma da própria Arduino para monitoramento remoto de dispositivos, com suporte a dashboards, histórico de dados, e integração com automações.
- Cadastro e preparação na Arduino Cloud:
- Acesse: https://cloud.arduino.cc;
- Crie uma conta (ou faça login);
- Vá em Devices > Add Device;
- Escolha Arduino Uno R4 WiFi;
- Conecte seu Arduino via cabo USB e siga as instruções na tela para registrá-lo.
- Criação do “Thing”:
Na Arduino Cloud, um Thing é o conjunto de variáveis e configurações do seu dispositivo.
- Vá em Things > Create Thing;
- Dê um nome ao seu projeto (ex: LoRaSensorReceiver);
- Adicione o dispositivo registrado;
- Em Network, configure o Wi-Fi com seu SSID e senha;
- Em Add Variables, crie as variáveis que deseja visualizar, como:

- Código no Arduino Uno R4 WiFi (Receptor)
Após salvar as variáveis, clique em Sketch. A Arduino Cloud vai gerar automaticamente um arquivo chamado thingProperties.h. O código principal pode ser adaptado assim:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
#include <SPI.h> #include <LoRa.h> #include "thingProperties.h" // Pinos LoRa #define LORA_SS 10 #define LORA_RST 9 #define LORA_DIO0 2 void setup() { Serial.begin(9600); delay(1500); // Inicializa Arduino Cloud initProperties(); ArduinoCloud.begin(ArduinoIoTPreferredConnection); setDebugMessageLevel(2); ArduinoCloud.printDebugInfo(); // Inicializa LoRa LoRa.setPins(LORA_SS, LORA_RST, LORA_DIO0); if (!LoRa.begin(915E6)) { Serial.println("Erro ao iniciar LoRa."); while (1); } Serial.println("Receptor conectado à LoRa e Cloud."); } void loop() { ArduinoCloud.update(); // Atualiza os dados na Cloud int packetSize = LoRa.parsePacket(); if (packetSize) { String received = ""; while (LoRa.available()) { received += (char)LoRa.read(); } Serial.println("Recebido: " + received); // Esperado: "T:22.17,P:1025.52,U:55.45,G:9.53,LUX:108.2" parseDados(received); } } void parseDados(String data) { int tIndex = data.indexOf("T:"); int pIndex = data.indexOf(",P:"); int uIndex = data.indexOf(",U:"); int gIndex = data.indexOf(",G:"); int lIndex = data.indexOf(",LUX:"); if (tIndex == -1 || pIndex == -1 || uIndex == -1 || gIndex == -1 || lIndex == -1) { Serial.println("Formato de dados inválido."); return; } temperatura = data.substring(tIndex + 2, pIndex).toFloat(); pressao = data.substring(pIndex + 3, uIndex).toFloat(); umidade = data.substring(uIndex + 3, gIndex).toFloat(); gas = data.substring(gIndex + 3, lIndex).toFloat(); luz = data.substring(lIndex + 5).toFloat(); Serial.print("T: "); Serial.println(temperatura); Serial.print("P: "); Serial.println(pressao); Serial.print("U: "); Serial.println(umidade); Serial.print("G: "); Serial.println(gas); Serial.print("LUX: "); Serial.println(luz); } void onTemperaturaChange() { } void onPressaoChange() { } void onUmidadeChange() { } void onGasChange() { } void onLuzChange() { } |
- Dashboard
- Vá em Dashboards > Build Dashboard;
- Adicione widgets (gauge, chart, label etc.);
- Vincule cada variável do seu Thing ao respectivo widget;
- Personalize cores, ícones e unidades.

Resultados da rede de sensores LoRa
Com a rede de sensores LoRa configurada, foi possível transmitir dados ambientais de forma confiável entre dois pontos, mesmo sem conexão direta com a internet no transmissor. A informação coletada pelos sensores BH1750 e BME680 chega ao Arduino Uno R4 WiFi e é imediatamente disponibilizada na nuvem por meio da plataforma Arduino Cloud.
Esse tipo de arquitetura, com um nó sensor e um nó gateway, é comum em sistemas distribuídos de monitoramento ambiental. Além da simplicidade da implementação, o alcance do LoRa e o suporte à nuvem tornam esse modelo ideal para aplicações reais em campo.

A estrutura criada neste projeto pode ser facilmente ampliada para cenários mais complexos:
- Adicionar mais nós transmissores: basta replicar o código e sensores em outros Arduinos com LoRa.
- Armazenamento local: incluir um módulo SD para registrar os dados mesmo em locais sem acesso à internet.
- Notificações e automações: integrar com serviços como IFTTT ou webhooks da Arduino Cloud.
- Visualização avançada: usar ferramentas como Node-RED, Grafana ou dashboards personalizados para tratamento de dados.
- Sensores alternativos: incluir sensores de solo, UV, CO₂, movimento ou qualquer outro dado relevante ao projeto.
Conclusão
Neste tutorial, mostramos como montar uma rede de sensores LoRa com Arduino, integrando sensores ambientais e luminosidade à nuvem de forma prática e confiável. A combinação entre o alcance do LoRa e a conectividade da Arduino Cloud torna esse tipo de solução acessível e versátil para diferentes aplicações.
Com esse projeto como base, é possível seguir explorando e expandindo sua própria rede de sensores conforme as necessidades do ambiente ou estudo.
Tem alguma dúvida, sugestão ou quer dividir sua experiência com a gente? Deixe seu comentário aqui embaixo, vamos adorar saber! Aproveite e siga nosso Instagram para conferir mais conteúdos como este.