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板一定要装天线!!!**
## 最后
**自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**
**深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。**
**因此收集整理了一份《2024年嵌入式&物联网开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**
![img](https://img-blog.csdnimg.cn/img_convert/ff06deaad930ec306b8f7040adaaddda.png)
![img](https://img-blog.csdnimg.cn/img_convert/89f051bca886ff2751b0cdcf14160283.jpeg)
![img](https://img-blog.csdnimg.cn/img_convert/910e8fdfcdc61d51eec887ab67ec53da.png)
![img](https://img-blog.csdnimg.cn/img_convert/1cc732ac9edc06fa0fee07ba7385acc0.png)
![img](https://img-blog.csdnimg.cn/img_convert/8ed7c08859735c062126dff7e70265b3.png)
![img](https://img-blog.csdnimg.cn/img_convert/2513e3be51f5b86cd0532c33ddc84984.png)
![](https://img-blog.csdnimg.cn/img_convert/3f6787d9137475bea42dfc3c371b04e7.png)
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!**
[**如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!**](https://bbs.csdn.net/topics/618654289)
**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**!!
料的朋友可以戳我获取!!**](https://bbs.csdn.net/topics/618654289)
**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**!!