库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 库管理器
- 选择Sketch-> Include Library->Manage Libraries…
- LoRaRF在搜索框中输入。
- 搜索标题LoRaRF为 Chandra Wijaya 的行。
- 单击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 #includeSX126x 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
有关接收操作的更多详细信息,请访问此链接。
例子
执照
该库在MIT 许可下发布。