Toc
  1. 本说明目录
  2. Core-NBIOT
  3. 开源一个使用BC20的项目
  4. Core-NBIOT图赏
  5. H7PI下使用Core-NBIOT
    1. 准备
    2. 兼容Grove接口
    3. 如何初始化
    4. 建立TCP链接
    5. 建立MQTT链接
Toc
0 results found
Pinno
Core-NBIOT

本说明目录

  1. Core-NBIOT
  2. Core-NBIOT图赏
  3. H7PI下使用Core-NBIOT
  4. 如何初始化
  5. 建立TCP链接
  6. 建立MQTT链接

Core-NBIOT

Core Modules 是一系列的功能模块,用于快速创建应用。
Core-SensorTH是一款串口NBIOT模块,基于移远BC20,接口兼容Seeed Grove接口,可使用Arduino相关扩展板。

  • 使用移远NBIOT模块BC20,支持B5,B8频段,可在移动、电信网络下使用
  • 支持MQTT等多种网络协议栈,可通过AT指令直接建立链接
  • 支持GPS,北斗双星定位系统,支持AGPS技术
  • 低功耗LDO,减少关机时功耗,可通过IO口开机或唤醒
  • 宽电压输入,可支持3.3~5V供电(提供500mA电流)
  • 同时支持中国移动 OneNET、中国电信 IoT、华为 OceanConnect 以及阿里云等物联网云平台

获取一个 –>Core-NBIOT

开源一个使用BC20的项目

基于H7PI v0.2进行扩展的远程开锁项目,MQTT连接私有服务器发送和获取指令,可以获取时间,TCP进行更新

  1. H7PI_EXP_NbiotLock
  2. H7PI_EXP_Nbiot_Lock_fw

Core-NBIOT图赏

示意图1
示意图3

H7PI下使用Core-NBIOT

准备

  1. Core-NBIOT 模块
  2. H7PI
  3. H7PI_Exp_GrovePlatform
  4. H7PI_Samples

兼容Grove接口

模块使用兼容Grove接口,对应引脚如下

引脚 信号 功能
1 GND 接地
2 VCC 电源
3 RX 接收
4 TX 发送

模块需要使用额外的两个控制信号,如下描述

引脚 信号 功能
1 GND 接地
2 VCC 电源
3 PSMEXIT 从PSM模式下唤醒,高电平唤醒
4 PWRKEY 开关机按键, 高电平开机关机

BC20本身的操作是低电平有效,通过NMOS进行拉低,因此在接口处为高电平有效

如何初始化

  1. 链接好串口和电源后,使用IO将接口PWRKEY拉高大约300~500ms(BC20开机引脚相当于拉低)。
  2. 使用AT指令进行测试,直到模块回复’OK’ ,此时说明模块开机并内部初始化完成。
  3. 参考下面初始化代码进行初始化:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    void bc20_Init(void)
    {
    uint8_t status = 0;
    //
    //使用AT指令确定模块开机初始化完成
    while(bc20_CheckNB()!=1){BC20_DELAY(100);}
    //
    //设置APN,这里可以不做处理,一般可以自动设置
    //如果需要设置特殊的PSM模式,请联系SIM卡供应商
    //获取相应的APN实现PSM模式
    for(int i = 0; i < 3; i++)
    {
    if(bc20_SetAPN("IP","cmnbiot1",NULL,NULL)==1)
    {
    break;
    }
    BC20_DELAY(100);
    }
    //
    //禁用回声模式,可以不处理,开启会返回发出的指令
    while(bc20_SetEcho(0)==0)
    {
    BC20_DELAY(10);
    }
    //
    //配置数据格式,可以不处理,请参照BC20的AT指令
    //规格书配置自己所需要的格式。
    while(bc20_SetDataFormat(1,1)==0)
    {
    BC20_DELAY(10);
    }
    while(bc20_SetDataOutputFormat(1)==0)
    {
    BC20_DELAY(10);
    }
    while(bc20_ShowLengthMode(1)==0)
    {
    BC20_DELAY(10);
    }
    //
    //关闭PSM模式,跟APN对应的休眠模式有关,可以不处理
    //具体跟SIM卡供应商获取相关的设置
    while(bc20_SetPSM("0",NULL,NULL)==0)
    {
    BC20_DELAY(10);
    }
    //
    //配置不休眠模式,同上方PSM设置
    while(bc20_SetSleepMode(0)==0)
    {
    BC20_DELAY(10);
    }
    //
    //获取模块IMEI号,可以不处理
    while(bc20_GetIMEI(bc20.IMEI)==0)
    {
    BC20_DELAY(10);
    }
    //
    //获取SIM卡IMSI号,可以不处理
    while(bc20_GetIMSI(bc20.IMSI)==0)
    {
    BC20_DELAY(10);
    }
    //
    //激活网络,必要操作,主要是自动寻找网络,根据网络状态,可能需要75s
    //这里遇到ERROR的时候记得获取ERROR,看下是什么问题,
    //经测试移动网络下返回ERROR的几率很大,需要循环尝试几次
    //进行激活网络,中间间隔一定时间,
    bc20_SetGATT();
    for(int i = 0; i < 100; i++)
    {
    bc20_GetGATT(bc20.GATT);
    if(bc20.GATT[0] == '1')
    {
    break;
    }
    else
    {
    if(i%10==0)
    {
    bc20_SetGATT();
    }
    }
    BC20_DELAY(10);
    }
    //
    //注册到网络,可需要数秒的时间,因此也需要循环查询
    //处理方法同上方激活网络,这两个操作是必要的,同时
    //也是非常容易出错的,需要注意
    bc20_SetReg();
    for(int i = 0; i < 100; i++)
    {
    bc20_GetReg(bc20.REGOK);
    if(bc20.REGOK[0] == '1')
    {
    break;
    }
    else
    {
    if(i%10==0)
    {
    bc20_SetReg();
    }
    }
    BC20_DELAY(10);
    }
    //
    //可以不处理
    //获取频段,根据运营商有所不同,B5,B8
    while(bc20_GetBand(bc20.BAND)==0)
    {
    BC20_DELAY(10);
    }
    //
    //可以不处理
    //获取IP,注册网络成功后会有IP返回
    while(strstr(bc20.IP,".")==NULL)
    {
    bc20_GetIP("1",bc20.IP);
    BC20_DELAY(100);
    }

建立TCP链接

建立MQTT链接

打赏
支付宝
微信
本文作者:Pinno
版权声明:本文首发于Pinno,转载请注明出处!