Silicon Labs蓝牙Mesh应用实例

  作者:李仁庆 时间:2019-03-29来源:电子产品世界

The application of Silicon Labs’ Bluetooth Mesh

李仁庆(贝能国际有限公司,广东 广州 510665)

       摘要:蓝牙Mesh标准脱胎于蓝牙低功耗(BLE)和网状协议,兼有两种协议优点,又摒弃其缺点,是开发节点网络的选择之一;Silicon Labs公司推出的蓝牙Mesh SDK和支持BT5.0的EFR32BG13系列SoC,让蓝牙Mesh应用变得简单灵活。
       关键词:蓝牙;mesh;照明;拓扑

  引言

       物联网发展如火如荼的今天,怎样可以联接大量节点,又可以适应不同节点的特点的问题?这不可避免地摆在了所有的业内人士面前。Zigbee标准已有成熟生态链,但需要有网关,无法跟目前流行的操作终端如手机进行直连成为了短板;在家庭、工业、商业都普遍应用的Wi-Fi因功耗大,无法适应各种节点的特点而只能用在传输速度有要求的产品上;入门简单、成本低的在简单的智能物联产品中使用最多,但因其标准化程度不高,无法达到各厂家的产品互联互通;近期流行的NB-IoT产品因其广域网特点,在大规模远距离节点网络中有颇多应用,但功耗和整体成本问题是暂时难以解决的问题。那是否就没有一种协议可以完美解决这些问题吗?
  有!蓝牙技术联盟于2017年7月19日正式宣布,蓝牙(Bluetooth®)技术开始全面支持Mesh网状网络(如图1)。蓝牙Mesh标准脱胎于蓝牙低功耗(BLE),用于建立多对多设备通信的新网络。蓝牙Mesh标准协议具有蓝牙BLE的特点,也有多对多的网络拓扑,无需网关同时具备多种应用profile标准,操作简单,在各种操作终端中普遍配备的优点,完全符合节点网络的特点;未来利用蓝牙beacon信息推送和定位技术,可以实现无连接推送和室内定位功能。

       1 Silicon Labs公司的套件及芯片

       公司提供的蓝牙Mesh标准协议目前已经推出第二版正式SDK,加入了调光、调色功能,标志着蓝牙Mesh在Lighting(照明)上的应用更加成熟;也加入了友员节点、低功耗节点,低功耗应用的实现也令蓝牙Mesh在Lighting领域的产品化成为现实。
  公 司 在 蓝 牙 M e s h 应 用 上 有、EFR32BG系列SoC和BGM系列模块,其中性价比最高的为EFR32BG13系列,并提供了相应的开发套件和例程,能大大提高蓝牙Mesh产品的开发速度。该SoC集成了蓝牙5.0 2.4 GHz RF硬件,内置PA和巴伦电路,RF外围器件只需要增加2个电感和1个电容,无需客户在射频方面投入不必要的精力。
  2 在照明领域应用蓝牙Mesh实例

       无论是在工业照明、商业照明还是在家庭照明中,实际灯的数量和开关的数量都远远超过初战演示,而且照明场景也远远复杂过初战演示。接下来,我们结合案例实现一个应用实例。

1554699094893731.png

  ①根据Silicon Labs公司提供的硬件资料重新制作了合乎产品尺寸的PCB(印制板),由于该SoC在无线方面集成了PA(功率放大器)和巴伦电路,外围电路相当简单,基本不需要进行任何硬件调试,一次PCB制作成功率相当高。官方提供的开发套件为两个LED,本应用实验将其扩展为三个LED;官方提供的开发套件为两个按键,分别完成开关、调光和出厂复位,本应用实验将其缩减为一个按键,采用单方向循环算法完成开关、调光和出厂复位。
  ②在应用实验中,我们模拟了一个需要用到50个节点的照明网络(如图2),将其分成4组,其中两组均为手动模式,为1个开关节点手动控制9个灯节点的开关和调光,这个场景是官方演示套装的加大版本,也是日常照明比较常见的场景;第3组为自动开关场景,2个开关节点按不同节拍自动控制25个灯节点开或关,模拟的是需要自动开关的场景,如路灯自动开启和熄灭;最后一组为自动转发场景,由1个开关节点和2个带转发功能灯节点完成,适用于长廊控制场景。
  下面将在初步实战和以上硬件基础上完成软件应用。
  ③在simplicity studio上建立例程SoC-Mesh Light和SoC-Mesh Switch,生成代码后可以直接进行编译,之后进行第一处修改,本应用实验的LED和引脚进行了改动,而LED是调用了PWM进行控制,所以需要进行引脚分配和PWM配置修改,可以在其他工程中调用硬件配置器进行图形化修改,生成代码。由于本应用实验中改动不大,故直接在源码中进行修改:

// configure LED pins
GPIO_PinModeSet(BSP_
L E D 0 _ P O R T , ( 5 U ) ,
gpioModePushPull, LED_OFF_
STATE);
GPIO_PinModeSet(BSP_
L E D 0 _ P O R T , ( 6 U ) ,
gpioModePushPull, LED_OFF_
STATE);
GPIO_PinModeSet(BSP_
L E D 0 _ P O R T , ( 7 U ) ,
gpioModePushPull, LED_OFF_STATE);
// configure pushbutton PB4 as inputs, with pull-
up enabled delete PB1
GPIO_PinModeSet(BSP_BUTTON0_PORT, (4U),
gpioModeInputPull, 1);
// configure PWM
TIMER0->ROUTELOC0 = LED0_ROUTELOC |
LED1_ROUTELOC | LED2_ROUTELOC;// add CC2
TIMER0->ROUTEPEN = TIMER_ROUTEPEN_
CC0PEN | TIMER_ROUTEPEN_CC1PEN | TIMER_
ROUTEPEN_CC2PEN;
sInitCC.mode = timerCCModePWM;
TIMER_InitCC(TIMER0, 0, &sInitCC);
TIMER_InitCC(TIMER0, 1, &sInitCC);
TIMER_InitCC(TIMER0, 2, &sInitCC); // add CC2
TIMER_CompareSet(TIMER0, 0, current_level);

TIMER_CompareSet(TIMER0, 1, current_level);
TIMER_CompareSet(TIMER0, 2, current_level); //
add CH2

修改一下出厂复位的触发条件:

case gecko_evt_system_boot_id:
// check pushbutton state at startup. If PB4 is
held down then do factory reset
if (GPIO_PinInGet(BSP_BUTTON0_PORT,
BSP_BUTTON0_PIN) == 0){
temp1 = RTCC_CounterGet();
while(GPIO_PinInGet(BSP_BUTTON0_
PORT, BSP_BUTTON0_PIN) == 0){
temp2 = RTCC_CounterGet()-
temp1;
if(temp2>LONG_PRESS_TIME_
TICKS){
t e m p 1 = R T C C _
CounterGet();
LED_set_state(LED_STATE_
PROV);
temp3++;
}
if(temp3>30){
initiate_factory_reset();
break;
}
}

if(temp3<=30){
struct gecko_msg_system_get_bt_
address_rsp_t *pAddr = gecko_cmd_system_get_bt_
address();
set_device_name(&pAddr-
>address);
// Initialize Mesh stack in Node
operation mode, wait for initialized event
result = gecko_cmd_mesh_node_
init()->result;
if (result) {
sprintf(buf, “init failed
(0x%x)”, result);
}
}
}

1554699125936998.png

       ④重新编译完后,可以烧录进第一、二组中,按进行组网分组即可完成手动模式的场景。
  ⑤在手动模式基础上修改自动模式的开启关闭,则变成自动模式的场景:

       //修改按键中断处理即可

void gpioint(uint8_t pin){
if ((pin == BSP_BUTTON0_PIN)&&(enter==0)) {
if (GPIO_PinInGet(BSP_BUTTON0_PORT,
BSP_BUTTON0_PIN) == 0) {
// pressed - record RTCC timestamp
pb0_press = RTCC_CounterGet();
} else {
// released - check if it was short or long press
t_diff = RTCC_CounterGet() - pb0_press;
if (t_diff < LONG_PRESS_TIME_TICKS) {
gecko_external_signal(EXT_
SIGNAL_PB4_SHORT_PRESS);
enter=1;
} else {
gecko_external_signal(EXT_
SIGNAL_PB4_LONG_PRESS);

enter=1;
}
}
}
e l s e i f ( ( p i n = = B S P _ B U T T O N 0 _
PIN)&&(enter==2)) {
enter=0;
}
}

       ⑥重新编译完后,可以烧录进第三、四组中,按进行组网分组即可完成自动模式的场景。
  ⑦在自动模式组网时,选择RELAY功能,则具备了转发功能,使用电池供电装置后,可以用在长廊控制场景。
  ⑧ 如 客 户 需 要 自 己 开 发 合 适 的 A p p , 则simplicity studio在上下载到ADK,按应用笔记《an1140-
bluetooth-mesh-for-android-adk.pdf》完成:安装,新建工程,展开下载到的ADK包,内有jar文件(路径:C:SiliconLabsSimplicityStudiov4developersdksblemeshv1.3appbluetoothandroid),将符合蓝牙Mesh的API接口导入,则可以进行下一步开发。
  注意事项如下。
  ①官方提供的App为演示版本,其分组数目只分到4组,但蓝牙Mesh标准是这样描述的:“A groupaddress is a multicast address and can represent multiple elements on one or more nodes. There are 16384 group addresses per mesh network”,是可分多达16384组的,足够任何场景使用。
  ②同样,device ID在蓝牙Mesh标准里是这样描述的:“A unicast address is allocated to an element and always represents a single element of a node. There are 32767 unicast addresses per mesh network”,演示版本中只分到250个会重新开始分配。
  ③蓝牙Mesh标准支持客户开发定制model,在图形化配置界面里面进行model修改和软件配置,即可完成。
  如下是软件修改:

       //定义IDmodel

my_model_t my_model = {
.elem_index = PRIMARY_ELEMENT,
.vendor_id = MY_VENDOR_ID,
.model_id = MY_MODEL_CLIENT_
ID,
.publish = 1,
.opcodes_len = 6,
.opcodes_data[0] = temperature_
get,
.opcodes_data[1] = temperature_
status,
.opcodes_data[2] = unit_get,
.opcodes_data[3] = unit_set,
.opcodes_data[4] = unit_set_unack,
.opcodes_data[5] = unit_status
};

       3 结论蓝牙Mesh标准具有多对多的网络拓扑,可以满足节点网络里各种节点的通信需求,无需网关,操作简单,在各种操作终端中普遍配备的优点,配搭无连接推送和室内定位功能,适合开发节点网络。
  公司推出的蓝牙Mesh SDK可以让蓝牙Mesh应用变得非常简单又灵活,EFR32BG13系列支持BT5.0,是Mesh Update模式的必要条件,故Labs公司的蓝牙Mesh方案是开发蓝牙Mesh产品的好选择。

       参考文献
       [1]Bluetooth Mesh Mesh Profile / Specification.
       [2]QSG148: Getting Started with the Silicon Labs Bluetooth ® Mesh Lighting Demonstration.
       [3]an1140-bluetooth-mesh-for-android-adk.
       [4]官方教程《Vendor model examples》.
       [5]efr32bg13-datasheet.
       [6]efr32xg13-reference-manual.
       [7]Bluetooth Mesh Networking Customer Friendly, July 2017.

本文来源于科技期刊《电子产品世界》2019年第4期第72页,欢迎您写论文时引用,并注明出处

关键词: 201904 蓝牙Mesh Silicon Labs

加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW

或用微信扫描左侧二维码

相关文章


用户评论

请文明上网,做现代文明人
验证码:
查看电脑版