首頁 > 評測 > BLE 5遇見96Boards——BLE Nitrogen評測

BLE 5遇見96Boards——BLE Nitrogen評測

BLE5   96Boards   Nitrogen   Linux   Nordic   nRF52832   
  • 作者:SATURN
  • 來源:
  • [導讀]
  • 雖然是一個小板子,但是受到了我們的關(guān)注,有幾個重要的點:1-這是一款96boards, 2-搭載了Nordic nRF52832實現(xiàn)BLE5的功能,3-使用Zephyr做為開發(fā)環(huán)境。不過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);

}

}

這段代碼掩蓋了太多的細節(jié)!

RTOS體現(xiàn)在哪里?多任務(wù)是怎么實現(xiàn)的?Zephyr使用類似內(nèi)核編譯的模式,將大部分細節(jié)都隱藏在底層,用戶只需要關(guān)心自己要實現(xiàn)的任務(wù)即可。這一點可以使用如下的命令行來得到驗證

make BOARD=Nitrogenmenuconfig

這樣會得到一個菜單式的配置工具,如下

rId25.png

與硬件配置相關(guān)的操作都可以在里面選擇,然后得到一個.config文件,接下來使用make就可以根據(jù)用戶設(shè)置進行編譯并到最終的elf及hex文件。

然而這里并沒有牽涉到線程的配置,默認情況下,Zephyr為我們生成兩個線程,一個idle線程和一個main線程,可以在代碼中使用KTHREADDEFINE 來定義一個新線程,其函數(shù)原型如下

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里面什么也沒有做。

編譯并上傳到開發(fā)板,發(fā)現(xiàn)LED還是按我們的要求開始閃爍了!

然而這只不過是冰山一角,Zephry里面還有更多的細節(jié)需要我們?nèi)ヌ剿。不過接下來我們要開始體驗BLE功能了,示例里的bluetooth目錄下包含大量的演示程序,我們選擇peripheral_dis來查看下實際運行的效果。

代碼就不再貼出來了,實際運行的效果我們通過nRF Connect手機APP來查看,如下

rId26.png

找到的設(shè)備,連接后可以通過APP來讀取要顯示的字符串

rId27.png

可以看到正確讀取了開發(fā)板通過BLE提供的字符串信息。

下圖顯示的是讀取另一個例程peripheral_hr的信息

rId28.png

該程序通過模擬心率數(shù)據(jù)并暴露給Central設(shè)備,通過Notify的方式連續(xù)顯示。

BLE Nitrogen為我們帶來全新的BLE 5的體驗,雖然在我們的體驗過程中,BLE5的優(yōu)勢并沒充分體現(xiàn)出來,然而BLE更高傳輸率及更遠的傳輸距離,必定會給基于BLE5的產(chǎn)品帶來更好的體驗。使用Zephyr做為開發(fā)環(huán)境,在社區(qū)強大的動力之下,必然也會為開發(fā)者帶來更強有力的保障及更快的開發(fā)速度。

只是由于目前BLE Nitrogen提供的API接口仍然只專注于BLE部分,其它如GPIO、I2C等接口仍然沒有完全添加進來,要使用這些功能還得等待或自行添加,對開發(fā)者來說,算是一個不好的消息!不過Zephyr向來都號召大家為Zephyr添磚加瓦,也許很快就會有了我們需要的功能!

另外也有人對96Boards的1.8V破多非議,難道真的只是為了低功耗?

  • 本文系21ic原創(chuàng),未經(jīng)許可禁止轉(zhuǎn)載!

網(wǎng)友評論