Lora实战

来自Jack's Lab
跳转到: 导航, 搜索

目录

1 Lora 简介和资料

Lora 联盟

SX1276/77/78/79 DataSheet

Lora 窄带, 低速, 低功耗, 远距离. 支持扩频/跳频通讯. 抛开高大上的 LoraWan不谈, 作为一个低速 Lan, 桥接传感器尤其适合.

在此仅以 Arduino_精要 作为控制器介绍Lora快速原型项目以及遇到的实际问题.

Arduino-lora-demo.jpg

2 Lora 开源项目和驱动

Arduino以其丰富的生态, 几乎任意传感器/外围都是 copy/paste 模式即可达到demo目的, 在此之上项目即可高速启动.

Lora开源项目中 法国 波城大学(University of Pau) C. Pham 创始的Low Cost Lora GateWay项目做到了基本完善的Demo, 可以作为项目参考. Low Cost Lora GateWay 以树梅派作为网关, Arduino 作为传感器采集端, 实现了上下行, 带应答通讯, Lora CAD(通道活动侦测)等特性.

Low Cost Lora GateWay 项目采用的驱动原型是Lora Shield Arduino 驱动. 此驱动仅支持1278, C. Pham在 Low Cost Lora GateWay 扩展了驱动的支持, 使其支持SX1272/76/78/79全系列芯片, 并扩展了报文应答.

需要注意, 这是一个Poll(轮询)模式的驱动. 没有中断, 适合big loop. 对于强大的CPU, 一个线程轮询一个芯片即可. 对于Arduino, 这似乎够用, 尤其是Lora的速度不快, 传感器也不需要密集上报数据的情况.


3 调试步骤和建议

在完成硬件连接后(可以先用杜邦线连接Arduino和模块), 可以开启debug, 修改文件 SX1272.h 如下选项:

 
#define SX1272_debug_mode 1 //change from 0 to 1


如果出现异常, 首先要检查读出的 硬件版本信息. 可以加一个打印信息, 看看到硬件版本确切值. 位于件SX1272.cpp 中的函数 SX1272::ON() 中. 这是驱动复位芯片后的第一个动作.

如果版本读取不正确, 请检查硬件连接, SPI配置.

如版本正确, 一般驱动就可以工作了. 下一步可以检查输出. 用微功率计检查输出功率. 如无功率, 但是驱动又报告发送正常,一般应该是芯片配置问题, 请打开或者关闭PABOOST配置.

4 Lora 问题和解决

4.1 驱动用到的引脚

LowCostGW- Arduino Client Demo 中使用的驱动, Aruino UNO下, 实际上使用了如下的引脚. 但是其文档却未指明Reset和NSS (SPI CS)的使用情况,这将直接导致SPI无法工作. 特别是采用了LowCostGW没有宣称支持的模块时, 这里要着重检查.

 Reset 线接:3
 NSS(CS)接:2
 MOSI接:11
 MISO接:12
 CK(SCK)接:13


还有极为重要的是, 驱动并未设置Reset和NSS的引脚模式,请在 setup中加入以下两行作为初始化:

 

    #define SX1272_SS 2
    #define SX1272_RST 3

    pinMode(SX1272_SS, OUTPUT);
    pinMode(SX1272_RST, OUTPUT);

4.2 ACK模式

LowCost GW 实现的ACK模式工作并非特别稳定, 建议不使用, 而采用APP层自己的应答措施. 驱动采用延迟一定时间的方式等待发送方切换到接收模式, 不是很可靠.


  • CRC错误

Arduino GW 此工程是LowCost Lora GW 项目的Arduino网关, 只要修复了驱动引脚的问题, 网关可以运行. 当信号弱, CRC校验开启时, 网管会Reset SX1278/1272 收发器. 这段逻辑明显不合适, 需要删除. 请禁如下代码:

 
         if (e==2) {
#if 0    //特别是在信号弱的情况下, CRC错误返回值也是2, 导致这里判断混乱
             // Power OFF the module
             sx1272.OFF();
             radioON=false;
             PRINT_CSTSTR("%s","^$Resetting radio module");
             PRINTLN;
             e = sx1272.ON();
             PRINT_CSTSTR("%s","^$Setting power ON: state ");
             PRINT_VALUE("%d",e);
             PRINTLN;
#endif
             if (!e) {
               radioON=true;
               startConfig();
             }
             // to start over
             status_counter=0;
             e=1;
         }

4.3 驱动和PA选择

Sx1278-PA.jpg

如果驱动设置一切看起来正常, 但是发射距离又特别的短, 这是比较典型的PA设置错误. Lora 1278收发器又3个不同的 PA(射频功放), 只要宣称了支持20dBm发射功率的, 都需要打开 PABOOST 编译选项, 使驱动正确选用连接PA_BOOST引脚的PA.


4.4 转接板问题

如果购买了带转接板的邮票模块, 有时候因为品质控制不良, 导致接收不稳定, GW一直出现 error, 或者在没有信号的时候也出现收到未知报文, 这预示着此模块可能有焊接问题. 本人就遇到了这样的模块. 解决办法是补焊,并去除多余的焊锡,然后用无水酒精清洗PCB, 最终问题解决.

个人工具
名字空间

变换
操作
导航
工具箱