物联网国赛LORA模块开发教程:LoRa点对点通信实践指南

物联网国赛LORA模块开发基础教程(通用库)—点对点通信

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

        LoRa点对点通信与控制实现效果,本次实验主要对Lora点对点通信进行实验,发送端采集光照值显示到oled屏并发送至节点端进行控制,当光照值低于100 lx 时点亮Led2灯,反之熄灭。

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

二、LoRa点对点通用库中函数的简介

1、本次LoRa点对点实验用到的库   

在main.c文件中添加 LoRa 通用库头文件 #include "NS_Radio.h"

#include "NS_Radio.h"
#include "sx1276.h"

2、LoRa模块的初始化

// 开发板平台初始化
void Init()
{
    BoardInitMcu();
    BoardInitPeriph();
    keys_init();                                   //按键初始化
    OLED_Init();                                   //OLED初始化     
    setTimer2Callback(Time2Handler);
    Tim2McuInit(1);                                //定时器初始化,设置定时中断1ms中断一次
                           
    NS_RadioInit( 433300110, 16, 1000 ,1000);      //LORA模块初始化     
}


//通用库里面讲解的很详细
/**********************************************************************************************
*函数:void NS_RadioInit( uint32_t freq, int8_t power, uint32_t txTimeout, uint32_t rxTimeout)
*功能:对射频模块发送、接收参数进行初始化
*输入:
*			freq载波频率,建议433MHz附近频率最佳
*			power发射功率,最大20
*			txTimeout发送超时时间
*			uint32_t rxTimeout 接收超时时间
*输出:无
*特殊说明:无
**********************************************************************************************/
void NS_RadioInit( uint32_t freq, int8_t power, uint32_t txTimeout, uint32_t rxTimeout)
{
	 NS_RadioEventsInit();//无线射频模块注册事件回调函数
     NS_RadioSetTxRxConfig( freq, power, txTimeout );
	 Radio.Rx( rxTimeout );//设置LoRa模块为接收模式,同时设置超时时间,必许步骤
}

三、代码实现

1、发送端

//发送光照值【发送端】
uint16_t gz_val=0;                        //ADC的值,需为整形或浮点型,字符型会导致数据上限
uint8_t lora_send_data[3];                //无线接收数据的数组,数组长度任意,不超过255即可
uint8_t oled_data[10];                    //OLED屏幕数据的数组,数组长度任意,不超过255即可
void send(void)                           //发送函数
{
    AdcScanChannel();                     //查询ADC
    gz_val=AdcReadCh0()*250;              //读取ADC通道0函数读取到电压值并*250进行转化得到光照值赋给gz_val
    sprintf((char*)lora_send_data,"%d",gz_val);  //对无线发送数据的数组进行处理
    SX1276Send(lora_send_data,3);                //无线发送数据SX1276Send(发送内容,字节数)
    sprintf((char*)oled_data,"%d  ",gz_val);     //lx后需加两个空格(lx为光照强度的单位),否则屏幕不会清除原先显示的数据
    OLED_ShowString(0,0,oled_data);              //显示OLED屏幕数据
	GpioToggle(&Led1);                           //通讯指示灯
}

2、节点端

【补充】

该函数的格式为 :int atoi(const char* str)

atoi()函数将数字格式的字符串转换为整数类型。例如,将字符串“12345”转换成数字12345。

//接收光照值【节点端】
uint8_t lora_recieve_data[255];       //无线接收数据的数组,数组长度必须为255
uint8_t oled_data[10];                //OLED屏幕数据的数组,数组长度任意,不超过255即可
uint16_t gz_val=0;                    //无线数据的值,需为整形或浮点型,字符型会导致数据上限
void receive()              //接收函数
{
	ReadRadioRxBuffer( (uint8_t *)lora_recieve_data);    //无线接收数据
	gz_val=atoi((const char *)lora_recieve_data);        //将无线数据字符串转换为整形
	               
	sprintf((char*)oled_data,"%d lx  ",gz_val);    //格式化OLED屏幕数据,lx为光照强度的单位
	OLED_ShowString(0,0,oled_data);                      //显示OLED屏幕数据
	if(gz_val<100)                                       //判断无线数据的值
	{
		GpioWrite(&Led2,0);
	}
	if(gz_val>100)                                      //判断无线数据的值
	{
		GpioWrite(&Led2,1);
	}
    GpioToggle(&Led1);                           //通讯指示灯
	memset(lora_recieve_data, 0, 255);           //清空(数组)无线数据,不清空则数据会溢出  
}

【注意】发送端和节点段尽量发送字符,到节点端进行转换,减少出错!!!

四、【特别注意】

        发送端LoRa板和节点端LoRa板一定要装天线!!!

        发送端LoRa板和节点端LoRa板一定要装天线!!!

        发送端LoRa板和节点端LoRa板一定要装天线!!!

        可以提升两点之间通信信号的稳定。

五、本节资源

链接:https://pan.baidu.com/s/1FhQwd2ataN8Nr-iPDnML7g 
提取码:1119

作者:IT小Qi

物联沃分享整理
物联沃-IOTWORD物联网 » 物联网国赛LORA模块开发教程:LoRa点对点通信实践指南

发表评论