top of page
LoraLogo.png

és una tecnologia de comunicació sense fils, igual que WiFi, Bluetooth ...

També utilitza l'espectre sense llicència de la banda de ràdio ISM.

A Europa, s'utilitza un pla de freqüències sense llicència al voltant dels 868Mhz, mientre que als EUA és 915Mhz, i a Àsia 433Mhz.

LoRa utilitza un tipus de modulació en radiofreqüència anomenat CSS (Chirp Spread Spectrum). Aquesta tecnologia de modulació s'utilitza en comunicacions militars y espacials des de fa molt temps.

El seu gran avantatge és que permet la comunicació de llarg abast de petites quantitats de dades (amplada de banda baixa), alta immunitat a interferències, i mínim consum d'energia.

LoRa-intro.png

Topologies

Podem utilitzar LoRa en comunicació punt a punt o per construir una xarxa LoRa (utilitzant el protocol LoraWAN per exemple).​

lora-topologies.png

En la comunicació punt a punt, dos dispositius habilitats per a LoRa es comuniquen entre si mitjançant senyals de RF.

Això pot ser útil per a intercanviar dades entre dues plaques ESP32 equipades amb xips transceptors (emissor-receptor) LoRa que estiguin relativament lluny entre si o en entorns sense cobertura WiFi, on un dels dos (el receptor) pot fer de pont amb Internet.

lora-wi-fi-bluetooth.png

Els nostres mòduls:

Tenim 2 mòduls de 868Mhz ESP32 LoRa amb pantalla OLED de 0,96" (128x64 px). Overview

Els hem comprat aqui, ens han costat 10,53 € cada un

Crec que no tenen suport per targeta micro SD. N'hi ha mòduls que en tenen. Val la pena?

 

Características:

  • Voltaje de funcionamiento: 3,3 V a 7V

  • Potencia: 1 W

  • Frecuencia: área de aplicación 868 MHz

  • Rango de temperatura de funcionamiento: -40 °C a + 90 °C

  • Tamaño: 53*27*8 mm. Color: negro

  • Velocidad de datos del modo directo: 150Mbps a 11n HT40, 72Mbps a 11nHT20, 54Mbps a 11g y 11Mbps a 11b

  • Potencia de transmisión: 19,5 dBm a 11,5 dB, 16,5 dBm a 11,5 dB, 15.5dBm a 11.5dB

  • Sensibilidad del receptor: hasta-98 dBm

  • UDP dura 135 Mbps

  • La antena tiene que estar conectada a la interfaz IPEX (si la antena no está conectada, el chip LoRa  se puede dañar).

  • Circuito de carga y descarga de la batería de litio. Cuando la batería esté llena, el LED azul dejará de funcionar.

  • Presta atención a los polos positivos y negativos de la batería al usarlo, de lo contrario se dañará.

  • Al usar la entrada de señal táctil de la pantalla táctil del puerto IO, debe agregar un condensador extraíble de 100nF a este pin.

  • Soporta análisis de protocolo de software Sniffer, estación, SoftAP y Wi-Fi

  • Paquete incluido: 1 módulo Bluetooth wifi, 2 conector pin, 1 cable de alimentación, 1 antena

HTB1l_lGKxSYBuNjSspjq6x73VXaB.jpg

Pautes de programació

Les llibreries

Per la OLED calen les llibreries que ja coneixem: Adafruit_SSD1306 library i Adafruit_GFX library.

A més, cal afegir la llibreria LoRa:

install-LoRa-library.png

Exemple

Com a exemple, crearem un remitent LoRa simple i un receptor LoRa.

El remitent enviarà un mensaje de "hola" seguit d'un comptador amb finalitat de proba cada 10 segons. 

Aquest missatge es pot canviar fàcilment amb dades útils com lectures de sensors o notificacions.

Remitent

// llibreries per LoRa:

#include <SPI.h>
#include <LoRa.h>

// llibreries per pantalla OLED:
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

 

// definició dels pins SPI utilitzats pel mòdul LoRa:
#define SCK 5
#define MISO 19
#define MOSI 27
#define SS 18
#define RST 14
#define DIO0 26

 

// definició de la freqüència:
#define BAND 866E6  // Europa: 866E6, Nord Amèrica: 915E6, Asia: 433E6

// definició de la pantalla OLED:
#define OLED_SDA 4
#define OLED_SCL 15 
#define OLED_RST 16
#define ample 128  // amplada pantalla, en pixels
#
define alt 64           // alçada pantalla, en pixels

 

// variable comptador per fer seguiment del num d'enviaments:
int comptador = 0;

// creació de l'objecte pantalla (en aquest cas hi ha pin reset):

Adafruit_SSD1306 oled (ample, alt, &Wire, OLED_RST);

El resultat:
Un cop carregat el codi a la placa, aquesta hauria de començar a enviar paquets LoRa i mostrar els missatges a la pantalla OLED.
TTGO-LoRa-ESP32-Dev-Board-Sender.jpg

void setup ( )

{

  // resetejat inicial de l'OLED
  pinMode (OLED_RST, OUTPUT);
 
digitalWrite (OLED_RST, LOW);
 
delay (20);
 
digitalWrite (OLED_RST, HIGH);

  // inicia la comunicació I2C amb l'OLED
  Wire.begin (OLED_SDA, OLED_SCL);

 

  // inicialització de l'OLED
  if (! oled.begin (SSD1306_SWITCHCAPVCC, 0x3C, false, false))

  // Els paràmetres establerts com a falsos asseguren

      que la llibreria no utilitzi els pins I2C per defecte, sinò els

      pins definits al codi (GPIO 4 i GPIO 15)

  { 
   
Serial.println (F ("SSD1306 allocation failed"));
   
for (;;);  // Don't proceed, loop forever
  }

 

  // mostra missatge inicial a l'OLED
  oled.clearDisplay ( );
 
oled.setTextColor (WHITE);
 
oled.setTextSize (1);
 
oled.setCursor (0,0);
 
oled.print ("LORA SENDER ");
 
oled.display ( );
  

  // per mostrar missatges de testeig pel monitor sèrie:
  Serial.begin (115200);
  
Serial.println ("LoRa Sender Test");

  // inicialització del mòdul LoRa
  SPI.begin (SCK, MISO, MOSI, SS);  // pins SPI del mòdul
  LoRa.setPins (SS, RST, DIO0);  // configuració del mòdul transceptor
  
 
if (LoRa.begin (BAND))

{
   
Serial.println ("Starting LoRa failed!");
   
while (1);
  }

 

  // si la inicialització és correcta, mostra missatges
  Serial.println ("LoRa Initializing OK!");
 
oled.setCursor (0,10);
 
oled.print ("LoRa Initializing OK!");
 
oled.display ( );
 
delay (2000);
}

void loop ( )

{
 
Serial.print ("Sending packet: ");
 
Serial.println (comptador);

  // Send LoRa packet to receiver:
  LoRa.beginPacket ( );
  LoRa.
print ("hello ");
  LoRa.
print (comptador);
  LoRa.
endPacket ( );
  
 
oled.clearDisplay ( );
 
oled.setCursor (0,0);
 
oled.println ("LORA SENDER");
 
oled.setCursor (0,20);
 
oled.setTextSize (1);
 
oled.print ("LoRa packet sent.");
 
oled.setCursor (0,30);
 
oled.print ("Comptador:");
 
oled.setCursor (50,30);
 
oled.print (comptador);      
 
oled.display ( );

  comptador++;
  
 
delay (10000);
}

bottom of page