LV03-04-天猫蓝牙Mesh开发-01-环境搭建

本文主要是天猫蓝牙Mesh开发——环境搭建的相关笔记,若笔记中有错误或者不合适的地方,欢迎批评指正😃。

点击查看使用工具及版本
Windows版本 windows11
Ubuntu版本 Ubuntu22.04的64位版本
VMware® Workstation 16 Pro 16.2.3 build-19376536
终端软件 MobaXterm(Professional Edition v23.0 Build 5042 (license))
点击查看本文参考资料
分类 网址 说明
官方网站 阿里云 阿里云官网主页
阿里生活物联平台 生活物联网平台(飞燕平台)主页
AliGenie 天猫精灵开放平台AliGenie主页
阿里物联网平台 阿里物联网平台主页
Bluetooth 技术网站 蓝牙协议规范什么的可以来这里找
Telink Telink | Chips for a Smarter IoT (telink-semi.com)
Telink中文官网
开发手册 AliOS Things开发指南 AliOS Things开发指南,这里是最新版本,可以直接从官网找到
AliOS Things开发指南 AliOS Things应用开发指南,这里应该是3.3版本的完整开发文档
AliOS Things开发指南(3.0) AliOS Things应用开发指南,这里应该是3.0版本的完整开发文档
生活物联网平台开发文档 生活物联网平台(飞燕平台)开发文档
《设备端开发指南》
Wi-Fi IoT品类定义与功能开发 天猫精灵IoT开放平台——Wi-Fi IoT品类定义与功能开发
硬件平台 mk3080 WiFi开发板 WiFi开发板使用指南-阿里云开发者社区
esp8266开发板 一个教程:ESP8266-NodeMCU开发板详解-太极创客 (taichi-maker.com)
TLSR8258 Datasheet Datasheet for Telink BLE + IEEE802.15.4 MultiStandard Wireless SoC TLSR8258
参考资料 AliOS Things 3.0 应用开发指南 这个只是一篇参考文章,里面是一些环境搭建相关的,可以参考
IP知识百科 - 华为 (huawei.com) IP的一些相关知识点
点击查看相关文件下载
分类 网址 说明
蓝牙规范相关文档 Core Specification 5.2 核心规格 5.2,该规范定义了创建可互操作的Bluetooth 设备所需的技术。
《Core_v5.2.pdf》
Mesh Model(v1.1) 本Bluetooth 规范定义了模型(以及它们所需的状态和消息),这些模型用于在mesh 网络中的节点上执行基本功能,超出了Bluetooth Mesh 配置文件 规范中定义的基础模型。
本规范包括定义跨设备类型标准功能的通用模型,以及支持关键mesh 场景的模型,如照明控制、传感器、时间和场景。
《MshMDL_v1.1.pdf》
Mesh Profile(v1.0.1) 该Bluetooth 规范定义了基本要求,以实现可互操作的mesh 网络解决方案,用于Bluetooth 低能量无线技术。
《MshPRFv1.0.1.pdf》
Mesh Device Properties 本规范包含Bluetooth Mesh 配置文件 和Bluetooth Mesh 模型规范所要求的设备属性的定义。
但是跟之前的有些区别,我主要看的之前的版本:《MMeshDeviceProperties_v1.2.pdf》
GATT Specification Supplement GATT Specification Supplement | Bluetooth® Technology Website。
好像可以在线看:《GATT Specification Supplement》
Assigned Numbers GATT的一些类型定义可以在这里找。
AliOS Things alios-things/AliOS-Things Gitee上的AliOSThings SDK源码仓库
alibaba/AliOS-Things GitHub上的AliOSThings SDK源码仓库
天猫精灵蓝牙Mesh协议栈 alibaba-archive/genie-bt-mesh-stack GitHub上的天猫精灵蓝牙Mesh协议栈源码仓库。
之前是在alibaba/genie-bt-mesh-stack这个仓库。
写笔记的时候最新提交为faf523618a6a2560090fc423222b9db80984bb7a
蓝牙Mesh设备开发指南 阿里云生活服务平台开发手册——蓝牙设备开发一节中的内容

一、开发环境搭建

1. 硬件设备

1.1 有哪些?

硬件:泰凌蓝牙tc825x、方糖、Telink下载器、数据线、杜邦线、直流电机、DS18B20 等,但不一定全部都会用。

image-20231224134919434

我们的开发箱中,除了mk3080模块,还有三个蓝牙模块和一个下载器,正面图片如下所示,最左侧的就是上面说的仿真器,右侧三个是蓝牙开发板,蓝牙开发板使用的是泰凌微8258模块。

image-20231224135514491

背面如下图所示,蓝牙模块的背面的丝印表示了引脚的编号:

image-20231224135715616

1.2 泰凌微8258模块简介

Telink新一代TLSR825x系列在ISM 2.4GHz频段提供了最先进的超低功耗(ULP)并发多协议物联网解决方案。它支持蓝牙 LE, Telink专有和蓝牙Mesh, Zigbee, RF4CE, HomeKit和2.4GHz专有。

TLSR825x是围绕一个32位MCU构建的,运行频率高达48MHz。它具有14位ADC,具有PGA, AMIC, DMIC,立体声音频输出,6通道PWM,一个正交解码器(QDEC)和灵活的GPIO接口。

相关资料可以来这里找:TLSR825x Series - Telink wiki (telink-semi.cn)

2. 软件与SDK

2.1 蓝牙Mesh协议栈

我们使用的天猫精灵蓝牙Mesh协议栈是1.1.1版本(alibaba-archive/genie-bt-mesh-stack at faf523618a6a2560090fc423222b9db80984bb7a (github.com)),我们可以在这里下载:

1
git clone git@github.com:alibaba-archive/genie-bt-mesh-stack.git
image-20231224140124639

下载完成后可以看到有如下文件(下图是在linux中下载的,但是后来发现,这个蓝牙Mesh不支持在linux下开发,只支持windows):

image-20231224140205917

我们可以在windows下下载源码,我放在这里:

1
D:\MyLinux\genie-bt-mesh\genie-bt-mesh-stack

2.2 Telink程序下载器(免驱)

我们在window下进行程序烧录,需要安装一个烧录软件,我们可以去官网下载:Telink | Developer Resources (telink-semi.cn)

image-20231224141856681

之前出到TLSR8系列的时候是这样的:

image-20231224141919765

现在我们选择上面的全系列(Burning and Debugging Tools for all Series - Telink wiki (telink-semi.cn))即可:

image-20231224142008391

我们点击开始下载,下载完成后会得到这样一个压缩包文件:

image-20231224142052356

我们解压后可以得到可执行文件,这个是免安装的:

image-20231224142121017

我们直接双击打开,界面如下:

image-20231224142201704

后面会说明软件如何使用。

2.3 VScode相关

2.3.1 vscode编辑器安装

这个就很简单了,经常用。但是这仅仅是一个编辑器,后续我们还要再安装一些插件。

2.3.2 vscode插件安装

我们需要安装这个插件:

image-20231224145837573

但是很遗憾,在2023年12月24的时候,这个插件找不到了,实际上就是官网提供了其他的插件(如何通过VisualStudioCode搭建开发环境_物联网终端操作系统(AliOS Things)-阿里云帮助中心 (aliyun.com)):

image-20231224150021454

那我们就安装这个好了。安装过程中,这里会有一些提示信息:

image-20231224150123010

我们要注意是否提示安装一些依赖,需要的时候进行安装即可。安装完毕后,会有以下提示信息:

image-20231224150238722

但是这里还是有坑,这里很显然说安装了aos-tools,那么aos命令应该是可用的,但是实际安装完之后找不到命令,我也没找到安装的位置,所以就只能使用pip安装aos-cube啦。这里的插件就可以卸载掉了,但是一开始的时候就没安装,但是后面使用python出现问题,也可以安装一下,因为它里面会为我们安装很多的插件,包含python。

2.4 pip安装aos

2.4.1 更新pip

1
python -m pip install --upgrade pip
image-20231224155946202

2.4.2 安装setuptools

1
python -m pip install setuptools
image-20231224155745597

2.4.3 安装wheels

1
python -m pip install wheel
image-20231224155816360

2.4.4 安装aos-cube

1
python -m pip install aos-cube

这个安装过程会有以下打印信息:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
20380@qidaink MINGW64 /d/MyLinux/genie-bt-mesh/test_demo
$ python -m pip install aos-cube
Collecting aos-cube
Downloading aos-cube-0.5.11.tar.gz (52 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 52.6/52.6 kB 246.2 kB/s eta 0:00:00
Preparing metadata (setup.py) ... done
Collecting pyserial (from aos-cube)
Downloading pyserial-3.5-py2.py3-none-any.whl (90 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 90.6/90.6 kB 68.6 kB/s eta 0:00:00
Collecting esptool (from aos-cube)
Downloading esptool-4.7.0.tar.gz (285 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 285.5/285.5 kB 22.5 kB/s eta 0:00:00
Preparing metadata (setup.py) ... done
Collecting scons (from aos-cube)
Downloading SCons-4.6.0-py3-none-any.whl.metadata (9.0 kB)
Requirement already satisfied: requests in c:\lenovosoft\python310\lib\site-packages (from aos-cube) (2.27.1)
Collecting click (from aos-cube)
Downloading click-8.1.7-py3-none-any.whl.metadata (3.0 kB)
Collecting paho-mqtt (from aos-cube)
Downloading paho-mqtt-1.6.1.tar.gz (99 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 99.4/99.4 kB 18.5 kB/s eta 0:00:00
Preparing metadata (setup.py) ... done
Collecting progressbar2 (from aos-cube)
Downloading progressbar2-4.3.2-py3-none-any.whl.metadata (16 kB)
Collecting configparser (from aos-cube)
Downloading configparser-6.0.0-py3-none-any.whl.metadata (11 kB)
Collecting colorama (from click->aos-cube)
Downloading colorama-0.4.6-py2.py3-none-any.whl (25 kB)
Collecting bitstring>=3.1.6 (from esptool->aos-cube)
Downloading bitstring-4.1.4-py3-none-any.whl.metadata (5.8 kB)
Requirement already satisfied: cryptography>=2.1.4 in c:\lenovosoft\python310\lib\site-packages (from esptool->aos-cube) (36.0.1)
Collecting ecdsa>=0.16.0 (from esptool->aos-cube)
Downloading ecdsa-0.18.0-py2.py3-none-any.whl (142 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 142.9/142.9 kB 19.1 kB/s eta 0:00:00
Collecting reedsolo<1.8,>=1.5.3 (from esptool->aos-cube)
Downloading reedsolo-1.7.0-py3-none-any.whl (32 kB)
Collecting PyYAML>=5.1 (from esptool->aos-cube)
Downloading PyYAML-6.0.1-cp310-cp310-win_amd64.whl.metadata (2.1 kB)
Collecting intelhex (from esptool->aos-cube)
Downloading intelhex-2.3.0-py2.py3-none-any.whl (50 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 50.9/50.9 kB 17.6 kB/s eta 0:00:00
Collecting python-utils>=3.8.1 (from progressbar2->aos-cube)
Downloading python_utils-3.8.1-py2.py3-none-any.whl.metadata (9.7 kB)
Requirement already satisfied: urllib3<1.27,>=1.21.1 in c:\lenovosoft\python310\lib\site-packages (from requests->aos-cube) (1.26.8)
Requirement already satisfied: certifi>=2017.4.17 in c:\lenovosoft\python310\lib\site-packages (from requests->aos-cube) (2021.10.8)
Requirement already satisfied: charset-normalizer~=2.0.0 in c:\lenovosoft\python310\lib\site-packages (from requests->aos-cube) (2.0.12)
Requirement already satisfied: idna<4,>=2.5 in c:\lenovosoft\python310\lib\site-packages (from requests->aos-cube) (3.3)
Requirement already satisfied: setuptools in c:\lenovosoft\python310\lib\site-packages (from scons->aos-cube) (58.1.0)
Collecting bitarray<3.0.0,>=2.8.0 (from bitstring>=3.1.6->esptool->aos-cube)
Downloading bitarray-2.9.1-cp310-cp310-win_amd64.whl.metadata (35 kB)
Requirement already satisfied: cffi>=1.12 in c:\lenovosoft\python310\lib\site-packages (from cryptography>=2.1.4->esptool->aos-cube) (1.15.0)
Requirement already satisfied: six>=1.9.0 in c:\lenovosoft\python310\lib\site-packages (from ecdsa>=0.16.0->esptool->aos-cube) (1.16.0)
Requirement already satisfied: typing-extensions>3.10.0.2 in c:\lenovosoft\python310\lib\site-packages (from python-utils>=3.8.1->progressbar2->aos-cube) (4.1.1)
Requirement already satisfied: pycparser in c:\lenovosoft\python310\lib\site-packages (from cffi>=1.12->cryptography>=2.1.4->esptool->aos-cube) (2.21)
Downloading click-8.1.7-py3-none-any.whl (97 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 97.9/97.9 kB 19.0 kB/s eta 0:00:00
Downloading configparser-6.0.0-py3-none-any.whl (19 kB)
Downloading progressbar2-4.3.2-py3-none-any.whl (50 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 50.6/50.6 kB 10.2 kB/s eta 0:00:00
Downloading SCons-4.6.0-py3-none-any.whl (4.3 MB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.3/4.3 MB 14.5 kB/s eta 0:00:00
Downloading bitstring-4.1.4-py3-none-any.whl (60 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 61.0/61.0 kB 15.0 kB/s eta 0:00:00
Downloading python_utils-3.8.1-py2.py3-none-any.whl (27 kB)
Downloading PyYAML-6.0.1-cp310-cp310-win_amd64.whl (145 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 145.3/145.3 kB 20.0 kB/s eta 0:00:00
Downloading bitarray-2.9.1-cp310-cp310-win_amd64.whl (126 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 126.0/126.0 kB 15.3 kB/s eta 0:00:00
Building wheels for collected packages: aos-cube, esptool, paho-mqtt
Building wheel for aos-cube (setup.py) ... done
Created wheel for aos-cube: filename=aos_cube-0.5.11-py3-none-any.whl size=67170 sha256=93546743024fa246150ae485a326e2897f4cb4314dfbfd5e61fbef41808e4af1
Stored in directory: c:\users\20380\appdata\local\pip\cache\wheels\46\20\12\aad44def045b0e2e4a63c8214e611f6800e6513de0f330be36
Building wheel for esptool (setup.py) ... done
Created wheel for esptool: filename=esptool-4.7.0-py3-none-any.whl size=364555 sha256=70171bc79f150fdd81da2e561b06ab8cf8bbded4558b174f748b97fcc78e8065
Stored in directory: c:\users\20380\appdata\local\pip\cache\wheels\cb\35\1f\46fb9edf0a94ac86c24999d7b45de825925f425d197a18799d
Building wheel for paho-mqtt (setup.py) ... done
Created wheel for paho-mqtt: filename=paho_mqtt-1.6.1-py3-none-any.whl size=65666 sha256=97b5e61f44a97b1a91dda40bae6d1fe1e5e6af57ddce43c37c305d5fa02ce40b
Stored in directory: c:\users\20380\appdata\local\pip\cache\wheels\8b\bb\0c\79444d1dee20324d442856979b5b519b48828b0bd3d05df84a
Successfully built aos-cube esptool paho-mqtt
Installing collected packages: reedsolo, pyserial, paho-mqtt, intelhex, bitarray, scons, PyYAML, python-utils, ecdsa, configparser, colorama, bitstring, progressbar2, click, esptool, aos-cube
Successfully installed PyYAML-6.0.1 aos-cube-0.5.11 bitarray-2.9.1 bitstring-4.1.4 click-8.1.7 colorama-0.4.6 configparser-6.0.0 ecdsa-0.18.0 esptool-4.7.0 intelhex-2.3.0 paho-mqtt-1.6.1 progressbar2-4.3.2 pyserial-3.5 python-utils-3.8.1 reedsolo-1.7.0 scons-4.6.0

验证是否安装成功:

1
aos
image-20231224160133543

我们从这里输入Y,会接着有以下打印信息:

image-20231224160202108

这就表明我们的aos可以使用啦。

3. 环境配置

3.1 为什么不用linux?

很简单,不支持呗,我属于那种比较犟的,非要一试,像当时在linux中开发AliOSThings一样,安装好ptyhon,aos相关工具,然后我们输入以下命令编译一下:

1
aos make bluetooth.helloworld@tc825x

果不其然,报错啦:

image-20231224143536122

原因是啥?很显然,是因为找不到这个.exe文件,这是window下的可执行文件,在linux中怎么可能支持嘛,所以还是老老实实跟着课程在windows下开发啦。

3.2 创建vscode工程

我们这里进行一个工程创建,默认的工程文件如下图所示:

image-20231224150831920

3.3 创建.vscode目录

我们再新建一个.vscode文件夹用来存放配置文件:

image-20231224151103163

3.4 可视和搜索配置

然后我们找一下settings.json文件,看一下文件格式:

image-20231224151035182

然后我们在.vscode目录中新建此文件:

image-20231224151326972

在里面添加如下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
{
"search.exclude": { //表示搜索区域
"**/platform/mcu/[a-s]*" : true, //[a-s]* 表示a到s字符开头的全部屏蔽,数值也一样,自行体验
"**/board/bk3435devkit" : true,
"**/board/pca10040" : true,
"**/board/ch6121evb" : true,
"**/board/tg7100b" : true,
},
"files.exclude":{ //表示显示区域
"**/.git" : true, //true标识改目录不被显示
"**/.g**" : true, //*号标识通配符,.g开头的均屏蔽,根据用途自行配置,多多尝试
"**/platform/mcu/[a-s]*" : true, //[a-s]* 表示a到s字符开头的全部屏蔽,数值也一样,自行体验
"**/board/bk3435devkit" : true,
"**/board/pca10040" : true,
"**/board/ch6121evb" : true,
"**/board/tg7100b" : true,
}
}

3.5 配置编译任务

我们创建一个task.json文件:

image-20231224152142211

然后输入以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
{
"version": "2.0.0",
"tasks": [
{
"label": "tc825x", //标签,会在生成代码中显示出来此目标名
"type": "shell", //类型为shell
"command": "aos", //此处配置命令,本初使用的alios,所以指定了aos,如果是直接make就指定make即可
"args": [
"make",
"bluetooth.light_ctl@tc825x", //此处为命令跟的参数,也就是aos make bluetooth.light_ctl@tc825x
],
"group": "build", //归属于build组下,编译目标类别内
"presentation": {
"reveal": "silent" // 此处为出现错误时才会进行输出
},
"problemMatcher": "$msCompile" // 此处为使用标准的MS编译器输出错误和警告等信息
},
/*
//使用时如果没有第二个目标,可将下面的内容删除,注意格式即可
{
"label": "可以指定第二个标签",
"type": "shell",
"command": "我们的命令",
"args": [
"我们的参数",
],
"group": "build",
"presentation": {
"reveal": "silent"
},
"problemMatcher": "$msCompile"
},
*/
]
}

3.6 运行任务

我们按以下步骤运行任务:

image-20231224162547354

这是个编译命令,然后就会启动编译过程,去编译bluetooth.light_ctl@tc825x这个demo,然后就会创建一个新的终端输出编译信息:

image-20231224162739896

编译完成后会有如下提示,我们按下任意按键,这个终端就会关闭。

image-20231224162937907

相关的编译过程的打印信息如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
 *  正在文件夹 d%3A%5CMyLinux%5Cgenie-bt-mesh%5Cgenie-bt-mesh-stack 中执行任务: aos make bluetooth.light_ctl@tc825x 

aos-cube version: 0.5.11
Making config file for first time
========liblt_8258.a========
========8258 32k ret start========
========8258 32k ret boot link========
processing components: bluetooth.light_ctl tc825x platform/mcu/tc32_825x osal init auto_component
========liblt_8258.a========
========8258 32k ret start========
========8258 32k ret boot link========
kernel_version:AOS-R-2.0.0
all components: bluetooth.light_ctl tc825x platform/mcu/tc32_825x osal init auto_component genie_app bluetooth.bt_host bluetooth.bt_mesh yloop cli platform/arch/tc32 libc rhino hal rhino.vfs rhino.fs.kv crc bluetooth.bt_common bluetooth.bt_mesh.ref_impl log kernel.rhino.vfs.device
========liblt_8258.a========
========8258 32k ret start========
========8258 32k ret boot link========
kernel_version:AOS-R-2.0.0
Build AOS Now
TOOLCHAIN_PATH=D:\MyLinux\genie-bt-mesh\genie-bt-mesh-stack\build/compiler/tc32/bin/
Compiling light_ctl
Compiling tc825x
Compiling tc32_825x
app/example/bluetooth/light_ctl/light_ctl.c: In function 'light_state_store':
app/example/bluetooth/light_ctl/light_ctl.c:106:22: warning: unused variable 'pu'
platform/mcu/tc32_825x/aos/soc_impl.c: In function 'soc_get_cur_sp':
platform/mcu/tc32_825x/aos/soc_impl.c:138:1: warning: control reaches end of non-void function
platform/mcu/tc32_825x/hal/timer.c: In function 'hal_timer_stop':
platform/mcu/tc32_825x/hal/timer.c:93:2: warning: 'return' with a value, in function returning void
Compiling osal
Compiling kernel_init
Compiling auto_component
Compiling genie_app
genie_app/base/genie_flash.c:60:1: warning: useless storage class specifier in empty declaration
genie_app/base/genie_flash.c: In function '_genie_flash_copy':
genie_app/base/genie_flash.c:502:14: warning: unused variable 'flag_offset'
genie_app/bluetooth/host/profile/ais_srv/ais_service.c:184:13: warning: '_ais_execute_disconnet' declared 'static' but never defined
Compiling bt_host
Compiling bt_mesh
Compiling yloop
Compiling cli
Compiling tc32
Compiling newlib_stub
platform/arch/tc32/port_c.c: In function 'cpu_intrpt_save':
platform/arch/tc32/port_c.c:52:1: warning: control reaches end of non-void function
Compiling rhino
Compiling hal
Compiling vfs
Compiling kv
Compiling crc
Compiling bt_common
Compiling ref_impl
network/bluetooth/bt_common/port/aos_port.c: In function 'irq_lock':
network/bluetooth/bt_common/port/aos_port.c:176:5: warning: 'cpsr' is used uninitialized in this function
Compiling log
Compiling vfs_device
Making out/bluetooth.light_ctl@tc825x/libraries/light_ctl.a
Making out/bluetooth.light_ctl@tc825x/libraries/tc825x.a
Making out/bluetooth.light_ctl@tc825x/libraries/tc32_825x.a
Making out/bluetooth.light_ctl@tc825x/libraries/osal.a
Making out/bluetooth.light_ctl@tc825x/libraries/kernel_init.a
Making out/bluetooth.light_ctl@tc825x/libraries/auto_component.a
Making out/bluetooth.light_ctl@tc825x/libraries/genie_app.a
Making out/bluetooth.light_ctl@tc825x/libraries/bt_host.a
Making out/bluetooth.light_ctl@tc825x/libraries/bt_mesh.a
Making out/bluetooth.light_ctl@tc825x/libraries/yloop.a
Making out/bluetooth.light_ctl@tc825x/libraries/cli.a
Making out/bluetooth.light_ctl@tc825x/libraries/tc32.a
Making out/bluetooth.light_ctl@tc825x/libraries/newlib_stub.a
Making out/bluetooth.light_ctl@tc825x/libraries/rhino.a
Making out/bluetooth.light_ctl@tc825x/libraries/hal.a
Making out/bluetooth.light_ctl@tc825x/libraries/vfs.a
Making out/bluetooth.light_ctl@tc825x/libraries/kv.a
Making out/bluetooth.light_ctl@tc825x/libraries/crc.a
Making out/bluetooth.light_ctl@tc825x/libraries/bt_common.a
Making out/bluetooth.light_ctl@tc825x/libraries/ref_impl.a
Making out/bluetooth.light_ctl@tc825x/libraries/log.a
Making out/bluetooth.light_ctl@tc825x/libraries/vfs_device.a
Making bluetooth.light_ctl@tc825x.elf

Making bluetooth.light_ctl@tc825x.bin
Making bluetooth.light_ctl@tc825x.hex
no definite address hint,using default mem configuration
Making bluetooth.light_ctl@tc825x.lst

AOS MEMORY MAP
|=================================================================|
| MODULE | ROM | RAM |
|=================================================================|
| genie_app | 0 | 25827 |
| log | 0 | 478 |
| ref_impl | 0 | 795 |
| bt_common | 0 | 15500 |
| bt_mesh | 0 | 62362 |
| crc | 0 | 184 |
| libsoft-fp | 0 | 1900 |
| osal | 0 | 414 |
| tc32_825x | 0 | 18730 |
| cli | 0 | 9740 |
| kernel_init | 0 | 24 |
| tc32 | 0 | 424 |
| rhino | 0 | 20225 |
| bt_host | 0 | 46945 |
| liblt_8258 | 0 | 24648 |
| light_ctl | 0 | 3003 |
| tc825x | 0 | 301 |
|=================================================================|
| TOTAL (bytes) | 0 | 231500 |
|=================================================================|
Adding Check bluetooth.light_ctl@tc825x.bin
output done!
Build complete
Making .gdbinit
* 终端将被任务重用,按任意键关闭。

二、工程创建

1. 添加环境变量

【注意】后面经过实践发现这里不支持在源码外创建工程,所以这里添加环境变量可以不进行。

这里同样是使用aos工具,我们能否像AliOSThings一样在源码外创建工程呢?我们执行以下命令:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
20380@qidaink MINGW64 /d/MyLinux/genie-bt-mesh/genie-bt-mesh-stack (master)
$ cd ..

20380@qidaink MINGW64 /d/MyLinux/genie-bt-mesh
$ aos create project -b tc825x -t helloworld_demo helloworld_tc825x
[AliOS-Things] ERROR: No AliOS Things source directory found. To make things work, please:
[AliOS-Things] ERROR:
[AliOS-Things] ERROR: -> Set AOS_SDK_PATH environment variable to a valid
[AliOS-Things] ERROR: AliOS-Things source directory as below:
[AliOS-Things] ERROR:
[AliOS-Things] ERROR: * Linux/MacOS/Git-Bash:
[AliOS-Things] ERROR: $ export AOS_SDK_PATH=<path_to_AliOS_Things_src>
[AliOS-Things] ERROR: * Windows CMD:
[AliOS-Things] ERROR: > set AOS_SDK_PATH=<path_to_AliOS_Things_src>
[AliOS-Things] ERROR:
[AliOS-Things] ERROR: Please set it on system level if you want so.
---

不出意外,出现了报错,报错原因是找不到AOS_SDK_PATH,那么我们在windows中的环境变量中添加一个:

image-20231224163657374

我们可以在终端打印一下(由于我使用的是git-bash,它支持echo命令):

1
echo $AOS_SDK_PATH
image-20231224164040634

刚设置完成是不生效的,需要我们重启一下电脑。

2. 创建工程

我们回到上一级目录,然后执行以下命令创建:

1
aos create project -b tc825x -t helloworld helloworld_tc825x
image-20231224164453888

然后又报错了,我去查了一下AliOSThings源码的对应的目录,人家是有这个gen_newproject.py文件的,而蓝牙的协议栈则没有:

image-20231224164608705

所以很显然,这里不支持喽,那我们就乖乖的在example目录下创建自己的工程吧。我们来到app\example\bluetooth目录下,将原来的helloworld复制一份:

1
cp helloworld helloworld_tc825x -r
image-20231224165221702

并且需要修改目录下的文件名,好像是要和目录名保持一致,因为我后面报错了:

image-20231224165943002

所以这里直接修改文件名字如下:

image-20231224170006187

3. 修改代码

3.1 helloworld_tc825x.c

我们会发现里面只有一个helloworld_tc825x.c源码文件,我们删除里面原有的,并添加以下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
#include <aos/aos.h>

int application_start(int argc, char **argv)
{
printf("BUILD_TIME:%s\n", __DATE__","__TIME__);

while(1)
{
printf("Hello World\r\n");
aos_msleep(1000);
}
return 0;
}

3.2 makefile文件

我们将makefile中的一些名称也都修改为helloworld_tc825x:

image-20231224170200465

只需要修改这两个地方即可

4. 编译工程

我们进入到工程目录,执行以下命令:

1
aos make bluetooth.helloworld_tc825x@tc825x

然后就会开始编译,编译成功会有如下打印信息:

image-20231224170308922

5. 成果物在哪?

我们编译完了,最后生成的可执行文件在哪?最终生成的可执行文件都在源码顶层目录的out目录中:

image-20231224170513025

我们进入out\bluetooth.helloworld_tc825x@tc825x\binary中就会看到生成的所有可执行文件:

image-20231224170617445

三、烧写程序

1. 硬件连接

蓝牙模块并没有之前的OTA,而且我们需要使用仿真器对其进行烧写,仿真器与蓝牙模块连接如下(我们需要三根杜邦线来连接):

设备 电源正极 烧录引脚 电源负极
下载器 3V3 SWM GND
泰凌微8258 3.3V PA7 GND

实物连接如下图所示:

image-20231224171841137

可以看到两个板子还有另一端接了USB线,他们都需要接到电脑的USB口。

2. 烧写软件使用方式

其实官网有个文档,有说明的Burning and Debugging Tools for all Series - Telink wiki (telink-semi.cn)

2.1 选择芯片型号

我们打开BDT这个软件,然后选择芯片型号,点击SWS查看是否连接成功。

image-20231224173611879

需要注意的是,我最开始下了通用版本5.7.5,它里面我没找到8258,但是选B85这个型号的话也能连接成功并进行烧录,并且也成功了:

image-20231224184755255

但是吧,有可能falsh大小之类的有所不同吧,没找到相关的东西,就用了以前的5.6.0版本,那个里面是有8258的。然后我在这里看到了这个B85:B85 Mesh Starter Kit - Telink wiki (telink-semi.cn)

image-20231224184839784

这里写,B85 Mesh Starter Kit是基于TLSR8258的硬件平台,所以选它也行,反正目前暂时没什么问题。

2.2 擦除flash

我们点击Erase擦除,然后就会擦除所有的扇区:

image-20231224174318921

2.3 烧写可执行文件

image-20231224174145676

然后就会开始烧写程序,烧写完成后,会有如下提示:

image-20231224174213061

四、重启测试

我这里选择使用MobaXterm作为串口终端,我们这里波特率需要配置为 921600:

image-20231224174531457

然后按一下开发板上的RST按键,位于右上角,复位重启后我们会看到如下打印信息:

image-20231224174650086

开发板会不断打印hello world。