物联网国赛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://www.toymoban.com/news/detail-858279.html
五、本节资源
链接:https://pan.baidu.com/s/1FhQwd2ataN8Nr-iPDnML7g
提取码:1119文章来源地址https://www.toymoban.com/news/detail-858279.html
到了这里,关于物联网国赛LORA模块开发教程(通用库)——LoRa点对点通信的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!