https://github.com/chandrawi/LoRaRF-Arduino

LoRa-RF Arduino 库

Arduino LoRa-RF 库,用于使用带有 Semtech SX126x 系列、SX127x 系列或 LLCC68 的 LoRa 模块发送和接收数据。该库通过连接 SPI 端口和一些 I/O 引脚来工作。支持在 LoRa 和 FSK 调制上配置频率、调制参数、发射功率、接收增益和其他射频参数,还支持使用中断信号处理发射和接收。
本自述文件是为快速入门指南编写的。访问此链接以获取完整文档。

硬件兼容性

理论上,所有使用 SX126x 系列(SX1261、SX1262、SX1268)、SX127x 系列(SX1272、SX1276、SX1277、SX1278、SX1279)或 LLCC68 的 LoRa 模块都可以使用该库兼容。使用 SPI 与 LoRa 模块接口的 Arduino LoRa 开发板在理论上也兼容。
一些已经测试并确认兼容的 LoRa 模块是:

  • 亿字节:E19-433M20SC、E19-915M20S、E19-433M30S、E19-915M30S、E22-400M22S、E22-900M22S、E22-400M30S、E22-900M30S
  • HopeRF:RFM95W、RFM96W、RFM98W

请注意,LoRa 模块使用 3.3V 作为电源和 I/O 端口。我必须小心将 5V arduino 连接到 LoRa 模块。

安装

使用 Arduino IDE 库管理器

  1. 选择Sketch-> Include Library->Manage Libraries…
  2. LoRaRF在搜索框中输入。
  3. 搜索标题LoRaRF为 Chandra Wijaya 的行。
  4. 单击Install按钮以安装库。

    使用 Git

    在 Arduino 库文件夹中打开终端、Git bash 或命令提示符,然后运行以下命令。windows 的默认库文件夹是C:\Users{username}\Documents\Arduino,linux 的默认库文件夹是~/Documents/Arduino/libraries/.
    git clone https://github.com/chandrawi/LoRaRF-Arduino.git

    初始化

    要使用该库,首先您必须包含SX126x标题或SX127x标题,具体取决于您使用的 LoRa 模块。对于 LLCC68,包括 SX126x 接头。然后通过创建一个对象来初始化标题中的类。
    // for SX126x series or LLCC68 #include SX126x LoRa; // for SX127x series #include SX127x LoRa;
    在调用任何配置方法之前,进行发送或接收操作必须调用begin()方法。您可以begin()在 Arduinosetup()函数中调用方法。
    void setup() { LoRa.begin(); // configuration code goes here } void loop() { // transmit and receive operation goes here }

    硬件配置

    接线连接

    RESETarduino 和 LoRa 模块之间必须连接电源管脚、SPI 管脚和管脚。对于 SX126x 系列和 LLCC68,BUSY还必须连接一个引脚。如果您想使用中断操作,您可以连接DIO0SX127x 系列和 SX126x 系列的DIO1, DIO2, 或DIO3引脚之一。如果您的 LoRa 模块有这些引脚,您还应该连接TXEN和RXEN引脚。
    用于连接 SX126x 和 SX127x 的默认 Arduino 引脚如下。
Semtech SX126x Semtech SX127x 阿杜诺
VCC VCC 3.3V
接地 接地 接地
SCK SCK SCK
味噌 味噌 味噌
莫西 莫西 莫西
NSS NSS 10
重置 重置 9
忙碌的 4
DIO1 DIO0 -1(未使用)
TXEN TXEN -1(未使用)
RXEN RXEN -1(未使用)

SPI端口配置

setSPI()在方法之前更改 Arduino 默认 SPI 端口或 SPI 频率调用begin()方法。
LoRa.setSPI(SPI2, F_CPU/2); LoRa.begin();

I/O 引脚配置

要配置 I/O 引脚(NSS、RESET、BUSY、IRQ、TXEN、RXEN 引脚),请在方法setPins()之前调用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();

调制解调器配置

在发送或接收操作之前,您可以配置发送功率和接收增益或匹配频率、调制参数、数据包参数,并与您要通信的其他 LoRa 设备同步字。

发射功率

// 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);

传输操作

传输操作从调用beginPacket()方法开始,然后write()是编写要传输的包的方法,并以调用endPacket()方法结束。例如,传输“HeLoRa World!” 消息和增量计数器,您可以使用以下代码。
// 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();
有关传输操作的更多详细信息,请访问此链接

接收操作

接收操作从调用request()方法开始,然后read()是读取接收包的方法。available()方法可用于获取剩余包的长度。例如,要在最后一个字节中接收消息和计数器,您可以使用以下代码。
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 byte
有关接收操作的更多详细信息,请访问此链接

例子

请参阅SX126xSX127x简单网络实现的示例。

执照

该库在MIT 许可下发布。

贡献者

Chandra Wijaya Sentosa < chandra.w.sentosa@gmail.com >