首页 > 评测 > BLE 5遇见96Boards——BLE Nitrogen评测
BLE 5遇见96Boards——BLE Nitrogen评测
- [导读]
- 虽然是一个小板子,但是受到了我们的关注,有几个重要的点:1-这是一款96boards, 2-搭载了Nordic nRF52832实现BLE5的功能,3-使用Zephyr做为开发环境。不过BLE Nitrogen的GPIO口采用1.8V输出,这是我们的一个黑点。。。
#ifndef LED0_GPIO_CONTROLLER
#define LED0_GPIO_CONTROLLER LED0_GPIO_PORT
#endif
#define LED_PORT LED0_GPIO_CONTROLLER
/* Change this if you have an LED connected to a custom pin */
#define LED LED0_GPIO_PIN
/* 1000 msec = 1 sec */
#define SLEEP_TIME 1000
void main(void)
{
int cnt = 0;
struct device *dev;
dev = device_get_binding(LED_PORT);
/* Set LED pin as output */
gpio_pin_configure(dev, LED, GPIO_DIR_OUT);
while (1) {
/* Set pin to HIGH/LOW every 1 second */
gpio_pin_write(dev, LED, cnt % 2);
cnt++;
k_sleep(SLEEP_TIME);
}
}
这段代码掩盖了太多的细节!
RTOS体现在哪里?多任务是怎么实现的?Zephyr使用类似内核编译的模式,将大部分细节都隐藏在底层,用户只需要关心自己要实现的任务即可。这一点可以使用如下的命令行来得到验证
make BOARD=Nitrogenmenuconfig
这样会得到一个菜单式的配置工具,如下
与硬件配置相关的操作都可以在里面选择,然后得到一个.config文件,接下来使用make就可以根据用户设置进行编译并到最终的elf及hex文件。
然而这里并没有牵涉到线程的配置,默认情况下,Zephyr为我们生成两个线程,一个idle线程和一个main线程,可以在代码中使用KTHREADDEFINE 来定义一个新线程,其函数原型如下
K_THREAD_DEFINE(name, stack_size, entry, p1, p2, p3, prio, options, delay)
如果要定义多个线程,可以参考如下代码
K_THREAD_DEFINE(blink1_id, STACKSIZE, blink1, NULL, NULL, NULL,
PRIORITY, 0, K_NO_WAIT);
K_THREAD_DEFINE(blink2_id, STACKSIZE, blink2, NULL, NULL, NULL,
PRIORITY, 0, K_NO_WAIT);
K_THREAD_DEFINE(blink3_id, STACKSIZE, blink3, NULL, NULL, NULL,
PRIORITY, 0, K_NO_WAIT);
为了体验一下,我们尝试将代码修改如下
/*
* Copyright (c) 2016 Intel Corporation
*
* SPDX-License-Identifier: Apache-2.0
*/
#include
#include
#include
#include
/* Change this if you have an LED connected to a custom port */
#ifndef LED0_GPIO_CONTROLLER
#define LED0_GPIO_CONTROLLER LED0_GPIO_PORT
#endif
#define LED_PORT LED0_GPIO_CONTROLLER
/* Change this if you have an LED connected to a custom pin */
#define LED LED0_GPIO_PIN
/* 1000 msec = 1 sec */
#define SLEEP_TIME 2000
void main(void)
{
while(1) {
k_sleep(100);
}
}
void blink(void) {
int cnt = 0;
struct device *dev;
dev = device_get_binding(LED_PORT);
/* Set LED pin as output */
gpio_pin_configure(dev, LED, GPIO_DIR_OUT);
while (1) {
/* Set pin to HIGH/LOW every 1 second */
gpio_pin_write(dev, LED, cnt % 2);
cnt++;
k_sleep(SLEEP_TIME);
}
}
K_THREAD_DEFINE(blink_id, 512, blink, NULL, NULL, NULL,
7, 0, K_NO_WAIT);
只是一个简单的修改,将原来main里的代码放到新定义的线程中去,main里面什么也没有做。
编译并上传到开发板,发现LED还是按我们的要求开始闪烁了!
然而这只不过是冰山一角,Zephry里面还有更多的细节需要我们去探索。不过接下来我们要开始体验BLE功能了,示例里的bluetooth目录下包含大量的演示程序,我们选择peripheral_dis来查看下实际运行的效果。
代码就不再贴出来了,实际运行的效果我们通过nRF Connect手机APP来查看,如下
找到的设备,连接后可以通过APP来读取要显示的字符串
可以看到正确读取了开发板通过BLE提供的字符串信息。
下图显示的是读取另一个例程peripheral_hr的信息
该程序通过模拟心率数据并暴露给Central设备,通过Notify的方式连续显示。
BLE Nitrogen为我们带来全新的BLE 5的体验,虽然在我们的体验过程中,BLE5的优势并没充分体现出来,然而BLE更高传输率及更远的传输距离,必定会给基于BLE5的产品带来更好的体验。使用Zephyr做为开发环境,在社区强大的动力之下,必然也会为开发者带来更强有力的保障及更快的开发速度。
只是由于目前BLE Nitrogen提供的API接口仍然只专注于BLE部分,其它如GPIO、I2C等接口仍然没有完全添加进来,要使用这些功能还得等待或自行添加,对开发者来说,算是一个不好的消息!不过Zephyr向来都号召大家为Zephyr添砖加瓦,也许很快就会有了我们需要的功能!
另外也有人对96Boards的1.8V破多非议,难道真的只是为了低功耗?
- 本文系21ic原创,未经许可禁止转载!
网友评论
- 联系人:巧克力娃娃
- 邮箱:board@21ic.com
- 我要投稿
-
欢迎入驻,开放投稿
-
人均百万?英伟达中国员工收入曝光! 2024-08-29
-
《黑神话:悟空》玩家硬盘升级攻略:提升游戏体验,畅享3A大作 2024-08-29
-
数睿数据参加《系统与软件工程 低代码开发平台通用技术要求》国家标准编制 2024-08-29
- NRF52810蓝牙数字耳机找人定制
预算:¥30005天前
- 125KW模块式PCS软硬件外包开发
预算:¥1100000015小时前
- 12V汽车启动电源项目BMS设计
预算:¥50000023小时前
- 数据可视化软件 开发
预算:¥5000023小时前
- PLC项目调试修改
预算:¥100001天前
- 起动电机控制器开发
预算:¥1100001天前