【TB-02模组专题⑦】TB02二次开发玩转各种接入天猫精灵智能家居产品,彩灯、灯具、插座、单火线总有一款适合你。

在这里插入图片描述

前言

为了满足现市场大多数的需求,我们决定做几个智能家居常见的方案,并开源给各位!

准备材料:

  • 天猫精灵 X 1
  • TB-02开发板 X 1
  • 阿里飞燕账号 X 1

一、天猫精灵RGB冷暖灯

1.1 开源地址

本示例实现了天猫精灵红绿蓝 + 冷暖的功能,编译烧录后烧录插座三元组与天猫精灵配对即可控制。

地址:RGBCW_Ali_Mesh

1.2 操作说明

本示例使用了五路PWM分别控制红绿蓝冷暖灯,上电默认是冷光灯。

快速上电5次,每次上电时间在3S以内,在第六次上电时灯将会恢复出厂设置,恢复出厂设置时灯闪烁数次。

与天猫精灵配对成功后,灯也会闪烁数次。

1.3 控制指令

与天猫精灵成功连接后可使用语音进行控制,常用指令如下:

“天猫精灵,开灯”

“天猫精灵,将灯的亮度调为80”

“天猫精灵,将灯的色温调为30”

“天猫精灵,将灯调为红色”

“天猫精灵,将灯调为紫色”

1.4 三元组

下面是我自己创建的插座产品申请的三元组,可以用来测试,不保证全部可用。

product IDProduct SecretMAC地址
1031229c4ffeab71d7dc826bdaac17dc933b3f8a7637c9371
1031205cc9fc8fb8b7023775ec83fe068ba51f8a7637c9372
103129d5c8db13cacdf46d05719a5a739cf73f8a7637c9373
103126075376add65c06a53ea417293b3d16cf8a7637c9374
1031299eb04fb938b432b5ffd244092f55847f8a7637c9375
10312b1bdb975e03243bb2cb9d4387e0a16c3f8a7637c9376
103122896d81b3efca00c8bd48f418e1d7b17f8a7637c9377
1031237d01f60204d3ab9a46c6c7543fcf964f8a7637c9378
10312a05d3e094a98a253611f51c71cb5bdacf8a7637c9379
10312e3da0f70300e78855e52597a95b40349f8a7637c937a

1.5 更改记录

本工程是在远程SDK上修改来的,主要修改如下:

配置文件中添加了PWM_C这个定义,及其延伸定义

(LIGHT_TYPE_SEL == LIGHT_TYPE_CT_HSL)状态下light_res_hw添加PWM_C,修改为5路。

/mesh/light.c文件中将

light_dim_set_hw(idx, 0, get_pwm_cmp(0xff,(100-ct_100)*lum_100/100));
light_dim_set_hw(idx, 1, get_pwm_cmp(0xff, ct_100*lum_100/100));

修改为:

light_dim_set_hw(idx, 4, get_pwm_cmp(0xff,(100-ct_100)*lum_100/100));
light_dim_set_hw(idx, 3, get_pwm_cmp(0xff, ct_100*lum_100/100));

/mesh/light.c文件中,
修改 proc_led 函数,将指示灯闪烁改为呼吸渐变效果
修改 rf_link_light_event_callback 函数,注释掉了LGT_CMD_SET_SUBSCRIPTION 事件回调。

/mesh/light.h文件中,
添加了 LED_EVENT_PROVISION_SUCCESS LED_EVENT_UNBIND_SUCCESS LED_EVENT_FACTORY_SUCCESS 宏定义

/mesh/mesh_config.h文件中,将宏定义LIGHT_TYPE_SEL设为LIGHT_TYPE_CT,灯的类型修改为冷暖灯。

1.6 用户其他可修改项

用户可根据自己的需求在这个Demo上修改,实现自己想要的功能:

1.6.1 修改PWM引脚

这些引脚可在app/app_config_8258.h文件中通过宏定义指定,客户可自行查看此文件修改之。

默认定义如下:

//---------------  LED / PWM
#define PWM_R       GPIO_PB4		//冷光
#define PWM_G       GPIO_PB5		//暖光
#define PWM_B       GPIO_PWM3B0		//blue
#define PWM_W       GPIO_PWM4B1		//white

1.6.2 修改恢复出厂设置的上电次数及上电时长

通过修改mesh/factory_reset.c文件中的factory_reset_serials变量可修改上述参数。

默认数据如下,表示上电五次恢复出厂设置,每次上电时间在0-3S

const u8 factory_reset_serials[] = { 0, 3,
                                     0, 3,
                                     0, 3,
                                     0, 3,
                                     0, 3,};

若将数据改为如下,则表示上电六次恢复出厂设置,前四次上电时间在0-3S,后两次上电时间在5-20秒

const u8 factory_reset_serials[] = { 0, 3,
                                     0, 3,
                                     0, 3,
                                     5, 20,
                                     5, 20,};

用户可根据自己的爱好自行修改。

1.6.3 修改配网成功指示灯闪烁次数

mesh/light.h中,修改宏定义 LED_EVENT_PROVISION_SUCCESS 可修改配网成功指示灯灯闪次数及频率

1.6.4 修改出厂设置指示灯闪烁次数

mesh/light.h中,修改宏定义 LED_EVENT_FACTORY_SUCCESS 可修改恢复出厂设置后指示灯灯闪次数及频率。


二、天猫精灵AT通用固件

2.1 开源地址

本示例实现了天猫精灵AT传输功能,编译烧录后烧录任意三元组与天猫精灵配对即可实现AT交互。

地址:AT_Ali_Mesh

2.2 操作说明

本示例基于TB-02_Kit开发板,使用PB1与PB7作为串口引脚,默认波特率为115200。

2.3 AT指令

指令功能备注
AT测试AT
AT+GMR查询版本号
AT+RST复位模块
AT+RESTORE恢复出厂设置
AT+STATE查询配网状态
AT+SLEEP深度睡眠暂未实现
AT+SEND2ALI发送数据到天猫精灵音箱
AT+SEND2APP发送数据到用户手机APP
+DATA:收到天猫精灵数据
+APP:收到用户手机APP发来的数据

2.4 语音控制指令

与天猫精灵成功连接后可使用语音进行控制,常用指令如下:

“天猫精灵,打开插座”

“天猫精灵,关闭插座”

“天猫精灵,两分钟后关闭插座”

2.5 三元组

下面是我自己创建的一些产品申请的三元组,可以用来测试,不保证每个都能够着正常使用

product IDProduct SecretMAC地址
空调
10586d82cacf2993cfa46b42f6f25100c7655f8a76385b9ea
10586efbe4f1cba3b01705fc2463f5bc5374df8a76385b9eb
105861e7f37d99909b43835bf7b84ff2abfd3f8a76385b9ec
10586af7f8f10f649f3f0b975f031420c583ff8a76385b9ed
10586349fca807e7ba6b2485e03ea39249941f8a76385b9ee
风扇
11159b58427faca6c0233be26294c2cdc8ed2f8a76393a433
11159276f5393c517900c15df45fa8591ce11f8a76393a434
111591c0c2905805ba98e8c7c25a1cae9f092f8a76393a435
111595ae11e6b81593cf0848bbaffeabbdd91f8a76393a436
111591c02ec81e70a03928cf77c40df3d7169f8a76393a437

2.6 指令使用示例

正确烧录固件与三元组后,复位模组,使用天猫精灵音箱找队友,与模组配对成功后,模组将通过串口输出:

+STATE:1

配对成功后和通过天猫精灵控制模块,模块收到天猫精灵的控制指令后会通过串口将指令发出来,具体格式如下:

+DATA:<OpCode>,<长度>,<参数>

数据示例如下:

  • 关灯 +DATA:8202,4,00714100

  • 开灯+DATA:8202,4,01724100

  • 将灯的亮度调为80 +DATA:824C,5,CCCC734100

  • 将灯的色温调整为 +DATA:825E,9,CCCCA0190000744100

  • 将灯的颜色调整为红色 +DATA:D100,9,C2230100800000FFFF

  • 将灯调整为阅读模式 +DATA:8242,5,0300750000

  • 将风扇调整为三挡 +DATA:D100,4,220A0103

  • 将风扇调整静音模式 +DATA:D100,5,4504F01100

  • 打开风扇的摇头功能 +DATA:D100,4,A3000501

具体的数据值需要自己来解析!

用户手动操作了设备,可主动将当前设备状态上报给天猫精灵,具体数据格式如下:

AT+SEND2ALI=<OpCode>,<参数>

指令示例如下:

  • 关灯 AT+SEND2ALI=0482,010100

三、天猫精灵-插座/单火线开关

3.1 开源地址

本示例实现了天猫精灵插座的功能,编译烧录后烧录插座三元组与天猫精灵配对即可控制;

插座开源地址:Plug_Ali_Mesh

单火线开源地址:SFS_Ali_Mesh

3.2 操作说明

本示例使用了三个GPIO,分别用作继电器控制,指示灯,按钮。

短按按钮可改变继电器的状态(即开关插座),长按按键(直到指示灯快速闪烁),松开后将会恢复出厂设置,同时指示灯慢闪数次。

3.3 控制指令

与天猫精灵成功连接后可使用语音进行控制,常用指令如下:

“天猫精灵,打开插座”

“天猫精灵,关闭插座”

“天猫精灵,两分钟后关闭插座”

3.4 三元组

下面是我自己创建的插座产品申请的三元组,可以用来测试。

product IDProduct SecretMAC地址
10697c6470deb30e21b447973de37a99d8c36f8a76387a87d
1069711478a63b541e25b6cf75b66a4ed1f90f8a76387a87e
106979c3990f6670479fe19866f9fa4eecc39f8a76387a87f
1069766c663c23a447d9076f3eba0a5f0b00cf8a76387a880
106977c4fdfbebc52e85cbd88ca495a18efaaf8a76387a881
1069711ee16e6fcf85ff50b43fb33896b4723f8a76387a882

3.5 更改记录

本工程是在远程SDK上修改来的,主要修改如下:

/app/app.c中,添加了user_gpio_init函数,修改了process_ui函数,实现按键长短按功能。

在main_loop函数中,注释factory_reset_cnt_check();函数,关闭通过上电次数恢复出厂的功能。

/mesh/light.c文件中,修改set_on_power_up_onoff函数中的light_par_save(0)为light_par_save(1),立即保存开关状态。

修改 set_on_power_up_last 函数,实现断电记忆功能

修改 light_par_save_proc 函数,实现未配网也要保存开关状态数据

修改 light_dim_set_hw 函数,只保留开关功能

修改 light_g_level_set_idx_with_trans 函数,将渐变时间强制设为20ms

修改 proc_led 函数,改变指示灯GPIO

/mesh/mesh_config.h文件中,将宏定义LIGHT_TYPE_SEL设为LIGHT_TYPE_NONE,灯的类型修改为None

将宏定义ALI_MD_TIME_EN设为1,打开阿里天猫精灵定时功能。

3.6 用户其他可修改项

用户可根据自己的需求在这个Demo上修改,实现自己想要的功能:

3.6.1 修改按键,指示灯及继电器控制引脚

这些引脚可在app/app_config_8258.h文件中通过宏定义指定,客户可自行查看此文件修改之。

默认定义如下:

#define BTN_GPIO GPIO_PD2 //按键GPIO
#define FACTORY_RESTORE  3 //长按恢复出厂设置时间
#define SWITCH_ENABLE_1 0 //按键优先电平

#define PWM_R       GPIO_PB4		//继电器GPIO

3.6.2 修改按键长按时间

修改上述宏定义即可。

3.6.3 修改配网成功指示灯闪烁次数

mesh/light.h中,修改宏定义 LED_EVENT_PROVISION_SUCCESS 可修改配网成功指示灯灯闪次数及频率

3.6.4 修改出厂设置指示灯闪烁次数

mesh/light.h中,修改宏定义 LED_EVENT_FACTORY_SUCCESS 可修改恢复出厂设置后指示灯灯闪次数及频率;