当前位置 博文首页 > freemote的博客:【从0到1搭建LoRa物联网】20、LoRaWAN扩展

    freemote的博客:【从0到1搭建LoRa物联网】20、LoRaWAN扩展

    作者:[db:作者] 时间:2021-07-05 09:55

    系列文章:
    【从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终端ASR6505驱动DHT11
    【从0到1搭建LoRa物联网】6、国产LoRa终端ASR6505 I2C接口
    【从0到1搭建LoRa物联网】7、国产LoRa终端ASR6505驱动段式LCD例程
    【从0到1搭建LoRa物联网】8、国产LoRa终端ASR6505 PingPong通信
    【从0到1搭建LoRa物联网】9、国产LoRa终端ASR6505 PingPong通信OLED显示
    【从0到1搭建LoRa物联网】10、LoRa终端ASR6505 ADC采样
    【从0到1搭建LoRa物联网】11、ASR6505 LoRaWAN通信
    【从0到1搭建LoRa物联网】12、LoRa网关与平台通讯协议
    【从0到1搭建LoRa物联网】13、低成本单通道网关(一)
    【从0到1搭建LoRa物联网】14、低成本单通道网关(二)
    【从0到1搭建LoRa物联网】15、LoRa连接到The Things Network
    【从0到1搭建LoRa物联网】16、LoRa连接到腾讯云物联网平台
    【从0到1搭建LoRa物联网】17、LoRa连接到chirpstack
    【从0到1搭建LoRa物联网】18、LoRa应用服务器Application Server
    【从0到1搭建LoRa物联网】19、LoRa串口透传例程(补充)

    1、修改入网速率

    在RegionCN470.c中有如下函数:

    int8_t RegionCN470AlternateDr( AlternateDrParams_t* alternateDr )
    {
        int8_t datarate = 0;
    
        if( ( alternateDr->NbTrials % 48 ) == 0 )
        {
            datarate = DR_0;
        }
        else if( ( alternateDr->NbTrials % 32 ) == 0 )
        {
            datarate = DR_1;
        }
        else if( ( alternateDr->NbTrials % 24 ) == 0 )
        {
            datarate = DR_2;
        }
        else if( ( alternateDr->NbTrials % 16 ) == 0 )
        {
            datarate = DR_3;
        }
        else if( ( alternateDr->NbTrials % 8 ) == 0 )
        {
            datarate = DR_4;
        }
        else
        {
            datarate = DR_2;
        }
        return datarate;
    }
    

    可以看出,入网的时候速率是不断调整的,主要是与入网的次数有关,入网次数是48的倍数的时候使用DR_0,入网次数是32的倍数的时候使用DR_1,以此类推,其余入网的时候使用DR_2(对CN470来说就是SF10)。当然,也可以根据实际情况调整。

    2、修改入网间隔

    在RegionCommon.c文件中有如下函数:

    #define BACKOFF_DC_1_HOUR 100
    #define BACKOFF_DC_10_HOURS 1000
    #define BACKOFF_DC_24_HOURS 10000

    uint16_t RegionCommonGetJoinDc( TimerTime_t elapsedTime )
    {
        uint16_t dutyCycle = 0;
        if( elapsedTime < 3600000 )
        {
            dutyCycle = BACKOFF_DC_1_HOUR;
        }
        else if( elapsedTime < ( 3600000 + 36000000 ) )
        {
            dutyCycle = BACKOFF_DC_10_HOURS;
        }
        else
        {
            dutyCycle = BACKOFF_DC_24_HOURS;
        }
        return dutyCycle;
    }
    

    elapsedTime表示过去的时间,可以看出随着时间往后,入网的间隔越久。

    欢迎关注微信公众号【物联网思考】,回复关键字“ ASR6505”获取资料,《从0到1搭建LoRa物联网》系列的所有软硬件资料将会分享在公众号。在这里插入图片描述

    cs