文章目錄
一、概述
二、接線
三、燒錄(測試程序)
四、AT指令
五、通信測試
六、遠程燈控(開關)
七、遠程燈控(指定設備)
01、概述
安信可 LoRa 系列模塊,用于超長距離擴頻通信,抗干擾性強,能夠最大限度降低電流消耗,高靈敏度,傳輸距離遠,可靠性高。(以下教程以安信可Ra-01、Ra-01H、Ra-02為例)
02、接線
如下是Ra-01,Ra-01H,Ra-02對應51測試板的接線:
(LoRa模塊上的8線分別與測試板上的,如下圖所示)
| LoRa模塊 | MCU |
|---|---|
| NSS | CSN |
| MOSI | MOSI |
| MISO | MISO |
| SCK | SCK |
| RESET | CE |
| DIO0 | IRQ |
| 3.3V | VCC |
| GND | GND |
03、燒錄(測試程序)
(本測試程序是使用51系列的單片機開發的,僅提供測試參考用于驗證模塊的性能與良好,如需在此程序上進行二次開發,則不提供源碼編寫支持)
示例固件燒錄
示例固件下載地址(https://docs.ai-thinker.com/lora)
測試板燒錄方法
●用串口工具連接51測試板RX,TX,GND,連接方法如下圖所示(燒錄時請對應相應的單片機型號,此程序對應的單片機為為安信可提供的STC15W408AS型號)。

●軟件下載請到官網上(http://www.stcmcu.com/)下載
●打開STC-ISP工具,點擊檢測MCU選項,模塊會自動完成軟件配置
●點擊“打開程序文件”,選擇MCU的Hex固件,注意輸入用戶程序運行時的IRC頻為22.1184MHz
●點擊下載編程后工具會將所選擇的固件燒錄到單片機里,此時完成下載(注:如果點擊監測和下載工具界面無反應,那么請嘗試點擊以后進行一次復位啟動)

示例固件測試
固件下載完成后,請重新復位測試板。
插上LoRa轉接板,此測試必須要兩塊測試板,一塊用來發送,另外一塊用來接收。
當模塊上電時不做任何操作,則LoRa模塊進入接收模式。當其中一個測試板按下按鍵,模塊進入發送模式,模塊右邊的燈會亮起,另外一個模塊處于接收模塊,如果收到數據,左邊的燈會閃爍。

按照如圖所示,在測試板上接入USB轉TTL工具,打開串口可以收到模塊發送的打印信息
04、AT指令
(本次測試基本參數均為出廠默認參數,均采用Ra-06的出廠固件,在測試串口時,需配置串口默認波特率9600,偶校驗才能進行數據收發和AT指令測試)
AT 指令采用基于 ASCII 碼的命令行,命令格式如下:
請求消息格式為:AT+[OPTION][para, …][r][n]。可以不加換行符(rn)!
AT指令分為如下幾塊:
(1)基本執行指令
(2)系統參數設置指令
(3)LoRa參數配置設置指令
(4)數據傳輸格式指令
詳細的指令語法以及參數調配請參照如下鏈接中的AT指令文檔:
https://docs.ai-thinker.com/_media/ra-06_at_command-20191104.pdf
05、通信測試
(本次測試基本參數均為出廠默認參數,均采用Ra-06的出廠固件,在測試串口時,需配置串口默認波特率9600,偶校驗才能進行數據收發和AT指令測試,測試時請加裝符合規格參數的天線,否則可能導致數據傳輸錯誤或者無法通信)
點對點通信
步驟一(主機):
AT+ADDR=2 //設置本機主機地址為2
AT+TADDR=3 //設置目標地址為3
步驟二(節點1):
AT+ADDR=3 //設置本機主機地址為2
AT+TADDR=1 //設置目標地址為1
AT+RECV=1 //接收數據
步驟三(主機):
AT+MSG=Ai-Tinker //主機發送數據

一對多廣播通信測試示例
步驟一(主機):
AT+ADDR=1 //設置本機主機地址為1
AT+TADDR=65535 //設置目標地址為廣播地址
步驟二(節點1):
AT+ADDR=2 //設置本機主機地址為2
AT+TADDR=1 //設置目標地址為1
AT+RECV=1 //接收數據
步驟三(節點2):
AT+ADDR=3 //設置本機主機地址為2
AT+TADDR=1 //設置目標地址為1
AT+RECV=1 //接收數據
步驟四(主機):
AT+MSG=1234567890 //主機發送數據

06、遠程燈控(開關)
來深度解析一下Lora在照明設備中的應用原理。做過或者接觸過物聯網設備開發的朋友應該比較清楚,無線模塊在這個行業中所占的比重,無線控制其實就是A端發送一個信號,B端收到以后做出相應動作的一個過程。
設備組成
今天用的設備比較簡單,就是入門級的STC主控MCU,2個含SX1278芯片的Ra-01模塊,2根彈簧天線。
安信可淘寶店是默認一個Ra-01模組配送一根433MHz彈簧天線的,很方便。 推薦bug一個!另外生成的HEX文件,用串口燒錄。
遠程燈控(開關)
原理分析
目前手上有兩個同樣的設備,燒錄同樣的程序,程序運行在MCU中,通過外接的SPI驅動Ra-01射頻模塊發射和接收數據,接收端接收到這個數據做出響應,實現一個遠程控制燈開和關的方案。
基本通信
首先需要兩個模組間能夠進行通信,代碼中需要編輯發射機以及接收機;
這里定義出接收機和發送機的邏輯代碼,完成發送和接收,這部分直接放在了主函數中了,可以把它放在單獨文件中這樣就便于觀察條理了。
else {
P32 = 1;
RF_EX0_STATUS = SX1276ReadBuffer( REG_LR_IRQFLAGS);
if (RF_EX0_STATUS > 0) {
if ((RF_EX0_STATUS & 0x40) == 0x40) {
CRC_Value = SX1276ReadBuffer( REG_LR_MODEMCONFIG2);
if (CRC_Value & 0x04 == 0x04) {
SX1276WriteBuffer(REG_LR_FIFOADDRPTR, 0x00);
SX1278_RLEN = SX1276ReadBuffer(REG_LR_NBRXBYTES);
lpTypefunc.lpSwitchEnStatus(enOpen);
lpTypefunc.lpByteWritefunc(0x00);
for (RF_REC_RLEN_i = 0; RF_REC_RLEN_i < SX1278_RLEN;RF_REC_RLEN_i++) {
recv[RF_REC_RLEN_i] = lpTypefunc.lpByteReadfunc();
}
lpTypefunc.lpSwitchEnStatus(enClose);
recv[RF_REC_RLEN_i] = '';
RF_RECEIVE();
uartSendString(recv);
P17 = 0;
}
}
else if ((RF_EX0_STATUS & 0x04) == 0x04) {
if ((RF_EX0_STATUS & 0x01) == 0x01) { //表示CAD 檢測到擴頻信號 模塊進入了接收狀態來接收數據
SX1276LoRaSetOpMode(Stdby_mode);
SX1276WriteBuffer(REG_LR_IRQFLAGSMASK, IRQN_RXD_Value); //打開發送中斷
SX1276WriteBuffer(REG_LR_HOPPERIOD, PACKET_MIAX_Value);
SX1276WriteBuffer( REG_LR_DIOMAPPING1, 0X02);
SX1276WriteBuffer( REG_LR_DIOMAPPING2, 0x00);
SX1276LoRaSetOpMode(Receiver_mode);
}
else {
SX1276LoRaSetOpMode(Stdby_mode);
SX1276WriteBuffer(REG_LR_IRQFLAGSMASK,IRQN_SEELP_Value); //打開發送中斷
SX1276WriteBuffer( REG_LR_DIOMAPPING1, 0X00);
SX1276WriteBuffer( REG_LR_DIOMAPPING2, 0X00);
SX1276LoRaSetOpMode(Sleep_mode);
//PA_SEELP_OUT();
}
}
else {
SX1276LoRaSetOpMode(Stdby_mode);
SX1276WriteBuffer(REG_LR_IRQFLAGSMASK, IRQN_RXD_Value); //打開發送中斷
SX1276WriteBuffer(REG_LR_HOPPERIOD, PACKET_MIAX_Value);
SX1276WriteBuffer( REG_LR_DIOMAPPING1, 0x02);
SX1276WriteBuffer( REG_LR_DIOMAPPING2, 0x00);
SX1276LoRaSetOpMode(Receiver_mode);
}
RF_REC_RLEN_i = 0;
SX1276WriteBuffer( REG_LR_IRQFLAGS, 0xff);
Delay1s(300);
} else {
P17 = 1;
}
}
編輯通信內容代碼
定義兩組通信,分別為內容分別為1和2,這個對應后面邏輯中的兩個按鍵。
SX1276WriteBuffer( REG_LR_IRQFLAGS, 0xff);
FUN_RF_SENDPACKET("1",1);
Delay1s(1000);
SX1276WriteBuffer( REG_LR_IRQFLAGS, 0xff);
SX1276WriteBuffer( REG_LR_IRQFLAGS, 0xff);
FUN_RF_SENDPACKET("2",1);
Delay1s(1000);
SX1276WriteBuffer( REG_LR_IRQFLAGS, 0xff);
應用層邏輯設計
如上所示,通信步驟就完成了,接下來就是觸發邏輯以及響應邏輯的應用層代碼了,這一部分需要結合應用設備功能來設計,硬件資源一共有10個LED和兩個按鍵,就以目前資源來來做一個按鍵控制燈的邏輯。
按照原理圖定義IO口
#ifndef __GPIO_H #define __GPIO_H #define KEY P30 #define KEY2 P31 #define led P16 #define led2 P35 #define UART_TX_PIN P31
按鍵控制邏輯
if (P30 == 0) {
P17 = 1;
P32 = 0;
SX1276WriteBuffer( REG_LR_IRQFLAGS, 0xff);
FUN_RF_SENDPACKET("1",1);
Delay1s(1000);
SX1276WriteBuffer( REG_LR_IRQFLAGS, 0xff);
}
else if (P31 == 0) {
P17 = 1;
P32 = 0;
SX1276WriteBuffer( REG_LR_IRQFLAGS, 0xff);
FUN_RF_SENDPACKET("2",1);
Delay1s(1000);
SX1276WriteBuffer( REG_LR_IRQFLAGS, 0xff);
}
if(recv[0] == '1')
{
P35 = ~P35;
}
else if(recv[0] == '2')
{
P16=0;
P35=1;
}
至此就完成了遠程控制燈開關的邏輯編寫了,利用提供的源碼稍作修改就能做出這個效果。
07、遠程燈控(指定設備)
原理分析
上述的設備應用在實際場景中已經能做到星型組網,但是這個組網的通信方式就不是很符合燈控設備的控制邏輯。
因為在上述所寫的代碼中,這個設備是全頻段通信的,也就是說同一個固件,燒錄在不同設備中,只要按下按鍵,所有的設備都會響應。
所以接下來做的操作就是在這個代碼的基礎上做出修改讓主控可以隨意控制多個設備。一對多單個控制方式很多,先來做一種最簡單的方法,按鍵A控制發射在470頻段,按鍵B控制發送在480頻段。
主機代碼
下面是計算好的頻段
unsigned char Frequency[3] = { 0x6c, 0x80, 0x00 };//470Mhz
//unsigned char Frequency[3] = { 0x6c, 0x80, 0x00 };//430Mhz 頻率設置
//unsigned char Frequency[3] = { 0x6c, 0x80, 0x12 };//475.5Mhz 頻率設置
//unsigned char Frequency[3] = { 0x78, 0x10, 0x00 };//480.25Mhz 頻率設置
//unsigned char Frequency[3] = { 0x78, 0x20, 0x00 };//480.5Mhz 頻率設置
在按鍵B處定義出按鍵數組,表示按下按鍵B模塊跳到480頻段發送數據2
} else if (P31 == 0) {
Frequency[0] = 0x78;
Frequency[1] = 0x20;
Frequency[2] = 0x00;
SX1276LoRaSetRrequency();
SX1276WriteBuffer( REG_LR_IRQFLAGS, 0xff);
FUN_RF_SENDPACKET("2",1);
Delay1s(1000);
SX1276WriteBuffer( REG_LR_IRQFLAGS, 0xff);
}
#define IRQN_TXD_Value 0xF7 #define IRQN_RXD_Value 0x9F #define IRQN_CAD_Value 0xFA #define IRQN_SEELP_Value 0xFF #define PACKET_MIAX_Value 0xff extern unsigned char Frequency[3];
從機代碼
在這里,要單獨生成480和470頻段的接收機代碼固件,分別燒錄到我們的從機模塊中,我們只要控制以下代碼段就可以完成對不同頻段的控制效果。(這里的從機代碼,我們可以直接使用第一節中的燈控代碼即可)
unsigned char Frequency[3] = { 0x6c, 0x80, 0x00 };//470Mhz
//unsigned char Frequency[3] = { 0x6c, 0x80, 0x00 };//430Mhz 頻率設置
//unsigned char Frequency[3] = { 0x6c, 0x80, 0x12 };//475.5Mhz 頻率設置
//unsigned char Frequency[3] = { 0x78, 0x10, 0x00 };//480.25Mhz 頻率設置
//unsigned char Frequency[3] = { 0x78, 0x20, 0x00 };//480.5Mhz 頻率設置
總結
第一步:要確保能夠通信,然后在通信的基礎上再來對收到的值進行判斷,并且做出相對的輸出結果(控制燈的方案),到這里完成了最主要的內容——通信部分。
第二步:考慮需要實現的一個主機控制不同的設備,這樣可以把從機工作在不同頻段,主機切換頻段來完成通信。
審核編輯 黃宇
-
遠程控制
+關注
關注
4文章
727瀏覽量
37043 -
LoRa
+關注
關注
355文章
1887瀏覽量
238009
發布評論請先 登錄
學習單片機快速方法
什么是WiFi遠程控制模塊?技術特點和應用場景有哪些?
助力工業物聯網升級,智能遠程控制系統功不可沒
智能照明控制開關模塊,WiFi通訊,遠程調控照明效果
50A磁保持遠程控制模塊是什么設備
新概念51單片機C語言教程入門、提高、開發、拓展全攻略
使用單片機驅動多組LED燈實現呼吸效果電路
智慧路燈如何實現遠程控制?
如何快速搭建遠程控制燈LoRa智能燈控(51單片機篇)?
評論