首頁 > 評(píng)測(cè) > BLE 5遇見96Boards——BLE Nitrogen評(píng)測(cè)
BLE 5遇見96Boards——BLE Nitrogen評(píng)測(cè)
- [導(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è)菜單式的配置工具,如下
與硬件配置相關(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來查看,如下
找到的設(shè)備,連接后可以通過APP來讀取要顯示的字符串
可以看到正確讀取了開發(fā)板通過BLE提供的字符串信息。
下圖顯示的是讀取另一個(gè)例程peripheral_hr的信息
該程序通過模擬心率數(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
- 我要投稿
-
歡迎入駐,開放投稿
- NRF52810藍(lán)牙數(shù)字耳機(jī)找人定制
預(yù)算:¥30005天前
- 125KW模塊式PCS軟硬件外包開發(fā)
預(yù)算:¥1100000015小時(shí)前
- 12V汽車啟動(dòng)電源項(xiàng)目BMS設(shè)計(jì)
預(yù)算:¥50000023小時(shí)前
- 數(shù)據(jù)可視化軟件 開發(fā)
預(yù)算:¥5000023小時(shí)前
- PLC項(xiàng)目調(diào)試修改
預(yù)算:¥100001天前
- 起動(dòng)電機(jī)控制器開發(fā)
預(yù)算:¥1100001天前