这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » 【e起DIY】【过程帖】低功耗蓝牙温湿度计 - Zephyr蓝牙透传数据

共1条 1/1 1 跳转至

【e起DIY】【过程帖】低功耗蓝牙温湿度计 - Zephyr蓝牙透传数据

菜鸟
2026-05-09 07:35:37     打赏

准备Zephyr环境

在进行开发之前,首先确保Zephyr SDK和相关环境已经准备完成

3a0ac6b2-ff4a-4964-8aa8-2af025a2f33d.png

并且成功导入到VS Code中的Repository里面

d12362bd-a467-4709-993b-1ee60294c698.png

新建工程

//zsdk/samples/wireless下面新建一个蓝牙透传的文件夹(bluetooth_1s_tx),在此文件夹中新建相关的源码工程。

工程结构如下:

image-202605081422481776e2b1d5a-df06-4937-be2d-4601f69dbbd8.png

其中main.c是主要的源码,其余的是一些配置文件,可以参考SDK中的例程

主要代码如下:

int main(void)
{
uint32_t tx_count = 0U;
int err;

printk("Bluetooth 1s TX sample startn");
printk("Payload: %sn", TX_PAYLOAD);

bt_conn_cb_register(&conn_callbacks);

err = bt_nus_cb_register(&nus_callbacks, NULL);
if (err) {
 printk("Failed to register NUS callbacks: %dn", err);
 return err;
}

err = bt_enable(NULL);
if (err) {
 printk("Bluetooth init failed: %dn", err);
 return err;
}

printk("Bluetooth initializedn");

err = start_advertising();
if (err) {
 return err;
}

while (true) {
 k_sleep(TX_INTERVAL);

 if (!notifications_enabled) {
  continue;
 }

 err = bt_nus_send(NULL, TX_PAYLOAD, strlen(TX_PAYLOAD));
 if (err == 0) {
  printk("Sent packet %un", tx_count++);
 } else if ((err != -EAGAIN) && (err != -ENOTCONN)) {
  printk("Failed to send packet: %dn", err);
 }
}

return 0;
}

一气呵成,编译,下载,调试,报错……

打印的日志如下:

*** Booting Zephyr OS build nxp-v4.3.0 ***
Bluetooth 1s TX sample start
Payload: NXP BLE 1s data
ASSERTION FAIL [err == 0] @ WEST_TOPDIR/zephyr/subsys/bluetooth/host/hci_core.c:504
       Controller unresponsive, command opcode 0xfc22 timeout with err -11
r0/a1:  0x00000003  r1/a2:  0x100124c7  r2/a3:  0x50039000
r3/a4:  0x00000003 r12/ip:  0x00000000 r14/lr:  0x100023a3
xpsr:  0x29000000
Faulting instruction address (r15/pc): 0x100023b2

这是因为在FRDM-MCXW71这个双核无线芯片上,NBU固件是给无线核使用的独立镜像,需要根据使用的无线协议栈来烧录对应的固件,所以想要成功差一步,烧写NBU固件。

在SDK中可以找到这个固件//modules/hal/nxp/zephyr/blobs/mcxw71/mcxw71_nbu_ble.sb3,只需要烧录进行即可,在烧录前需要将板子设置成ISP模块,因此在上电的时候按住SW3(ISP)

打开CMD,进入到SDK的根目录中,输入以下烧录命令如下:

C:\Users\XXX\.mcuxpressotools\.mcux-venv-3.12\Scripts\blhost.exe -p COMyyy -- receive-sb-file modules\hal\nxp\zephyr\blobs\mcxw71\mcxw71_nbu_ble.sb3

其中XXX更换成自己电脑的用户名,yyy更换为开发板对应的端口。

然后重新运行,发现就不会提示错误了,并且等待蓝牙的连接,当手机成功连接后,就开始定时发送数据了,若手机端手动断开连接也会提示断开了。

*** Booting Zephyr OS build nxp-v4.3.0 ***
Bluetooth 1s TX sample start
Payload: NXP BLE 1s data
Bluetooth initialized
Advertising as Z_BLE_1S_TX
Connected: 76:03:6D:56:C9:BA (random)
NUS notifications enabled
Sent packet 0
Sent packet 1
Sent packet 2
Sent packet 3
Sent packet 4
Sent packet 5
Sent packet 6
Sent packet 7
Sent packet 8
NUS notifications disabled
Disconnected: 76:03:6D:56:C9:BA (random), reason 0x13
Advertising failed to start: -12

需要注意的是,要将接收的UUID设置成6e400003-b5a3-f393-e0a9-e50e24dcca9e

image-20260508145126536f00e7fa3-d180-4a64-a907-25ab47994a3a.png

c8c729bc-ca98-4af8-984e-6eecdde63a56.png

4854d6da8483b1e68217612330195a24






关键词: e起DIY开箱     蓝牙     Zephyr     透传    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]