本帖最后由 elliottzheng 于 2024-12-5 19:16 编辑
本帖最后由 elliottzheng 于 2024-12-5 19:13 编辑
需要的材料
- PB-03F-kit开发板
- Phy6222 SDK(我用的phy6222_v313_0512)
- 烧写工具 phypluskit_v2.5.2b
- 手机App:LightBlue, PhyOTA(安卓版参照安卓版使用文档,IOS版可以直接在App Store下载)
关于基础的开发环境配置和烧写工具的使用,可以参考我上一篇文章 【PB-03F-kit】环境配置点灯与AT指令测试
简单BLE外设
打开 example\ble_peripheral\simpleBlePeripheral
项目,
同样我们点击魔法棒,在C/C++选项卡下,把 CFG_SLEEP_MODE=PWR_MODE_SLEEP 改成 CFG_SLEEP_MODE=PWR_MODE_NO_SLEEP,不然容易休眠搜不着蓝牙
编译生成hex文件,编译出来的文件在项目的bin目录下,即"bin\simpleBlePeripheral.hex"
打开烧写工具,选好COM口,波特率选UXTDWU,
长按板子上的reset 2s后放开进入烧写模式,log当中出现cmd>>即可,如下图
左边HEX Merge选项卡,app中选择之前编译出来的hex文件
首先点击erase擦除,然后点击write,开始烧写
烧写完成,按一下reset,程序开始运行
手机打开APP LightBlue,选择蓝牙设备 BUMBLE-XXXX
,点击Connect
连接成功如图
拉到最下面可以看到有四个Attribute, 分别是 Power
,Reset
,NOTIFY
,WT_NO_RSP
,
其中 Power
变量代表的是蓝牙发射功率(TX Power)。在 BLE 协议中,TX Power 表示设备的发射功率水平,通常以 dBm 为单位。
我们点击 Power
, 进入如下界面,可以看到它是可读可写的,我们把Data format改为Unsigned Littel Endian(其实就是UInt8), 点击 read again
, 可以看到设备返回的值为15,
然后我们尝试更改它,我们把Value改为10,然后点击 Write
,
然后点击 Read again
可以看到设备返回的值已经变为10,如下图所示
蓝牙OTA
接下来我们改造simpleBlePeripheral项目,使其支持OTA,点击魔法棒,在C/C++选项卡下,添加一个预处理器定义 PHY_OTA_ENABLE=1
,表示启用OTA,然后重新编译生成hex文件
PHY_OTA_ENABLE=1
其实就是帮你把一些OTA相关代码启用了,具体原理可以参考园长的帖子
打开烧写软件,左边HEX Merge选项卡,
- app 选择simpleBlePeripheral新编译出来的hex文件,
- 而BOOT选择SDK当中预先编译的ota的boot hex,可以在
example\OTA\OTA_internal_flash\bin
下面找到
- OTA模式选择
Single No FCT
(意思是,升级的时候蓝牙app会暂停程序且覆盖写入)
进入烧写模式,同样是先点击erase擦除,然后点击write,开始烧写
烧写完成,这样我们的开发板就具有了OTA功能,按一下reset,程序开始运行
此时我们打开手机APP PhyOTA,扫描找到 BUMBLE-XXXX
,点击确定进入设备升级界面
可以看到下面的界面,app首先会进行连接,然后会显示 特性Enable成功SBH App已准备好
,就说明我们的APP已经准备好要对Bumble进行OTA升级了,接下来我们准备升级所需要的hex16文件
我们准备一个新版本的simpleBlePeripheral,只需在代码里加一个log以区分新旧版本,我们修改 simpleBLEPeripheral.c
,在main函数里添加一个log
SimpleBLEPeripheral_Init
函数的最后加了一行
LOG("======================THIS IS NEW OTA VERSION====================\n");
如下图所示
重新编译,生成hex文件,然后我们在烧写工具当中使用HEX Merge选项卡,app选择新编译出来的hex文件,而BOOT选择SDK当中预先编译的ota的boot hex,然后在OTA模式选择 Single No FCT
点击右侧绿色的Hex16按钮,生成hex16文件
生成的hex16文件在 simpleBlePeripheral.hex
的同级目录下,名为 simpleBlePeripheral.hex16
, 如下图所示
然后我们把hex16传到手机里
重点来了,在安卓系统,你必须把hex16放到手机根目录(也就是 /storage/emulated/0/
)或者APP的目录下,PhyOTA才能找到。
以小米为例,你得直接放在内部存储设备下
我当时折腾了半天一直没办法选择hex16,后面查阅PhyOTA的使用文档才知道
显示如下
OK, 成功选择hex16后,点击开始OTA升级
升级完成后,我们打开串口监视器,然后点击 Reset
,可以看到log当中打印出了
======================THIS IS NEW OTA VERSION====================
说明OTA升级成功