本帖最后由 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,不然容易休眠搜不着蓝牙
![image.png image.png](data/attachment/forum/202412/05/190919uuu2wn14nusxnwuq.png)
编译生成hex文件,编译出来的文件在项目的bin目录下,即"bin\simpleBlePeripheral.hex"
打开烧写工具,选好COM口,波特率选UXTDWU,
![image.png image.png](data/attachment/forum/202412/05/190928w6cszfslfdvhfs8a.png)
长按板子上的reset 2s后放开进入烧写模式,log当中出现cmd>>即可,如下图
![image.png image.png](data/attachment/forum/202412/05/190943l7ta455qigivio5q.png)
左边HEX Merge选项卡,app中选择之前编译出来的hex文件
![image.png image.png](data/attachment/forum/202412/05/190951uyevjr71egeejg1e.png)
首先点击erase擦除,然后点击write,开始烧写
![image.png image.png](data/attachment/forum/202412/05/190959csrgspzjhnwimisw.png)
烧写完成,按一下reset,程序开始运行
![image.png image.png](data/attachment/forum/202412/05/191008cvd0jdjcjd8esetv.png)
手机打开APP LightBlue,选择蓝牙设备 BUMBLE-XXXX
,点击Connect
![image.png image.png](data/attachment/forum/202412/05/191016v02p1o2p1ww22p2n.png)
连接成功如图
![image.png image.png](data/attachment/forum/202412/05/191027jszjds7udefsofsx.png)
拉到最下面可以看到有四个Attribute, 分别是 Power
,Reset
,NOTIFY
,WT_NO_RSP
,
![image.png image.png](data/attachment/forum/202412/05/191037hsww6xlzscxcccyz.png)
其中 Power
变量代表的是蓝牙发射功率(TX Power)。在 BLE 协议中,TX Power 表示设备的发射功率水平,通常以 dBm 为单位。
我们点击 Power
, 进入如下界面,可以看到它是可读可写的,我们把Data format改为Unsigned Littel Endian(其实就是UInt8), 点击 read again
, 可以看到设备返回的值为15,
![image.png image.png](data/attachment/forum/202412/05/191049ttluvx3vdljrvvxc.png)
然后我们尝试更改它,我们把Value改为10,然后点击 Write
,
![image.png image.png](data/attachment/forum/202412/05/191100mr0jpjwv0ty38vyz.png)
然后点击 Read again
可以看到设备返回的值已经变为10,如下图所示
![image.png image.png](data/attachment/forum/202412/05/191110hrkcarkd9pazptad.png)
蓝牙OTA
接下来我们改造simpleBlePeripheral项目,使其支持OTA,点击魔法棒,在C/C++选项卡下,添加一个预处理器定义 PHY_OTA_ENABLE=1
,表示启用OTA,然后重新编译生成hex文件
![image.png image.png](data/attachment/forum/202412/05/191122gm4itymm4lnxazy1.png)
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会暂停程序且覆盖写入)
![image.png image.png](data/attachment/forum/202412/05/191138alp7ohpyypdzhyrr.png)
![image.png image.png](data/attachment/forum/202412/05/191143eyrrue2zlk59ejrl.png)
进入烧写模式,同样是先点击erase擦除,然后点击write,开始烧写
![image.png image.png](data/attachment/forum/202412/05/191153we410izenynvzlif.png)
烧写完成,这样我们的开发板就具有了OTA功能,按一下reset,程序开始运行
此时我们打开手机APP PhyOTA,扫描找到 BUMBLE-XXXX
,点击确定进入设备升级界面
![image.png image.png](data/attachment/forum/202412/05/191228vljp1891ej5l1ynp.png)
可以看到下面的界面,app首先会进行连接,然后会显示 特性Enable成功SBH App已准备好
,就说明我们的APP已经准备好要对Bumble进行OTA升级了,接下来我们准备升级所需要的hex16文件
![image.png image.png](data/attachment/forum/202412/05/191241oae41zkksadajokw.png)
我们准备一个新版本的simpleBlePeripheral,只需在代码里加一个log以区分新旧版本,我们修改 simpleBLEPeripheral.c
,在main函数里添加一个log
SimpleBLEPeripheral_Init
函数的最后加了一行
LOG("======================THIS IS NEW OTA VERSION====================\n");
如下图所示
![image.png image.png](data/attachment/forum/202412/05/191252nz1koookaeguruak.png)
重新编译,生成hex文件,然后我们在烧写工具当中使用HEX Merge选项卡,app选择新编译出来的hex文件,而BOOT选择SDK当中预先编译的ota的boot hex,然后在OTA模式选择 Single No FCT
点击右侧绿色的Hex16按钮,生成hex16文件
![image.png image.png](data/attachment/forum/202412/05/191300l7pv7tvfdtb5tcc5.png)
生成的hex16文件在 simpleBlePeripheral.hex
的同级目录下,名为 simpleBlePeripheral.hex16
, 如下图所示
![image.png image.png](data/attachment/forum/202412/05/191308dzzofziei9oaxzif.png)
然后我们把hex16传到手机里
重点来了,在安卓系统,你必须把hex16放到手机根目录(也就是 /storage/emulated/0/
)或者APP的目录下,PhyOTA才能找到。
以小米为例,你得直接放在内部存储设备下
![image.png image.png](data/attachment/forum/202412/05/191319eiw2zag8ugu8dgwj.png)
我当时折腾了半天一直没办法选择hex16,后面查阅PhyOTA的使用文档才知道
显示如下
![image.png image.png](data/attachment/forum/202412/05/191333atq9oiutocs2gmbu.png)
OK, 成功选择hex16后,点击开始OTA升级
![image.png image.png](data/attachment/forum/202412/05/191342xbbi8vdql4bq44yn.png)
升级完成后,我们打开串口监视器,然后点击 Reset
,可以看到log当中打印出了
======================THIS IS NEW OTA VERSION====================
说明OTA升级成功
![image.png image.png](data/attachment/forum/202412/05/191350uozi4hh99ovsgzoz.png)