首頁 > 評(píng)測(cè) > BLE 5遇見96Boards——BLE Nitrogen評(píng)測(cè)

BLE 5遇見96Boards——BLE Nitrogen評(píng)測(cè)

BLE5   96Boards   Nitrogen   Linux   Nordic   nRF52832   
  • 作者:SATURN
  • 來源:
  • [導(dǎo)讀]
  • 雖然是一個(gè)小板子,但是受到了我們的關(guān)注,有幾個(gè)重要的點(diǎn):1-這是一款96boards, 2-搭載了Nordic nRF52832實(shí)現(xiàn)BLE5的功能,3-使用Zephyr做為開發(fā)環(huán)境。不過BLE Nitrogen的GPIO口采用1.8V輸出,這是我們的一個(gè)黑點(diǎn)。。。

#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);

}

}

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

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

make BOARD=Nitrogenmenuconfig

這樣會(huì)得到一個(gè)菜單式的配置工具,如下

rId25.png

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

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

K_THREAD_DEFINE(name, stack_size, entry, p1, p2, p3, prio, options, delay)

如果要定義多個(gè)線程,可以參考如下代碼

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);

為了體驗(yàn)一下,我們嘗試將代碼修改如下

/*

* 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);

只是一個(gè)簡(jiǎn)單的修改,將原來main里的代碼放到新定義的線程中去,main里面什么也沒有做。

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

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

代碼就不再貼出來了,實(shí)際運(yùn)行的效果我們通過nRF Connect手機(jī)APP來查看,如下

rId26.png

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

rId27.png

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

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

rId28.png

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

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

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

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

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

網(wǎng)友評(píng)論

  • 聯(lián)系人:巧克力娃娃
  • 郵箱:board@21ic.com
  • 我要投稿
  • 歡迎入駐,開放投稿

熱門標(biāo)簽
項(xiàng)目外包 more+