LoRa通信应用开发【保姆级】+LoRa网关节点汇聚传感器数据!!!

目录

前言

项目目标

参考案例

硬件选择

新大陆——LoRa开发板

新大陆——温湿度传感器

 新大陆——光照传感器 ​编辑

代码讲解

1.定义网络编号和设备地址

2.设计请求命令结构

3.对有效数据提取、过滤和校验

4.数据显示

5.平台初始化及中断设定

6.重新定义进程函数

7.最终函数

代码汇总

编译结果

实现效果

LoRa模块OLED显示数据

位机显示传感器位置

云平台数据上报

1.网关连接

2.新建项目

3.添加设备

(1)设备标识名

 (2)确认ApiKey是否生成或有效

4.配置物联网网关接入云平台

数据上报查询

实时显示数据


前言

项目目标

基于LoRa网关节点能够实现温湿度、光照的数值实时采集,通过串口打印数据、OLED屏幕显示数据和云平台数据的接收。

参考案例

结合下面两篇文章(分别为温湿度、光照数据的实现)与本次项目实现结合!

LoRa通信应用开发【保姆级】+LoRa网关节点汇聚传感器数据!!!_第1张图片


硬件选择

新大陆——LoRa开发板

新大陆——温湿度传感器

LoRa通信应用开发【保姆级】+LoRa网关节点汇聚传感器数据!!!_第2张图片

 新大陆——光照传感器 


代码讲解

本次讲解代码为主要核心代码,不对全部代码进行深度讲解。代码各模块代码讲解也可参考温湿度和光照节点采集的文章。

1.定义网络编号和设备地址

#define MY_NET_ID 0x0138 //网络ID
#define ADDR_MIN 1 //最小起始地址
#define ADDR_MAX 2 //最大终结地址

2.设计请求命令结构

/*
	定义函数LoRa_SendRead();
*/
void LoRa_SendRead(uint16_t NetId , uint8_t addr){
	uint8_t TxBuffer[BUFFER_SIZE];
	TxBuffer[0] = START_HEAD;
	TxBuffer[1] = CMD_READ ;
	TxBuffer[2] = (uint8_t)(NetId>>8);
	TxBuffer[3] = (uint8_t)NetId;
	TxBuffer[4] = addr;
	TxBuffer[5] = CheckSum((uint8_t *)TxBuffer , 5);
	Radio.Send(TxBuffer , 6);
}

3.对数据进行有效数据提取和过滤,并做校验

void LoRa_DataParse(uint8_t *LoRaRxBuf, uint16_t len){
	uint8_t *DestData = NULL;
	#define HEAD_DATA *DestData
	#define CMD_DATA *(DestData+1)
	#define NETH_DATA *(DestData+2)
	#define NETL_DATA *(DestData+3)
	#define ADDR_DATA *(DestData+4)
	
	#define ACK_DATA  *(DestData+5)
	#define LEN_DATA  *(DestData+6)
	#define DATASTAR_DATA  *(DestData+7)
	
	DestData = ExtractCmdframe((uint8_t *)LoRaRxBuf , len , START_HEAD);
	if(DestData != NULL){
		if((DestData - LoRaRxBuf) > (len - 6)) return;
		if(CMD_DATA != CMD_READ) return;
		if(CheckSum((uint8_t *)DestData ,6+DestData[6]) != (*(DestData+6+(*(DestData+6))))) return;
		if(((((uint16_t)NETH_DATA)<<8)+NETL_DATA) != MY_NET_ID) return;
		
		//传感数据显示到OLED屏上
		char OledBuf[32];
		memset (OledBuf, ' ',32);
		memcpy (OledBuf+1, &DATASTAR_DATA, (LEN_DATA-1)>30?30:(LEN_DATA-1));
		OLED_ShowString(0,4, (uint8_t *)OledBuf);
#ifndef TRANSPARENCY
		//打印接收到的信息到调试助手
		char output[BUFFER_SIZE*5]={0};
		memset(output,'\0', BUFFER_SIZE*5);
		GetHexStr((uint8_t *)LoRaRxBuf, len, (uint8_t *)output);
		printf("收到%d个字节的LoRa无线数据:%s\r\n" ,len,(const char *)output);
		//提取响应数据中的传感数据
		uint8_t StrBuf[BUFFER_SIZE*5] = {0};
		memset (StrBuf, '\0', BUFFER_SIZE*5);
		memcpy(StrBuf, &DA

你可能感兴趣的:(LoRa通信应用开发,服务器,网络,LoRa,嵌入式硬件)