当前文档版本为 v0.4.1,您可以访问当前页面的 开发中 版本以获取最近可能的更新。

Solution: BLE Google Light

1 功能概述

本文主要介绍PAN1080 BLE灯控接入google home音箱,通过谷歌音箱控制RGB灯的亮度与颜色。

2 环境要求

  • board: pan1080a_afld_evb

  • uart (option): 显示串口log

  • google home音箱

  • google home app

3 编译和烧录

项目位置:zephyr\samples_panchip\solutions\ble_google_light

目前可使用ZAL工具或quick build脚本进行编译和下载。

脚本位置:quick_build_samples\solutions\ble_google_light.bat

打开脚本后默认会编译项目,编译完成时,可输入字符进行后续下载等操作:

Input the keyword to continue:
  'b' build                         编译项目
  'r' make clean and rebuild        重新编译项目
  'f' flash download                下载
  'e' erase chip                    擦除芯片
  'o' open project by VS Code       打开 `VS Code`,可查看源码,执行编译下载等
  others exit                       退出
wait input:

4 演示说明

  1. PAN1080 EVB板GPIO P10、P11、P16与RGB电路用跳线帽连接。

  2. EVB板上电灯的颜色默认是白色,BLE广播设备的名字是“EnergeticLighting” 。

  3. 打开安卓手机”google home“ app与google home音箱连接,然后在app上添加灯泡设备,app上启动搜索灯泡。

  4. 搜索到后连接并配网,配网的过程中灯会闪烁。

  5. 配网成功后app上会显示一个灯泡的图案,然后就可以控制灯的开关、亮度和颜色。

  6. 灯和音箱断开连接后的BLE广播设备的名字是“EnergeticLightingPRO” ,此时与音箱连接无需重新配网可以直接连接。

  7. app上设置移除灯泡后此时灯进入退网状态,BLE广播设备的名字是“EnergeticLighting” ,与音箱连接需要重新配网。

5 设备配网和控制

5.1 广播数据

Data Type

Description

Length

Detail

0xff

Device id

6byte

mac addr

0xfe

Deviceinfo: Manufacturer model

7byte

“panchip”

0xfd

HW Version

1byte

0x01

0xfc

SW Version

1byte

0x01

0x09(未配网)

Device name

n byte

“EnergeticLighting”

0x09(已配网)

Device name

n byte

“EnergeticLightingPRO”

配网前和配网后的广播包主要是名字不一样,其他的都是一样的。

5.2 GATT服务

Function

Service Attribute

UUID(128bit)

Useless

Primary service

0x1800(Generic GAP Service)

读灯的状态

Read characteristic declaration

0x35, 0xb1, 0xc3, 0xd8, 0x7e, 0xd4, 0x21, 0x81, 0x13, 0x46, 0xb7, 0x9c, 0x43, 0xaf, 0x83, 0x76

读灯的名字

Read characteristic declaration

0x36, 0xb1, 0xc3, 0xd8, 0x7e, 0xd4, 0x21, 0x81, 0x13, 0x46, 0xb7, 0x9c, 0x43, 0xaf, 0x83, 0x76

控制灯的配网和灯状态

Write characteristic declaration

0x37, 0xb1, 0xc3, 0xd8, 0x7e, 0xd4, 0x21, 0x81, 0x13, 0x46, 0xb7, 0x9c, 0x43, 0xaf, 0x83, 0x76

读灯的亮度和开关状态

Read characteristic declaration

0x38, 0xb1, 0xc3, 0xd8, 0x7e, 0xd4, 0x21, 0x81, 0x13, 0x46, 0xb7, 0x9c, 0x43, 0xaf, 0x83, 0x76

读灯的软件版本信息

Read characteristic declaration

0x39, 0xb1, 0xc3, 0xd8, 0x7e, 0xd4, 0x21, 0x81, 0x13, 0x46, 0xb7, 0x9c, 0x43, 0xaf, 0x83, 0x76

主动上报灯的亮度和开关状态

Notify characteristic declaration

0x40, 0xb1, 0xc3, 0xd8, 0x7e, 0xd4, 0x21, 0x81, 0x13, 0x46, 0xb7, 0x9c, 0x43, 0xaf, 0x83, 0x76

5.3 通信协议

5.3.1 Read Light Status

UUID = {0x35,0xb1,0xc3,0xd8,0x7e,0xd4,0x21,0x81,0x13,0x46,0xb7,0x9c,0x43,0xaf,0x83,0x76}

Function

Length

Detail

Light OnOff

1byte

0x0:关闭,0x1:使能

Light Brightness

1byte

0x0:关闭,0x1:使能

Light Color Temperature

1byte

0x0:关闭,0x1:使能

Light Color Setting

1byte

0x0:关闭,0x1:使能

Light Min Temperature

2byte

eg:2000

Light Max Temperature

2byte

eg:7500

灯发送数据如下:

data[8]={0x01 ,0x01 ,0x01 ,0x01 ,0x07 ,0xd0, 0x1d ,0x4c}

5.3.2 Read Light Name

UUID = {0x36,0xb1,0xc3,0xd8,0x7e,0xd4,0x21,0x81,0x13,0x46,0xb7,0x9c,0x43,0xaf,0x83,0x76}

Function

Length

Detail

Name

14byte

“A19 Full Color”

灯的名字:

name_data[] = “A19 Full Color”

5.3.3 Light Control

UUID = {0x37,0xb1,0xc3,0xd8,0x7e,0xd4,0x21,0x81,0x13,0x46,0xb7,0x9c,0x43,0xaf,0x83,0x76}

Function

Length

Type(1byte)

Detail

Onoff

2byte

0x00

on:0x01;off:0x00

Bright

2byte

0x01

bright:0~100

Color Temperature

3byte

0x02

temp:2000~7500

Blink

2byte

0x03

on:0x01;off:0x00

Provision

2byte

0x04

succeed:0x01;failed:0x00

Unprovision

2byte

0x05

succeed:0x01;failed:0x00

Color

4byte

0x06

red:0~255;green:0~255;blue:0~255

控制灯的开关、亮度、色温、颜色、闪烁、配网和退网。

5.3.4 Read Light Version

UUID = {0x39,0xb1,0xc3,0xd8,0x7e,0xd4,0x21,0x81,0x13,0x46,0xb7,0x9c,0x43,0xaf,0x83,0x76}

Function

Length

Detail

Hardware and software version

2byte

hw:0x01;sw:0x01

5.3.5 Read Light Bright and Color temp

UUID = {0x38,0xb1,0xc3,0xd8,0x7e,0xd4,0x21,0x81,0x13,0x46,0xb7,0x9c,0x43,0xaf,0x83,0x76}

Function

Length

Detail

Onoff

1byte

on:0x01;off:0x00

Bright

1byte

bright:0~100

ColorTemperature

2byte

temp:2000~7500

5.3.6 Notify Light Status

UUID = {0x40,0xb1,0xc3,0xd8,0x7e,0xd4,0x21,0x81,0x13,0x46,0xb7,0x9c,0x43,0xaf,0x83,0x76}

每次收到控制命令后将灯的状态通知给音箱。