網(wǎng)站搜索算法免費的鄭州網(wǎng)絡推廣服務
@TOC
一、Lora介紹
Lora不是一種協(xié)議,而是一種基于擴頻通信的射頻技術(shù),它相對于其他射頻技術(shù)比如2.4G或普通433/915M來講,具有更遠的傳輸距離(幾千米)和更強的越障性能。所以我們把一個Lora設(shè)備作為中心點,多個Lora設(shè)備作為節(jié)點可以組成一個范圍達幾千米的星型網(wǎng)絡。
上圖中,中心點和某個節(jié)點的通信流程實現(xiàn)可參考如下模式:
二、例程實現(xiàn)功能介紹
某個Lora節(jié)點每隔2秒主動向中心點發(fā)送一包5字節(jié)的數(shù)據(jù)(1,2,3,4,5),Lora中心點收到后將收到的數(shù)據(jù)每個都加1,作為應答內(nèi)容返回給該節(jié)點。所以當該Lora節(jié)點收到(2,3,4,5,6)時即可判定正確收到了響應。節(jié)點每收到一次正確的響應時LED1燈會閃爍一次作為指示。
Core為Lora功能提供了十分簡單的API函數(shù),只需下面三個函數(shù)即可完成上面的功能。
LIB_LoraConfig()
LIB_LoraRecv()
LIB_LoraSend()
三、接線圖
下圖中Lora中心點和節(jié)點接法一樣。
五、完整代碼
這里只演示了Lora中心點和一個Lora節(jié)點的通信,實際應用中如果中心點需要和多個Lora節(jié)點通信,那么每個Lora節(jié)點的代碼可以都一樣,只需將每個節(jié)點的地址(addr)改成不一樣的即可。同時建議每個節(jié)點的發(fā)送時間周期可以錯開一些。
注意:受Lora模塊硬件資源限制,通信中每包數(shù)據(jù)盡量不要太大,最好10字節(jié)以內(nèi)。且Lora通信節(jié)點個數(shù)也不要超過20個為好。
Lora中心點代碼:
--本機地址(范圍:0-65535),其他Lora節(jié)點如果需要發(fā)送消息給本機必須知道該地址
addr = 100
--通信信道(范圍:410-441MHz),相互通信的Lora節(jié)點必須在同一信道
channel = 433
--無線速率(范圍:0.3, 1.2, 4.8, 9.6, 19.2kpbs),速率越低通信質(zhì)量越高
baudrate = "9.6kpbs"
--發(fā)射功率(范圍:11, 14, 17, 20dB),該值越大通信質(zhì)量越高,但功耗會增加
tx_pwr = "20dB"
--設(shè)置Lora模塊占用TX0、RX0、Aux接D5引腳,Md0接D6引腳
--Lora通信參數(shù):地址=100,通信信道=433M,無線速率=9.6kbps,發(fā)射功率=20dBm
LIB_LoraConfig("UART0","D5","D6",addr,channel,baudrate,tx_pwr)
--開始大循環(huán)
while(GC(1) == true)
do--查詢是否收到數(shù)據(jù),如果收到就應答recv_flag,recv_addr,recv_data = LIB_LoraRecv()if recv_flag == 1 then--將收到的數(shù)據(jù)全部加1作為應答返回給發(fā)送者for i = 1, #recv_data, 1 do recv_data[i] = recv_data[i] + 1endLIB_LoraSend(recv_addr, recv_data)end
end
Lora節(jié)點代碼:
--本機地址(范圍:0-65535),其他Lora節(jié)點如果需要發(fā)送消息給本機必須知道該地址
addr = 101
--通信信道(范圍:410-441MHz),相互通信的Lora節(jié)點必須在同一信道
channel = 433
--無線速率(范圍:0.3, 1.2, 4.8, 9.6, 19.2kpbs),速率越低通信質(zhì)量越高
baudrate = "9.6kpbs"
--發(fā)射功率(范圍:11, 14, 17, 20dB),該值越大通信質(zhì)量越高,但功耗會增加
tx_pwr = "20dB"
--設(shè)置Lora模塊占用TX0、RX0、Aux接D5引腳,Md0接D6引腳
--Lora通信參數(shù):地址=100,通信信道=433M,無線速率=9.6kbps,發(fā)射功率=20dBm
LIB_LoraConfig("UART0","D5","D6",addr,channel,baudrate,tx_pwr)
--配置D8為普通輸出,控制電路板上的LED1
LIB_GpioOutputConfig("D8","STANDARD")
--使能10毫秒定時器開始工作
LIB_10msTimerConfig("ENABLE")
cnt_10ms = 0
--定義10毫秒定時器的回調(diào)函數(shù)
function LIB_10msTimerCallback()cnt_10ms = cnt_10ms + 1
end
--此處延時1秒是為了等待Lora模塊初始化過程完成
LIB_DelayMs(1000)
--開始大循環(huán)
while(GC(1) == true)
do--每2秒向地址為100的中心節(jié)點發(fā)送一包數(shù)據(jù)if cnt_10ms >= 200 thencnt_10ms = 0send_data = {1, 2, 3, 4, 5}LIB_LoraSend(100, send_data)end--查詢是否收到中心節(jié)點應答的數(shù)據(jù)recv_flag,recv_addr,recv_data = LIB_LoraRecv()if recv_flag == 1 then--如果驗證正確,閃爍一次LED1燈if recv_data[1] == 2 and recv_data[2] == 3 and recv_data[3] == 4 and recv_data[4] == 5 and recv_data[5] == 6 thenLIB_GpioToggle("D8")endend
end
六、代碼運行結(jié)果
通過實驗我們可以看到Lora節(jié)點的的LED1燈每2秒鐘閃爍一次,每閃爍一次就表示收到了Lora中心點的正確響應數(shù)據(jù),從而反映出一次發(fā)送和接收流程的正確完成。
下圖為Lora節(jié)點的實拍圖:
更多詳情請參看 shineblink.com官網(wǎng)鏈接