生活物联网平台蓝牙Mesh智能照明系统开发教程

杨斌
  • 收获赞:42
  • 擅长领域:前天猫精灵IoT技术专家,擅长领域:物联网,无线通信

本文介绍如何基于生活物联网平台和天猫精灵连接芯片开发一个蓝牙Mesh智能照明系统,包括灯产品、场景面板产品与网关产品。

概述

方案介绍

随着提升生活品质和节能减排的需要,国内和海外市场智能照明需求持续增长,而蓝牙Mesh技术在成本、组网可靠性、覆盖范围、网节点规模、安全性等方面存在优势,特别适用于智能家居和小型商业照明的场景,已经得到广泛应用。

本方案基于生活物联网平台天猫精灵定制连接芯片云智能App,提供从云到端的一体化解决方案,使得开发者可以快速开发包括网关产品、灯产品、场景面板产品组成的蓝牙Mesh照明系统。

目标读者

全屋智能、电工照明方向的物联网方案商、品牌商的产品经理、软件开发人员和测试人员。

适用场景

  • 开发全屋智能照明或小型商用照明系统。

  • 开发海外销售的电工照明产品套装。

相关概念

  • 生活物联网平台:生活物联网平台是一款针对智能生活领域的物联网云平台,是在阿里云IaaS和PaaS层云产品的基础上,搭建的一套公有云平台。平台提供了功能设计、嵌入式开发调试、设备安全、云端开发、App开发、运营管理、数据统计等,助力开发者和方案商从产品前期开发到后期运营的全生命周期服务。适用于消费级的智能设备开发者,开发门槛较低,可以快速实现消费级设备的智能化。

  • 自有品牌项目:选择该项目开发属于自己品牌的智能IoT设备,支持全球化。在国内仍可以使用天猫精灵语音服务,但需要将云智能App的账号与天猫精灵账号做关联。对Mesh设备,通过云智能App可以灵活的组播控制,但通过关联的天猫精灵音箱和天猫精灵App在组播控制上有限制。

  • 天猫精灵生态项目:选择该项目可以开发直连天猫精灵IoT生态服务,即直接被天猫精灵音箱和天猫精灵App绑定和控制的IoT设备。不支持全球化。对Mesh设备,通过天猫精灵音箱和天猫精灵App可以灵活的组播控制。

  • 产品:设备的集合,通常指一组具有相同功能的设备。物联网平台为每个产品颁发全局唯一的ProductKey。

  • 设备:归属于某个产品下的具体设备。物联网平台为设备颁发产品内唯一的证书DeviceName。

  • 设备证书:设备证书指ProductKey、DeviceName、DeviceSecret、ProductSecret、ProductID的组合。设备必须使用平台颁发的唯一设备证书才能接入生活物联网平台。

  • 物模型:物模型是阿里云物联网平台为产品定义的数据模型,用于描述产品的功能,包括属性、服务和事件3个维度。

  • BLE(Bluetooth Low Energy):蓝牙低功耗技术,是蓝牙技术联盟(Bluetooth Special Interest Group)设计的一种低功耗无线连接技术,广泛应用于智能手机、可穿戴设备,相比经典蓝牙,BLE在保持同等通信范围的同时显著降低功耗和成本。

  • 蓝牙Mesh/SIG Mesh:蓝牙Mesh是蓝牙技术联盟(Bluetooth Special Interest Group)组织定义的标准,是一种组网技术,可以基于BLE设备构建多对多通信的网络。

  • Tiny Mesh:是阿里巴巴针对资源不足以支持SIG Mesh的低成本BLE芯片,定制的精简协议方案,使得Tiny Mesh节点与SIG Mesh节点能无缝的工作在同一个蓝牙Mesh网络中。

  • Mesh节点:加入蓝牙Mesh网络的设备。

  • Mesh Model:一个模型(Model)定义了特定功能的实现及交互流程。基于Model的消息一般由Opcode(代表该消息需要进行的操作)和Payload(代表该消息进行操作的内容)组成。

方案架构

方案架构图

本方案为基于生活物联网平台自有品牌项目的蓝牙Mesh方案,架构如下图所示。

image.png

方案组成

生活物联网平台提供的云、端一体化解决方案包括以下组成部分。

  • 云服务:提供了设备接入能力、产品功能设计、嵌入式开发调试、设备安全、云端开发、App开发、运营管理、数据统计等功能,支持全球化部署

  • 公版App:提供免开发的公版App,即云智能App,开发者既可以用来调试设备,也可以直接作为交付App,提供给C端用户(消费者)使用。

  • App面板:提供免开发的标准面板,开发者可以选择平台提供的常见品类(如灯、开关、插座等)的标准面板,也可以通过拖拽功能控件的方式来自定义界面。

  • Mesh网关方案:包括天猫精灵定制Wi-Fi&BLE双模芯片TG7100C与蓝牙Mesh网关SDK,开发者可以基于该芯片与配套的网关SDK开发蓝牙Mesh网关产品。

  • Mesh节点方案:包括天猫精灵定制蓝牙芯片TG7120B、TG7121B与蓝牙Mesh节点SDK,开发者可以基于该芯片与配套的节点SDK开发蓝牙Mesh灯产品与场景面板产品。

方案优势

  • 基于云、端一体化解决方案,可以快速开发与验证产品。可以快速实现全球化部署、多语言支持、海外三方语音对接,助力产品海外销售。

  • 基于TG7100C单芯片快速开发高性价比蓝牙Mesh网关。

    • 以一颗IoT芯片的成本,可以实现支持大于200个设备组网的Mesh网关。

    • 产品形态灵活,既可以是纯网关设备,或者支持Mesh网关功能的IoT设备(如智能插座)。

    • 支持标准Mesh设备与Tiny Mesh设备。

  • 蓝牙Mesh节点芯片,成熟稳定,已经大量用于量产产品。

  • Mesh网关与节点可以灵活组网与扩展。

    • 既可以无网关条件下由云智能App直接组网与控制,也可以灵活的增加多个网关,无需重新配网和绑定Mesh节点,无缝扩展蓝牙Mesh网络的覆盖范围。

    • 网关与节点SDK中已经对200个节点的网络规模做了优化。

Mesh节点方案介绍

芯片

天猫精灵定制连接芯片有多款高性价比蓝牙Mesh芯片,本方案以TG7120B与TG7121B两款为例。

节点SDK

申请与开通权限

节点SDK提供给购买天猫精灵定制连接芯片的开发者。请先与天猫精灵业务团队联系。上述芯片页面中有业务咨询合作的联系方式。

开通权限步骤如下。

  1. 登录阿里云code。请根据页面提示完成账号注册与登录。

  2. 进入控制台的个人设置页面

  3. 复制Username,并向TGmeshSDK@list.alibaba-inc.com邮箱发送SDK权限申请。申请权限的邮件格式,请参见获取SDK。申请时请注明芯片型号与需要开发的产品,用于开放芯片对应的SDK代码库。p236225.png

  4. SDK访问权限开通后,登录阿里云code,可以在项目中查看到SDK的代码库。既可以用Git下载,也可以直接下载zip包。

SDK组成

节点SDK提供了支持场景本地直控和大规模组网优化的灯应用示例和场景面板应用示例。可以基于示例开发相关产品。

模块

说明

应用示例

  • 灯应用示例:solution/genie_mesh_light_ctl

  • 场景面板应用示例:solution/genie_mesh_scene_panel

组件

通过上述2个应用关联的组件如BLE Mesh协议栈、BLE Host协议栈等。

板级支持包

通过上述2个应用关联Mesh芯片TG7120B与TG7121B的驱动与板级支持包等。

说明

本文以TG7120B芯片为例介绍开发灯应用,以TG7121B芯片为例介绍开发场景面板应用。

开发环境

Mesh节点SDK需要安装YoC开发环境。

TG7120B和TG7121B可以使用Linux开发。

安装和使用Linux开发环境请参见:

TG7120B可以支持在Windows下使用CDK开发(TG7121B不支持),使用CDK配合CKLink Lite调试器来调试。

Mesh智能灯应用介绍

应用功能说明

genie_mesh_light_ctl作为节点SDK中的白光灯应用,实现以下功能,可作为二次开发筒灯等产品基础代码。开发者可以在该应用基础上二次开发,如优化灯效,增加辅灯、产测等功能。

  • 支持通过App控制开关、亮度、色温与场景。

  • 支持6个预置场景。

  • 支持App预览、下发和保存24个非预置场景。

  • 支持从场景面板到灯在无网关环境下的组播场景控制。

  • 支持从场景面板到灯在无网关环境下的全开、全关、加亮度、减亮度、加色温、减色温等组播直控。

  • 支持场景面板被分享后,灯被分享者控制。

  • 大批量设备组网优化。

物模型与Mesh Model

genie_mesh_light_ctl白光灯应用对应的产品物模型如下表。

类型

名称

标识符

Attr Type

数据类型

数据定义

事件

硬件复位

hardwareReset

0x0023

-

事件类型:信息

事件

故障上报

faultReportEvent

0x0000

-

事件类型:故障

属性

开关

powerstate

0x0100

UINT8

布尔值:

0 - 关闭

1 - 打开

属性

亮度

brightness

0x0121

UINT16

单位百分比,取值范围:1 ~ 100

属性

色温

colorTemperature

0x0122

UINT16

单位百分比,取值范围:0 ~ 100

属性

模式

mode

0xF004

UINT16

枚举值。

取值范围

10001~10009 预置场景1~9

10101~10124 可配置场景1~24

可配置场景为用户维度数据,目前约定最多24个

属性

错误码

errorCode

0x0000

UINT8

枚举值

Mesh Model配置定义在文件solutions/genie_mesh_light_ctl/light_ctl/light.c中。

static sig_model_element_state_t light_elem_stat[ELEMENT_NUM];

/* 灯产品中的SIG通用模型定义 */
static struct bt_mesh_model primary_element[] = {
    /* 配置 Configuration Server */
    MESH_MODEL_CFG_SRV_NULL(),           
    /* Health Server */
    MESH_MODEL_HEALTH_SRV_NULL(),        

#ifdef CONFIG_MESH_MODEL_GEN_ONOFF_SRV
    MESH_MODEL_GEN_ONOFF_SRV(&light_elem_stat[0]), /* 开关 Generic OnOff Server */
#endif
#ifdef CONFIG_MESH_MODEL_LIGHTNESS_SRV
    MESH_MODEL_LIGHTNESS_SRV(&light_elem_stat[0]), /* 亮度 Lightness Server */
#endif
#ifdef CONFIG_MESH_MODEL_CTL_SRV
    MESH_MODEL_CTL_SRV(&light_elem_stat[0]),       /* 色温 Light CTL Server */
#endif
#ifdef CONFIG_MESH_MODEL_SCENE_SRV
    MESH_MODEL_SCENE_SRV(&light_elem_stat[0]),     /* 场景模式 Scene Server */
#endif
#ifdef CONFIG_MESH_MODEL_SCENE_SETUP_SRV
    MESH_MODEL_SCENE_SETUP_SRV(&light_elem_stat[0]),/* 场景模式 Scene Setup Server */
#endif
};

/* 厂商自定义模型定义 */
static struct bt_mesh_model primary_vendor_element[] = {
    MESH_MODEL_VENDOR_SRV(&light_elem_stat[0]),
};

/* 灯的主Element注册SIG通用模型和厂商自定义模型,其中GENIE_ADDR_LIGHT的定义为灯品类组播地址0xC000*/
struct bt_mesh_elem light_elements[] = {
    BT_MESH_ELEM(0, primary_element, primary_vendor_element, GENIE_ADDR_LIGHT),
};

预置场景

预置场景初始化示例代码参见文件components/genie_service/core/src/sig_models/sig_model_scene_setup_srv.c_scene_setup_load_preset_data函数。可以根据实际产品需求做调整。

static int _scene_setup_load_preset_data(void)
{
    if (GENIE_SCENE_PRESET_STORE_MAX > 0)        /* 预置场景1目标属性 */
    {
        genie_scene_data[0][GENIE_SCENE_STORE_MAX].occupied = 1;
        genie_scene_data[0][GENIE_SCENE_STORE_MAX].scene_number = MODE_1_SCENE_NUMBER;
        genie_scene_data[0][GENIE_SCENE_STORE_MAX].onoff = MODE_1_ONOFF;
        genie_scene_data[0][GENIE_SCENE_STORE_MAX].lightness = MODE_1_LIGHTNESS;
        genie_scene_data[0][GENIE_SCENE_STORE_MAX].color_temperature = MODE_1_COLOR_TEMPERATURE;
    }
    
    ...
    if (GENIE_SCENE_PRESET_STORE_MAX > 5)        /* 预置场景6目标属性 */
    {
        genie_scene_data[0][GENIE_SCENE_STORE_MAX + 5].occupied = 1;
        genie_scene_data[0][GENIE_SCENE_STORE_MAX + 5].scene_number = MODE_6_SCENE_NUMBER;
        genie_scene_data[0][GENIE_SCENE_STORE_MAX + 5].onoff = MODE_6_ONOFF;
        genie_scene_data[0][GENIE_SCENE_STORE_MAX + 5].lightness = MODE_6_LIGHTNESS;
        genie_scene_data[0][GENIE_SCENE_STORE_MAX + 5].color_temperature = MODE_6_COLOR_TEMPERATURE;
    }
}    
    

代码配置示例

灯产品开发中部分需要修改的代码配置说明如下。

  • 芯片封装配置

    根据电路板上使用的TG7120B芯片的实际封装,需要在boards/TG7120B_evb/package.yaml文件中选择正确的配置项。默认使能了CONFIG_CHIP_PACKAGE_QFN32。如果要实际使用SOP16封装,需要关闭CONFIG_CHIP_PACKAGE_QFN32,改为打开CONFIG_CHIP_PACKAGE_SOP16

    ## 第五部分:配置信息
    def_config:                              # 组件的可配置项
    BOARD_TG7120B_EVB: 1                            
    #CONFIG_CHIP_PACKAGE_SOP16: 1                                                
    #CONFIG_CHIP_PACKAGE_SOP24: 1
    CONFIG_CHIP_PACKAGE_QFN32: 1
  • 引脚配置

    根据电路设计中实际使用的PWM引脚与高/低电平有效来修改代码。例如TG7120B QFN32开发板上LED使用了P23与P31,参见 boards/TG7120B_evb/include/board_config.h的引脚定义。宏PIN_LED_RPIN_LED_G定义了白光灯的两路PWM引脚。

    #define PIN_LED_R  P23
    #define PIN_LED_G  P31

    文件solutions/genie_mesh_light_ctl/light_ctl/light_driver.cled_config[]定义中指定了HIGH_LIGHT或者LOW_LIGHT,即PWM信号是高电平还是低电平有效。

    static led_light_cfg_t led_config[] = {
    #if defined(BOARD_TG7121B_EVB)
        LED_LIGHT_MODEL(GENIE_COLD_WARM_LIGHT, &pwm_channel_config[0], HIGH_LIGHT, &pmw_light[0], ARRAY_SIZE(pwm_channel_config)), /* &pmw_light[0], */
    #else
        LED_LIGHT_MODEL(GENIE_COLD_WARM_LIGHT, &pwm_channel_config[0], LOW_LIGHT, &pmw_light[0], ARRAY_SIZE(pwm_channel_config)), /* &pmw_light[0], */
    #endif
    };
  • XTALCAP

    SDK中XTALCAP默认值为9,在文件components/drv_bt_TG7120B/TG7120B_hci.c中可以查看。使用DUT组件的AT+XTALCAP指令写入校准值后,XTALCAP的值将被覆盖。XTALCAP值需要通过仪表(如极致汇仪或者CMW500)测试出匹配的值,推荐产测功能集成YoC DUT组件,通过AT指令写入XTALCAP校准值。YoC DUT组件参见文档TG7120B产测指令集说明

  • 综合示例

    以灯产品实际使用SOP16封装芯片,接P2与P34两路PWM引脚,PWM高电平有效,电路板对应的XTALCAP值为16为例,需要在SDK上修改代码如下后编译。

    diff --git a/boards/TG7120B_evb/include/board_config.h b/boards/TG7120B_evb/include/board_config.h
    index 01036ee..a19c713 100755
    --- a/boards/TG7120B_evb/include/board_config.h
    +++ b/boards/TG7120B_evb/include/board_config.h
    @@ -18,8 +18,8 @@
     #define PIN_LED_G  P25
     #define PIN_LED_B  P26
     #else
    -#define PIN_LED_R  P23
    -#define PIN_LED_G  P31
    +#define PIN_LED_R  P2
    +#define PIN_LED_G  P34
     #define PIN_LED_B  P32
     #endif
     #define PIN_LED_C  P33
    diff --git a/boards/TG7120B_evb/package.yaml b/boards/TG7120B_evb/package.yaml
    index 7acb7f3..84e5da8 100755
    --- a/boards/TG7120B_evb/package.yaml
    +++ b/boards/TG7120B_evb/package.yaml
    @@ -105,9 +105,9 @@ source_file:                       # <可选项> 指定参与编译的源
     ## 第五部分:配置信息
     def_config:
         BOARD_TG7120B_EVB: 1                              # 组件的可配置项
    -    #CONFIG_CHIP_PACKAGE_SOP16: 1
    +    CONFIG_CHIP_PACKAGE_SOP16: 1
         #CONFIG_CHIP_PACKAGE_SOP24: 1
    -    CONFIG_CHIP_PACKAGE_QFN32: 1
    +    #CONFIG_CHIP_PACKAGE_QFN32: 1
     
         CONFIG_MAX_PARTITION_NUM: 8
         SYSINFO_PRODUCT_MODEL : "TG7120B"
    diff --git a/components/drv_bt_TG7120B/TG7120B_hci.c b/components/drv_bt_TG7120B/TG7120B_hci.c
    index 2f7ba7e..3ff49b6 100755
    --- a/components/drv_bt_TG7120B/TG7120B_hci.c
    +++ b/components/drv_bt_TG7120B/TG7120B_hci.c
    @@ -323,13 +323,14 @@ void hal_rfphy_init(void)
         //============config RF Frequency Offset
         g_rfPhyFreqOffSet   = RF_PHY_FREQ_FOFF_00KHZ;
         //============config xtal 16M cap
    -    uint32_t xtalcap = 0x9;
    +    uint32_t xtalcap = 0x10;
         extern int dut_hal_xtalcap_get(uint32_t *xtalcap);
         int ret = dut_hal_xtalcap_get(&xtalcap);
         if (ret != 0) {
    -        xtalcap = 0x9;
    +        xtalcap = 0x10;
         }
         XTAL16M_CAP_SETTING(xtalcap);
    +    XTAL16M_CURRENT_SETTING(0x03);
     
         ble_main();
         NVIC_DisableIRQ(TIM2_IRQn);
    diff --git a/solutions/genie_mesh_light_ctl/light_ctl/light_driver.c b/solutions/genie_mesh_light_ctl/light_ctl/light_driver.c
    index 4ac2cf2..10a2b13 100755
    --- a/solutions/genie_mesh_light_ctl/light_ctl/light_driver.c
    +++ b/solutions/genie_mesh_light_ctl/light_ctl/light_driver.c
    @@ -23,7 +23,7 @@ static led_light_cfg_t led_config[] = {
     #if defined(BOARD_TG7121B_EVB)
         LED_LIGHT_MODEL(GENIE_COLD_WARM_LIGHT, &pwm_channel_config[0], HIGH_LIGHT, &pmw_light[0], ARRAY_SIZE(pwm_channel_config)), /* &pmw_light[0], */
     #else
    -    LED_LIGHT_MODEL(GENIE_COLD_WARM_LIGHT, &pwm_channel_config[0], LOW_LIGHT, &pmw_light[0], ARRAY_SIZE(pwm_channel_config)), /* &pmw_light[0], */
    +    LED_LIGHT_MODEL(GENIE_COLD_WARM_LIGHT, &pwm_channel_config[0], HIGH_LIGHT, &pmw_light[0], ARRAY_SIZE(pwm_channel_config)), /* &pmw_light[0], */
     #endif
     };

代码编译

以TG7120B芯片为例。

  • Linux环境编译代码

    完成代码修改与配置后,执行编译。

    cd solutions/genie_mesh_light_ctl/
    make clean
    make 

    生成的完整烧录固件:solutions/genie_mesh_light_ctl/generated/total_image.hexf

    OTA固件:solutions/genie_mesh_light_ctl/generated/fota.bin

  • Windows环境编译代码

    Windows系统下可以使用CDK编译。

    进入目录solutions/genie_mesh_light_ctl,打开genie_mesh_light_ctl.cdkproj。单击build编译该工程即可。image.png

固件烧录

TG7120B支持通过串口烧录。需要下载TG7120B烧录工具TG71XX Programmer,下载并解压后,遵照《TG71XX Programmer User's Guide》,根据芯片实际封装选择对应的烧录方式。

Mesh场景面板应用介绍

应用功能说明

genie_mesh_scene_panel作为节点SDK中的场景面板应用,实现了以下功能,可作为二次开发场景面板等产品的基础代码。开发者可以在该应用基础上二次开发,如调整按键功能定义,修改LED、蜂鸣器等提示方式,增加产测功能等。

  • 六键面板,如按键未编辑和保存场景,单击默认触发组播控制6个预置场景。如按键已编辑和保存场景,单击触发保存的场景。

  • 六键面板,双击可触发全开、全关、加亮度、减亮度、加色温、减色温等直控(组播控制)。

  • 六键面板,三连击可触发唤醒,接收App下发的各按键新场景,或者恢复出厂预置场景。

  • 六键面板,四连击触发设备进入OTA模式。

  • 任意键长按10秒左右,解除绑定,恢复出厂设置。

  • 设备进入低功耗。

  • 部分LED提示。

物模型与Mesh Model

genie_mesh_scene_panel应用对应的产品物模型如下表。

类型

名称

标识符

Attr Type

数据类型

数据定义

事件

硬件复位

hardwareReset

0x0023

-

事件类型:信息

事件

故障上报

faultReportEvent

0x0000

-

事件类型:故障

属性

场景一

sceneA

按键1保存的场景

0x0388

UINT16

枚举值:

10001: 预置场景1

10101~10124 可配置场景1~24

属性

场景二

sceneB

按键2保存的场景

0x0389

UINT16

枚举值:

10002: 预置场景2

10101~10124 可配置场景1~24

属性

场景三

sceneC

按键3保存的场景

0x038A

UINT16

枚举值:

10003: 预置场景3

10101~10124 可配置场景1~24

属性

场景四

sceneD

按键4保存的场景

0x038B

UINT16

枚举值:

10004: 预置场景4

10101~10124 可配置场景1~24

属性

场景五

sceneE

按键5保存的场景

0x038C

UINT16

枚举值:

10005: 预置场景5

10101~10124 可配置场景1~24

属性

场景六

sceneF

按键6保存的场景

0x038D

UINT16

枚举值:

10006: 预置场景6

10101~10124 可配置场景1~24

属性

电池电量状态

batteryStatus

0x0549

UINT8

枚举值:

0 - 低电量

1 - 正常

属性

错误码

errorCode

0x0000

UINT8

枚举值:

128 - 设备未准备好

Mesh Model配置定义在文件solutions/genie_mesh_scene_panel/scene_panel/scene_panel.c中。

static sig_model_element_state_t scene_panel_elem_state[ELEMENT_NUM];

/* 场景面板产品中的SIG通用模型定义 */
static struct bt_mesh_model primary_element[] = {
    /* 配置 Configuration Server */ 
    MESH_MODEL_CFG_SRV_NULL(),    
    /* Health Server */
    MESH_MODEL_HEALTH_SRV_NULL(), 
    /* 开关 Generic OnOff Server */
    MESH_MODEL_GEN_ONOFF_SRV(&scene_panel_elem_state[0]),
};

/* 厂商自定义模型定义 */
static struct bt_mesh_model primary_vendor_element[] = {
    MESH_MODEL_VENDOR_SRV(&scene_panel_elem_state[0]), 
};

/* 主Element注册SIG通用模型和厂商自定义模型 */
struct bt_mesh_elem scene_panel_elem[] = {
    BT_MESH_ELEM(0, primary_element, primary_vendor_element, GENIE_ADDR_SWITCH),
};

每个按键关联不同的属性,如6个按键对应的6个属性sceneAsceneF, 对应Vendor Model中不同的Attribute Type 0x03880x038D

场景调用

六键面板,如按键未编辑和保存场景,单击默认触发组播控制6个预置场景。如按键已编辑和保存场景,单击触发保存的场景。

场景调用操作实现在文件solutions/genie_mesh_scene_panel/scene_panel/scene_panel.c中。

目标组播地址为灯品类组播地址GENIE_ADDR_LIGHT0xC000,如被控设备不限于灯品类,可根据应用需要修改为如0xCFFF(所有产品组播地址)。

static void scene_panel_scene_recall(uint8_t element_id, uint16_t scene_number)
{
        ...
    transport_model_param.dst_addr = GENIE_ADDR_LIGHT; /*目标组播地址为0xC000,可修改*/
    ...
}

按键操作

各按键功能可以在二次开发中重新定义。场景面板应用示例中的长按、单击、双击、三击、四击等事件对应的功能实现请参见solution/genie_mesh_scene_panel/scene_panel/scene_panel_input.c

static void handle_input_event(uint8_t button_id, scene_panel_press_type_e press_type)
{
    switch (press_type)
    {
    case SWITCH_PRESS_PROVISION: /* 任意键长按10秒左右,解除绑定,恢复出厂设置 */
    {
                ...
    }
    break;
    case SWITCH_PRESS_ONCE:          /* 单击 */
    {
        scene_panel_handle_button_pressed(button_id, press_type);
        scene_panel_led_do_work(LED_WORK_MODE_SINGLE_PRESS);
    }
    break;
    case SWITCH_PRESS_DOUBLE:          /* 双击 */
    {
        scene_panel_handle_button_pressed(button_id, press_type);
        scene_panel_led_do_work(LED_WORK_MODE_DOUBLE_PRESS);
    }
    break;
    case SWITCH_PRESS_TRIPLE:    /* 三连击可触发唤醒,接收App下发的各按键新场景,或者恢复出厂预置场景 */
    {
        scene_panel_led_do_work(LED_WORK_MODE_WAKEUP);
        aos_timer_change_once(&ota_timeout_timer, SCENE_PANEL_WAKEUP_TIMEOUT);
        aos_timer_start(&ota_timeout_timer);
    }
    break;
    case SWITCH_PRESS_STANDBY:
    {
#ifdef CONFIG_PM_DEEP_SLEEP
        scene_panel_led_do_work(LED_WORK_MODE_STANDBY);
        printf("enter deep sleep\n");
        aos_msleep(1000);
        genie_lpm_set_bootup_reason(BOOT_REASON_TYPE_SET(BOOT_REASON_STANDBY));
        genie_lpm_deep_sleep();
#endif
    }
    break;
    case SWITCH_PRESS_PRESSED:
    {
#ifdef SCENE_PANEL_UNPROV_PROMPT
        if (!bt_mesh_is_provisioned())
        {
            scene_panel_set_led_status(LED_ON);
        }
#endif
    }
    break;
    case SWITCH_PRESS_RELEASED:
    {
#ifdef SCENE_PANEL_UNPROV_PROMPT
        if (!bt_mesh_is_provisioned())
        {
            scene_panel_set_led_status(LED_OFF);
        }
#endif
    }
    break;
    case SWITCH_PRESS_START_OTA:        /* 四连击触发设备进入OTA模式 */
    {
        is_user_trigger_ota = true;
        scene_panel_led_do_work(LED_WORK_MODE_OTA);

        genie_ota_report_version();
        aos_timer_start(&ota_timeout_timer);
    }
    break;
    default:
        break;
    }
}

单击调用场景与双击特殊操作的实现如下。

static int scene_panel_handle_button_pressed(uint8_t button_id, scene_panel_press_type_e press_type)
{
    uint16_t scene_number = 0;

    if (press_type == SWITCH_PRESS_ONCE)        /* 单击按键 */
    {
        /* 获取按键当前保存的场景号(预置场景或覆盖的配置场景)*/
        scene_number = scene_panel_get_scene_number(button_id); 
        /* 根据场景号调用场景*/
        scene_panel_scene_recall(0, scene_number);
    }
    else if (press_type == SWITCH_PRESS_DOUBLE)        /* 双击按键 */
    {
        switch (button_id)
        {
        case ALL_ON_BUTTON: /* 所有灯全开,亮度与色温恢复到关灯前的状态 */
            scene_panel_generic_onoff_set(0, 1);
            break;

        case ALL_OFF_BUTTON: /* 所有灯全关 */
            scene_panel_generic_onoff_set(0, 0);
            break;

        case LIGHTNESS_ADD_BUTTON: /* 所有灯调高亮度 +25%  */
            scene_panel_lightness_adj(0, 1);
            break;

        case LIGHTNESS_DEC_BUTTON: /* 所有灯调低亮度 -25%  */
            scene_panel_lightness_adj(0, 0);
            break;

        case COLOR_TEMP_ADD_BUTTON: /* 所有灯调高色温 +25% */
            scene_panel_color_temperature_adj(0, 1);
            break;

        case COLOR_TEMP_DEC_BUTTON: /* 所有灯调低色温 -25% */
            scene_panel_color_temperature_adj(0, 0);
            break;

        default:
            break;
        }
    }

    return 0;
}

代码配置示例

  • 按键引脚配置

    按键使用的GPIO在components/genie_service/sal/inc/genie_sal_gpio.h文件中配置。

    #if defined(BOARD_TG7120B_EVB)         /* 当使用TG7120B开发板时生效,可修改 */
    #define GENIE_LPM_WAKEUP_GPIO_1 (P14)
    #define GENIE_LPM_WAKEUP_GPIO_2 (P15)
    #define GENIE_LPM_WAKEUP_GPIO_3 (P24)
    #define GENIE_LPM_WAKEUP_GPIO_4 (P25)
    #define GENIE_LPM_WAKEUP_GPIO_5 (P26)
    #define GENIE_LPM_WAKEUP_GPIO_6 (P31)
    ...
    #elif defined(BOARD_TG7121B_EVB)       /* 当使用TG7121B开发板时生效,可修改 */
    #define GENIE_LPM_WAKEUP_GPIO_1 (PA01)
    #define GENIE_LPM_WAKEUP_GPIO_2 (PA02)
    #define GENIE_LPM_WAKEUP_GPIO_3 (PA09)
    #define GENIE_LPM_WAKEUP_GPIO_4 (PB05)
    #define GENIE_LPM_WAKEUP_GPIO_5 (PB06)
    #define GENIE_LPM_WAKEUP_GPIO_6 (PB15)
    ...
    #endif

    注意TG7121B芯片SOP16封装只有PB15引脚有唤醒能力,QFN32封装有4个有唤醒能力。当开发电池供电的多键场景面板产品时,需要使能低功耗,需要将各键关联到具有唤醒能力的引脚。

  • 睡眠模式

    通过solutions/genie_mesh_scene_panel/package.yaml文件中的宏可以打开和关闭。

    ## 第五部分:配置信息
    def_config:
      .......
    
      #Enable or Disable low power mode +++
      CONFIG_PM_SLEEP: 1
      #Enable or Disable low power mode ---

代码编译

以TG7121B芯片为例。需要在Linux环境编译代码。

完成代码修改与配置后,执行编译。

cd solutions/genie_mesh_scene_panel/
make clean
make SDK=sdk_chip_TG7121B

生成的完整烧录固件:solutions/genie_mesh_scene_panel/generated/total_image.hex

OTA固件:solutions/genie_mesh_scene_panel/generated/fota.bin

固件烧录

TG7121B支持J-Flash烧录和串口工具烧录两种方式,参见boards/TG7121B_evb/README.md文件。

Mesh网关方案介绍

芯片

目前可以选用天猫精灵定制连接芯片中的TG7100C作为开发蓝牙Mesh网关产品的主芯片。

TG7100C是一款高性价比Wi-Fi&BLE双模芯片,搭载RISC-V处理器,具备276KB RAM,2MB Flash。

更多详情请参见TG7100C芯片介绍开发资源

网关SDK

申请与开通权限

SDK提供给购买天猫精灵定制连接芯片的开发者。请先与天猫精灵业务团队联系。上述芯片页面中有业务咨询合作的联系方式。

开通权限步骤如下。

  1. 登录阿里云code。请根据页面提示完成账号注册与登录。

  2. 进入控制台的个人设置页面

  3. 复制Username,并向TGmeshSDK@list.alibaba-inc.com邮箱发送SDK权限申请。申请权限的邮件格式,请参见获取SDK。申请时请注明芯片型号与需要开发的产品,用于开放芯片对应的SDK代码库。p236225.png

  4. SDK访问权限开通后,登录阿里云code,可以在项目中查看到SDK的代码库。既可以用Git下载,也可以直接下载zip包。

SDK入口

网关应用基于smart_outlet智能插座应用Products/example/smart_outlet

开发环境

网关SDK开发环境安装请参见准备开发环境

Wi-Fi智能插座应用

应用说明

网关应用基于smart_outlet智能插座应用,在生活物联网平台创建产品时,可以根据网关的产品形态,选择创建一个智能插座产品,开发一个插座网关,或者创建一个网关产品,开发一个无其他功能的纯网关。两种网关产品固件可以复用同一份。

智能插座应用更多说明参见文档smart_outlet应用代码结构介绍固件适配说明

代码编译

编译网关固件之前,需要使能Products/example/smart_outlet/smart_outlet.mk文件中的宏CONFIG_BLEMESH_GATEWAY_ENABLE

smart_outlet.mk中的两个宏CONFIG_BLEMESH_GATEWAY_ENABLECONFIG_BLEMESH_COMBODEV_ENABLE二选一。即TG7100C作为蓝牙Mesh网关功能和Combo Mesh设备功能二选一。

执行编译:

./build.sh clean
./build.sh example smart_outlet tg7100cevb MAINLAND ONLINE 0

生成的完整烧录固件:out/smart_outlet@tg7100cevb/smart_outlet@tg7100cevb.bin

OTA固件:out/smart_outlet@tg7100cevb/app-2.0.0-20211222.172359_ota.bin

固件烧录

网关固件烧录步骤请参见固件烧录与运行

方案实施

前提条件

  1. 请确保已经注册了阿里云账号,并完成实名认证。注册操作请参见阿里云账号注册流程

  2. 请确保账号已开通生活物联网平台服务。

  3. 已开通阿里云code

  4. 已联系天猫精灵业务团队获得天猫精灵定制IoT连接芯片TG7100CTG7120BTG7121B或者开发板,并获取SDK,安装好开发环境。

  5. 在应用商店下载与安装好云智能App,并注册好账号,设备使用国家/地区选择中国大陆

开发纯网关产品操作步骤

步骤一:完成网关固件编译、烧录与运行。

如基于TG7100C开发板开发,连接USB转串口线,将串口工具波特率设置为2000000,与开发板建立连接。

步骤二:在生活物联网平台控制台创建项目。

新建项目时选择自有品牌项目

说明

本方案蓝牙Mesh网关仅能用于生活物联网平台自有品牌项目创建的产品,用云智能App配网。如果使用相同的网关固件,烧录天猫精灵生态项目产品的设备证书,该设备可以被天猫精灵音箱和天猫精灵App配网,仅有IoT设备的功能。

步骤三:创建产品。

  1. 所属品类选择网络设备/网关

  2. 节点类型建议选择设备。由于现有方案中蓝牙Mesh网关与蓝牙Mesh节点之间都是平等的网络节点,不存在网关与子设备中网关代理子设备的架构,选择设备目前在设备详情页里会少一个空的子设备列表。

  3. 是否接入网关选择

  4. 连网方式选择WiFi网关1.png

步骤四:配置功能定义。

纯网关产品的功能定义可以为空。网关功能定义

步骤五:配置人机交互。

  1. 使能公版App。网关3.png

  2. 设备面板选用网关官方模版。网关4.png

  3. 配网方式配置为蓝牙辅助配网一键配网网关5.png

步骤六:发布产品。

在批量投产页面,完成发布产品。只有完成发布的产品的待配网设备,才能在云智能App自动发现页面被发现。

网关产品发布

步骤七:获取测试用的设备证书。

  1. 在设备调试页面单击新增测试设备,生成测试的设备证书。新增测试设备i

  2. 查询Wi-Fi MAC地址示例,通过串口输入指令mac,注意通过串口工具输入时要加回车与换行。

    #mac
    MAC address: 18-b9-05-c0-6e-d5
  3. 输入小写格式的MAC地址,如示例中的18b905c06ed5作为DeviceName新增测试设备设备证书。网关输入mac

  4. 拷贝测试设备证书,请注意一定要依次完整拷贝ProductKey,DeviceName,DeviceSecret,ProductSecret,ProductID。网关拷贝三元组

重要

蓝牙辅助配网要求Wi-Fi的MAC地址与设备证书中的DeviceName保持一致。

步骤八:设置设备证书。

  1. 设置设备证书信息,在设备上电后将完整的设备证书信息写入开发板。

    linkkey ProductKey DeviceName DeviceSecret ProductSecret ProductID
  2. 设备重置,清除设备配网信息。

    reset

步骤九:给设备配网。

网关需要通过云智能App配网连接上路由器。

  1. 在云智能App自动发现页面,发现处于待配网状态的设备。

  2. 单击发现到的网关设备右侧的➕,完成网关设备的WiFi配网和绑定。网关配网

说明

如果需要把网关功能整合进IoT设备,也可以支持创建一个IoT设备(如智能插座),开发一个有蓝牙Mesh网关功能的智能插座。操作步骤与开发纯网关产品只有步骤三到步骤五有区别,其他步骤相同,请参见开发自有品牌项目插座产品

开发灯产品操作步骤

步骤一:完成灯固件编译、烧录与运行。

如基于TG7120B开发板开发,连接USB转串口线,将串口工具波特率设置为256000,与开发板建立连接。

步骤二:在生活物联网平台控制台创建或者选择项目。

  • 新建项目时选择自有品牌项目

  • 已有项目时选择项目即可。

步骤三:创建产品。创建灯产品1.png

步骤四:配置功能定义。

白光灯至少包含以下属性与事件。灯物模型

步骤五:配置人机交互。

  1. 使能公版App并配置各选项。image.png

  2. 配置设备面板,可以选择创建一个简单面板并选择。image.png

  3. 需要完成配置配网引导、配置多语言管理及配置自动化与定时的相关步骤,详情请参见配置配网引导配置多语言管理配置自动化和定时

  4. 根据需求配置语音接入。image.png

步骤六:发布产品。

在批量投产页面,完成发布产品。只有完成发布的产品的待配网设备,才能在云智能App自动发现页面被发现。灯产品发布

步骤七:获取测试用的设备证书。

  1. 在设备调试页面单击新增测试设备,生成测试的设备证书。

  2. 单击确定,自动生成DeviceName。

  3. 拷贝测试设备证书,依次完整拷贝ProductID,DeviceSecret,DeviceName。灯拷贝三元组

步骤八:设置设备证书。

  1. 设置设备证书信息,在设备上电后将完整的设备证书信息通过串口命令写入开发板。

    set_tt ProductID DeviceSecret DeviceName
  2. 设备重启与重置,清除设备配网信息。

    reboot
    reset

步骤九:给设备配网。

  1. 在云智能App自动发现页面,发现处于待配网状态的设备。

  2. 单击发现到的网关设备右侧的➕,完成灯设备的Mesh配网和绑定。灯配网

开发场景面板产品操作步骤

步骤一:完成场景面板固件编译、烧录与运行。

如基于TG7121B开发板开发,连接USB转串口线,将串口工具波特率设置为115200,与开发板建立连接。

步骤二:在生活物联网平台控制台创建或者选择项目。

  • 新建项目时选择自有品牌项目

  • 已有项目时选择项目即可。

步骤三:创建产品。

所属品类选择场景面板

创建场景面板.png

步骤四:配置功能定义。

重要

使用推荐的功能定义,不要做额外修改。

  • 场景一(sceneA)到场景六(sceneF)这6个属性的数据定义中的第一个枚举值分别为“10001-预置场景一”到“10006-预置场景六”,对应的是6个按键的预置场景号。

  • 6个属性的其他枚举值“10101-可配置场景一”到“10124-可配置场景二十四”对应每个按键可以保存的24个可配置场景。

场景面板物模型

步骤五:配置人机交互。

  1. 使能公版App并配置各选项。人机交互.png

  2. 设备面板选用场景面板官方模版。image.png

步骤六:发布产品。

在批量投产页面,完成发布产品。只有完成发布的产品的待配网设备,才能在云智能App自动发现页面被发现。场景面板产品发布

步骤七:获取测试用的设备证书。

  1. 在设备调试页面单击新增测试设备,生成测试的设备证书。

  2. 单击确定,自动生成DeviceName。

  3. 拷贝测试设备证书,依次完整拷贝ProductID,DeviceSecret,DeviceName。场景面板拷贝三元组

步骤八:设置设备证书。

  1. 设置设备证书信息,在设备上电后将完整的设备证书信息通过串口命令写入开发板。

    set_tt ProductID DeviceSecret DeviceName
  2. 设备重启与重置,清除设备配网信息。

    reboot
    reset

步骤九:给设备配网。

  1. 在云智能App自动发现页面,发现处于待配网状态的设备。

  2. 单击发现到的网关设备右侧的➕,完成场景面板设备的Mesh配网和绑定。场景面板配网

产品量产操作步骤

步骤一:购买激活码

  1. 发布产品后进入购买激活码。量产流程

  2. 购买激活码时,注意选择自有品牌蓝牙设备image.png

步骤二:批量投产

  • 如果使用智能生活物联网提供的MAC地址,激活码生成方式可以选择自动生成

  • 如果需要自己上传MAC地址,作为DeviceName来生成设备证书,激活码生成方式可以选择批量上传

批量投产

方案验证

设备控制

本地控制与远程控制

  • 验证本地控制:打开手机蓝牙功能且手机App连接到蓝牙Mesh网络时,控制设备会优先本地控制。没有绑定网关或者网关已离线不影响App本地控制。

  • 验证远程控制:保持网关在线且关闭手机蓝牙功能,此时控制设备会通过网关远程控制。

设备端关键日志

  • 开灯

    [RX] RSSI: -77
    [RX] TTL: 9 AppIdx: 0x0000
    [RX] SRC: 0x28
    [RX] DST: 0x1ACC        /* 目标地址为单播地址 */
    [RX] OPCODE: 0x8202
    [RX] Payload size: 4
    [RX] 01c74100           /*App下发开灯操作:Generic OnOff Set消息(Opcode 0x8202), OnOff 0x01*/
    <I>AOSBT sig_model_event:SigE:15
    <I>AOSBT sig_model_event:SigE:20
    <I>AOSBT light_ctl_event_handler:SIG mesg ElemID(0)
    [TX] TTL: 5 AppIdx: 0x0000
    [TX] SRC: 0x1ACC
    [TX] DST: 0x28
    [TX] msg size: 3
    [TX] 820401             /* 设备回复 Generic OnOff Status消息(Opcode 0x8204) OnOff 0x01*/
  • 关灯

    [RX] RSSI: -86
    [RX] TTL: 9 AppIdx: 0x0000
    [RX] SRC: 0x28
    [RX] DST: 0x1ACC        /* 目标地址为单播地址 */
    [RX] OPCODE: 0x8202
    [RX] Payload size: 4
    [RX] 00c64100           /*App下发关灯操作:Generic OnOff Set消息(Opcode 0x8202), OnOff 0x00*/
    <I>AOSBT sig_model_event:SigE:15
    <I>AOSBT sig_model_event:SigE:20
    <I>AOSBT light_ctl_event_handler:SIG mesg ElemID(0)
    [TX] TTL: 5 AppIdx: 0x0000
    [TX] SRC: 0x1ACC
    [TX] DST: 0x28
    [TX] msg size: 3
    [TX] 820400             /* 设备回复 Generic OnOff Status消息(Opcode 0x8204) OnOff 0x00*/
  • 调亮度,App上依次调整灯亮度为50%和75%,收发的消息如下。平台通过下发Light Lightness Set(Opcode 0x824C)消息来设置灯的亮度。Light Lightness Set消息中的字段Lightness(16bit)表示亮度,0xFFFF(65535)表示最大亮度,即100%。示例中的0x8000(32768)为相对于0xFFFF (65535)为50%,0xbfff(49151)为相对于0xFFFF (65535)为75%。

    [RX] RSSI: -79
    [RX] TTL: 8 AppIdx: 0x0000
    [RX] SRC: 0x28
    [RX] DST: 0x1ACC        /* 目标地址为单播地址 */
    [RX] OPCODE: 0x824C
    [RX] Payload size: 5
    [RX] 0080c84100         /*App下发Light Lightness Set消息(Opcode 0x824C),亮度0x8000*/
    <I>AOSBT sig_model_event:SigE:20
    <I>AOSBT light_ctl_event_handler:SIG mesg ElemID(0)
    <I>AOSBT sig_model_event:SigE:15
    [TX] TTL: 5 AppIdx: 0x0000
    [TX] SRC: 0x1ACC
    [TX] DST: 0x28
    [TX] msg size: 4
    [TX] 824e0080           /* 设备回复Light Lightness Status消息(Opcode 0x824E),亮度0x8000 */
    [RX] RSSI: -80
    [RX] TTL: 9 AppIdx: 0x0000
    [RX] SRC: 0x28
    [RX] DST: 0x1ACC        /* 目标地址为单播地址 */
    [RX] OPCODE: 0x824C
    [RX] Payload size: 5
    [RX] ffbfcc4100         /*App下发Light Lightness Set消息(Opcode 0x824C),亮度0xbfff*/
    <I>AOSBT sig_model_event:SigE:20
    <I>AOSBT light_ctl_event_handler:SIG mesg ElemID(0)
    <I>AOSBT sig_model_event:SigE:15
    [TX] TTL: 5 AppIdx: 0x0000
    [TX] SRC: 0x1ACC
    [TX] DST: 0x28
    [TX] msg size: 4
    [TX] 824effbf           /* 设备回复Light Lightness Status消息(Opcode 0x824E),亮度0xbfff */
  • 调色温,App上依次调整灯色温为1%和99%,收发的消息如下。平台通过下发Light CTL Set(Opcode 0x825E)消息来设置灯的色温。Light CTL Set消息中的CTL Temperature字段(16bit)表示色温,取值范围为80020000(即0x03200x4E20)。其中下发0x0320(800)代表色温值取最低(对应色温以百分比为单位的0%),0x4E20(20000)代表色温值取最高(对应色温以百分比为单位的100%)。中间的值按比例计算示例中的0x03e0(992)折算为1%,0x4d60(19808)折算为99%。

    [RX] RSSI: -80
    [RX] TTL: 9 AppIdx: 0x0000
    [RX] SRC: 0x28
    [RX] DST: 0x1ACC        /* 目标地址为单播地址 */
    [RX] OPCODE: 0x825E
    [RX] Payload size: 9
    [RX] 66e6e0030000d54100 /*App下发Light CTL Set(Opcode 0x825E)消息,色温0x030e*/
    <I>AOSBT sig_model_event:SigE:20
    <I>AOSBT light_ctl_event_handler:SIG mesg ElemID(0)
    <I>AOSBT sig_model_event:SigE:15
    [TX] TTL: 5 AppIdx: 0x0000
    [TX] SRC: 0x1ACC
    [TX] DST: 0x28
    [TX] msg size: 6
    [TX] 82600080e003       /* 设备回复Light CTL Status消息(Opcode 0x8260),色温0x030e */
    [RX] RSSI: -77
    [RX] TTL: 8 AppIdx: 0x0000
    [RX] SRC: 0x28
    [RX] DST: 0x1ACC        /* 目标地址为单播地址 */
    [RX] OPCODE: 0x825E
    [RX] Payload size: 9
    [RX] 66e6604d0000d64100  /*App下发Light CTL Set消息(Opcode 0x825E),色温0x4d60*/
    <I>AOSBT sig_model_event:SigE:20
    <I>AOSBT light_ctl_event_handler:SIG mesg ElemID(0)
    <I>AOSBT sig_model_event:SigE:15
    [TX] TTL: 5 AppIdx: 0x0000
    [TX] SRC: 0x1ACC
    [TX] DST: 0x28
    [TX] msg size: 6
    [TX] 82600080604d       /* 设备回复Light CTL Status消息(Opcode 0x8260),色温0x4d60 */

添加分组与组播控制

添加分组与组控面板,示例如下图。注意需要手机蓝牙功能被打开并且手机App连接到蓝牙Mesh网络时才能添加分组。添加分组完成后,可以在有蓝牙连接条件下本地控制或者无蓝牙连接条件下通过网关远程控制。

添加分组

场景面板

  1. 预置场景控制:配网一个场景面板,并进入面板。6个按键虽然显示“未设置”,但是对应6个预置场景。无论单击App面板,还是实体设备的按键,可以控制支持预置场景的灯。image.png

  2. 场景编辑与保存:场景单击右上角“...”进入编辑模式。注意需要手机蓝牙功能被打开并且手机App连接到蓝牙Mesh网络时才能编辑和保存场景。

    说明

    目前只有云智能App注册地在中国大陆的账号支持场景面板编辑与保存功能。

    image.png
  3. 保留按键1的全开与按键2的预置全关功能。单击进入按键3的编辑。如新建“低功耗”场景。

    任务1按设备选择5个灯,目标属性为打开,亮度1%,色温90%。

    任务2按设备选择1个灯,目标属性为打开,亮度25%,色温30%。

    单击任务中的预览,灯会被控制至目标属性,可以根据实际效果调整目标属性设置。

    单击完成,开始给场景中的各个灯下发目标属性,如有设备保存失败,可以重试,直至全部保存完成或者选择结束退出。编辑按键3

  4. 单击进入按键4的编辑。如新建“工作模式”场景。

    任务1按分组选择工作区分组(含10个灯),目标属性为打开,亮度50%,色温60%。

    任务2按设备选择1个灯,目标属性为关闭。

    单击任务中的预览,灯会被控制至目标属性,可以根据实际效果调整目标属性设置。

    单击完成,开始给场景中的各个灯下发目标属性,如有设备保存失败,可以重试,直至全部保存完成或者选择结束退出。编辑按键4

  1. 单击进入按键5的编辑。如新建“演示模式”场景。

    任务1按分组选择演示区分组(含10个灯),目标属性为打开,亮度75%,色温90%。

    任务2按设备选择1个灯,目标属性为打开,亮度100%,色温30%。

    单击任务中的预览,灯会被控制至目标属性,可以根据实际效果调整目标属性设置。

    单击完成,开始给场景中的各个灯下发目标属性,如有设备保存失败,可以重试,直至全部保存完成或者选择结束退出。编辑按键5

  2. 单击进入按键6的编辑。如新建“高亮模式”场景。

    任务1按设备选择全部设备(含21个灯),目标属性为打开,亮度100%,色温10%。

    单击任务中的预览,灯会被控制至目标属性,可以根据实际效果调整目标属性设置。

    单击完成,开始给场景中的各个灯下发目标属性,直至全部保存完成或者选择结束退出。编辑按键6

  1. 单击完成,会提示激活设备,如果场景面板是电池供电的低功耗设备,需要从睡眠中唤醒,以接收App下发配置。如果场景面板是非低功耗设备,可以直接单击开始同步保存场景

  1. 同步完成后,界面会退回设备详情页,此时回到App面板,即可按新配置的场景控制设备。同步过程中,如场景面板固件打开日志,可以收到关键日志如下。共收到4个配置指令,分别对按键3(Attr Type 0x038A)下发场景号10103(0x2777),对按键4(Attr Type 0x038B)下发场景号10104(0x2778),对按键5(Attr Type 0x038C)下发场景号10105(0x2779),对按键6(Attr Type 0x038D)下发场景号10106(0x277A)

            [RX] RSSI: -18
            [RX] TTL: 9 AppIdx: 0x0000
            [RX] SRC: 0xCC
            [RX] DST: 0x2298
            [RX] OPCODE: 0xD101A8
            [RX] Payload size: 5
            [RX] 5e8a037727        
    GenieE:52
            [TX] TTL: 5 AppIdx: 0x0001
            [TX] SRC: 0x2298
            [TX] DST: 0xCC
            [TX] msg size: 8
            [TX] d3a8015e8a037727
            [RX] RSSI: -47
            [RX] TTL: 8 AppIdx: 0x0000
            [RX] SRC: 0xCC
            [RX] DST: 0x2298
            [RX] OPCODE: 0xD101A8
            [RX] Payload size: 5
            [RX] 608b037827
    GenieE:52
            [TX] TTL: 5 AppIdx: 0x0001
            [TX] SRC: 0x2298
            [TX] DST: 0xCC
            [TX] msg size: 8
            [TX] d3a801608b037827
            [RX] RSSI: -39
            [RX] TTL: 8 AppIdx: 0x0000
            [RX] SRC: 0xCC
            [RX] DST: 0x2298
            [RX] OPCODE: 0xD101A8
            [RX] Payload size: 5
            [RX] 618c037927
    GenieE:52
            [TX] TTL: 5 AppIdx: 0x0001
            [TX] SRC: 0x2298
            [TX] DST: 0xCC
            [TX] msg size: 8
            [TX] d3a801618c037927
            [RX] RSSI: -54
            [RX] TTL: 7 AppIdx: 0x0000
            [RX] SRC: 0xCC
            [RX] DST: 0x2298
            [RX] OPCODE: 0xD101A8
            [RX] Payload size: 5
            [RX] 628d037a27
    GenieE:52
            [TX] TTL: 5 AppIdx: 0x0001
            [TX] SRC: 0x2298
            [TX] DST: 0xCC
            [TX] msg size: 8
            [TX] d3a801628d037a27

语音接入

注册地在中国大陆的云智能App账号可以绑定天猫精灵账号,请参见以下文档。

海外三方语音平台的对接,请参见以下文档。

设备OTA

验证灯固件OTA功能请参见固件OTA示例。

常见问题

  • 上述Mesh节点SDK是否能用于天猫精灵生态项目?

    Mesh节点SDK中的灯应用和场景面板应用的固件都可以用于天猫精灵生态项目,但是要注意在天猫精灵生态项目中创建单独的产品并相应的生成设备证书。即烧录自有品牌项目设备证书的设备可以被云智能App配网绑定,烧录天猫精灵生态项目设备证书的设备可以被天猫精音箱或者天猫精灵App配网绑定。

  • 上述Mesh网关SDK是否能用于天猫精灵生态项目?

    Mesh网关SDK中编译的smart_outlet固件烧录天猫精灵生态项目设备证书,被天猫精灵配网绑定后,目前只能作为智能插座设备,不承担Mesh网关功能。

  • 天猫精灵定制芯片完整的手册、文档在哪里获取?

    天猫精灵定制芯片完整文档请参见自研芯片模组资源中心