问题标签 [nrf51]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
230 浏览

bluetooth-lowenergy - 带有 iOS 广告间隔的 BLE

我已经在一个广告间隔设置为 20ms 的 nRF52 和 iOS 软件之间建立了连接,但大约每秒接收一次包。以前有没有人遇到过这个问题/知道任何加快频率的技巧?非常感谢。

0 投票
1 回答
271 浏览

c - 与 wolfssl 和 nordic 的蓝牙 LE 安全连接:密钥交换

我想使用北欧芯片(nRF52)从客户端建立安全的蓝牙连接。我还运行了 wolfSSL 库。所以我收到了来自北欧软设备的“BLE_GAP_EVT_LESC_DHKEY_REQUEST”请求,带有对等 64 字节的密钥。现在我需要生成自己的密钥对并将公钥发送回中央。我该如何管理?我对以下功能不是正确的 BTLE 安全连接吗?

我需要生成一个长度为 P-256 的椭圆曲线 diffie helman 密钥对。不幸的是,我不是这个主题的专家。我需要从 wolfSSL 库中调用哪些函数来生成这样的公共 dh 密钥?

感谢您的回答或提示

0 投票
2 回答
2187 浏览

c# - UWP 蓝牙低功耗应用提前断开连接

因此,我正在为 Windows 笔记本电脑设计一个应用程序,以连接到定制设计的压力传感器。应用程序与设备配对,然后每 10 毫秒从设备接收通知。然后由于某种原因通信停止。我知道这是我的应用程序而不是设备的问题,因为当我连接到手机时,我没有这个问题。

这是我创建 devicewatcher 并发现设备的主页:

下一个代码是连接压力传感器和从设备读取数据的页面。

这里是我定义处理设备连接的 SensorBase 和 PressureSensor 类的地方:

这是我用来组织从压力传感器接收到的数据的 DataPoint 类:

我对此进行了广泛的研究,我所能找到的只是有关如何启动断开连接的帮助。我有相反的问题。我发现的一页表明问题可能是由于设备未正确存储绑定状态引起的,但我已经检查过,并且我确实初始化了设备以保存绑定状态。

有趣的是,如果我在尝试从中读取信息之前没有将设备与计算机配对,那么我就没有问题。连接永远不会随机停止。但是当我这样做时,计算机并没有接收到传感器设备发送的每个数据包。它将接收一两个数据包,然后跳过五六个数据包。如果我配对设备,那么我将收到每个数据包,但连接将随机切断。

所以我的问题是两个方面,我猜。设备配对时如何阻止连接断开?或者,有没有办法让应用程序在未配对时接收每个数据包?

更新

我意识到我应该在我的传感器外围设备上包含更多信息,以防错误出现在该代码中。在继续设计嵌入式版本之前,我目前正在设计该传感器的快速原型。为此,我使用 RedBearLabs 的 BLE Nano 1 作为用户友好的原型。我正在使用在线 MBED 编译器对该设备进行编程。我已经包含了 nRF51822 和 BLE_API 库来处理蓝牙低功耗通信。

更新 2 因此,在对导致问题的原因进行了更多研究后,我发现连接间隔和第 2 代垃圾收集同时发生时会发生断开连接。在 UWP 中,垃圾收集器可以暂停 UI 线程以进行第 2 代收集。(见这里

我的想法是,如果线程在连接间隔开始时暂停,则中央无法启动与外围设备的连接,因此外围设备认为客户端不再监听(请参阅有关BLE 连接如何工作的更多信息) .

我通过找出在连接随机停止后恢复连接所需的确切条件来发现这一点。我从整个连接过程开始并将其简化为:

因为我的 BluetoothLEDevice、GattService 和 GattCharacteristic 对象没有被释放,所以我需要做的就是重新订阅通知并向设备写入 1,以便它再次开始收集数据。

自从发现这一点以来,我已经显着减少了我的应用程序中的内存分配,并且 gen2 收集的时间平均减少到了 5 毫秒。此外,连接断开之前的时间量已增加到大约 4-5 秒。

UWP 有一个 GattCharacteristicNotificationTrigger 用于在 BackgroundTask 中接收通知,但我在将后台任务合并到 UWP 方面从未取得太大成功。

我想接下来我会尝试将 windows.devices 合并到 WPF 应用程序中,我认为我将有更好的机会让它工作。

0 投票
2 回答
1145 浏览

c - 从 BLE 接收的数据无法从十六进制转换为字符串(北欧)

在 ble_app_template 的 on_ble_evt(ble_evt_t*) 函数中,我添加了“BLE_GATTS_EVT_WRITE”的案例。其中有以下代码:

我从存储在 p_evt_write->data[n] 中的 BLE 接收十六进制值。我想将所有这些接收到的十六进制值连接成一个字符串,将其存储在“buf2”中。

但是我在 sprintf 行收到错误。当我在 sprintf 中输入“%X”时,这些值不会转换为字符串,因为 buf2/buf3 字符串不会打印任何内容。目前的代码

返回错误“错误:从不同大小的整数转换为指针 [-Werror=int-to-pointer-cast]”。如果我删除了 (char*) 类型转换,它会返回错误“错误:格式 '%s' 需要类型为 'char *'' 的参数。

我看到 p_evt_write->data[n] 其中 data 被声明为

我目前正在使用 Nordic 的 nRF51DK 与 Eclipse IDE 和 SEGGER RTT JLink 进行调试。所有打印都打印到 SEGGER RTT。(printf 不起作用,改用 SEGGER_RTT_printf 打印)

如何成功地将所有十六进制值连接在一起形成一个字符串?谢谢你。

0 投票
1 回答
225 浏览

keil - 无法跳过 Keil 反汇编窗口中的第一条指令

当我在调试模式下运行 UART 应用程序nRF5_SDK_12.3.0_d7731ad\examples\peripheral\uart时,反汇编窗口打开,我似乎卡在第一条指令上。Step over不会跳过第一条指令。这是为什么?谢谢你。

在此处输入图像描述

这是我的调试设置

在此处输入图像描述

这是我的高级调试设置

在此处输入图像描述

以下是我遵循的设置 J-link 调试器设置的说明

http://www.keil.com/support/man/docs/jlink/jlink_cortexdebug.htm

我试过在刷应用程序之前刷软设备,但在这种情况下刷机失败。如果我首先擦除芯片,表明软设备与应用程序一起闪烁,则应用程序只会闪烁(对吗?)。

0 投票
1 回答
76 浏览

bluetooth-lowenergy - 在 nrf52 中处理 iso 日期时间

我正在使用 nrf52832 芯片。我将以 isoFormat 接收时间。

我想知道如何转换 iso 格式以在我的 C 程序中获取日期和时间。

我没有使用任何 RTOS,而是在裸机上做所有事情。

0 投票
3 回答
1130 浏览

android - 从相同的特征写入和通知

来自同一特征的写入通知是否存在问题?还是建议一个创建两个特性,一个用于接收数据,另一个用于传输?与 NRF52 系列相比,这对 Android 来说不是一个问题吗?

谢谢

0 投票
1 回答
726 浏览

bluetooth-lowenergy - 与 Nrf UART 的蓝牙配对无法正常工作

蓝牙配对无法正常工作。我正在开发基于蓝牙与 UART 配对的应用程序。在这里,我包含了我的概念和程序。帮助我解决问题。

我的预期结果是如果用户按下连接按钮。它应该在没有用户输入和配对请求和 PIN 的确认屏幕的情况下配对。最后设备响应连接。

我的实际结果是确认屏幕和用户输入弹出窗口将打开。之后设备配对。最后设备没有回复我已连接。

我被困在那个问题超过 2 天。帮我解决这个问题。

1.在onstart()方法中注册PAIRING

2. BroadcastReceiver,用于接收PairingRequest。

/* 连接设备后,我正在创建绑定*/

0 投票
2 回答
1414 浏览

bluetooth-lowenergy - 在 ubuntu 中获取 BLE 数据通知

我定义了自定义服务 (NRF51822,S110) 来发送传感器数据。在那我启用了新数据的通知。如果我在 Android 和 Windows 的 NRFconnect 应用程序中启用通知,我可以接收数据。但我无法在 ubuntu 16.04 中启用通知。我正在使用 bluez gatttool。为了得到通知,我从命令行发送这个命令“char-write-req 0x000e 0100”。请帮我解决这个问题。

0 投票
0 回答
69 浏览

c - 在 nRF51 的代码中更改 UART 的 PIN 映射

在与一个串行设备通信时,我想将一些信息发送到另一个串行设备(在完成第一个串行设备之后)。在运行 nRF51822 (g_ADigitalPinMap) 的代码时,如何更改 UART 的引脚映射(我自己构建的板)?