首頁 > 評測 > 讓LoRa來得更猛烈些吧--B-L072Z-LRWAN1評測

讓LoRa來得更猛烈些吧--B-L072Z-LRWAN1評測

ST   LoRa   B-L072Z-LRWAN1   
  • 作者:netlhx
  • 來源:21ic
  • [導(dǎo)讀]
  • LoRa和NB-IoT是當(dāng)前物聯(lián)網(wǎng)的兩大熱門話題。從技術(shù)、應(yīng)用、費用及現(xiàn)有的解決方案等方面綜合考慮,二者各有千秋。不過芯片廠商卻是忙壞了,忙著推出各自的技術(shù)產(chǎn)品,ST就是如此,一口氣推出五款基于LoRa技術(shù)的評估板,包括b-l072z-lrwan1、I-CUBE-LRWAN1、I-NUCLEO-LRWAN1、P-NUCLEO-LRWAN1及I-NUCLEO-SX1272D,看來準(zhǔn)備打造一個LoRa帝國。

I-CUBE-LRWAN默認(rèn)的LoRa通信參數(shù)如下

#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,帶寬設(shè)置為125KHZ,擴頻因子設(shè)置為7,CODERATE設(shè)置為4/5。

接下來修改回調(diào)函數(shù)onRxDone(),該函數(shù)是接收到信息之后的處理操作,這里主要是顯示接收到溫度信息,添加如下代碼

PRINTF((char *)(Buffer + 4));

PRINTF("\n\r");

PRINTF("OnRxDone\n\r");

PRINTF("RssiValue=%d dBm, SnrValue=%d\n\r", rssi, snr);

注意這里的Buffer+4,這個位置才是數(shù)據(jù)負(fù)載的起始地址,詳細(xì)解說見后文。

B-L072Z-LRWAN1端的設(shè)置就完成了,接下來修改LoRa Hat端的代碼。

LoRa的開發(fā)環(huán)境基于Arduino,使用的RF庫是Radio Head,該庫是SX127X在Arduino上的移植,這里要注意幾處代碼的修改,先看代碼

/* for feather32u4 */

#define RFM95_CS 10

#define RFM95_RST 9

#define RFM95_INT 2

這一段代碼指定LoRa模塊與Arduino的一些硬件接口,如片選引腳、中斷信號源等。

Radio Head默認(rèn)的通信頻率是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函數(shù)在格式化浮點數(shù)時存在BUG,只能先轉(zhuǎn)換為整數(shù)。

現(xiàn)在來解釋下前面的Buffer+4是什么原因,這是一個坑,很深的坑。雖然說出來不值一文錢,但不明白的話,看到的數(shù)據(jù)就是一堆亂碼!

在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在發(fā)送數(shù)據(jù)的時候,會在PAYLOAD前添加4個字節(jié)的信息,包括TO,F(xiàn)ROM,ID及FLAGS,然后才是正式的數(shù)據(jù)負(fù)載,下面是一次實際通信中獲取到的數(shù)據(jù)

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個字節(jié),分別代表了TO, FROM, ID及FLAGS,正式的負(fù)載是從第4字節(jié)開始的!

這樣處理后,通信就沒有障礙了,下面看實際的通信效果

讓LoRa來得更猛烈些吧--B-L072Z-LRWAN1評測6832.png

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

讓LoRa來得更猛烈些吧--B-L072Z-LRWAN1評測6866.png

這是發(fā)送端串口輸出的信息,看到與接收端的信息是一致的。

這就是不同硬件及庫文件帶來的麻煩,所以,如果合適的話,使用兩款同型號的開發(fā)板來進行通信,步驟會少許多,當(dāng)然也沒有這么多驚喜了!

現(xiàn)在還只是兩個結(jié)點之間的通信,純粹的LoRa通信,如果想要實現(xiàn)聯(lián)網(wǎng)的話,需要一個網(wǎng)關(guān),從而實現(xiàn)完整的LoRaWAN通信。

還有兩個問題沒有提及:低功耗及遠(yuǎn)距離。低功耗方面可以參考ST低功耗方面的評測;遠(yuǎn)距離通信方面,本站的評測《完整的LoRa體驗,有這一套就夠了!——LoRa IoT Kit體驗》一文對遠(yuǎn)距離通信做了基本的測試,這里就不再贅述。

LoRa技術(shù)為IoT的應(yīng)用打開了一扇新的大門,應(yīng)用前景非常廣闊。大佬們都已開始布局謀篇,咱們也沒有理由偷懶,雖然B-L072Z-LRWAN1開發(fā)板目前算是小貴(Mouser報價387元RMB),但是為了未來,選擇一款合適的LoRa開發(fā)板,狠有必要!就算不打算深入,了解一下還是也有必要的。

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

  • 本文系21ic原創(chuàng),未經(jīng)許可禁止轉(zhuǎn)載!

網(wǎng)友評論

  • 聯(lián)系人:巧克力娃娃
  • 郵箱:board@21ic.com
  • 我要投稿
  • 歡迎入駐,開放投稿

熱門標(biāo)簽
項目外包 more+