【LoRa点对点通信与控制】

LoRa点对点通信与控制

  • 一、LoRa点对点通信与控制实现效果
  • 二、LoRa通信与控制的要求
  • 三、重点代码剖析
    • 1、配置频率与初始化LoRa模块
    • 2、设备上电,LoRa(A)和LoRa(B)的初始界面代码
    • 3、对LoRa(A)模块按键进行设计算法
    • 4、LoRa(A)模块的主函数参考
    • 5、LoRa(B)模块的主函数参考
  • 四、实验总结和重点
    • 1、按要求配置LoRa的频率,一般在在433MHz左右;
    • 2、汉字和小箭头的取模以及在在OLED屏特定位置的显示;
    • 3、按下按键Key2、Key3小箭头切换选项的算法实现;
    • 4、按下Key2和Key3不会互相影响,并实现箭头当前位置的传递;
    • 5、LoRa(A)和LoRa(B)通信消息的==加密==传递,并确定LoRa(B)接收到的是LoRa(A)无线传输的信息,需进行验证(高级);
  • 五、实现源码获取方式

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

LoRa通信与控制

二、LoRa通信与控制的要求

  • (1)根据竞赛提供的频率信息配置LoRa频率;
  • (2)设备上电,默认情况下两个LoRa模块上的LED1和LED2灯都是熄灭的,且显示如下图【LoRa点对点通信与控制】_第1张图片
  • (3)每按一次Key2键可以控制LoRa(A)屏幕中的小箭头以LED1开 --> LED2关
    –> LED2关 --> LED2开 --> LED1开这样的顺序循环切换小箭头指示。每按一次Key3键可以控制LoRa(A)屏幕中的小箭头以LED1开 --> LED1关 --> LED1开 --> LED2关 --> LED1开这样的顺序循环切换小箭头指示。效果如下图所示:【LoRa点对点通信与控制】_第2张图片
  • (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);

2、设备上电,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");
  
}

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

-(1)Key2的按键算法:
【LoRa点对点通信与控制】_第3张图片

  • (2)Key3的按键算法:
    【LoRa点对点通信与控制】_第4张图片

4、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)发送命令
    }
}

5、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的状态显示
    }
}

四、实验总结和重点

1、按要求配置LoRa的频率,一般在在433MHz左右;

2、汉字和小箭头的取模以及在在OLED屏特定位置的显示;

3、按下按键Key2、Key3小箭头切换选项的算法实现;

4、按下Key2和Key3不会互相影响,并实现箭头当前位置的传递;

5、LoRa(A)和LoRa(B)通信消息的加密传递,并确定LoRa(B)接收到的是LoRa(A)无线传输的信息,需进行验证(高级);

五、实现源码获取方式

  • 私信方式
  • 到LoRa通讯与控制资源下载

你可能感兴趣的:(物联网竞赛单片机应用开发,单片机,stm32,嵌入式硬件,物联网,经验分享)