Lora通信应用开发

article/2025/3/16 8:04:04

概述:

1.了解Lora技术的基本知识

2.了解通信协议用途

3.掌握Lora模块SPI配置方法

4.掌握简单的Lora模块数据对传方法

5.掌握Lora通讯协议使用方法

一、什么是LoRa

LoRa(Long Range Radio,远距离无线电)是一种基于扩频技术的远距离无线传输技术,是LPWAN通信技术中的一种,是Semtech公司创建的低功耗局域网无线标准。这一方案为用户提供一种简单的能实现远距离、低功耗无线通信的手段。它最大的特点就是在同样的功耗条件下比其他无线方式传播的距离更远,实现了低功耗和远距离的统一,它在同样的功耗下比传统的无线射频通信距离扩大3~5倍。目前,LoRa主要在ISM频段运行,主要包括433MHz、868MHz、915MHz等。
2.LoRa的特性
传输距离:城镇中可达2~5km,郊区可达15km;
工作频率:ISM 频段,包括433MHz、868MHz、915MHz等;
标准:IEEE 802.15.4g;
调制方式:基于扩频技术,是线性调制扩频(CSS)的一个变种,具有前向纠错(FEC)能力,是Semtech公司私有专利技术;
容量:一个LoRa网关可以连接成千上万个LoRa节点;
电池寿命:长达10年;
安全:AES128加密;
传输速率:几十到几百kbit/s,速率越低传输距离越长。

二、Lora和LoraWAN

        Lora是LoraWAN的一个子集,Lora仅包括物理层定义,LoraWAN包括链路层定义。其实LoraWAN不是完整的通通信协议,因为他只定义了物理层和链路层,网络层和传输层没有,功能也并不完善,也没有漫游,没有组网管理等通信协议重要功能。

三、Lora模块

采用的LSD4RF-2F717N30是LoRa SX1278 470M100mW标准模块,是基于Semtech射频集成芯片SX127X的射频模块,是一款高性能物联网无线收发器。

1.SX1276/77/78收发器

        SX1276/77/78是137~1020MHz低功耗远距离收发器,主要采用LoRa远程调制解调器,用于超长距离扩频通信,抗干扰性强,能够最大限度地降低电流消耗。
借助Semtech的LoRa专利调制技术,SX1276/77/78采用低成本的品体和物料即可获得超过-148dBm的高灵敏度。此外,高灵敏度与20dBm功率放大器的集成便这些器件的链路预算达到了行业领先水平,成为远距离传输和对可靠性要求极高的应用的最佳选择。相较传统调制技术,LoRa调制技术在抗阻塞和选择性方面也具有明显优势,解决了传统设计方案无法同时兼顾距离、抗干扰和功耗的问题。
这些器件还支持WM-BusIIEEE 802.15.4g等系统的高性能(G)FSK模式。与同类器件相比,SX1276/77/78在大幅降低电流消耗的基础上,还显著优化了相位噪声、选择性、接收机线性度、三阶输人截取点(IIP3)等各项性能。
SX1276的带宽范围为7.8~500kHz,扩频因子为6~12,并覆盖所有可用频段。SX1277的带宽和频段范围与SX1276相同,但扩频因子为6~9。SX1278的带宽和扩频因子选择与SX1276相同,但仅覆盖UHF频段。
(1)关键产品特性
LoRa调制解调器;
最大链路预算可达168dB;
20dBm-100mW电压变化时恒定的射频功率输出;
14dBm的高效率功率放大器;
可编程比特率高达300kbit/s;
高灵敏度:低至-148dBm;
高可靠性的前端:IIP3=-11dBm;
卓越的抗阻塞特性;
9.9mA 低接收电流,200nA寄存器保持电流;
分辨率为61Hz、完全集成的频率合成器;
支持FSK、GFSK、MSK、GMSK、LoRa及OOK调制方式:
内置式位同步,用于时钟恢复;
前导码检测:
127dB的RSSI动态范围:
自动射频信号检测,CAD模式和超高速AFC;
带有CRC、高达256B的数据包引擎;
内置温度传感器和低电量指示器。
(2)应用

远程灌溉系统;
自动抄表;
家庭和楼宇自动化:
无线告警和安防系统;
工业监视与控制;

四、SPI

1.SPI简介

        LoRa芯片与MCU通过SPI进行通信。SPI(Serial Peripheral Interface Bus)是由摩托罗拉公司开发的高速全双工同步串行通信协议。SPI支持一主多从,这点类似于IC,但是又与I2C选通从设备的方式不同,IC是通过发送从机地址来选通从机,而SPI是通过拉低连接到从机的NSS引脚对从机进行选通的。SPI一般应用由四个引脚组成(一主一从):
SCLK(Serial Clock):串行时钟,由主机发出;
MOSI(Master Output,Slave Input):主机输出从机输入信号,由主机发出;
MISO(Master Input,Slave Output):主机输入从机输出信号,由从机发出:NSS:选择信号,由主机发出,一般是低电位有效。

2. SPI代码配置

(1)引脚初始化

        通过SpiInit()来实现,这个函数在BoardDisableIrq( )中调用。

void SpiInit( Spi_t *obj, PinNames mosi, PinNames miso, PinNames sclk, PinNames nss )参数说明:Spi_t *obj:指向待初始化SPI结构体;PinNames mosi:主机输出从机输入引脚;PinNames miso:主机输入从机输出引脚;PinNames sclk:串行时钟引脚;PinNames nss:片选引脚;

void SpiInit( Spi_t *obj, PinNames mosi, PinNames miso, PinNames sclk, PinNames nss )
{BoardDisableIrq( );//禁止中断// Choose SPI interface according to the given pinsif( mosi == PA_7 ){__HAL_RCC_SPI1_FORCE_RESET( );__HAL_RCC_SPI1_RELEASE_RESET( );__HAL_RCC_SPI1_CLK_ENABLE( );obj->Spi.Instance = ( SPI_TypeDef* )SPI1_BASE;//建立SPI,也就是obj就是SPI1//将GPIO口初始化GpioInit( &obj->Mosi, mosi, PIN_ALTERNATE_FCT, PIN_PUSH_PULL, PIN_PULL_DOWN, GPIO_AF5_SPI1 );GpioInit( &obj->Miso, miso, PIN_ALTERNATE_FCT, PIN_PUSH_PULL, PIN_PULL_DOWN, GPIO_AF5_SPI1 );GpioInit( &obj->Sclk, sclk, PIN_ALTERNATE_FCT, PIN_PUSH_PULL, PIN_PULL_DOWN, GPIO_AF5_SPI1 );GpioInit( &obj->Nss, nss, PIN_ALTERNATE_FCT, PIN_PUSH_PULL, PIN_PULL_UP, GPIO_AF5_SPI1 );if( nss == NC ){obj->Spi.Init.NSS = SPI_NSS_SOFT;//NSS片选信号由软件单独控制SpiFormat( obj, SPI_DATASIZE_8BIT, SPI_POLARITY_LOW, SPI_PHASE_1EDGE, 0 );//设置SPI通讯方式,配置为主机模式}else{SpiFormat( obj, SPI_DATASIZE_8BIT, SPI_POLARITY_LOW, SPI_PHASE_1EDGE, 1 );//设置SPI通讯方式,配置为从机模式}}else if( mosi == PB_15 ){//初始化SPI2__HAL_RCC_SPI2_FORCE_RESET( );__HAL_RCC_SPI2_RELEASE_RESET( );__HAL_RCC_SPI2_CLK_ENABLE( );obj->Spi.Instance = ( SPI_TypeDef* )SPI2_BASE;//建立SPI obj也就是SPI2//将GPIO口初始化GpioInit( &obj->Mosi, mosi, PIN_ALTERNATE_FCT, PIN_PUSH_PULL, PIN_PULL_DOWN, GPIO_AF5_SPI2 );GpioInit( &obj->Miso, miso, PIN_ALTERNATE_FCT, PIN_PUSH_PULL, PIN_PULL_DOWN, GPIO_AF5_SPI2 );GpioInit( &obj->Sclk, sclk, PIN_ALTERNATE_FCT, PIN_PUSH_PULL, PIN_PULL_DOWN, GPIO_AF5_SPI2 );GpioInit( &obj->Nss, nss, PIN_ALTERNATE_FCT, PIN_PUSH_PULL, PIN_PULL_UP, GPIO_AF5_SPI2 );if( nss == NC ){obj->Spi.Init.NSS = SPI_NSS_SOFT;//NSS片选信号由软件单独控制SpiFormat( obj, SPI_DATASIZE_8BIT, SPI_POLARITY_LOW, SPI_PHASE_1EDGE, 0 );//设置SPI通讯方式,配置为主机模式}else{SpiFormat( obj, SPI_DATASIZE_8BIT, SPI_POLARITY_LOW, SPI_PHASE_1EDGE, 1 );//设置SPI通讯方式,配置为从机模式}}SpiFrequency( obj, 10000000 );//设置SPI速度HAL_SPI_Init( &obj->Spi );//生效BoardEnableIrq( );//使能中断
}

(2)设置SPI通讯方式

     SpiFormat( Spi_t *obj, int8_t bits, int8_t cpol, int8_t cpha, int8_t slave )中各参数如下:

        Spi_t *obj:SPI结构体;

        int8_t bits:帧格式,选择8位

        int8_t cpol:设置时钟极性。这里是低电平

        int8_t slave:主从模式,0主,1从

 (3)Lora调制解调

(1)频率:频率建议在433MHZ附近,也430,431,432,用户根据设置频率确定合适的信道。

(2)发射功率:Lora发射功率由参数TX_OUTPUT_POWER;这个值越大,传输的距离越远,最大值不超过20dBm。

(3)Lora数据包结构:

 3.编写关键函数 NS_Radio.c

void NS_RadioEventsInit( void )//射频初始化函数
{// Radio initializationRadioEvents.TxDone = OnTxDone;RadioEvents.RxDone = OnRxDone;RadioEvents.TxTimeout = OnTxTimeout;RadioEvents.RxTimeout = OnRxTimeout;RadioEvents.RxError = OnRxError;Radio.Init( &RadioEvents );
}void OnTxDone( void )//发送完成调用此函数
{Radio.Sleep( );Radio.Rx( RX_TIMEOUT_VALUE );
}void OnRxDone( uint8_t *payload, uint16_t size, int16_t rssi, int8_t snr )//接收完成调用,读取数据、数据长度、信号强度、信噪比。
{Radio.Sleep( );LoRaBufferSize = size;memcpy( LoRaBuffer, payload, LoRaBufferSize );RssiValue = rssi;SnrValue = snr;
//    printf( "Rx=%s\r\nRssiValue=%d\r\nSnrValue=%d\r\n",LoRaBuffer,RssiValue,SnrValue );Radio.Rx( RX_TIMEOUT_VALUE );
}void OnTxTimeout( void )//发送超时调用
{Radio.Sleep( );Radio.Rx( RX_TIMEOUT_VALUE );
}void OnRxTimeout( void )//接收超时调用
{Radio.Sleep( );Radio.Rx( RX_TIMEOUT_VALUE );
}void OnRxError( void )//接收错误调用
{Radio.Sleep( );Radio.Rx( RX_TIMEOUT_VALUE );
}

项目实验

        项目介绍:方圆5平方千米的植物园,粗放式管理,管委会要求对园区环境进行检测,温湿度光照等。要求:低成本,节约经费;先实现点对点,能够在上位机进行数据获取,后期升级位云平台获取。

      (1)  关键接口函数解析:

void LoRa_Send( uint8_t *TxBuffer, uint8_t len )//TxBuffer是一个指针,指向用户需要发送的Lora无线数据首地址。{Radio.Send( TxBuffer, len);
}void MyRadioRxDoneProcess( void )//接收Lora无线数据,用户需要在函数中解析无线数据的功能代码或函数。{uint16_t BufferSize = 0;uint8_t RxBuffer[BUFFER_SIZE];BufferSize = ReadRadioRxBuffer( (uint8_t *)RxBuffer );if(BufferSize>0){//用户在此处添加接收数据处理功能的代码;printf("LoRa TempRh\r\n");hal_temHumInit();//初始化温湿度模块connectionreset();//重置温湿度模块IIC通信Tim3McuInit(1);//定时器初始化,设置定时中断1ms中断一次}
}void PlatformInit(void)//硬件平台初始化
{// 开发板平台初始化BoardInitMcu();BoardInitPeriph();// 开发板设备初始化OLED_Init();//液晶初始化USART1_Init(115200);//串口1初始化OLED_Clear();OLED_InitView();//OLED屏幕显示初始信息printf("新大陆教育 LoRa \r\n");//Lora模块初始化NS_RadioInit( (uint32_t) RF_PING_PONG_FREQUENCY, (int8_t) TX_OUTPUT_POWER, (uint32_t) TX_TIMEOUT_VALUE, (uint32_t) RX_TIMEOUT_VALUE );//请在下方添加用户初始化代码//IWDG_PrmInit(2048);//独立看门狗初始化,超时设置为2048ms
}//-----------------------------------------------------------
//根据通信协议制定响应命令结构
#define START_HEAD 0x55//帧头
#define CMD_READ   0x01//读数据
#define ACK_OK     0x00//响应OK
#define ACK_NONE   0x01//无数据
#define ACK_ERR    0x02//数据错误
//定义网络编号和设备地址
#define MY_NET_ID  0xD0C2       //网络ID
#define MY_ADDR    0x01         //设备地址/*全局变量*/
int8_t temperature = 25;    //温度,单位:℃
int8_t humidity = 60;       //湿度,单位:%//函数声明
void LoRa_Send( uint8_t *TxBuffer, uint8_t len );
void MyRadioRxDoneProcess( void );
void OLED_InitView(void);
void PlatformInit(void);uint8_t CheckSum(uint8_t *buf, uint8_t len)//计算校验和
{uint8_t temp = 0;while(len--){temp += *buf;buf++;}return (uint8_t)temp;
}/**********************************************************************************************
*函数:uint8_t *ExtractCmdframe(uint8_t *buf, uint8_t len, uint8_t CmdStart)
*功能:从一串数据中提取出命令帧出现起始地址
*输入:
*     uint8_t *buf,指向待提取的数据缓冲区地址
*     uint8_t len,缓冲区数据长度
*     uint8_t CmdStart,命令帧起始字节
*输出:无
*返回:返回首次出现命令帧的地址,若数据中无命令帧数据,则返回NULL
*特殊说明:无
**********************************************************************************************/
uint8_t *ExtractCmdframe(uint8_t *buf, uint8_t len, uint8_t CmdStart)
{uint8_t *point = NULL;uint8_t i;for(i=0; i<len; i++){if(CmdStart == *buf){point = buf;return point;}}return NULL;
}/**********************************************************************************************
*函数:uint16_t GetHexStr(uint8 *input, uint16_t len, uint8 *output)
*功能:生成数组的16进制形式的字符串格式,成员间以空格隔开
*     例如:由{0xA1,0xB2,0xC3}生成"A1 B2 C3"
*输入:uint8 *input-指向输入缓存区, uint16_t len-输入数据的字节长度
*输出:uint8 *output-指向输出缓存区
*返回:返回生成字符串的长度
*特殊说明:无
**********************************************************************************************/
uint16_t GetHexStr(uint8_t *input, uint16_t len, uint8_t *output)
{for(uint16_t i=0; i<len; i++){sprintf((char *)(output+i*3),"%02X ", *input);input++;}return strlen((const char *)output);
}

(2)请求命令参照数据通信结构,传感器接收网关读传感数据命令后,节点需要按照通信规约格式上报网关。请求命令解析数据代码如下:

//--------------------------------------------------------
//数据解析
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) //网络ID高字节  
#define NETL_DATA  *(DestData+3) //网络ID低字节  
#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);//输入数据 长度 帧给DestDataif(DestData != NULL)//检索到数据帧头{if((DestData - LoRaRxBuf) > (len - 6)) return;//数据长度不足构成一帧完整数据if(CMD_DATA != CMD_READ) return;//命令错误if(CheckSum((uint8_t *)DestData, 5) != (*(DestData+5))) return;//校验不通过,仅适用于校验读数据命令的校验if(((((uint16_t)NETH_DATA)<<8)+NETL_DATA) != MY_NET_ID) return;//网络ID不一致//发送读响应if(ADDR_DATA != MY_ADDR) return;//地址不一致/--------------------------------------------------------------------
//根据通信协议发送数据又称响应uint8_t RspBuf[BUFFER_SIZE]= {0};memset(RspBuf, '\0', BUFFER_SIZE);RspBuf[0]=START_HEAD;//帧头 RspBuf[1]=CMD_READ;//命令 ,0x01读传感数据 RspBuf[2]=(uint8_t)(MY_NET_ID>>8);//网络ID低字节  RspBuf[3]=(uint8_t)MY_NET_ID;//网络ID高字节  RspBuf[4]=MY_ADDR;//地址 RspBuf[5]=ACK_OK;//响应OK 0x00 sprintf((char *)(RspBuf+7),"temperature(℃):%d|humidity(%%):%d", temperature, humidity);//数据域,sprintf中,两个“%”表示输出“%”。在采集传感函数中已经将采集值放入这两个变量中,发送即可。RspBuf[6]=strlen((const char *)(RspBuf+7))+1;//数据域长度RspBuf[6+RspBuf[6]]=CheckSum((uint8_t *)RspBuf, 6+RspBuf[6]);Radio.Send( RspBuf, 7+RspBuf[6]);//发送响应数据GpioToggle( &Led1 );//发送数据切换亮灯指示}
}

(3)主机接收代码如下:

/**********************************************************************************************
*函数:void MyRadioRxDoneProcess( void )
*功能:无线模块数据接收完成处理进程函数
*输入:无
*输出:无
*返回:无
*特殊说明:接收到的无线数据保存在RxBuffer中,BufferSize为接收到的无线数据长度
**********************************************************************************************/
void MyRadioRxDoneProcess( void )
{uint16_t BufferSize = 0;uint8_t RxBuffer[BUFFER_SIZE];BufferSize = ReadRadioRxBuffer( (uint8_t *)RxBuffer );if(BufferSize>0){//用户在此处添加接收数据处理功能的代码GpioToggle( &Led2 );//收到数据切换亮灯指示LoRa_DataParse( (uint8_t *)RxBuffer, BufferSize );//调用数据解析函数}
}

(4)主函数将硬件平台初始化,不断循环接收发送函数。

//-----------------------------获取传传感器数据------------------------
void LoRa_GetSensorDataProcess(void)
{const uint16_t time = 1000;if(User0Timer_MS > time) //1ms进中断User0Timer_MS ++;{User0Timer_MS = 0;uint16_t Temp, Rh;call_sht11((uint16_t *)(&Temp), (uint16_t *)(&Rh));//采集温湿度数据temperature = (int8_t)Temp;    //温度,单位:℃  将采集值传给前边定义的两个变量humidity = (int8_t)Rh;       //湿度,单位:%     将采集值传给前边定义的两个变量
//------------------oled显示--------------------------------------------char StrBuf[64]= {0};memset(StrBuf, '\0', 64);sprintf(StrBuf, " %d DegrCe",temperature);OLED_ShowString(0,4,(uint8_t *)StrBuf);//OLED显示当前温度memset(StrBuf, '\0', 64);sprintf(StrBuf, " %d %%",humidity);OLED_ShowString(0,6,(uint8_t *)StrBuf);//OLED显示当前相对湿度}
}int main( void )
{PlatformInit();while( 1 ){//IWDG_PrmRefresh( );//喂独立看门狗MyRadioRxDoneProcess();//LoRa无线射频接收数据处理进程LoRa_GetSensorDataProcess();}
}


http://chatgpt.dhexx.cn/article/k9Qd8JwR.shtml

相关文章

常用的LoRa网络结构

LoRa应用中组网方式非常多&#xff0c;且很多供应商根据需求制定了相应的协议(网络层和应用层)&#xff0c;根据是否支持LoRaWAN协议可以分为LoRaWAN协议网络和私有协议网络两大类。在中国的LoRa生态中有大量的用户使用私有协议&#xff0c;而在欧美等发达国家的LoRa市场上绝大…

【ESP32最全学习笔记(协议篇)——2.ESP32 LoRa】

关于本教程&#xff1a; ESP32 基础篇 1.ESP32简介 2.ESP32 Arduino 集成开发环境 3.VS 代码和 PlatformIO 4.ESP32 引脚 5.ESP32 输入输出 6.ESP32 脉宽调制 7.ESP32 模拟输…

LoRa是什么

LoRa是什么 LoRa是什么LoRa调制LoRa调制参数LoRa WAN 网络LoRa技术框图LoRa WAN网络组成LoRa终端设备划分成A/B/C三类 LoRa是什么 LoRa 是LPWAN通信技术中的一种 LoRa 是美国Semtech公司采用和推广的一种基于扩频技术的超远距离无线传输方案 LoRa调制 LoRa 采用 CSS线性扩频…

LoRaWAN协议

LoRaWAN协议定义了使用LoRa的MAC层规范&#xff0c;处在协议应用层与物理层中间的实现规范。LoRa没有开放的规范化物理层协议&#xff0c;而LoRa物理模块的接口上很多参数都可以进行配置&#xff0c;LoRaWAN同时对一些数据发送格式做了相应的限制。 物理层消息结构 上行带有CRC…

【LoRaWAN协议的扩展与衍生】

文章目录 LoRaWAN协议的扩展与衍生一、LoRaWAN中继Relay协议1.Relay协议强制需求2.Relay入网及数据交互流程3.唤醒方式 二、阿里巴巴D2D协议1.场景要求2.协议机制3.D2D的特点 三、智能家居YoLink协议1.YoLink通信协议架构及特点2.YoLink网络通信模式3.D类设备的唤醒和控制4.YoL…

什么是LoRa?

1.LoRa概述&#xff1a; 智能物联网应用改善了我们的生活方式&#xff0c;并且正在解决城市和社区面临的一些挑战&#xff1a;气候变化&#xff0c;污染控制&#xff0c;自然灾害预警和生命急救。企业也通过改进运营和效率以降低成本获取效益。这种无线射频技术正在应用到汽车…

物联网Lora组网方式及私有协议的应用

本篇文章全程干货&#xff0c;可能有点枯燥, 如果耐心看完&#xff0c;保证不会让大家失望&#xff01; 文章内容都是无际单片机编程团队的几年实战经验&#xff0c;全网独家。 本课程不仅适用于Lora技术&#xff0c;FSK、zigbee、OOK等无线通讯都可以支持&#xff0c;大家可…

LoRaWAN网络协议与LoRa私有协议相比有哪些优势

物联网很多应用现在都普遍用了LoRa技术的芯片&#xff0c;然而没有使用LoRaWan网络协议。经过调查发现&#xff0c;没有使用LoRaWAN网络协议的原因有&#xff1a;应用点数少、规模小&#xff0c;有的是因为LoRaWAN成本高&#xff0c;技术要求高&#xff0c;短时间内无法掌握&am…

LoRa协议说明

ClassA 所有终端设备需实现Class A物理层Uplink Message由终端设备经过一个或多个网关发送至网络服务端 UplinkMessage使用LoRa无线报文的显示模式&#xff0c;即包含PHDR和PHDR_CRC头。整个报文的完整性由CRC检验码保证。PHDR,PHDR_CRC和负载的CRC字段均自动由无线射频收发器插…

LoRa协议在Arduino上的应用——原理及代码分析(二)

目录 LoRa调制与解调模式代码分析主程序开始发包Packet Structure数据传输时间重置FIFO地址与payload长度结束发包中断源 ReceiverparsePacket是否存在数据包数据读取RSSI 前述文章链接在此~~ LoRa协议在Arduino上的应用——原理及代码分析&#xff08;一&#xff09;. LoRa调…

【从0到1搭建LoRa物联网】12、LoRa网关与平台通讯协议

系列文章&#xff1a; 【从0到1搭建LoRa物联网】1、LoRa物联网的架构 【从0到1搭建LoRa物联网】2、终端设备开发方式 【从0到1搭建LoRa物联网】3、国产LoRa终端ASR6505软硬件 【从0到1搭建LoRa物联网】4、国产LoRa终端ASR6505普通GPIO 【从0到1搭建LoRa物联网】5、国产LoRa终端…

物联网LoRa系列-11:LoRa终端--基于物理层协议的PingPong应用程序的软件架构

至此&#xff0c;我们已经搭建好LoRa终端的软硬件开发环境&#xff0c;接下来&#xff0c;将解构和实现LoRa终端的应用程序。 LoRa终端的应用程序&#xff0c;&#xff08;1&#xff09;可以直接基于LoRa的物理层协议&#xff08;LoRa芯片实现&#xff09;&#xff1b;&#x…

自有协议的LoRa模块应用

LoRa主要是由SemTech公司开发并拥有专利的物理层的调制技术。基于LoRa&#xff0c;LoRa联盟也开发和开放了的LoRaWAN的协议&#xff0c;用于组建网络和实现应用。Ali在LoRaWAN基础上又开发了LPWAN的物联网应用平台&#xff0c;这些都需要遵从专有的LoRa芯片&#xff0c;专门协议…

LoRa协议在Arduino上的应用——原理及代码分析(一)

目录 LoRa简介硬件设备源码分析Sender 两种调制方式 LoRa简介 详细的LoRaWAN协议解析在这里 本文主要介绍LoRa在Arduino上的实现过程&#xff0c;从而学习LoRa协议的实现。 硬件设备 包括传统的GFSK调制技术以及LoRa&#xff08;远程&#xff09;扩频技术 这里说一下啥叫LoR…

物联网LoRa系列-25:LoRa终端--LoRaWAN协议简介与LoRa WAN终端软件选择

前言&#xff1a; 从本篇文章开始&#xff1a; 从通信节点的角度度看&#xff0c;将从Lra终端对点对通信转到LoRa终端与LoRa网关的通信、LoRa终端与LoRa云服务器的通信&#xff1b; 从协议栈的角度看&#xff0c;将从物理层上升到LoRa的MAC层&#xff0c; 即LoRaWAN&#xf…

lora三层服务器协议,LoRa以及LoRa包含的几种协议

为何LoRa成为“一夜爆红”的新技术呢?一定是因为它具有非常显著的特点: 长距离:1~20km 节点数:万级,甚至百万级 电池寿命:3~10年 数据速率3~50kbps LoRa作为一种无线技术,基于Sub-GHz的频段使其更易以较低功耗远距离通信,可以使用电池供电或者其他能量收集的方式供电。…

Lora如何组网?有哪些简单的Lora组网协议?

我从事物联网设计10余年&#xff0c;对无线通讯技术的ASK、FSK、Zigbee、Z-Wave、NB-Iot、Lora及LoraWan等都有一些或多或少的接触。 其中Lora无线通讯技术对我影响比较深刻&#xff0c;了解也相对比较透彻。 我在2016年接触的Lora无线通讯技术&#xff0c;但是&#xff0c;在…

什么是LoRa协议?

1 开场白 这篇文章给读者分享LoRa和LoRaWAN相关的技术简介, Low-Power, Wide-Area Networks(LPWAN)为实现数十亿的万物互联设备而生, LoRaWAN专为LPWAN网络优化更长的电池寿命,更长的距离和更低的代价。 [欢迎大家关注公众号:LoRa万物互联,获取更多LoRa资讯] 2 LoRa是什…

物联网LoRa系列-2:LoRa系统架构与协议栈详解

主要内容 1. 什么是Lora&#xff1f; 2. LoRa的主要特点&#xff1f; 3. LoRa的系统架构&#xff1f; 4. LoRa终端节点的网络连接方式&#xff1f; 5. LoRa终端节点的三种工作模式&#xff1f; 6. LoRa的协议栈&#xff1f; 1. 什么是LoRa LoRa是semtech公司创建的低功耗…

LoRa协议

注意&#xff1a;本页提供的信息来自LoRa™Alliance于2015年1月发布的LoRaWAN Specification V1.0。LoRa联盟负责随时更改规格&#xff0c;恕不另行通知。RF Wireless World不对任何与此相关的问题负责。请参阅LoRa Alliance&#xff08;https://www.lora-alliance.org&#xf…