【LoRa点对点通信与控制】

一、LoRa点对点通信与控制实现效果

LoRa通信与控制

二、LoRa通信与控制的要求

  • (1)根据竞赛提供的频率信息配置LoRa频率;
  • (2)设备上电,默认情况下两个LoRa模块上的LED1和LED2灯都是熄灭的,且显示如下图在这里插入图片描述
  • (3)每按一次Key2键可以控制LoRa(A)屏幕中的小箭头以LED1开 --> LED2关
    –> LED2关 --> LED2开 --> LED1开这样的顺序循环切换小箭头指示。每按一次Key3键可以控制LoRa(A)屏幕中的小箭头以LED1开 --> LED1关 --> LED1开 --> LED2关 --> LED1开这样的顺序循环切换小箭头指示。效果如下图所示:在这里插入图片描述
  • (4)当LoRa(A)中选中某个灯开或者关时,点击Key4键,可以控制LoRa(B)中对应LED1或者LED2的常亮或者熄灭。
  • (5)LoRa(B)要根据自己模块中LED1灯或LED2灯的亮起或熄灭使用不同的图片或动画来表示。

三、重点代码剖析

1、配置频率与初始化LoRa模块

#define RF_PING_PONG_FREQUENCY                      433300000 //载波频率,建议433MHz附近频率最佳

//初始化LoRa模块
NS_RadioInit( (uint32_t) RF_PING_PONG_FREQUENCY, (int8_t) TX_OUTPUT_POWER, (uint32_t) TX_TIMEOUT_VALUE, (uint32_t) RX_TIMEOUT_VALUE);

二、设备上电,LoRa(A)和LoRa(B)的初始界面代码

  1. LoRa(A)模块的代码
/**********************************************************************************************
*函数:void OLED_InitView()
*功能:Lora液晶初始化
*输入:无
*输出:无
*特殊说明:无
**********************************************************************************************/
void OLED_InitView(void)
{
  OLED_Clear();
  OLED_ShowString(0,0, (uint8_t *)" LED1:");
  OLED_ShowCHineseArray( 64, 0, kai);		//通过取模工具对“开”、“关”取模
  OLED_ShowCHineseArray( 96, 0, guan);
  OLED_ShowString(0,4, (uint8_t *)" LED2:");
  OLED_ShowCHineseArray( 64, 4, kai);
  OLED_ShowCHineseArray( 96, 4, guan);
}
  1. LoRa(B)模块的代码
/**********************************************************************************************
*函数:void OLED_InitView()
*功能:Lora液晶初始化
*输入:无
*输出:无
*特殊说明:无
**********************************************************************************************/
void OLED_InitView(void)
{
  OLED_Clear();
  OLED_DrawBMP(16,1,40,40,mie);
  OLED_DrawBMP(64,1,40,40,mie);
  OLED_ShowString(16,6, (uint8_t *)" LED1");
  OLED_ShowString(64,6, (uint8_t *)" LED2");
  
}

三、对LoRa(A)模块按键进行设计算法

-(1)Key2的按键算法:
在这里插入图片描述

  • (2)Key3的按键算法:
    在这里插入图片描述

五、LoRa(A)模块的主函数参考

int main( void )
{
  Init();
  //初始化需要的外设
  OLED_Init();
  OLED_Clear();
  OLED_InitView();//OLED屏幕初始化信息
  keys_init();
  //LoRa模块初始化
  NS_RadioInit( (uint32_t) RF_PING_PONG_FREQUENCY, (int8_t) TX_OUTPUT_POWER, (uint32_t) TX_TIMEOUT_VALUE, (uint32_t) RX_TIMEOUT_VALUE);
    while( 1 )
    {
   	key2Show();	//点击Key2键的算法
   	key3Show();	//点击Key3键的算法
   	LoRa_sendCmd();	//点击Key4键向LoRa(B)发送命令
    }
}

六、LoRa(B)模块的主函数参考

/**
 * Main application entry point.
 */
int main( void )
{
    Init();
 
  //初始化需要的外设
  OLED_Init();
  OLED_Clear();
  OLED_InitView();//OLED屏幕初始化信息
  USART1_Init(115200);//串口1初始化
  uint8_t RxBuffer[16];
  //LoRa模块初始化
  NS_RadioInit( (uint32_t) RF_PING_PONG_FREQUENCY, (int8_t) TX_OUTPUT_POWER, (uint32_t) TX_TIMEOUT_VALUE, (uint32_t) RX_TIMEOUT_VALUE);
    while( 1 )
    {
   	LoRa_readCmd(RxBuffer);  //接收LoRa发送的命令,并控制LED1和LED2的亮灭,控制OLED的状态显示
    }
}

四、实现源码获取方式

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>