La biblioteca Arduino Lora-RF utilizada para transmitir y recibir datos utilizando el módulo Lora con la serie SEMTech SX126X, la serie SX127X o LLCC68. La biblioteca funciona interfaciendo el puerto SPI y algunos pines de E/S. Soporte para configurar la frecuencia, el parámetro de modulación, la potencia de transmisión, la ganancia de recepción y otros parámetros de RF en la modulación Lora y FSK también admiten la transmisión y la recepción de la señal de interrupción.
Este readMe está escrito para la guía de inicio rápido. Visite este enlace para obtener documentación completa.
Teóricamente, todos los módulos LORA utilizando la serie SX126X (SX1261, SX1262, SX1268), la serie SX127X (SX1272, SX1276, SX1277, SX1278, SX1279), o LLCC68 será compatible usando esta biblioteca. La Junta de Desarrollo de Arduino Lora, que se interrumpió con el uso de SPI a un módulo Lora, también teáricamente compatible.
Algunos módulos Lora que ya probaron y confirmaron compatibles son:
Tenga en cuenta que los módulos Lora usan 3.3V para la fuente de alimentación y los puertos de E/S. Me importa que me tome por conectar 5V Arduino al módulo Lora.
Sketch -> Include Library -> Manage Libraries...LoRaRF en el cuadro de búsqueda.LoRaRF por Chandra Wijaya.Install para instalar la biblioteca. Abra la terminal, la bash git o el símbolo del sistema en la carpeta de la biblioteca Arduino y luego ejecute el siguiente comando. La carpeta de biblioteca predeterminada para Windows es C:Users{username}DocumentsArduino y para Linux es ~/Documents/Arduino/libraries/ .
git clone https://github.com/chandrawi/LoRaRF-Arduino.git Para trabajar con la biblioteca, primero debe incluir el encabezado SX126x o el encabezado SX127x dependiendo del módulo Lora que use. Para LLCC68 incluye el encabezado SX126X. Luego inicialice la clase en el encabezado creando un objeto.
// for SX126x series or LLCC68
# include < SX126x.h >
SX126x LoRa;
// for SX127x series
# include < SX127x.h >
SX127x LoRa; Antes de llamar a los métodos de configuración, la operación de transmisión o recepción debe llamar al método begin() . Puede llamar al método begin() dentro de la función Arduino setup() .
void setup () {
LoRa. begin ();
// configuration code goes here
}
void loop () {
// transmit and receive operation goes here
} Los pasadores de potencia, los pasadores SPI y el pasador RESET deben estar conectados entre el módulo Arduino y Lora. Para la serie SX126X y LLCC68, también se debe conectar un pin BUSY . Si desea utilizar la operación de interrupción, puede conectar DIO0 para la serie SX127X y uno de PIN DIO1 , DIO2 o DIO3 para la serie SX126X. También debe conectar pines TXEN y RXEN si su módulo Lora tiene esos alfileres.
Los pines Arduino predeterminados utilizados para conectarse a SX126X y SX127X son los siguientes.
| Semtech sx126x | Semtech sx127x | Arduino |
|---|---|---|
| VCC | VCC | 3.3V |
| Gnd | Gnd | Gnd |
| Sck | Sck | Sck |
| Miso | Miso | Miso |
| Mosi | Mosi | Mosi |
| NSS | NSS | 10 |
| REINICIAR | REINICIAR | 9 |
| OCUPADO | 4 | |
| Dio1 | Dio0 | -1 (sin usar) |
| Txen | Txen | -1 (sin usar) |
| Rxen | Rxen | -1 (sin usar) |
Para cambiar el puerto SPI predeterminado de Arduino o el método de llamada SPI de frecuencia setSPI() antes de begin() el método.
LoRa.setSPI(SPI2, 16000000 );
LoRa.begin(); Para configurar pines de E/S (NSS, Restablecer, ocupado, IRQ, TXEN, PIN RXEN) setPins() antes del método begin() .
// set NSS->10, RESET->9, BUSY->4, DIO1->2, TXEN->8, RXEN->7 for SX126x series
LoRa.setPins( 10 , 9 , 2 , 4 , 8 , 7 );
// set NSS->10, RESET->9, DIO0->2, TXEN->8, RXEN->7 for SX127x series
LoRa.setPins( 10 , 9 , 2 , 8 , 7 );
LoRa.begin();Antes de transmitir o recibir operación, puede configurar la alimentación de transmisión y recibir ganancia o frecuencia de coincidencia, parámetro de modulación, parámetro de paquete y sincronizar Word con otro dispositivo Lora que desea comunicar.
// set transmit power to +22 dBm for SX1262
LoRa.setTxPower( 22 , SX126X_TX_POWER_SX1262);
// set transmit power to +20 dBm for SX127x series using boost pin
LoRa.setTxPower( 20 , SX127X_TX_POWER_PA_BOOST); // set receive gain to power saving
LoRa.setRxGain(LORA_RX_GAIN_POWER_SAVING);
// set receive gain to boosted and AGC on for SX127x series
LoRa.setRxGain(LORA_RX_GAIN_BOOSTED, true ); // Set frequency to 915 Mhz
LoRa.setFrequency( 915000000 ); // set spreading factor 8, bandwidth 125 kHz, coding rate 4/5, and low data rate optimization off
LoRa.setLoRaModulation( 8 , 125000 , 5 , false ); // set explicit header mode, preamble length 12, payload length 15, CRC on and no invert IQ operation
LoRa.setLoRaPacket(LORA_HEADER_EXPLICIT, 12 , 15 , true , false ); // Set syncronize word for public network (0x3444)
LoRa.setSyncWord( 0x3444 ); Operación de transmisión Comience con llamar al método beginPacket() siguiendo mediante el método write() para escribir el paquete para ser tansmitido y terminado con el método de callar endPacket() . Por ejemplo, para transmitir "Helora World!" mensaje y un contador de incrementos que puede usar el siguiente código.
// message and counter to transmit
char message[] = " HeLoRa World! " ;
uint8_t counter = 0 ;
LoRa.beginPacket();
LoRa.write(message, sizeof (message)); // write multiple bytes
LoRa.write(counter++); // write single byte
LoRa.endPacket();
LoRa.wait();Para obtener más detalles sobre la operación de transmisión, visite este enlace.
Operación de recepción Comience con el método de request() de llamada () siguiendo mediante el método read() para leer el paquete recibido. El método available() se puede usar para obtener la longitud del paquete restante. Por ejemplo, para recibir el mensaje y un contador en Last Byte, puede usar el siguiente código.
LoRa.request();
LoRa.wait();
// get message and counter in last byte
const uint8_t length = LoRa.available() - 1 ;
char message[length];
uint8_t i= 0 ;
while (LoRa.available() > 1 ){
message[i++] = LoRa. read (); // read multiple bytes
}
uint8_t counter = LoRa.read(); // read single bytePara obtener más detalles sobre la operación de recepción, visite este enlace.
Consulte ejemplos para SX126X, SX127X e implementación de red simple.
Chandra Wijaya Sentosa <[email protected]>