首页 > 评测 > 让LoRa来得更猛烈些吧--B-L072Z-LRWAN1评测

让LoRa来得更猛烈些吧--B-L072Z-LRWAN1评测

ST   LoRa   B-L072Z-LRWAN1   
  • 作者:netlhx
  • 来源:21ic
  • [导读]
  • 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字节开始的!

这样处理后,通信就没有障碍了,下面看实际的通信效果

让LoRa来得更猛烈些吧--B-L072Z-LRWAN1评测6832.png

这是接收端收到的信息及DHT11采集的温度信息,室温27度。

让LoRa来得更猛烈些吧--B-L072Z-LRWAN1评测6866.png

这是发送端串口输出的信息,看到与接收端的信息是一致的。

这就是不同硬件及库文件带来的麻烦,所以,如果合适的话,使用两款同型号的开发板来进行通信,步骤会少许多,当然也没有这么多惊喜了!

现在还只是两个结点之间的通信,纯粹的LoRa通信,如果想要实现联网的话,需要一个网关,从而实现完整的LoRaWAN通信。

还有两个问题没有提及:低功耗及远距离。低功耗方面可以参考ST低功耗方面的评测;远距离通信方面,本站的评测《完整的LoRa体验,有这一套就够了!——LoRa IoT Kit体验》一文对远距离通信做了基本的测试,这里就不再赘述。

LoRa技术为IoT的应用打开了一扇新的大门,应用前景非常广阔。大佬们都已开始布局谋篇,咱们也没有理由偷懒,虽然B-L072Z-LRWAN1开发板目前算是小贵(Mouser报价387元RMB),但是为了未来,选择一款合适的LoRa开发板,狠有必要!就算不打算深入,了解一下还是也有必要的。

-------------全文完------------

  • 本文系21ic原创,未经许可禁止转载!

网友评论