专栏首页物联网思考ASR6505 LoRaWAN通信(二)

ASR6505 LoRaWAN通信(二)

前言:在ASR6505 LoRaWAN通信(一)中谈到了设备入网、ClassA、C,本节聊聊设备的信道、发送、接收数据。

1、信道

LoRaWAN是工作在ISM频段的,各个地区的ISM频段不一样,比如中国470-510MHZ、美国902-908MHZ、欧洲863-870MHZ等,因此为了合理的利用频谱,LoRaWAN也对信道进行了划分。

可以看出在CN470-510频段,上行划分了96个信道,编号依次是0-95,从470.3MHZ开始以200KHZ的步长增长一直到489.3MHZ。下行划分了48个信道,编号依次是0-47,从500.3MHZ开始以200KHZ的步长增加一直到509.7MHZ。

2、代码实现

SDK中已经实现了完整的LoRaWAN协议栈,只需要根据实际情概况配置入网参数、信道等即可。另外发送数据和接收数据,SDK也提供了相应的函数,只需在相应的函数里面填充或者获取数据。

3、配置入网参数

static uint8_t DevEui[] = LORAWAN_DEVICE_EUI;
static uint8_t AppEui[] = LORAWAN_APPLICATION_EUI;
static uint8_t AppKey[] = LORAWAN_APPLICATION_KEY;

#if( OVER_THE_AIR_ACTIVATION == 0 )

static uint8_t NwkSKey[] = LORAWAN_NWKSKEY;
static uint8_t AppSKey[] = LORAWAN_NWKSKEY;
static uint32_t DevAddr = LORAWAN_DEVICE_ADDRESS;

#endif

上面6个参数以及入网方式以宏定义的方式在Commissioning.h中定义,很容易修改。

4、信道、发射功率、速率等配置

这里我们定义了一个函数,在里面统一配置参数。

static void DeviceParamConfig( void )
{
    MibRequestConfirm_t mibReq;
    uint16_t channelsMaskTemp[6];
    channelsMaskTemp[0] = 0x0001;
    channelsMaskTemp[1] = 0x0000;
    channelsMaskTemp[2] = 0x0000;
    channelsMaskTemp[3] = 0x0000;
    channelsMaskTemp[4] = 0x0000;
    channelsMaskTemp[5] = 0x0000;
    //信道这里实际上是修改信道掩码,96个信道对应96个bit,配置相应的bit为1,则就使能对应的信道、

    mibReq.Type = MIB_CHANNELS_DEFAULT_MASK;
    mibReq.Param.ChannelsDefaultMask = channelsMaskTemp;
    LoRaMacMibSetRequestConfirm(&mibReq);
    mibReq.Type = MIB_CHANNELS_MASK;
    mibReq.Param.ChannelsMask = channelsMaskTemp;
    LoRaMacMibSetRequestConfirm(&mibReq);
    
    mibReq.Type =MIB_CHANNELS_DEFAULT_DATARATE;
    mibReq.Param.ChannelsDefaultDatarate = DR_2;//DR_2实际上是索引,实际对应的是SF10
    LoRaMacMibSetRequestConfirm(&mibReq);
    
    mibReq.Type =MIB_CHANNELS_DATARATE;
    mibReq.Param.ChannelsDatarate = DR_2;
    LoRaMacMibSetRequestConfirm(&mibReq);
    
    mibReq.Type =MIB_CHANNELS_TX_POWER;
    mibReq.Param.ChannelsTxPower=TX_POWER_1;//TX_POWER_1也是索引,对应的是最大功率减去4,最大功率在RegionCN470.h文件中也是以宏定义的方式定义
    LoRaMacMibSetRequestConfirm(&mibReq);
}

注:这里一定要注意,信道要和网关保持一致。SX130x系列网关一般是8个信道,单通道网关一般是1个信道,后面也会介绍一个单通道网关。

5、发送数据

这里也提供了一个函数,在里面赋值我们要发送的数据即可:

static void PrepareTxFrame( uint8_t port )
{
    AppDataSize = 4;
    AppData[0] = 0x00;
    AppData[1] = 0x01;
    AppData[2] = 0x02;
    AppData[3] = 0x03;
    //AppDataSize是要发送的数据长度,AppData是要发送的数据
}

6、接收数据

这里也提供了一个函数,在里面获取接收到的数据即可:

static void McpsIndication( McpsIndication_t *mcpsIndication )
{
    if( mcpsIndication->Status != LORAMAC_EVENT_INFO_STATUS_OK )
    {
        return;
    }
    printf( "receive data: rssi = %d, snr = %d, datarate = %d\r\n", mcpsIndication->Rssi, 
                                                     (int)mcpsIndication->Snr,
                                                     (int)mcpsIndication->RxDatarate);
    switch( mcpsIndication->McpsIndication )
    {
        case MCPS_UNCONFIRMED:
        {
            break;
        }
        case MCPS_CONFIRMED:
        {
            break;
        }
        case MCPS_PROPRIETARY:
        {
            break;
        }
        case MCPS_MULTICAST:
        {
            break;
        }
        default:
            break;
    }
    if( mcpsIndication->FramePending == true )
    {
        OnTxNextPacketTimerEvent( );
    }
    if( mcpsIndication->RxData == true )
    {
    }
    if(mcpsIndication->BufferSize) 
    {
       //把接收到的数据通过串口打印出来。
        printf("Received: ");
        for(i=0; i<mcpsIndication->BufferSize; i++) 
        {
            printf("%x ", (void *)mcpsIndication->Buffer[i]);
        }
        printf("\r\n");
    }
}

7、实验现象

需要提前在服务器上加入节点,并且配置节点的频点需和网关一致。

本文分享自微信公众号 - 物联网思考(everythinglink),作者:everythinglink

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-10-09

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • LoRa节点开发——代码详解如何修改发射和接收信道(频率)

    本文主要结合LoRaNode SDK v4.4.2和LoRaWAN规范1.0.3来展开。

    ManInRoad
  • STM32与LoRa低功耗调试总结

    前言:物联网的大部分设备都是电池供电的,设备本身低功耗对设备使用寿命至关重要,今天就以实际调试经验,聊一聊stm32的低功耗调试。

    ManInRoad
  • LoRa节点开发——LoRaWAN节点入网代码详解

    本文主要结合LoRaNode SDK v4.4.2和LoRaWAN规范1.0.3来展开。

    ManInRoad
  • 星巴克小程序新玩法!比微信群抢红包还刺激

    没错,一杯咖啡,便可以让我们这帮「咸鱼」,迅速切换到「我爱工作,工作使我快乐」的清醒模式。

    知晓君
  • 种一棵树最好的时间是10年前,其次是现在!

    2019 年下半年,萌生了写公众号的想法,于是乎,申请了一个订阅号。近乎于晾在一边,持续了半年时间,春节的时候才想着要认真对待这件事情。

    歪马
  • 计算机视觉技术self-attention最新进展

    Attention注意力,起源于Human visual system(HVS),个人定义的话,应该类似于 外界给一个刺激Stimuli,然后HVS会第一时间产...

    SIGAI学习与实践平台
  • 计算机视觉技术self-attention最新进展

    Attention注意力,起源于Human visual system(HVS),个人定义的话,应该类似于 外界给一个刺激Stimuli,然后HVS会第一时间产...

    小白学视觉
  • 实战派 | PaddlePaddle 你其实也可以真正地上手

    用户1107453
  • 求水仙花数面试题 撸它

    输入: 2 输出: [] 样例解释: 没有2位数的水仙花数。 注意事项 你可以认为n小于8。

    不太灵光的程序员
  • 浅淡Java设计模式之单例模式

    什么是单例模式? 保证一个类仅有一个实例,并提供一个访问它的全局访问点. java中的单例:一个类有且仅有一个实例,并且自行实例化向整个系统提供。

    聚沙成塔

扫码关注云+社区

领取腾讯云代金券