首页 > 评测 > 让LoRa来得更猛烈些吧--B-L072Z-LRWAN1评测
让LoRa来得更猛烈些吧--B-L072Z-LRWAN1评测
- [导读]
- LoRa和NB-IoT是当前物联网的两大热门话题。从技术、应用、费用及现有的解决方案等方面综合考虑,二者各有千秋。不过芯片厂商却是忙坏了,忙着推出各自的技术产品,ST就是如此,一口气推出五款基于LoRa技术的评估板,包括b-l072z-lrwan1、I-CUBE-LRWAN1、I-NUCLEO-LRWAN1、P-NUCLEO-LRWAN1及I-NUCLEO-SX1272D,看来准备打造一个LoRa帝国。
I-CUBE-LRWAN默认的LoRa通信参数如下
#if defined( USE_BAND_868 )
#define RF_FREQUENCY 868000000 // Hz
#elif defined( USE_BAND_915 )
#define RF_FREQUENCY 915000000 // Hz
#else
#error "Please define a frequency band in the compiler options."
#endif
#define TX_OUTPUT_POWER 23 // dBm
#if defined( USE_MODEM_LORA )
#define LORA_BANDWIDTH 0 // [0: 125 kHz,
// 1: 250 kHz,
// 2: 500 kHz,
// 3: Reserved]
#define LORA_SPREADING_FACTOR 7 // [SF7..SF12]
#define LORA_CODINGRATE 1 // [1: 4/5,
// 2: 4/6,
// 3: 4/7,
// 4: 4/8]
#define LORA_PREAMBLE_LENGTH 8 // Same for Tx and Rx
#define LORA_SYMBOL_TIMEOUT 5 // Symbols
#define LORA_FIX_LENGTH_PAYLOAD_ON false
#define LORA_IQ_INVERSION_ON false
将FREQUENCY_BAND修改为868,带宽设置为125KHZ,扩频因子设置为7,CODERATE设置为4/5。
接下来修改回调函数onRxDone(),该函数是接收到信息之后的处理操作,这里主要是显示接收到温度信息,添加如下代码
PRINTF((char *)(Buffer + 4));
PRINTF("\n\r");
PRINTF("OnRxDone\n\r");
PRINTF("RssiValue=%d dBm, SnrValue=%d\n\r", rssi, snr);
注意这里的Buffer+4,这个位置才是数据负载的起始地址,详细解说见后文。
B-L072Z-LRWAN1端的设置就完成了,接下来修改LoRa Hat端的代码。
LoRa的开发环境基于Arduino,使用的RF库是Radio Head,该库是SX127X在Arduino上的移植,这里要注意几处代码的修改,先看代码
/* for feather32u4 */
#define RFM95_CS 10
#define RFM95_RST 9
#define RFM95_INT 2
这一段代码指定LoRa模块与Arduino的一些硬件接口,如片选引脚、中断信号源等。
Radio Head默认的通信频率是433MHz,这里需要修改为868,所以要添加如下代码
#define RF95_FREQ 868.0
......
rf95.setFrequency(RF95_FREQ))
DHT11温度采集代码如下
temp = DHT.temperature;
Serial.println(temp);
sprintf(radiopacket+13, "%2d.%02d", (int)temp, (int)(temp * 100) % 100) ;
最后一行代码很奇怪,原因是因为Arduino的sprintf函数在格式化浮点数时存在BUG,只能先转换为整数。
现在来解释下前面的Buffer+4是什么原因,这是一个坑,很深的坑。虽然说出来不值一文钱,但不明白的话,看到的数据就是一堆乱码!
在RH_RF95::init()的代码中有这么一段话,挖出来给大家看
// Packet format is preamble + explicit-header + payload + crc
// Explicit Header Mode
// payload is TO + FROM + ID + FLAGS + message data
// RX mode is implmented with RXCONTINUOUS
// max message data length is 255 - 4 = 251 octets
Radio Head在发送数据的时候,会在PAYLOAD前添加4个字节的信息,包括TO,FROM,ID及FLAGS,然后才是正式的数据负载,下面是一次实际通信中获取到的数据
ff ff 00 00 48 65 6c 6c 6f 20 57 6f 72 6c 64 20 23 31 38 33 31 00 20 00
H e l l o W o r l d #
00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 10 21 22 23
注意前面的4个字节,分别代表了TO, FROM, ID及FLAGS,正式的负载是从第4字节开始的!
这样处理后,通信就没有障碍了,下面看实际的通信效果
这是接收端收到的信息及DHT11采集的温度信息,室温27度。
这是发送端串口输出的信息,看到与接收端的信息是一致的。
这就是不同硬件及库文件带来的麻烦,所以,如果合适的话,使用两款同型号的开发板来进行通信,步骤会少许多,当然也没有这么多惊喜了!
现在还只是两个结点之间的通信,纯粹的LoRa通信,如果想要实现联网的话,需要一个网关,从而实现完整的LoRaWAN通信。
还有两个问题没有提及:低功耗及远距离。低功耗方面可以参考ST低功耗方面的评测;远距离通信方面,本站的评测《完整的LoRa体验,有这一套就够了!——LoRa IoT Kit体验》一文对远距离通信做了基本的测试,这里就不再赘述。
LoRa技术为IoT的应用打开了一扇新的大门,应用前景非常广阔。大佬们都已开始布局谋篇,咱们也没有理由偷懒,虽然B-L072Z-LRWAN1开发板目前算是小贵(Mouser报价387元RMB),但是为了未来,选择一款合适的LoRa开发板,狠有必要!就算不打算深入,了解一下还是也有必要的。
-------------全文完------------
- 本文系21ic原创,未经许可禁止转载!
网友评论
- 联系人:巧克力娃娃
- 邮箱:board@21ic.com
- 我要投稿
-
欢迎入驻,开放投稿
-
人均百万?英伟达中国员工收入曝光! 2024-08-29
-
《黑神话:悟空》玩家硬盘升级攻略:提升游戏体验,畅享3A大作 2024-08-29
-
数睿数据参加《系统与软件工程 低代码开发平台通用技术要求》国家标准编制 2024-08-29
- NRF52810蓝牙数字耳机找人定制
预算:¥30005天前
- 125KW模块式PCS软硬件外包开发
预算:¥1100000015小时前
- 12V汽车启动电源项目BMS设计
预算:¥50000023小时前
- 数据可视化软件 开发
预算:¥5000023小时前
- PLC项目调试修改
预算:¥100001天前
- 起动电机控制器开发
预算:¥1100001天前