LoRa 的名字是远距离无线电(Long Range Radio),作为一种线性调频扩频的调制技术,最早由法
国几位年轻人创立的一家创业公司 Cycleo 推出,2012 年 Semtech 收购了这家公司,并将这一调制技术
封装到芯片中,基于 LoRa 技术开发出一整套 LoRa 通信芯片解决方案,包括用于网关和终端上不同款的
LoRa 芯片,开启了 LoRa 芯片产品化之路。
LoRa 是低功耗局域网无线标准,它最大特点就是在同样的功耗条件下比其他无线方式传播的距离更
远,实现了低功耗和远距离的统一,它在同样的功耗下比传统的无线射频通信距离扩大 3-5 倍。
我们在实验中使用的 LoRa 模块是安信可的 Ra01,该模组用于超长距离扩频通信,其射频芯片 SX1278
主要采用 LoRa™远程调制解调器,用于超长距离扩频通信,抗干扰性强,能够最大限度降低电流消耗。借
助 SEMTECH 的 LoRa™专利调制技术,SX1278 具有超过-148dBm 的高灵敏度,+20dBm 的功率输出,传输
距离远,可靠性高。
注意:需要做本章实验,需要
2
块
LoRa
开发板,才能实现一对一
LoRa
通信;三块或者以上开发板,
才能实现一对多通信。
LoRa
模块是接到
STM32
开发板的
SPI 2
上的,通过
STM32
的
SPI2
可以实现数据交互,同时通过
STM32
的
IO
可以读取
LoRa
模块的状态,电路图的接口图如下:
9,LoRa模块,接在spi2上,RESET:PA1,NSS:PB12,SCK:PB13,MISO:PB14,MOSI:PB15,
IO0:PC4,IO1:PB11,IO2:空,IO3:PB10,IO4:PC3,IO5:空
LED2_OFF;
//发送部分
while (1)
{
switch(Radio->Process())//LoRa数据处理
{
case RF_TX_DONE://发送完成
printf("tx done.\r\n");
//闪灯LED2,表示数据发送成功
LED2=!LED2;
break;
case RF_TX_TIMEOUT://发送超时
printf("tx timeout.\r\n");
break;
}
delay_ms(1);
if(counter++>=1000)
{
//一秒闪灯一次,表示程序在运行
LED1=!LED1;
//一秒发送一次递增的数据
counter=0;
tx_index++;
//LCD显示
sprintf(tbuf, "发送:%d", tx_index);
//无线发送数据
sprintf(tbuf, "%d", tx_index);
Radio->SetTxPacket( tbuf, strlen(tbuf));
}
}
//接收部分
Radio->StartRx();//启动接收
while (1)
{
switch(Radio->Process())//LoRa数据处理
{
case RF_RX_TIMEOUT://接收超时
printf("RF_RX_TIMEOUT.\r\n");
Radio->StartRx();
break;
case RF_RX_DONE://接收完成
printf("RF_RX_DONE.\r\n");
//闪灯LED3,表示收到数据
LED2=!LED2;
//取出接收的数据
Radio->GetRxPacket(rbuf,&rlen);
//如果收到数据
if(rlen>0)
{
rbuf[rlen]=0;
//LCD显示接收的数据
sprintf(display_buff, "接收:%s", rbuf);
//串口显示接收的数据
printf("RX:%s.\r\n", rbuf);
//显示接收的到的信号强度
sprintf(display_buff, "rssi:%d", (int)SX1276GetPacketRssi());
}
break;
}
delay_ms(1);
if(counter++>=1000)
{
//一秒闪灯一次,表示程序在运行
LED1=!LED1;
counter=0;
}
}
下面代码链接:https://pan.baidu.com/s/1Re5-sowRpLD1HHPquex5Cw
提取码:vz0q
复制这段内容后打开百度网盘手机App,操作更方便哦