LORA-B1 实现点对点通信

lora 电子创客营 973次浏览 已收录 0个评论 扫描二维码
LORA-B1 实现点对点通信

上一节针对lora的驱动移植工作已经完成,而本节就要实现lora-b1开发板的点对点通信。一块儿板子作为发送端,另一块儿作为接收端。上电以后发送端每个500ms发送一次数据,接收端接收到以后进行解析分析如果和发送的数据一样LED进行一次亮灭切换。

开发环境准备:

硬件:

  • Lora-B1开发板两块(一发一收)
  • DAPLINK(或STLINK、Jlink)调试器

软件:

  • stm32cubemx
  • MDK5
  • 基于上节移植好驱动的代码

修改Lora参数配置:

Sx1278芯片无线通信支持lora、fsk、ook等通信模式。而我们就只讨论lora模式下的配置,而针对lora模式又有很多参数可以配置。

打开sx1276-lora.c文件,如下图所示地方就是默认的参数配置,这里一共有13个参数,而我们要修改lora模式下通信参数也是在这里修改。

LORA-B1 实现点对点通信

这13个参数从上到下分别表示:

  • 无线通信频率
  • 功率
  • 带宽
  • 扩频因子
  • 纠错码
  • CRC校验开关
  • 隐藏头部信息开关
  • 接收单次模式、连续模式配置
  • 跳频模式开关
  • 跳频之间的周期长度
  • 发送包超时时间
  • 接收包超时时间
  • 负载信息长度

无线通信频率,我们使用的是sx1278芯片,和sx1276芯片在频率上有区别,所以这里我们要配置在sx1278范围内的频率。可参考下图:

LORA-B1 实现点对点通信

扩频因子可能不太好理解,可以简单的先理解为lora的一种提高传输可靠性的技术,其他参数不变的情况下扩频因子越大,传输固定量数据需要的时间越长,抗干扰性越好。相反,扩频因子越小,传输的速度快但抗干扰性会降低。

关于跳频我们本节不会使用,所以把跳频可以关掉。

还有个单次接收和连续接收的配置,我们把他修改为连续接收,也就是一直处于接收状态。在一定时间内没有收到数据也不会产生接收超时。

所以最终我们需要在默认值的基础上修改两个参数,频率改为429000000;RxSingleOn设置为0即为连续接收模式。

编写lora发送接收应用:

一上电初始化完成之后进入while循环,发送端会每500ms发送一包数据,发送完成LED闪烁一次。

接收端接收到数据以后,进行比对,如果和发送端发送的数据一样就让led闪烁一次。

代码如下:

int main(void)
{
  /* USER CODE BEGIN 1 */
	uint16_t counter=0;
	uint8_t rbuf[10];
	uint16_t rlen;
  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_SPI1_Init();
  /* USER CODE BEGIN 2 */
	tRadioDriver *radio;
	radio = RadioDriverInit( );
	radio->Init();
	radio->StartRx();
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {

		switch(radio->Process())
		{
			case RF_RX_DONE:
				radio->GetRxPacket(rbuf,&rlen);
				if(memcmp(rbuf,"12345",rlen)==0)
				{
					HAL_GPIO_TogglePin(LED_GPIO_Port,LED_Pin);
				}
				break;
			case RF_TX_DONE:
				radio->StartRx();
				HAL_GPIO_TogglePin(LED_GPIO_Port,LED_Pin);
				break;
		}
		HAL_Delay(1);
		counter++;
		if(counter==500)
		{
			if(loratx==1)
			{
				radio->SetTxPacket( "12345", 5);
			}
			counter=0;			
		}
		
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

实验结果:

分别把发送端程序和接收到程序烧录到两块儿LORA-B1开发板。上电可以看到两块儿板上led等都开始闪烁,当按下发送端板子复位按键停止运行时,接收端的LED也不再会闪烁。


转载请注明转自电子创客营:LORA-B1 实现点对点通信! 了解我们点击这里
喜欢 (3)or分享 (0)
电子创客营
关于作者:

您必须 登录 才能发表评论!