发帖
7 0 2

【PB-03F-kit】简单BLE外设与OTA升级

elliottzheng
中级会员

2

主题

21

回帖

227

积分

中级会员

积分
227
PB&TG系列 1367 7 2024-12-5 19:16:14

本帖最后由 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

编译生成hex文件,编译出来的文件在项目的bin目录下,即"bin\simpleBlePeripheral.hex"

打开烧写工具,选好COM口,波特率选UXTDWU,
image.png

长按板子上的reset 2s后放开进入烧写模式,log当中出现cmd>>即可,如下图

image.png

左边HEX Merge选项卡,app中选择之前编译出来的hex文件

image.png

首先点击erase擦除,然后点击write,开始烧写

image.png

烧写完成,按一下reset,程序开始运行

image.png

手机打开APP LightBlue,选择蓝牙设备 BUMBLE-XXXX,点击Connect

image.png

连接成功如图

image.png

拉到最下面可以看到有四个Attribute, 分别是 Power,Reset,NOTIFY,WT_NO_RSP,

image.png

其中 Power 变量代表的是蓝牙发射功率(TX Power)。在 BLE 协议中,TX Power 表示设备的发射功率水平,通常以 dBm 为单位。

我们点击 Power, 进入如下界面,可以看到它是可读可写的,我们把Data format改为Unsigned Littel Endian(其实就是UInt8), 点击 read again, 可以看到设备返回的值为15,

image.png

然后我们尝试更改它,我们把Value改为10,然后点击 Write
image.png

然后点击 Read again可以看到设备返回的值已经变为10,如下图所示

image.png

蓝牙OTA

接下来我们改造simpleBlePeripheral项目,使其支持OTA,点击魔法棒,在C/C++选项卡下,添加一个预处理器定义 PHY_OTA_ENABLE=1,表示启用OTA,然后重新编译生成hex文件

image.png

PHY_OTA_ENABLE=1其实就是帮你把一些OTA相关代码启用了,具体原理可以参考园长的帖子

打开烧写软件,左边HEX Merge选项卡,

  1. app 选择simpleBlePeripheral新编译出来的hex文件,
  2. 而BOOT选择SDK当中预先编译的ota的boot hex,可以在 example\OTA\OTA_internal_flash\bin下面找到
  3. OTA模式选择 Single No FCT(意思是,升级的时候蓝牙app会暂停程序且覆盖写入)

image.png

image.png

进入烧写模式,同样是先点击erase擦除,然后点击write,开始烧写

image.png

烧写完成,这样我们的开发板就具有了OTA功能,按一下reset,程序开始运行

此时我们打开手机APP PhyOTA,扫描找到 BUMBLE-XXXX,点击确定进入设备升级界面

image.png

可以看到下面的界面,app首先会进行连接,然后会显示 特性Enable成功SBH App已准备好,就说明我们的APP已经准备好要对Bumble进行OTA升级了,接下来我们准备升级所需要的hex16文件

image.png

我们准备一个新版本的simpleBlePeripheral,只需在代码里加一个log以区分新旧版本,我们修改 simpleBLEPeripheral.c,在main函数里添加一个log

SimpleBLEPeripheral_Init函数的最后加了一行

LOG("======================THIS IS NEW OTA VERSION====================\n");

如下图所示

image.png

重新编译,生成hex文件,然后我们在烧写工具当中使用HEX Merge选项卡,app选择新编译出来的hex文件,而BOOT选择SDK当中预先编译的ota的boot hex,然后在OTA模式选择 Single No FCT
点击右侧绿色的Hex16按钮,生成hex16文件

image.png

生成的hex16文件在 simpleBlePeripheral.hex的同级目录下,名为 simpleBlePeripheral.hex16, 如下图所示

image.png

然后我们把hex16传到手机里

重点来了,在安卓系统,你必须把hex16放到手机根目录(也就是 /storage/emulated/0/)或者APP的目录下,PhyOTA才能找到。
以小米为例,你得直接放在内部存储设备下

image.png

我当时折腾了半天一直没办法选择hex16,后面查阅PhyOTA的使用文档才知道

显示如下
image.png

OK, 成功选择hex16后,点击开始OTA升级

image.png

升级完成后,我们打开串口监视器,然后点击 Reset,可以看到log当中打印出了

======================THIS IS NEW OTA VERSION====================

说明OTA升级成功

image.png

──── 0人觉得很赞 ────

使用道具 举报

2024-12-5 23:44:16
2024-12-6 08:41:26
写的真不错~
2024-12-6 09:26:55
非常棒
2024-12-6 10:19:51
2024-12-6 12:34:58
2024-12-6 14:08:50
好好好
2025-1-27 21:45:26
如果不用APP PhyOTA,怎么用自己的程序通过蓝牙进行OTA升级?
您需要登录后才可以回帖 立即登录
高级模式
返回
统计信息
  • 会员数: 28580 个
  • 话题数: 40697 篇