整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

KT6368A蓝牙芯片双模用户手册_V2.0


1.1 简介

KT6368A芯片是一款支持蓝牙双模的纯数据芯片,蓝牙5.1版本。芯片的亮点在超小尺寸,超级价格。以及简单明了的透传和串口AT控制功能。大大降低了嵌入蓝牙在其它产品的开发难度和成本

同时支持SPP和BLE 。但是只能任选其中一个协议使用。

备注:这款芯片最大的特点,就是成本低,使用简单,生产简单。无其他。同时支持低功耗详见3.7章节

1.2 硬件说明

细节

参数说明

UART接口

标准串口,TTL电平,波特率可设,连接PC需要电平转换[如:CH340G--USB转TTL]

输入电压

建议给3.3V的电压【2.2V--3.4V】

额定电流

芯片上电启动是20mA,马上进入低功耗广播20uA 和唤醒4mA交替。 连接成功就一直都是4mA

低功耗电流

芯片算的是平均电流,因为内部是不断的低功耗、唤醒交替进行

工作温度

[-40度] -- [80度]

湿度

5% ~ 95%

主芯片型号

KT6368A[SOP8][管装出货]-----KT6328A[SOP8][管装出货]

1.3 芯片功耗初步说明

1、我们目前分KT6368A 和 KT6328A两个版本

(1)、KT6368A版本,是不带低功耗,双模的版本,开机15mA ,后续一直稳定在6mA左右

(2)、KT6328A版本,低功耗版本,只有BLE,详细参数,如:3.7章节

(3)、这两个芯片版本的硬件一模一样,KT6328A存在的目的就是满足需要低功耗的客户

2、KT6368A版本的特点如下:

(1)、双模SPP + BLE,手册里面的全部功能具备 。就是不具备低功耗

(2)、但是这个版本,成本更低一些。

3、KT6268A版本的特点如下:

(1)、功耗更低,详见3.7章节描述

(2)、成本略高一点点 。

==》不同的版本,通过蓝牙名是可以识别出来的

1.4 芯片的简单测试说明

序号

操作说明

第一步

搭建好芯片的外围电路,供电3.3V即可。蓝牙天线可以直接焊一根线即可

第二步

查询芯片的2脚是否开机有1秒钟的高电平输出,接个指示灯出来

第三步

连接好电脑的串口助手,看看芯片的TX脚是否有数据返回,115200的波特率

第四步

做自己实际的板子,搭配MCU进行调试

1.5 硬件设计--脚位说明

序号

Layout的注意事项

UART注意点

  1. 我们芯片内部的IO电压是3.3V 。主要看1脚的输入电压
  2. 和外部的MCU相连接时,RX和TX请串电阻,大概100欧姆就可以了。MCU超过3.3V的IO电平,那么这个电阻可以加大到1K。
  3. 芯片的8脚是KT6368A的TX,连接MCU的RX。 7脚是我们的RX,连接MCU的TX

电源注意点

芯片的供电电压,最高位为3.4V 。一定不能超过这个电压,最好给3.3v

2脚注意点

第2脚,为连接状态脚。连接成功输出高电平。未连接则是高组态。调试时建议接一个指示灯出来。或者连接到外部MCU 。注意下拉一个10K电阻到地

细节描述

  1. 请严格按照我们给出的供电电压,去供电 。电源这一块没什么太大的讲究
  2. 蓝牙天线,按照我们给出的封装画就行。技术很成熟了,基本上距离都超过15M
  3. 芯片的7/8脚两个必须预留测试点,这个是升级接口,以防万一要升级

升级的测试点排列,建议是 1/7/8/3 这4个脚顺序排列。引出测试点,很重要

1.6 硬件设计--蓝牙天线的说明

(1)、注意芯片的蓝牙天线引脚,出去,要预留安全间距

(2)、天线四周,一定要注意,包地处理

(3)、天线周边一定要隔空,不要铺绿油,背面和正面不要有金属

1.7 硬件设计--蓝牙搭配的晶振说明

(1)、由于蓝牙对频偏要求比较高,所以晶振的品质对蓝牙的性能至关重要,选型过程中

必须保证晶振的一致性和稳定性。晶振的频率偏差必须≤±10ppm,负载CL 推荐12pF。

(2)、体积无要求的,推荐我DEMO上面的晶振,成本低,性能好

(3)、体积要求小的,推荐24M-3225的,成本稍高,性能好

建议直接用我们配套的晶体,相信比外面随意采购的要优惠和质量保障

串口通讯协议

AT串口指令作为一种在控制领域常用的通信,我们进行了优化和定制,这样大大简化了用户使用的难度,请严格按照我们给出的指令格式进行操作

3.1 通讯格式

支持异步串口通讯模式,通过串口接受上位机发送的命令
通讯标准:115200 bps --- 用户可以通过串口指令设置详见3.2
数据位 :8 停止位 :1 校验位 :none 流控制 :none

注意:所有的指令的设计,都是有规律的,不是随意划分的,可以对照下面找一下规律

控制指令格式:AT+<CMD>[<param>]\r\n ---- 所有的都是字符,不是十六进制数

数据反馈格式:<IND>[<param>]\r\n

数据反馈格式:<IND>[<param>]\r\n

数据特性

详细说明

AT+

控制指令是控制主机给BT201的控制命令,以“AT+ ”开始

<CMD>

后面紧跟<CMD>控制 ,通常是2个字符

指令

[<param>]

如果CMD后面有参数,则紧跟着[<param>]

\r\n

最后以”\r\n”结束,字符型为换行,windows就是回车键。十六进制为0x0D,0x0A

<IND>

1、数据反馈是蓝牙把各种状态和数据信息反馈给主机,以<IND>作为开头

,<IND>是反馈指

数,则紧跟<IND>之后继续传输<param>参数。

2、后面紧跟着的是芯片回传的参数

这里<CMD>重点说明:

由于芯片内部是跑的系统,主体的程序划分如下:

功能划分

命令

备注

公共指令特性

AT+C?

公共指令是以AT+C开头,后面的“?”就是具体细化的功能命令

音乐指令特性

AT+A?

音乐指令是以AT+A开头,后面的“?”就是具体细化的功能命令

蓝牙指令特性

AT+B?

蓝牙指令是以AT+B开头,后面的“?”就是具体细化的功能命令

这里<CMD>重点说明:

由于芯片内部是跑的系统,主体的程序划分如下:

举例

命令

备注

控制指令1

AT+CZ\r\n

代表系统复位

查询返回的结果1

QA+01

详见4.4.1 返回的查询信息永远是Qn+xx 其中n和前面是相对应的

查询返回的结果2

QG+01

详见4.2.12

3.2 通讯指令举例

公共部分--控制指令 -- 说明

CMD

对应的功能

详细说明

AT+CT

设置波特率

后面有参数,详见3.3 举例:AT+CT01/r/n

AT+UT

设置蓝牙BLE的广播间隔

后面有参数,详见3.11 举例:AT+UT01/r/n

AT+CZ

芯片复位

芯片软件复位,详见3.3 举例:AT+CZ/r/n

AT+CW

芯片恢复出厂设置

恢复出厂设置,清除所有之前记忆的参数 ,详见3.3 举例:AT+CW/r/n

AT+CL

芯片低功耗设置

详见3.7章节

AT+CR

芯片上电回传信息关闭

详见3.10章节 .注意默认是开启的

AT+BM

设置BLE蓝牙名称

详见3.4章节

AT+BN

设置BLE的MAC地址

详见3.4章节

AT+BD

设置SPP蓝牙名称

详见3.4章节

AT+BS

设置BLE连接密码

详见3.4章节 ,此功能没有实现,主要在于手机的兼容性不行




AT+QT

查询系统的波特率

详见3.3章节.返回的数据为

AT+QL

查询系统的低功耗状态

详见3.7章节.返回的数据为QL+00

AT+TM

查询BLE蓝牙名称

详见3.5章节

AT+TN

查询BLE蓝牙地址

详见3.5章节

AT+TD

查询SPP蓝牙名称

详见3.5章节

AT+TS

查询BLE蓝牙连接密码

保留

测试推荐的指令

AT+BM1234\r\n -- 设置BLE的名称

AT+BN112233445566\r\n --ble的地址

AT+BD223344\r\n -- 设置SPP的名称

AT+CT01\r\n

AT+CZ\r\n

AT+CW\r\n

AT+QT\r\n

AT+TM\r\n

AT+TN\r\n

AT+TD\r\n

3.3 指定芯片的波特率和复位和恢复出厂设置【CT】[CZ][CW]

AT+CT01\r\n == 9600

AT+CT06\r\n == 256000

AT+CT11\r\n == 31250

AT+CT02\r\n == 19200

AT+CT07\r\n == 512000

AT+CT12\r\n == 2400

AT+CT03\r\n == 38400

AT+CT08\r\n == 230400

AT+CT13\r\n == 4800

AT+CT04\r\n == 57600

AT+CT09\r\n == 460800


AT+CT05\r\n == 115200

AT+CT10\r\n == 1000000


1、一旦设置了波特率之后,芯片会记忆。下一次开机,波特率就变成了您所设置的.当然可以查询[AT+QT]

2、设置完波特率之后,请等待1秒钟,再发送复位[AT+CZ],或者断电一下即可

3、如果要恢复默认的波特率,请发送恢复出厂设置的命令,此时芯片会自动擦除所有的配置

4、由于我们芯片的主频很高,所以尽量把串口的波特率调高,越高越好

3.4 设置BLE蓝牙的名称和地址[BM][BN][BD]

AT+BMBLE-1234\r\n

设置蓝牙名称为“BLE-1234”

AT+BN112233445566\r\n

设置BLE的地址。手机端显示的地址是:66 55 44 33 22 11

AT+BDSPP-1234\r\n

设置蓝牙名称为“SPP-1234”

1、设置蓝牙名称之后,需要让芯片复位,发指令或者断电上电都可以,这样会显示新的蓝牙名称。我们默认的蓝牙名为“KT6368A-BLE”。设置的蓝牙名最长为“30”个字节,请不要超过这个范围

2、如果AT指令修改蓝牙名称之后,注意,你的手机端可能没有同步更新,还是显示之前的名称

  1. 、因为你只修改了蓝牙的名称,蓝牙的MAC地址是没有变化的,所以手机端那边是不会更新名字
  2. 、你要做的就是,换一台手机搜索试试,或者之前的手机删掉配对信息,重新在搜索

(3)、只要设置了蓝牙名,蓝牙名一定是更新过来了的,不用怀疑。芯片上电也会返回蓝牙名给您查看

3.5 查询BLE蓝牙的名称和地址[TM][TN][TD]

AT+TM\r\n

返回TM+1234\r\n 代表蓝牙名为1234

AT+TN\r\n

返回TN+12345678AABB\r\n BLE的蓝牙地址:0xBB、0xAA、0x78、0x56、0x34、0x12

AT+TD\r\n

返回TD+SPP1234\r\n 代表蓝牙名为SPP1234

  1. 这里重点描述一下蓝牙的MAC地址:BLE和SPP 的MAC地址是共生的,所以设置一个就行了
  2. 、芯片在第一次通电的时候,会自动生成蓝牙的MAC地址,并且是随机生存。这样做的好处是免除了 单独设置地址的问题
  3. 、同样经过优秀的算法,出现重复的概率是百万分之一。蓝牙的mac地址是标准的,6个字节

2、SPP的地址,是在BLE地址的最高字节加1处理的 。所以只用设置BLE的地址即可。SPP的地址也就没做查询指令,可以自己计算一下

3.6 芯片上电信息和串口调试助手

测试环境:KT6368A测试板 串口软件:串口调试助手_aithinker_serial_tool_v1.2.3

  1. 接收窗口,芯片返回给电脑的数据。这个是固件的版本以及最后修改的日期

==》这个数据的返回,无任何意义。主要是方便客户,上电测试串口是否连接正常,以及查看芯片运行状态

==》芯片上电是一定会返回的,如果没有返回,说明硬件连接有误

TM+KT6368A-BLE-1.7

代表的是当前芯片的BLE的名称,以及对应手册的版本为1.7

TN+220CB1C8A22C

代表的是当前芯片的BLE的地址

TD+KT6368A-SPP-1.7

代表的是当前芯片的SPP的名称,以及对应手册的版本为1.7

TS+220CB1C8A22D

代表的是当前芯片的SPP的地址 此地址是根据BLE的地址计算得来的

T4+01

代表的是当前BLE功能是打开的,详见3.8章节

T5+01

代表的是当前SPP功能是打开的,详见3.8章节

QL+00

代表的是当前是正常工作模式,详见3.7章节

这里面的很多返回的信息,用户可以不必关注,因为这个存在的目的是方便客户初次调试的时候看

3.7芯片低功耗指令说明【CL】

AT+CL00\r\n

不进入低功耗模式。下次上电有效 。设置之后注意要重新上电

AT+CL01\r\n

进入低功耗模式 。下次上电有效。设置之后注意要重新上电 --- 芯片默认进入此状态,不用设置

  1. 这个指令,是记忆型的,发送指令成功之后,芯片就存起来。下次上电就切换了。同时发了这个指令芯片会自动复位
  2. 这个指令,由于很多地方受限,所以默认是关闭的
  1. 设置低功耗之后。上电芯片的UART还是会主动返回相关的数据 。
  2. 、但是所有的AT指令全部失效了,因为芯片会进入低功耗,所有的外设全部关闭
  3. 、当连接成功之后,芯片就处于正常工作状态。但是此时只具备透传的功能
  4. 、所以需要设置AT指令的地方,必须切换回非低功耗模式,也就是AT+CL00\r\n

4、当然芯片,出厂上电默认是,正常工作模式。

  1. 如果进入低功耗模式,芯片的所有IO口,都是高阻态。这点很重要
  2. 如果可以的话,芯片的2/7/8脚,接上拉电阻。来确定我们的IO状态
  3. 、因为有的客户反映,芯片进入低功耗模式之后。他的MCU不断的收到FF的数据
  4. 、所以这种应用,尽量的用KT6328A的2脚来确定,芯片是否连接。未连接则不接收任何数据
  1. 设置为低功耗模式之后,芯片在未连接状态下 。开机的前5秒可以识别AT指令,5秒之后就不能识别AT指令
  2. 、因为要低功耗,所以芯片的所有外设全部关闭
  3. 、但是很多客户的应用可能是在低功耗状态下需要修改一些参数。所以设定5秒超时之后才进入低功耗

而这5秒之类,是可以正常识别AT指令的

  1. 、如果需要AT指令设置参数,尽量在连接状态下发送 。因为连接之后,我们自动退出低功耗模式


序号

电流

说明

AT+CL01

状态,进入低功耗工作模式

开机瞬间

11mA

1、芯片开机需要初始化外设。瞬间电流比较大

2、这个时间维持300ms,就进入低功耗状态了

工作状态-未连接

20uA

4mA 交替

3、芯片正常工作状态,正常对外广播,处于一个睡眠、唤醒广播、睡眠这样的周期性状态 。目的为了节省功耗

4、周期500ms。100ms广播一次,400ms睡眠

5、广播一次电流就是4mA。进入睡眠,就变成20uA

工作状态-以连接

4.3mA

6、当连接成功之后,芯片就不再进入睡眠。而是一次处于工作状态了

AT+CL00 进入正常工作模式

开机瞬间

25mA

1、芯片开机需要初始化外设。瞬间电流比较大

2、这个时间维持300ms,就进入5mA工作状态

不管连接还是未连接。

5mA

3、芯片一直处于工作状态。电流很小的波动,忽略不计

  1. 可以看到开机瞬间的电流在5mA ,随后降到4mA 等待几秒之后,就进入低功耗广播状态了
  2. 低功耗的广播状态,平均电流是185.4uA
  3. 最低的时候,是20uA 。由于此uA表软件采样率不够,所以曲线上面体现不出来

AT+VER2.0-20211111

TM+KT6328A-BLE-2.0 --- 手机端会搜索到这个名字

TN+3031E54D77D9

T4+01

T5+00

QL+01 -- 进入低功耗模式

3.8芯片BLE使能和SPP使能[B4][B5][T4][T5]

AT+B401\r\n

开启BLE的功能。当然AT+B400\r\n则是关闭了

AT+B500\r\n

关闭SPP的功能。当然AT+B501\r\n则是开启了

AT+T4\r\n

查询BLE功能是否开启。芯片会返回T4+01或者T4+00

AT+T5\r\n

查询SPP功能是否开启。芯片会返回T5+01或者T5+00

  1. 关闭BLE功能之后,必须重新上电,此功能才生效 。当然开启也是一样的
  2. 只用设置一次,芯片自动保存参数,下一次不用设置了
  3. 关闭BLE功能之后,手机就搜不到BLE的名称了
  1. 关闭SPP功能之后,必须重新上电,此功能才生效 。当然开启也是一样的

只用设置一次,芯片自动保存参数,下一次不用设置了。关闭SPP功能之后,手机就搜不到SPP的名称了

3.9芯片返回的错误信息说明【ER】

ER+1\r\n

接收的数据帧不对

ER+2\r\n

接收的命令不存在,也就是你发的AT+KK这样的字符串查找不到

ER+3\r\n

接收的AT指令,没有收到回车换行,也就是\r\n

ER+4\r\n

发送的指令给的参数超范围了,或者指令的格式不对 。请检查您的AT指令

ER+7\r\n

MCU发送数据给手机,但是手机端没有打开notify 。在ble连接成功状态下

ER+8\r\n

保留--无意义

芯片内部对一些错误的状态,会进行实时的反馈。具体的请对照上面的表格

重点描述一下notify [监听],手机端的测试APP连接上蓝牙芯片之后,必须打开notify。蓝牙芯片才能发送数据给手机。手机发数据给蓝牙芯片,用write这个特征就足够了。

3.10芯片上电回传信息关闭指令【CR】

AT+CR00\r\n

关闭上电的回传信息 。设置之后注意要重新上电

AT+CR01\r\n

开启芯片上电的回传信息 。下次上电有效。设置之后注意要重新上电

  1. 有的客户反馈,芯片上电主动返回的信息,很烦人。所以我们就新增一个指令来关闭这个

  1. 注意,这个默认芯片出厂是打开的。关闭之后会存起来,就永久的关闭了
  2. 同时,也会关闭芯片主动返回的OK 或者ER+X的回传信息

3.11 指定芯片的BLE的广播间隔【UT】

目前此功能,仅限于KT6328A的版本,也就是单模BLE的低功耗版本

对应的指令

代表的含义

参考的功耗

AT+UT00\r\n

0--对应--250ms 广播间隔

平均功耗是300uA

AT+UT01\r\n

1--对应--500ms 广播间隔

平均功耗是180uA

AT+UT02\r\n

2--对应--750ms 广播间隔

平均功耗是140uA

AT+UT03\r\n

3--对应--1000ms 广播间隔

平均功耗是100uA

AT+UT04\r\n

4--对应--1500ms 广播间隔

平均功耗是70uA

AT+UT05\r\n

5--对应--2000ms 广播间隔

平均功耗是62uA

AT+UT06\r\n

6--对应--3000ms 广播间隔

平均功耗是40uA

AT+UT07\r\n

7--对应--4000ms 广播间隔

平均功耗是30uA

1、一旦设置了广播间隔参数之后,芯片会记忆。下一次开机,广播间隔就变成了您所设置的.不支持查询

2、但是芯片每次上电会主动的返回当前的连接间隔参数,详见上面的截图

3、如果要恢复默认的广播间隔,请发送恢复出厂设置的命令,此时芯片会自动擦除所有的配置

4、具体的间隔时间,还是要根据自己的产品,来定义。因为广播间隔越长,手机搜索到的时间就越长

蓝牙透传的详细说明--BLE

目前支持BLE纯数传,芯片可以实现透传。目前BLE和SPP均只能作为从。也就是“SERVER”端。

请注意,一旦蓝牙被连接之后,芯片自动进入透传模式。不再识别AT指令 。一定要在app里面去搜索

BLE的透传说明

1、单次吞吐的数据最大为1024个字节,支持16位或者128位的UUID --- 128位的需要特别定制

2、如果使用BLE作为数传,请连接模块的“KT6368A-BLE”这个蓝牙名

3、当然可以自己修改BLE的蓝牙名以及MAC地址了,通过AT指令

4.2 BLE的UUID说明

1、主UUID是“FFF0”

2、特征1的UUID是“FFF1”,特征是“WRITE_WITHOUT_RESPONSE ”“NOTIFY”

3、特征2的UUID是“FFF2”,特征是“READ ”“NOTIFY”

4、特征3的UUID是“FFF3”,特征是“WRITE_WITHOUT_RESPONSE”

  1. 如果需要特别的UUID,可以联系我们定制。-- 请注意列清楚需求,特征,uuid等等信息,越详细越好

BLE透传效果演示:https://v.qq.com/x/page/q07660m1bta.html

4.3 BLE的测试说明

1、安卓手机的ios手机[苹果],推荐使用“BLE调试宝”软件

2、苹果的可以直接在“APP Store”里面搜索下载

3、安卓的,我们会在资料包里面提供安装的程序

4、请注意,安卓的手机也是可以测试BLE的,测试BLE不是一定只能用苹果的手机

5、安卓的BLE不是不能用,而是不好用,安卓的版本必须是在4.3版本以上的才支持BLE

6、正因为安卓的BLE不好用的原因,所以才会有双模,安卓用SPP。苹果用BLE

7、因为苹果如果要用SPP,这需要买MFI认证芯片,超级贵,目前也没人用了

8、如果默认没有修改过蓝牙名称的,连接“KT6368A-BLE”这个蓝牙名

9、BLE测试说明演示视频:https://v.qq.com/x/page/o0766ubm78n.html

4.4 BLE的手机端app测试说明--lightblue测试

第一步:

  1. 启动lightblue的app
  2. 这里是安卓测试环境
  3. Ios的界面略有不同
  4. 要打开定位权限
  5. 当然也有很多其他的测试app ,操作略有不用

第二步

  1. 连上芯片之后的界面
  2. 可以看到名字和服务
  3. 点击“箭头”

第三步:

  1. 找到需要的服务
  2. 也就是FFF1
  3. 点击

第四步:

  1. 打开notify
  2. 这样KT6368A收到数据之后,就可以发送给手机了
  3. 手机发数据,直接发就行了,KT6368A会直接串口转发出去

1、注意测试的时候,最好打开手机的定位权限,因为很多app需要这个权限

2、无论是用户自己开发app还是微信小程序,操作的步骤和上面截图也是一样的

3、推荐用户只用第一个特征,也就是FFF1 .他的特征是写和监听,足够使用了

4、基础的问题,请自行百度解决。其实这些描述,网上也是很容易找的,不复杂

4.5 BLE的大数据量测试

上位机通过uart单次发送1832

个字节的数据

这个是接收完成的截图

总共的耗时:220ms的样子

以上测试的数据,是建立在我们芯片设置的连接间隔基础上的测试

其实缩短连接间隔,也是可以加快数据的通信。但是同时也增加的功耗


注意,这里手机收到的数据,还是基本遵循20个字节分包。因为我们芯片内部默认设置的最大包的长度是20个字节

正常的流程,是APP那边连接完蓝牙芯片之后,可以主动发起请求MTU【最大通信包长度】--网上可以自己搜搜

设置了MTU之后,单次的数据包,就不再是20个字节了。从而加快的数据交互的速度

4.6 BLE的广播包数据说明--advertisData

这里我们在广播包里面,添加了芯片蓝牙的MAC地址

对比右边的截图,即可知道规律

这里我们称之为:advertisData

做这个的目的,有如下原因

  1. 微信小程序开发:无法直接获取蓝牙芯片的mac地址,没有相应的API,所以可以通过这个获取到,具体网上可以搜一下
  2. APP开发--IOS端,也没办法直接获取MAC地址,也是通过这个方式得到蓝牙芯片的MAC地址
  3. APP开发--安卓端,没有这个问题,直接通过API时可以获取到蓝牙芯片的mac地址的。所以用不用这个功能,都无所谓

蓝牙透传的详细说明-- SPP

Spp走的还是经典蓝牙的2.1的协议,不推荐使用了,新产品建议直接使用BLE 。要在系统里面先连接KT6368A-SPP

SPP的透传说明

1、单次吞吐的数据最大为1024个字节。需要连接“KT6368A-SPP-04”

2、如果使用SPP作为数传,请不要主动连接模块的“KT6368A-BLE”这个蓝牙名,或者自己设置的BLE蓝牙名

3、注意SPP是属于经典蓝牙里面的一个子链路而已。

4、SPP数传和BLE是互斥的,如果你只用SPP的数传,那么请关闭掉BLE。

SPP的透传效果演示说明

SPP透传效果演示:https://v.qq.com/x/page/b0766jqw0p5.html

SPP的透传测试说明

1、安卓手机的测试使用“蓝牙串口”这个app,可以在“应用宝”里面下载

2、如果默认没有修改过蓝牙名称的,连接“KT6368A-SPP”这个蓝牙

3、SPP测试说明演示视频:https://v.qq.com/x/page/e0766bz15fw.html

SPP的大数据量的透传演示视频:

https://v.qq.com/x/page/c0843j975hl.html

测试的方法,可以看一下我们资料包里面的视频演示。

关于AT指令和透传数据的详细说明

1、目前我们的串口指令,支持AT指令,同时支持蓝牙数据透传

  1. AT指令,是存在于整个芯片的生命周期,只要芯片初始化蓝牙之后,那么蓝牙数据透传,就会一直在后台运行,无论是连接还是未连接状态,都支持AT指令
  2. 但是请留意,我们还有一个低功耗的模式,详见3.7章节的详细说明

问题1

什么是蓝牙透传,有什么特点呢?

答疑

  1. 蓝牙数据透传,指上位机MCU通过串口,发任何的数据,蓝牙芯片收到之后会直接转发给手机端
  2. 同时,手机端发送任何的数据,蓝牙芯片都会通过串口下发给MCU,通过串口uart的形式

3、我们的方案中,蓝牙透传,是不需要任何的指令或者设置的

问题2

芯片是如何区分AT指令和透传的数据呢?

答疑

  1. 对于MCU发送的指令,只要不是正常的AT指令,我们都会透传出去,举例说明如下:

MCU端发送的数据

说明

AT+CT00\r\n

这个就是正常的AT指令,是不会被透传出去的。KT6368A会直接处理

AT+CT00

这个就是异常的指令,是会被透传出去的,因为没有加换行,KT6368A也会返回ER+7

KT+CT00\r\n

这个也会被透传出去,因为他不是AT指令开头

1234AT+CM00\r\n

这个也会被透传出去,因为他的起始数据不是AT开头。AT的指令仅仅只是在中间,所以会被透传

12121212121212kkk

这个就是纯粹的透传数据了,所以会被透传至手机

至于这些透传的数据,如何去处理,就留给聪明的您去自由发挥啦

  1. 对于手机端发送的数据,则更容易理解 --- SPP和BLE透传说明
  2. 、任何数据都是透传下去的。哪怕手机端发送的AT+CT00\r\n这种正常的指令,也是被透传的

蓝牙芯片收到之后,也是不会处理的,只会串口输出给MCU

常见问题集锦

问题0

KT6368A是什么?有什么功能?特点是什么?适用于什么场景?配什么晶振呢?

KT6368A批量有优惠吗? 蓝牙天线预留的元器件怎么办,焊还是不焊?

回答

  1. KT6368A芯片属于蓝牙芯片,支持蓝牙5.1版本BLE。同时支持2.1版本的SPP功能
  2. KT6368A芯片支持连接手机,进行数据的双向交互,俗称“蓝牙透传”。通过UART接口

==》支持常用的AT指令,如:设置名称、设置地址、设置波特率等等。详见手册

  1. KT6368A芯片最大的特点,就是成本低,使用简单,SOP8的封装,也便于生产
  2. KT6368A芯片,适用于纯数据通讯的场合,如:客户自己开发APP、微信小程序等等
  3. 目前KT6368A的程序,只做了从机版本,只能和手机连接
  4. 搭配24M的晶振,参数是12pF的负载,精度是10ppM 。当然可以是3225封装或者其他

晶振的选择,直接影响的是蓝牙的频偏,也就是蓝牙距离,所以别随便用,到时候搜不到蓝牙名,就又跑来问为什么了,我们有提供晶振的样品。可以顺便拿几个回去测试

晶振的电容不用焊,建议预留,我们开机芯片会自动校准晶振的负载电容,软件处理的

8、芯片批量基本没什么优惠了,价格超级敏感的,请选择其它

9、蓝牙天线脚,预留的元器件,做样品直接不焊,接一个C1的电容即可。批量建议预留,预防做认证,或者天线要求极高的场合 。只接C1电容蓝牙距离也是妥妥的超过10米以上

问题1

KT6368A有测试板吗? 拿到芯片如何开始测试呢? 有什么硬件上的注意事项?

回答

芯片是SOP8封装的,总共的引脚就很少很少,使用也很简单。暂时没有测试模块

  1. 1脚供电。然后对地焊一个105的电容就够了。或者不接也行。量产加上
  2. 蓝牙天线,直接焊一根线就可以了,连接到芯片的4脚。实际做产品就加个2p7电容
  3. 主要是晶振比较难焊,不要紧,可以配套我们给的晶振,M49 2脚的焊一下就可以了
  4. 剩下的就是串口了,因为是3.3V的电平,所以3.3V的mcu直接直连即可
  5. 初次调试,建议使用串口调试助手调试 。USB转TTL的选用CH340G,某宝很多
  6. 为什么我们不做测试版,主要是成本的原因,所以麻烦客户自己动手

问题2

KT60368A支持微信小程序吗 ? 默认的uart波特率是多少?

回答

1、微信小程序,只是用到了BLE而已。也就是说支持BLE就可以支持微信小程序

2、芯片是BLE5.0的协议,微信小程序需要客户自己开发。我们只是透传,无其他作用

3、芯片给的uart缓存是1K字节 。默认的波特率是115200

问题3

KT6368A这颗芯片供电电压多少V?电流多少? 透传的速率是多少BLE和SPP

回答

  1. 建议给3.3V的电压【2.2V--3.4V】。
  2. 开机瞬间电流是26mA。稳定大概1秒左右,就降到4mA左右
  3. 芯片给的uart的缓存是1K字节,默认波特率是115200
  4. 对于BLE的速率,我们没有做完整的测试,需要高速传输的请自己测试一下
  5. SPP的传输,建议是单次最高不超过512字节一包数据 ,传输速率建议自己测
  6. BLE的传输速率,由于不同手机版本,都会有差别。所以速率没办法统一说明,用户自己测

问题4

如何区分AT指令和串口透传数据? 如何知道蓝牙是否连接?

回答

  1. AT指令,只在蓝牙未连接的状态有效。
  2. 只要蓝牙连接成功之后,就进入透传了,AT指令无效了。

3、这个要看芯片的第2脚。未连接输出低电平。连接成功输出高电平

4、当然,你可以接一个指示灯来看。或者也可以连接到mcu的gpio上面

问题5

如何确定芯片是否工作正常呢?以及串口接线正常呢?

回答

  1. 芯片上电瞬间,2脚会输出1秒钟高电平,然后马上拉低 。所以接1个指示灯来看一下状态。
  2. 芯片上电串口是一定会返回信息的。注意是一定,如果没收到,说明串口有问题

问题6

支持单芯片出货吗? 芯片是什么参数?什么包装?芯片出货稳定吗

回答

  1. 芯片是sop8封装,管装,100片一管 。当然量大可以自己去编带
  2. 芯片出厂会烧录好固件,用户可以直接使用
  3. 芯片出货很稳定,因为这个是大品类的应用,如自拍杆、防丢器、等等量大的产品用的多

所以成本就很低,

4、另外不支持讲价。价格也没什么空间了,请留意

问题7

支持修改uuid ,以及蓝牙名和蓝牙MAC地址吗

回答

  1. 支持修改蓝牙名 ,以及蓝牙MAC地址
  2. 当然也支持,AT指令读取 。Uuid暂时不支持客户自己修改,后期会加上

问题8

支持单芯片出货吗? 芯片是什么参数?什么包装

回答

  1. 芯片是sop8封装,管装,100片一管 。当然量大可以自己去编带
  2. 芯片出厂会烧录好固件,用户可以直接使用

问题9

硬件设计,有什么需要注意的地方吗?

回答

  1. 请严格按照我们给出的供电电压,去供电 。电源这一块没什么太大的讲究
  2. 蓝牙天线,按照我们给出的封装画就可以了。因为技术很成熟了,所以基本上距离都超过15M
  3. 芯片的7/8脚两个必须预留测试点,这个是升级接口,以防万一要升级
  4. 升级的测试点排列,建议是 1/7/8/3 这4个脚顺序排列。引出测试点,很重要

问题10

支持买几个样品,帮我修改波特率到9600吗?

回答

  1. 原则上不支持修改,因为几个样品,客户自己动手发AT指令改一下。我们默认是115200
  2. 实在要修改,收人工费500。

问题11

支持按照我们特定的uuid,以及服务,然后修改出样品吗?

回答

  1. 原则上,不支持修改。因为样品阶段是给客户测试功能的。用户可以先做硬件,后期确实是做产品的,我们会配合修改的。

测试芯片的性能。不可能几块钱的东西,我们都要工程师参与配合修改,这样效率太低了

2、实在需要修改的,可以,收人工费500修改

辑导读:新客户要了解一家企业或产品,通常都是通过他们的官网网站。区别于C端的官网,TO B的企业官网有更重要的商业价值。因此,如何在官网中展现企业的产品与服务,传达品牌价值呢?本文作者对此进行了分析,希望对你有帮助。

01 背景

企业产品是商业产品的一种,即面向企业市场且以盈利为目的的产品,通常有着业务门槛高、决策链复杂、输出压力大的特征。企业的官网服务于商家、客户以及有兴趣了解该领域的潜在客户,展示企业的产品、服务,传递品牌价值等各种能力。区别于C端的官网,TO B的企业官网有更重要的商业价值。

1. 官网改版目标

改版迭代类的项目,核心是要明确改版的动机,现状如何,解决什么问题,以及最终要达成改版的目标是什么。脱离商业目标的改版是没有意义的,B端的商业目标通常是提高企业收入、提升业务效率、降低运营成本等。

企业官网是潜在客户了解企业、了解产品和服务、联系企业的媒介,如何让客户通过官网提升业务的转化,是官网改版最核心的目标。这里我们可以从用户、业务和品牌视觉层面来拆分目标。

2. 用户层面

区别于C端产品的界面体验,TO B产品更重服务体验,所以用户层的目标就是围绕产品提供什么服务,给用户解决什么问题,比如:产品核心功能介绍,用户使用产品的场景,产品如何解决行业痛点,用户痛点,产品的价格是否具有竞争力,产品提供的服务和支持是否全面,解决了用户的需求,等等。

相较于C端的单一类型用户,B端的用户类型比较丰富,也更垂直,不同类型的用户看产品的视角和目标完全不同。在官网产品的改版项目中,我们将B端用户类型划分为决策者和使用者,来辅助我们确定用户层。

在B端C化的趋势,很多产品的转化是由使用者有了试用的机会,进而推荐给决策者,还有决策者和使用者的边界越来越模糊的现象,因此,我们不但要服务好高价值的决策者用户的核心诉求,同时也不能忽视产品使用者的痛点,对于低价值的次要使用者、间接使用者这类用户,不用专门考虑为其设计,以通用的信息版块支持即可。

获取用户目标的方式可以采用深度访谈、电话采访、问卷等形式,或者公司资源有限的情况下,结合行业信息和公司的线上数据进行整理。

将用户群体的目标分类规整后,可以确定官网相应的内容和信息层级,达到有目的的传达和有效转化。

3. 业务层面

从业务角度来说,结合对目标群体的痛点和需求点,展示企业的产品价值,核心优势,投入产出等,将这类信息「货」通过在特定的页面/版块「场」内,推送给相应的用户「人」,所以打造信息分层,让不同需求的目标用户快速匹配并认同产品价值,从而引导访客留资,完成转化。

如何打造页面的信息分层,引导用户快速转化,在下面版块具体改版步骤中会做详细拆解。

4. 品牌视觉层面

官网的价值除了直接的转化目标之外,还有打造专业性,树立品牌形象,影响了用户对企业/产品的认知和感受。

网站整体的色系、设计风格、品牌元素、图标风格、版块内容布局等等组成最终呈现给用户的品牌形象。好的品牌形象会给用户留下深刻印象,是获得认同感的基础,影响用户最终的转化。

品牌风格和视觉表现需要考虑到企业及产品的整体定位,公司战略业务场景等等。

02 改版步骤

1. 常见问题

在我们着手改版前,对当前线上官网的问题梳理一下,确定目前存在的问题,才可以知道如何针对性的去改版优化。通常会有以下几个典型的问题:

2. 结构框架、信息层级不合理

官网的框架结构,版块布局就是给用户讲故事,用户进入到官网,让用户从初步了解到产生兴趣、价值认同最后成为付费用户,是官网该有的叙事逻辑,如果只是根据业务的需求,在页面上只是功能版块的堆叠,没有逻辑,没有差异化的信息层级区分,那将很难有转化。

3. 视觉体验差,缺乏品牌调性

官网的设计语言构建,品牌定位、风格是用户对企业、产品最直接的印象,TO B的企业官网通过页面的风格体现产品的定位,传递专业度、信任感。同时,随着互联网设计的发展,也出现了更多的表现形式,比如3d风、轻质感,还有实时渲染互动的交互,让用户更容易理解业务场景,加深认知。

4. 跳失率高,转化低

转化低是数据的呈现,也是衡量官网亟需改版的最直接原因,用户的转化路径越长跳失率越高,转化的目标最好只定一个,在官网的设计中,所有的元素有为转化目标服务,但是现实情况可能不能避免多个目标,那么这种情况就一定要分好主次,在信息分层、内容布局、视觉处理上都要突出最主要的转化目标。

1)页面重构,信息层级优化

官网的首页至关重要,是访客进入的第一个页面,内容上信息精准并高效传达给用户,说白了就是放什么和怎么放,要有清晰的叙事逻辑,这里我们借助营销中的AIDA模型,构建官网的页面版块搭建:

Andrew Chak在“Sumit Now:Designing Persuasive Websites”(立即提交:设计有说服力的网站)一书中把这四个阶段对应到网站的四类用户:

浏览者:Attention阶段,浏览信息,引起注意,但没有深入了解

评估者:interest阶段,开始有兴趣了解详情,关注价格

交易者:Desire阶段,有购买意愿,甚至物品都放入了购物车

购买者:Action阶段,已经达成购买行为

我们可以看到市面上的优秀TOB官网的首页信息结构也是大多按照这样的“套路”进行信息结构设计的,模仿用户进入到首页后,按照这样的浏览顺序层层深入:产品初识——逐步了解——强化认知——打消疑虑——转化付费。

首焦——通常展示企业的产品/服务,给来访者一个初步印象,核心业务——展示企业的核心价值,差异化竞争力优势,同下一版块的产品介绍,给用户一个加深的印象,产品的详细的功能、应用场景的展示让用户更了解产品,做出心理预期,是否满足了用户诉求。

紧接着用业务数据,案例佐证,售后服务,品牌背书这些版块一步步,循序渐进让用户打消疑虑,加深对产品的信任,产生购买欲望,这时候,再及时给予留资入口,进而达到转化目的。

2)突出重点版块,缩短转化路径

企业官网除了露出产品的功能,还要打造产品差异化的核心价值,结合页面整体来看,提升高价值信息展示优先级,让用户更快发现有利于转化的内容,所以在表现形式上,为了提升信息呈现与触达的效率,可以用更加丰富的信息纬度替换单一的表格、图文的信息呈现形式,比如视频、动图,让用户能在单位时间里获取更多的信息量,也更易理解,加深对产品的记忆。

还有可人机交互的模块,实时与用户互动,亲自体验产品的业务场景,和产品性能。

轻流首屏的视频动态,更形象的演示了业务流程和场景

在成功引起用户的兴趣,想要在该节点做出行动时,要看时机适时“收网”,有几种方式引导用户快速转化:

(1)设置即时行为召唤按钮,比如首焦banner上的产品试用按钮,页面右侧悬浮的客服联系入口,首屏吸底的留资快速入口等等。

这里在文案上可以有一点“小心机”,让用户更多的点击CTA按钮,比如创造一种稀缺感,人们在面对稀缺性资源的时候都会有一种紧迫感,让用户想要赶紧先占位,快速做决定。

另外提高价格锚定也是一种快速让用户下单的方法,TO B的用户会考虑投入产出,性价比,购买是否划算,这时候如果给用户一个对比下有价格优势的产品,用户就会容易接受。

(2)信息录入精简,需要用户录入信息填写的内容,尽量简单、清晰、高效,避免流程复杂、繁琐让用户在录入过程中感到枯燥乏味,容易流失。比如在留资的表单填写模块,尽量把无用、不重要的信息做删减,缩短用户填写的信息量和时长,提高用户填写任务的完成效率。

5. 视觉拆解

1)官网常见布局样式

(1)版心式布局

版心式布局就是页面的内容展示在页面的中央,首焦的视图可能会根据浏览器宽度进行适配,但是有效显示区域是页面的中间区域。

这种布局样式通常是基于前端实现考虑的,设计也只需出一套方案,虽然屏幕的利用率没有达到最高,但是不需要考虑适配的问题,也很少会出现兼容出错的情况,是很多传统企业、政府类网站常常采用的布局方式。也有很多企业出于自身情况,本身内容较精简,或开发资源的问题,也会采用这种布局。

这种布局方式的优点是对于设计师和前端开发都是最简单的,按照标准宽度一种px尺寸设计,低于显示屏宽度就居中展示,两边留白。超过屏幕宽度时横滑,不用考虑适配的问题,也没有兼容性问题。

缺点也是显而易见的,在大屏的显示器上不能利用好空间,浪费屏效。小屏幕被遮挡的画面影响用户的浏览体验和阅读效率。

(2)自适应布局

这种布局样式就是考虑到了差别较大的屏幕尺寸上的展示效果,在视觉风格中我们可以明显感觉到这种布局会因为页面宽度的不同而呈现不同的布局样式。

这种布局的优点正好是固定布局所达不到的,可以在不同尺寸显示屏中都有最佳的屏效和展示效果,缺点是在实际项目实践中,对设计来说,需要输出多张设计图和设计规范。同时,前端开发也要面临复杂的判断和条件限制。

(3)分屏布局

分屏布局的特点是一屏只展示一个重点信息,翻页时自动切换一屏,适合多个同等权重信息的展示。常见的应用场景有奢侈品、电子产品、酒店民宿类的官网。

这种布局样式的优点是信息非常聚焦,一屏诠释一个重点,让用户沉浸式浏览,弊端也是很明显的,单屏的信息密度太低,想要展示更多信息需要用户主动下拉切换,同时这类布局没有普适性,仅限某些特定行业和为了达到某些品牌定位和风格。

6. 内容密度选择

紧凑、适中和宽松的内容排版,在同样的屏幕尺寸内展示的信息量是递增的,恰当的信息密度,展示不同的信息差异化,比如门户网站,电商类的首页作为一个平台,业务的诉求应该是在有限的空间内给最多的商家曝光,给用户最大化的浏览效率,最快定位到目标入口,快速进行流量分发,那么可以采用紧凑型的内容密度。

而大部分的企业官网是展示自己的核心产品和服务,没有那么多的信息量需要占据首屏,因此适中的内容密度适用于大多的企业官网。

那宽松的内容密度适合什么样的企业呢?当企业以宣传品牌影响力为官网主要目标,首页的信息量比较少,想要突出品牌调性,这时,以大量的图片、场景为元素,诠释公司的品牌理念,给用户有沉浸式的体验。比如电子产品的官网,奢侈品行业,简约风的家居品类,民宿、酒店产业等等。

7. 视觉表现风格

B端的企业与产品有明显的行业特性,所以在视觉风格上,不仅要体现行业性质,品牌风格,产品属性,还要避免同质化,视觉上要有记忆点,与同行业竞品拉开差距。TO B的产品用户群体更多是偏向理性的购买者,更关注品牌的权威性、可信度以及带来的价值。

随着我们B端市场的产品多样化,新兴产业的崛起和被关注,还有设计流行趋势的更新迭代,开发技术的成熟,设计师可发挥的空间也更加自由和灵活,以下为大家介绍几种流行的官网视觉风格类型。

1)3D风

C4D、Blender等设计软件的普及带火了游戏行业、运营设计3D风的流行,逐渐在C端市场如野火燎原的趋势占领高地,受到追捧。超现实的质感、3维立体的空间感,如临其境的既视感确实将表现力拉满,带来很强的视觉冲击和沉浸感。在Z时代逐渐成为时代主流时,B端的一些企业也开始重视用户的偏好,设计师之间的较量也卷到了B端的视觉表现。

B端企业运用3D风格较多是在云产品、物联网、大数据、数字孪生等行业,这类官网对视觉的表现要求很高,但产品又很难用具象的实物来表现,所以3D技术的成熟为这类企业的官网呈现带来了曙光。

比如腾讯云官网的设计,在Banner、图标、核心产品模块展示、业务场景应用上,3D元素将云平台的行业属性、科技感的产品特征,以及传递给用户的空间感都完美表达出来,同时在首焦用可人机交互的互动效果,PC端用鼠标hover时图形变化,交互反馈,让用户有很好的互动感。

腾讯云的首焦用3D风塑造了云产品的具体形象,鼠标交互,能与之互动

2)插画风

同样有产品实物展示难题的困扰,但基于行业性质、品牌定位问题、技术实现等方面的原因,还可以采用插画的表现形式。在拟物化向扁平风格转型的10年来,扁平插画的设计早已深入人心,用插画的元素表现抽象的,模糊的产品/服务,塑造品牌品牌形象。

将信息用图形化方式直观的传达给用户,不仅降低了理解门槛,还能将品牌形象更深入人心,比如像教育类、人工智能、车载类的系统会塑造一个IP形象,以具象化、拟人的形象拉近与用户的距离,也传达了品牌的定位和认知。

有了IP形象,可以在一切可以展示的场合体系化的表现情感化设计,比如联系客服的对话弹窗,错误提示、空状态等等。将品牌的形象更加深化,给用户深刻的品牌认知。

3)实景配图

文字配合实景图的设计方式在官网的设计上也是非常常见的,这种风格能传递真实感,能拉进与用户距离,从而给用户信任感。比如一些传统实业,展示企业实力,企业的效能。家居、酒店类的企业,用实景图给用户打造了身临其境的氛围感,舒适、温馨的家居质感,高级、有调性的设计风格,是可以直抵用户的内心诉求的。

还有科技产品的企业官网,也会喜欢用产品的实物图展示,这也是抓住了用户的核心诉求,一些电子产品发烧友,最关注的就是产品本身。加上明星代言的形象和产品结合,将粉丝效应带动产品销量,是一波成功的营销。

实拍图的设计风格,对图片的质量要求非常高,不但要体现产品的核心价值,功能场景,还要诠释品牌的定位、调性,构图如何呈现视觉美感,产品品质和质感的体现,传递的品牌形象都是需要考虑的重点。

8. 品牌升级,设计语言系统落地

因为TO B企业的产品服务成本一般都较高,在对产品未知的线上平台,官网必须最大化透传品牌的行业知名度,业务稳定性等差异化优势,才能在用户心理增强购买的决心。官网的整个设计语言系统应包含品牌基因+设计规范+多场景应用。

品牌升级并不是仓促的改改颜色、样式,优化一下logo之类,而是在充分理解业务、用户、品牌三方的背景之下,定义设计规则,落地设计元素。

品牌升级策略有其独特性,本文中不作赘述,在此延展说一下设计规则应该如何落地。

我们常见一些设计团队通用一套“清晰、简洁、高效”以不变应万变,但这仅仅是基础的原则,太过看宽泛,无法很好的应用落地在实际的项目中。

设计原则应该贴近业务,真实有效,比如工业类实业的企业,应突出其智造、安全、有实力的产品定位,云平台的企业突出其专业、效率、先进,这才是更贴近业务的设计规则,然后根据精准定位的关键词进行设计延伸。

避免同质化的设计元素:图标、配图、文字设计等,应结合品牌找到记忆点,让用户一眼能识别,留下深刻印象。比如IP形象的流行,衍生出的一套设计语言,带给用户很强的品牌记忆。

03 数据验证,迭代优化

在团队合力完成官网项目的改版上线之后,除了关注改版的业务目标、设计目标是否达到预期,还应该注意搜集线上的数据,与改版前的用户行为路径,PV/UV、停留时长、点击率等多方面对比,看数据上是否与预期的设计有出入,并针对问题分析原因,给出优化方案作为下次优化的依据。

除了线上的数据,如果再进一步完善信息搜集,可通过问卷调研,明确用户画像,了解用户对新版本的满意度、线上问题的针对性调研,同时在企业内部,征集运营、产研、市场等职能部门的建议和反馈,整理需求,分析反馈意见的合理性,是否真实落地,对合理的意见、需求给出解决方案,与团队内部沟通进优化迭代,进一步完善线上官网。

04 写在最后

官网改版的项目是公司内部众多项目的一个缩影,考验团队从战略分解,到落地执行的能力,这里希望每个职能的小伙伴拥有主人翁意识,靠谱的合作伙伴、踊跃积极的为共同目标出谋划策,发挥其专业特长,认真负责,有极客精神,在客观条件有限的情况下,可以攻克逆境,发挥凝聚力,那么最后的结果一定带来可喜的回馈,同时安利大家可以写复盘的文章,设计同学整理设计资产沉淀,在后期项目中能够再次复用。输出是最好的输入方式,项目的积淀也会让你成为发挥最大价值的人,助力你的成长。

资料参考:

https://www.zcool.com.cn/article/ZMTEzNzkzMg==.html

https://mp.weixin.qq.com/s/_MOSy5v3JfW_ajIJB3kikg

https://jelly.jd.com/article/5fd59636afd56f0142e4bc1f

https://blog.csdn.net/YeChaDeChenFu/article/details/124493574

本文由 @体验设计 笑笑 原创发布于人人都是产品经理,未经许可,禁止转载

题图来自 Unsplash,基于 CC0 协议

者|狼叔(阿里前端技术专家,Node技术布道者)

编辑|覃云

你好,我是阿里巴巴前端技术专家狼叔,在上一篇文章中,我分享了大前端的现状和未来,接下来的这篇文章,我将会分享一些大前端跟 Node.js 结合比较密切的点。

Node.js

Node.js 在大前端布局里意义重大,除了基本构建和 Web 服务外,这里我还想讲两点。

首先它打破了原有的前端边界,之前应用开发只分前端和 API 开发。但通过引入 Node.js 做 BFF 这样的 API proxy 中间层,使得 API 开发也成了前端的工作范围,让后端同学专注于开发 RPC 服务,很明显这样明确的分工是极好的。

其次,在前端开发过程中,有很多问题不依赖服务器端是做不到的,比如场景的性能优化,在使用 React 后,导致 bundle 过大,首屏渲染时间过长,而且存在 SEO 问题,这时候使用 Node.js 做 SSR 就是非常好的。

当然,前端开发 Node.js 还是存在一些成本,要了解运维等,会略微复杂一些,不过也有解决方案,比如 Servlerless 就可以降级运维成本,又能完成前端开发。直白点讲,在已有 Node.js 拓展的边界内,降级运维成本,提高开发的灵活性,这一定会是一个大趋势。

2018 年 Node.js 发展的非常好,InfoQ 曾翻译过一篇文章《2018 Node.js 用户调查报告显示社区仍然在快速成长》。2018 年 5 月 31 日,Node.js 基金会发布了 2018 年用户调查报告,涵盖了来自 100 多个国家 1600 多名参与者的意见。报告显示,Node.js 的使用量仍然在快速增长,超过¾的参与者期望在来年扩展他们的使用场景,另外和 2017 年的报告相比,Node 的易学程度有了大幅提升。

该调查远非 Node 快速增长的唯一指征。根据 ModuleCounts.com 的数据,Node 的包注册中心 NPM 每天会增加 507 个包,相比下一名要多 4 倍多。2018 年 Stack Overflow 调查也有类似的结果,JavaScript 是使用最广泛的语言,Node.js 是使用最广泛的框架。

本节我会主要分享一些跟 Node.js 结合比较密切的点:首先介绍一下 API 演进与 GraphQL,然后讲一下 SSR 如何结合 API 落地,构建出具有 Node.js 特色的服务,然后再简要介绍下 Node.js 的新特性、新书等,最后聊聊我对Deno 的一点看法。

API 演进与看起来较火的 GraphQL

书本上的软件工程在互联网高速发展的今天已经不那么适用了,尤其是移动开发火起来之后,所有企业都崇尚敏捷开发,快鱼吃慢鱼,甚至觉得 2 周发一个迭代版本都慢,后面组件化和热更新就是这样产生的。综上种种,我们对传统的软件工程势必要重新思考,如何提高开发和产品迭代效率成为重中之重。

先反思一下,开发为什么不那么高效?

从传统软件开发过程中,可以看到,需求提出后,先要设计出 ui/ue,然后后端写接口,再然后 APP、H5 和前端这 3 端才能开始开发,所以串行的流程效率极低。


于是就有了 mock api 的概念。通过静态 API 模拟,使得需求和 ue 出来之后,就能确定静态 API,造一些模拟数据,这样 3 端 + 后端就可以同时开发了。这曾经是提效的非常简单直接的方式。


静态 API 实现有很多种方式,比如简单的基于 Express / Koa 这样的成熟框架,也可以采用专门的静态 API 框架,比如著名的 typicode/json-server,想实现 REST API,你只需要编辑 db.json,放入你的数据即可。

{
 "posts": [
 { "id": 1, "title": "json-server", "author": "typicode" }
 ],
 "comments": [
 { "id": 1, "body": "some comment", "postId": 1 }
 ],
 "profile": { "name": "typicode" }
}

启动服务器:

$ json-server --watch db.json

此时访问网址 http://localhost:3000/posts/1,即我们刚才仿造的静态 API 接口,返回数据如下:

{ "id": 1, "title": "json-server", "author": "typicode" }

还有更好的解决方案,比如 YApi ,它是一个可本地部署的、打通前后端及 QA 的、可视化的接口管理平台:http://yapi.demo.qunar.com/

其实,围绕 API 我们可以做非常多的事儿,比如根据 API 生成请求,对服务器进行反向压测,甚至是 check 后端接口是否异常等。很明显,这对前端来说是极其友好的。下面是我几年前画的图,列出了我们能围绕 API 做的事儿,至今也不算过时。


通过社区,我们可以了解到当下主流的 API 演进过程。

1.GitHub v3 的 restful api,经典 rest;

2. 微博 API,非常传统的 json 约定方式;

3. 在 GitHub 的 v4 版本里,使用 GraphQL 来构建 API,这也是个趋势。

GraphQL 目前看起来比较火,那 GitHub 使用 GraphQL 到底解决的是什么问题呢?

GraphQL 既是一种用于 API 的查询语言也是一个满足你数据查询的运行时。

下面看一个最简单的例子:

  • 首先定义一个模型;
  • 然后请求你想要的数据;
  • 最后返回结果。

很明显,这和静态 API 模拟是一样的流程。但 GraphQL 要更强大一些,它可以将这些模型和定义好的 API 和后端很好的集成。于是 GraphQL 就统一了静态 API 模拟和和后端集成。


开发者要做的,只是约定模型和 API 查询方法。前后端开发者都遵守一样的模型开发约定,这样就可以简化沟通过程,让开发更高效。


如上图所示,GraphQL Server 前面部分,就是静态 API 模拟。GraphQL Server 后面部分就是与各种数据源进行集成,无论是 API、数据还是微服务。是不是很强大?

下面我们总结一下 API 的演进过程。

传统方式:Fe 模拟静态 API,后端参照静态 API 去实习 rpc 服务。

时髦的方式:有了 GraphQL 之后,直接在 GraphQL 上编写模型,通过 GraphQL 提供静态 API,省去了之前开发者自己模拟 API 的问题。有了 GraphQL 模型和查询,使用 GraphQL 提供的后端集成方式,后端集成更简单,于是 GraphQL 成了前后端解耦的桥梁。

集成使用的就是基于 Apollo 团队的 GraphQL 全栈解决方案,从后端到前端提供了对应的 lib ,使得前后端开发者使用 GraphQL 更加的方便。


GraphQL 本身是好东西,和 Rest 一样,我的担心是落地不一定那么容易,毕竟接受约定和规范是很麻烦的一件事儿。可是不做,又怎么能进步呢?

构建具有 Node.js 特色的服务



2018 年,有一个出乎意料的一个实践,就是在浏览器可以直接调用 grpc 服务。RPC 服务暴漏 HTTP 接口,这事儿 API 网关就可以做到。事实上,gRPC-Web 也是这样做的。

如果只是简单透传,意义不大。大多数情况,我们还是要在 Node.js 端做服务聚合,继而为不同端提供不一样的 API。这是比较典型的 API Proxy 用法,当然也可以叫 BFF(backend for frontend)。

从前端角度看,渲染和 API 是两大部分,API 部分前端自己做有两点好处:

1. 前端更了解前端需求,尤其是根据 ui/ue 设计 API;

2. 让后端更专注于服务,而非 API。需求变更,能不折腾后端就尽量不要去折腾后端。这也是应变的最好办法。

构建具有 Node.js 特色的微服务,也主要从 API 和渲染两部分着手为主。如果说能算得上创新的,那就是 API 和渲染如何无缝结合,让前端开发有更好的效率和体验。


尽管 Node.js 中间层可以将 RPC 服务聚合成 API,但前端还是前端,API 还是 API。那么如何能够让它们连接到一起呢?比较好的方式就是通过 SSR 进行同构开发。服务端创新有限,搞来搞去就是不断的升 v8,提升性能,新东西不多。

今天我最头疼的是,被 Vue/React/Angular 三大框架绑定,喜忧参半,既想用组件化和双向绑定(或者说不得不用),又希望保留足够的灵活性。大家都知道 SSR 因为事件 /timer 和过长的响应时间而无法有很高的 QPS(够用,优化难),而且对 API 聚合处理也不是很爽。更尴尬的是 SSR 下做前后端分离难受,不做也难受,到底想让人咋样?

对于任何新技术都是一样的,不上是等死,上了是找死。目前是在找死的路上努力的找一种更舒服的死法。


目前,我们主要采用 React 做 SSR 开发,上图中的 5 个步骤都经历过了(留到 QCon 广州场分享),这里简单介绍一下 React SSR。React 16 现在支持直接渲染到节点流。渲染到流可以减少你内容的第一个字节(TTFB)的时间,在文档的下一部分生成之前,将文档的开头至结尾发送到浏览器。当内容从服务器流式传输时,浏览器将开始解析 HTML 文档。渲染到流的另一个好处是能够响应背压。

实际上,这意味着如果网络被备份并且不能接受更多的字节,那么渲染器会获得信号并暂停渲染,直到堵塞清除。这意味着你的服务器会使用更少的内存,并更加适应 I / O 条件,这两者都可以帮助你的服务器拥有具有挑战性的条件。

在 Node.js 里,HTTP 是采用 Stream 实现的,React SSR 可以很好的和 Stream 结合。比如下面这个例子,分 3 步向浏览器进行响应。首先向浏览器写入基本布局 HTML,然后写入 React 组件<MyPage/>,然后写入</div></body></html>。

// 服务器端
// using Express
import { renderToNodeStream } from "react-dom/server"
import MyPage from "./MyPage"
app.get("/", (req, res) => {
 res.write("<!DOCTYPE html><html><head><title>My Page</title></head><body>");
 res.write("<div id='content'>"); 
 const stream = renderToNodeStream(<MyPage/>);
 stream.pipe(res, { end: false });
 stream.on('end', () => {
 res.write("</div></body></html>");
 res.end();
 });
});

这段代码里需要注意stream.pipe(res, { end: false }),res 本身是 Stream,通过 pipe 和<MyPage/>返回的 stream 进行绑定,继而达到 React 组件嵌入到 HTTP 流的目的。

上面是服务器端的做法,与此同时,你还需要在浏览器端完成组件绑定工作。react-dom 里有 2 个方法,分别是 render 和 hydrate。由于这里采用 renderToNodeStream,和 hydrate 结合使用会更好。当 MyPage 组件的 html 片段写到浏览器里,你需要通过 hydrate 进行绑定,代码如下。

// 浏览器端
import { hydrate } from "react-dom"
import MyPage from "./MyPage"
hydrate(<MyPage/>, document.getElementById("content"))

可是,如果有多个组件,需要写入多次流呢?使用 renderToString 就简单很多,普通模板的方式,流却使得这种玩法变得很麻烦。

伪代码:

const stream1 = renderToNodeStream(<MyPage/>);
const stream2 = renderToNodeStream(<MyTab/>);
res.write(stream1)
res.write(stream2)
res.end()

核心设计是先写入布局,然后写入核心模块,然后再写入其他模块。

1) 布局 (大多数情况静态 html 直接吐出,有可能会有请求);

2) Main(大多数情况有请求);

3) Others。

于是:

class MyComponent extends React.Component {
 fetch(){
 // 获取数据
 }
 parse(){
 // 解析,更新 state
 }
 render(){
 ...
 }
}

在调用组件渲染之前,先获得 renderToNodeStream,然后执行 fetch 和 parse 方法,取到结果之后再将 Stream 写入到浏览器。当前端接收到这个组件编译后的 html 片段后,就可以根据 containerID 直接写入,当然如果需要,你也可以根据服务器端传过来的 data 进行定制。

前后端如何通信、服务端代码如何打包、css 如何直接插入、和 eggjs 如何集成,这是目前我主要做的事儿。对于 API 端已经很成熟,对于 SSR 简单的做法也是有的,比如 next.js 通过静态方法 getInitialProps 完成接口请求,但只适用比较简单的应用场景(一键切换 CSR 和 SSR,这点设计的确实是非常巧妙的)。但是如果想更灵活,处理更负责的项目,还是很有挑战的,需要实现上面更为复杂的模块抽象。在 2019 年,应该会补齐这块,为构建具有 Node.js 特色的服务再拿下一块高地。

Serverless

简单地说,Serverless = FAAS + BaaS ,服务如果被认为是 Serverless 的,它必须无需显式地配置,并能自动调整扩缩容以及根据使用情况进行计费。云 function 是当今无 Serverless 计算中的通用元素,并引领着云的简化和通用编程模型发展的方向。

2015 年亚马逊推出了一项名为 AWS Lambda 服务的新选项。Node.js 领域 TJ 大神去创业,开发了 http://apex.run。目前,各大厂都在 Serverless 上发力,比如 Google、AWS、微软,阿里云等。


这里不得不提一下 Eventloop,Node.js 成也 Eventloop,败也 Eventloop,本身 Eventloop 是黑盒,开发将什么样的代码放进去你是很难全部覆盖的,偶尔会出现 Eventloop 阻塞的情况,排查起来极为痛苦。

而利用 Serverless,可以有效的防止 Eventloop 阻塞。比如加密,加密是常见场景,但本身的执行效率非常慢。如果加解密和你的其他任务放到一起,很容易导致 Eventloop 阻塞。


如果加解密服务是独立的服务呢?比如在 AWS 的 Lambda 上发布上面的代码,它自身是独立的,按需来动态扩容机器,可以去除 CPU 密集操作对 Node.js 的影响,快速响应流量变化。

这是趋势,对于活动类的尤其划算。你不知道什么时候是峰值,需要快速动态扩容能力,你也不会一直使用,按需付费更好。就算这个服务挂了,对其他业务也不会有什么影响,更不会出现阻塞 Eventloop 导致雪崩的情况。

  • 可靠性:99.999999999%
  • 可用性:99.99%
  • 无限存储空间
  • 按量付费

在前端领域,Serverless 会越来越受欢迎,除了能完成 API Proxy,BFF 这种功能外,还可以减少前端运维成本,还是可以期望一下的。

Node.js 新特性

2018 年有一个大家玩坏的梗:想提升性能,最简单的办法就是升级到最新 LTS 版本。因为 Node.js 依赖 v8 引擎,每次 v8 发版优化,新版 Node.js 集成新版 v8,于是性能就被提升了。

其他手段,比如使用 fast-json-stringify 加速 JSON 序列化,通过 Schema 知道每个字段的类型,那么就不需要遍历、识别字段类型,而是可以直接用序列化对应的字段,这就大大减少了计算开销,这就是 fast-json-stringfy 的原理,在某些情况下甚至可以比 JSON.stringify 快接近 10 倍左右。

在 2018 年,Node.js 非常稳定的前进着。下面看一下 Node.js 发版情况,2018-04-24 发布 Node.js v10,在 2018-10-23 发布 Node.js v11,稳步增长。下图是 Node.js 的发布计划。


可以看到,Node.js 非常稳定,API 也非常稳定,变化不大,一直紧跟 V8 升级的脚步,不断的提升性能。在新版本里,能够值得一说的,大概就只有 http2 的支持。

在 HTTP/2 里引入的新特性有:

  • Multiplexing 多路复用
  • Single Connection 每个源一个连接
  • Server Push 服务器端推送
  • Prioritization 请求优先级
  • Header Compression 头部压缩



目前,HTTP/2 已经开始落地,并且越来越稳定,高性能。HTTP/2 在 Node.js v8.4 里加入,在 Node.js v10 变为 Stable 状态,大家可以放心使用。示例代码如下。

const http2 = require('http2');
const fs = require('fs');
const server = http2.createSecureServer({
 key: fs.readFileSync('localhost-privkey.pem'),
 cert: fs.readFileSync('localhost-cert.pem')
});
server.on('error', (err) => console.error(err));

其他比如 trace_events,async_hooks 等改进都比较小。Node.js 10 将 npm 从 5.7 更新到 v6,并且在 node 10 里增强了 ESM Modules 支持,但还是不是很方便(官方正在实现新的模块加载器),不过很多知名模块已经慢慢支持 ESM 特性了,一般在 package.json 里增加如下代码。

{
 "jsnext:main": "index.mjs",
}

另外异常处理,终于可以根据 code 来处理了。

try {
// foo
} catch (err) {
if (err.code === 'ERR_ASSERTION') { . . . }
else { . . . }
}

最后再提 2 个模块:

node-clinic 性能调试神器

https://clinicjs.org

这是一个 Node.js 性能问题的诊断工具,可以生成 CPU、内存使用、事件循环(Event loop) 延时和活跃的句柄的相关数据折线图。


Lowjs 使用 Node.js 去开发 IoT

https://www.lowjs.org/

Node-RED 构建 IoT 很久前就有了,这里介绍一下 Lowjs。Low.js 是 Node.js 的改造版本,可以对低端操作有更好的支持。它是基于内嵌的对内存要求更低的 js 引擎 DukTape。Low.js 仅需使用不到 2MB 的硬盘和 1.5MB 的内存。

关于 Deno

Ry 把 Deno 用 Rust 重写了之后,就再也没有人说 Deno 是下一代 Node.js 了。其中的原因大家大概能够想明白,别有用心的人吹水还是很可怕的。Deno 基于 ts 运用时环境,底层使用 Rust 编写。性能、安全性上都很好,但舍弃了 npm 生态,需要做的事儿还是非常多的,甚至有人将 Koa 移植过去,也是蛮有意思的事儿。如果 Deno 真的能走另一条路,也是非常好的事儿。

未来已来

不知道还有多少人还记得,Google 的 ChromeOS 的理念是“浏览器即操作系统”。现在看来,未来已经不远了。通过各种研究,我们有理由坚定 Web 信仰,未来大前端的前景会更好,此时此刻,只是刚刚开始。


这里我再分享一些参加 Google IO 时了解到的信息:

  • PWA 证明了浏览器的缓存能力;
  • 投屏、画中画、push 等原生应用有的功能也都支持了;
  • Web Components 标准化;
  • 编解码新方案 av1,效率有极大的提升。

为什么会产生这样的改变?原因在于:

  • Web 开发主流化,无论移动端还是 PC 端,都能够复用前端技能,又能跨平台,这是 ROI 最高的方式。
  • Node 和 Chrome 一起孕育出了 Electron/Nw.js 这样的打包加壳工具,打通了前端和 Native API 的通道,让 WebView 真正的跨平台。
  • PWA 对于缓存的增加,以及推送、安装过程等抽象,使得 Web 应用拥有了可以媲美 native client 的能力。

这里首先要感谢 Chrome+Android 的尝试,使得 PWA 拥有和 Android 应用同等的待遇和权限。谷歌同时拥有 Chrome 和 Android,所以才能够在上面做整合,进一步扩大 Web 开发的边界。通过尝试,开放,最终形成标准,乃至是业界生态。很明显,作为流量入口,掌握底层设施能力是无比重要的。

Chrome 还提供了相应 Web 端的 API,如 web pay、web share、credential management api、media session 等。

Chrome 作为入口是可怕,再结合 Android,使得 Google 轻松完成技术创新,继而形成标准规范,推动其他厂商,一直领先是可怕的。


前端的爆发,说来也就是最近 3、4 年的事情,其最根本的创造力根源在 Node.js 的助力。Node.js 让更多人看到了前端的潜力,从服务器端开发,到各种脚手架、开发工具,前端开始沉浸在造轮子的世界里无法自拔。组件化后,比如 SSR、PWA 等辅助前端开发的快速开发实践你几乎躲不过去,再到 API 中间层、代理层到专业的后端开发都有非常成熟的经验。

我亲历了从 Node 0.10 到 iojs,从 Node v4 到目前的 Node v11,写了很多文章,参加过很多技术大会,也做过很多次演讲,有机会和业内很多高手交流。当然,我也从 Qunar 到阿里,经历了各种 Node 应用场景,对于 Node 的前景我是非常笃定的。善于使用 Node 有无数好处,想快速出成绩,想性能调优,想优化团队结构,想人员招聘,选择 Node 是不会有错的,诸多利好都让我坚定的守护 Node.js,至少 5 年以上。

我想跟很多技术人强调的是,作为前端开发,你不能只会 Web 开发技术,你需要掌握 Node,你需要了解移动端开发方式,你需要对后端有更多了解。而拥有更多的 Node.js 和架构知识,能够让你如鱼得水,开启大前端更多的可能性。

如果前面有二辆车,一辆是保时捷一辆是众泰,如果你必须撞一辆,你选哪个?


理性思维是哪个代价最低撞哪个,前提是你能够判断这两辆车的价值,很明显保时捷要比众泰贵很多。讲这个的目的是希望大家能够理解全栈的好处。全栈是一种信仰,不是拿来吹牛逼的,而是真的可以解决更多问题,同时也能让自己的知识体系不留空白,享受自我实现的极致快乐。另外,如果你需要了解更多的架构知识,全栈也是个不错的选择。

以我为例,我从接触全栈概念到现在,经历了以下四个阶段:

  • 第一阶段各种折腾,写各种代码,成了一个伪全栈,还挺开心的;
  • 第二阶段折腾开源,发现了新大陆,各种新玩法,好东西,很喜欢分享;
  • 第三阶段布道,觉得别人能行自己也能行,硬抗了二年,很累;
  • 第四阶段带人管理,参加超级项目,心脑体都是煎熬,但对心智的打磨很有意思。

不忘初心,坚持每天都能写代码,算是我最舒服自豪的事儿了吧,以前说越大越忙,现在要说越老越忙了,有了孩子,带人,还想做点事儿,能安静的写会代码其实不容易。

说了这么多,回到大前端话题,至少目前看 2019 年都是好事,一切都在趋于稳定和标准化,大家不必要过于焦虑。不过,掌握学习能力始终是最重要的,还是那两句话:“广积粮,高筑墙,缓称王”,“少抱怨,多思考,未来更美好”。

做一个坚定的 Web 信仰者,把握趋势,选择比努力更重要!

推荐阅读

2019年大前端技术趋势深度解读

作者简介

狼叔(网名 i5ting),现为阿里巴巴前端技术专家,Node.js 技术布道者,Node 全栈公众号运营者。曾就职于去哪儿、新浪、网秦,做过前端、后端、数据分析,是一名全栈技术的实践者,目前主要关注技术架构和团队梯队建设方向。即将出版《狼书》3 卷。

最后给自己打一个广告,今年 6 月 20 日北京举办的 GMTC 大会上,我会担任 Node 专场出品人,主要关注 Serverless,TypeScript 在 Web 开发框架里相关实践,以及性能,SSR,架构相关的 topic,如果你有想法,想分享的话,欢迎联系我。