iot 作業系統 - CSDN

2021-01-10 CSDN技術社區

開源IoT作業系統Mynewt介紹

最近,在Apache軟體基金會(ASF, Apache Software Foundation)發起了一個開源的社區項目Mynewt,其最新的穩定版本1.0.0-b1剛剛發布。Mynewt是一個專注於物聯網(IoT,Internet of Things)應用的實時作業系統,包括低功耗藍牙(BLE4.2)無線傳輸協議棧NimBLE。

Mynewt支持豐富的實時作業系統特徵,可以在不同的硬體平臺上運行,包括ARM Cortex M0-M4微控制器,以及基於MIPS和RISC-V架構的處理器。有許多現有的微控制器開發板可以直接運行Mynewt,使得在其上進一步開發應用程式就非常容易。其完整的特性介紹和支持的開發板列表可以在Mynewt的網頁上找到。

對於物聯網應用的開發人員來說,使用Mynewt可以得到兩個方面顯而易見的好處。首先,應用開發變得很簡單,那些複雜的和底層硬體打交道的工作都交給了實時作業系統。應用Mynewt的硬體抽象層(HAL, Hardware Abstraction Layer),開發板支持包(BSP, Board Support Packages),以及Mynewt作業系統的任務調度和管理系統,開發人員不需要像傳統的嵌入式應用的開發那樣去照顧應用程式的方方面面。特別是對於那些需要多個不同優先級任務的複雜應用程式,就可以很方便的進行開發。其次,應用開發變得很自由。由於是開放原始碼系統,應用開發人員可以根據需要自由裁剪整個作業系統包括無線通信協議棧。這對於硬體資源有限的物聯網應用來說非常重要,那些不需要的模塊就可以在應用程式的編譯中不包括,從而節省了寶貴的系統資源。

Mynewt使用入門

下面以Nordic的nRF52832開發板PCA10040為例來介紹如何開始使用Mynewt實時作業系統,並且如何在PCA10040上運行其開源的藍牙低功耗協議棧NimBLE。NimBLE協議棧遵從於BLE 4.2標準,支持BLE 4.2的新特徵如長數據包傳輸等。Mynewt使用入門介紹包括三個方面的內容:

開發環境的設置在PCA10040開發板上運行Mynewt作業系統,並運行LED燈閃爍應用程式在PCA10040開發板上運行NimBLE低功耗藍牙協議棧,並用LighBlue連接上開發環境的設置

本節內容介紹開發環境的設置,包括硬體和軟體方面的設置。

一臺筆記本電腦,一個nRF52832開發板PCA10040,以及連接電腦和PCA0040開發板的USB連接線,這就是需要的全部硬體。下面以蘋果電腦的macOS系統為例介紹軟體開發環境的設置,Linux系統類似。

安裝newt工具

按照如下步驟安裝好newt工具:

1.安裝macOS的套件管理器Homebrew。如果macOS系統沒有安裝好Homebrew,打開一個命令行終端控制臺,使用如下命令進行安裝。安裝提示需要用戶密碼時,輸入sudo密碼

$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install\/master/install)"

例如,在命令行終端的安裝輸出結果如下

==> This script will install:/usr/local/bin/brew/usr/local/share/doc/homebrew/usr/local/share/man/man1/brew.1/usr/local/share/zsh/site-functions/_brew/usr/local/etc/bash_completion.d/brew/usr/local/HomebrewPress RETURN to continue or any other key to abort==> /usr/bin/sudo /bin/mkdir -p /Library/Caches/HomebrewPassword:==> /usr/bin/sudo /bin/chmod g+rwx /Library/Caches/Homebrew==> /usr/bin/sudo /usr/sbin/chown jiachengwang /Library/Caches/Homebrew==> Downloading and installing Homebrew...remote: Total 0 (delta 0), reused 0 (delta 0), pack-reused 0HEAD is now at b6f3399 Merge pull request #1930 from vitorgalvao/set-permissions-sudo==> Cleaning up /Library/Caches/Homebrew...==> Migrating /Library/Caches/Homebrew to /Users/jiachengwang/Library/Caches/Homebrew...==> Deleting /Library/Caches/Homebrew...Already up-to-date.==> Installation successful!==> Homebrew has enabled anonymous aggregate user behaviour analytics.Read the analytics documentation (and how to opt-out) here: https://git.io/brew-analytics==> Next steps:- Run `brew help` to get started- Further documentation: https://git.io/brew-docs

當然,也可以用其它的方式進行安裝,例如直接提取Homebrew的安裝包(或者git clone),並拷貝到/usr/local目錄。

2.安裝Go程式語言。Go語言需要專門的目錄作為其工作空間,其中包含有三個目錄src,pkg 和bin。從其名字就可以知道,src目錄是Go的原始碼目錄,在其中的一個子目錄就是一個原始碼包,pkg目錄是原始碼包相應的目標文件,bin目錄中包含一些可執行的命令文件。環境變量GOPATH決定了工作目錄,因此需要設置好GOPATH環境變量。為此,創建一個dev目錄並在其中進一步創建go目錄,並把GOPATH環境變量設置為這個目錄。這樣,就可以把newt工具的repo克隆到本地的這個目錄。

$ cd $HOME$ mkdir -p dev/go $ cd dev/go$ export GOPATH=`pwd`

可以把環境變量GOPATH的設置加入到~/.bash_profile 文件中,這樣就可以在以後啟動一個新的命令行終端控制臺時,自動應用環境變量GOPATH。

$ vi ~/.bash_profile...export GOPATH=~/dev/go...$ source ~/.bash_profile

現在,就可以應用brew安裝Go了。安裝好後,Go就為開發者提供了一個開發環境,編譯Go代碼,構建Go包,從github上載入Go代碼。接下來,就可以應用Go命令把newt的repo載入到本地的Go開發環境中

$ brew install go==> Downloading https://homebrew.bintray.com/bottles/go-1.7.5.sierra.bottle.tar.gz######################################################################## 100.0%==> Pouring go-1.7.5.sierra.bottle.tar.gz==> CaveatsAs of go 1.2, a valid GOPATH is required to use the `go get` command:https://golang.org/doc/code.html#GOPATHYou may wish to add the GOROOT-based install location to your PATH:export PATH=$PATH:/usr/local/opt/go/libexec/bin==> Summary/usr/local/Cellar/go/1.7.5: 6,440 files, 250.8M

當然,也可以直接從https://golang.org/dl/下載Go的安裝包,並安裝在/usr/local目錄

3.創建本地的repo。應用Go命令把newt拷貝到本地,請耐心等待,需要花費幾分鐘。在等待過程中,可以檢查安裝的目錄以確認安裝在進行

$ go get mynewt.apache.org/newt/...

檢查安裝的文件

$ ls $GOPATH/src/mynewt.apache.org/newtDISCLAIMER LICENSE README.md build.sh newtmgr util yamlINSTALLING.md NOTICE RELEASE_NOTES.md newt newtvm viper

4.編譯newt工具。應用Go運行newt.go程序以編譯newt工具,命令go install 編譯並創建其可執行的結果文件newt,並最後安裝到$GOPATH/bin目錄

$ cd $GOPATH/src/mynewt.apache.org/newt/newt$ go install$ ls "$GOPATH"/bin/newt newtmgr newtvm

到了這一步,就可以應用newt命令了。例如,可以應用命令「newt version」得到其版本號,也可以用命令「newt -h」得到幫助信息以了解更多的命令選項

$ newt versionApache Newt (incubating) version: 1.0.0-dev$ newt -hNewt allows you to create your own embedded application based on the Mynewt operating system. Newt provides both build and package management in a single tool, which allows you to compose an embedded application, and set of projects, and then build the necessary artifacts from those projects. For more information on the Mynewt operating system, please visit https://mynewt.apache.org/. Please use the newt help command, and specify the name of the command you want help for, for help on how to use a specific commandUsage: newt [flags] newt [command]Examples: newt newt help [<command-name>]For help on <command-name>. If not specified, print this message.Available Commands: build Builds one or more targets. clean Deletes build artifacts for one or more targets. complete Performs Bash Autocompletion (-C) create-image Add image header to target binary debug Open debugger session to target info Show project info install Install project dependencies load Load built target to board mfg Manufacturing flash image commands new Create a new project pkg Create and manage packages in the current workspace run build/create-image/download/debug <target> size Size of target components sync Synchronize project dependencies target Command for manipulating targets test Executes unit tests for one or more packages upgrade Upgrade project dependencies vals Displays valid values for the specified element type(s) version Display the Newt version number.Flags: -j, --jobs int Number of concurrent build jobs (default 1) -l, --loglevel string Log level (default "WARN") -o, --outfile string Filename to tee output to -q, --quiet Be quiet; only display error output -s, --silent Be silent; don't output anything -v, --verbose Enable verbose output when executing commandsUse "newt [command] --help" for more information about a command.

6.更新newt工具。更新newt工具包含如下步驟

在初始安裝newt的地方更新newt工具從更新newt工具的git repo開始,當然,如果需要,可以從不同的分支repo進行更新最後根據需要更新不同的工具包括newt, newtmgr和newtvm

根據如下命令更新newt工具

$ cd $GOPATH/src/mynewt.apache.org/newt$ git pull$ cd newt$ go install$ cd ../newtmgr$ go install$ cd ../newtvm$ go install$ ls "$GOPATH"/bin/ newt newtmgr newtvm

這就把工具newt,newtmgr和newtvm更新到最新版本。

安裝ARM交叉編譯工具

在電腦上安裝好工具鏈後,就可以用電腦和運行Mynewt作業系統的基於ARM的硬體進行直接交互,例如可以直接在電腦上進行應用程式調試。

1.安裝工具鏈。安裝好PX4工具鏈並檢查安裝好的版本。ARM維護一個已經編譯好的針對嵌入式ARM處理器(包括Cortex-R和Cortex-M系列處理器)的GCC工具鏈。安裝完成後,要確保用Homebrew安裝的符號連接是連接於正確的調試器版本。

$ brew tap PX4/homebrew-px4$ brew update$ brew install gcc-arm-none-eabi-49==> Installing gcc-arm-none-eabi-49 from px4/px4==> Downloading https://launchpad.net/gcc-arm-embedded/4.9/4.9-2015-q3-update/+download/gcc-arm-none-eabi-4_9-2015q3-20150921-mac.tar.bz2==> Downloading from https://launchpadlibrarian.net/218827447/gcc-arm-none-eabi-4_9-2015q3-20150921-mac.tar.bz2######################################################################## 100.0%==> Copying binaries...==> cp -rv arm-none-eabi bin lib share /usr/local/Cellar/gcc-arm-none-eabi-49/20150925//usr/local/Cellar/gcc-arm-none-eabi-49/20150925: 4,945 files, 324.9M, built in 16 minutes 46 seconds$ /usr/local/bin/arm-none-eabi-gcc --version arm-none-eabi-gcc (GNU Tools for ARM Embedded Processors) 4.9.3 20150529 (release) [ARM/embedded-4_9-branch revision 227977]Copyright (C) 2014 Free Software Foundation, Inc.This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.$ ls -al /usr/local/bin/arm-none-eabi-gdblrwxr-xr-x 1 jiachengwang admin 61 2 3 12:14 /usr/local/bin/arm-none-eabi-gdb -> ../Cellar/gcc-arm-none-eabi-49/20150925/bin/arm-none-eabi-gdb

註:如果沒有明確指明安裝的版本號,brew就安裝最新的版本。Mynewt作業系統的最終目標是能夠應用包括最新的版本在內的多版本工具鏈,但是目前的原始碼僅在這個版本的交叉編譯工具鏈上測試完成,所以作為開始使用的出發點,推薦使用這個版本。

安裝OpenOCD

OpenOCD (Open On-Chip Debugger) 是一個開源軟體,使得可以使用電腦通過JTAG調試連接器和各種硬體開發板進行交互。而JTAG連接可以調試和測試各種嵌入式設備,關於OpenOCD的更進一步信息,可以參考 http://openocd.org。

$ brew install open-ocd$ which openocd/usr/local/bin/openocd$ ls -l $(which openocd)lrwxr-xr-x 1 jiachengwang admin 36 11 5 11:08 /usr/local/bin/openocd -> ../Cellar/open-ocd/0.9.0/bin/openocd

應用電腦的串口通信和Mynewt進行交互

在後面運行Mynewt程序時將應用到串口通信和開發板進行交互。由於串口通信是作為一個通信接口已經使用很長一段時間,幾乎所有的現代電腦上都已經沒有串口通信接口了。但是,在nRF52開發板PCA10040上,有一個USB轉串口的接口,把nRF52開發板通過USB線纜連接上電腦的USB接口後,就可以在電腦上有一個虛擬的串口通信接口。

在macOS中,把nRF52開發板通過USB線纜連接電腦後,可以應用串口通信程序如picocom等和nRF52開發板建立串口通信連接,也可以在終端控制臺應用macOS的內建命令「screen」建立串口通信連接。

無論是應用內建命令screen還是串口通信程序picocom,首先需要知道建立連接的串口通信設備號。當nRF52開發板連接上電腦的USB後,通過如下的命令可以查看串口通信設備號

$ ls -la /dev/*usb*crw-rw-rw- 1 root wheel 20, 31 2 3 23:20 /dev/cu.usbmodem14111crw-rw-rw- 1 root wheel 20, 30 2 4 00:41 /dev/tty.usbmodem14111

串口通信設備號就是/dev/tty.usbmodem14111,其中數字「14111」在每次的連接中可能不同,也可能相同。通過如下命令就可以建立連接

$ screen /dev/tty.usbmodem14111 115200

要退出screen,需要按鍵control-A後緊跟按鍵control-\,就退回到終端控制臺。

$ screen /dev/tty.usbmodem14111 115200[screen is terminating]$

如果要使用串口通信程序picocom,通過如下命令就可以建立連接

$ picocom -b 115200 /dev/tty.usbmodem14111picocom v1.6port is : /dev/tty.usbmodem14111flowcontrol : nonebaudrate is : 115200parity is : nonedatabits are : 8escape is : C-alocal echo is : nonoinit is : nonoreset is : nonolock is : nosend_cmd is : sz -vvreceive_cmd is : rz -vvimap is : omap is : emap is : crcrlf,delbs,Terminal ready

要退出picocom,按鍵control-A後緊跟按鍵control-X,就退回到終端控制臺。

...emap is : crcrlf,delbs,Terminal ready...Thanks for using picocom$

當nRF52開發板和電腦建立串口通信連接後,在後面的BLE應用程式中,就可以通過電腦的終端控制臺,得到一些BLE的連接請求、配對等信息。

運行LED燈閃爍應用程式

準備好開發環境後,就可以在nRF52開發板PCA10040上運行Mynewt作業系統和LED燈閃爍應用程式blinky。

目標

通過Mynewt作業系統的應用程式repo程序包,在nRF52開發板上創建第一個「hello world」應用程式(LED燈閃爍應用程式)。應用newt工具創建一個應用程式開發的工程(project),該工程包含有Mynewt作業系統以及一個簡單的應用程式blinky,並應用newt工具編譯應用程式後,就可以下載到nRF52開發板上運行使得LED燈閃爍。

所需硬體設備Nordic公司的nRF52832開發板PCA10040運行macOS系統的電腦已經在電腦上安裝好newt工具已經在電腦上安裝好開發環境及工具鏈安裝jlinkEXE

為了和nRF52開發板上的SEGGER J-Link調試器進行通信,就需要下載 J-Link GDB伺服器軟體並安裝在電腦上,可以從https://www.segger.com/jlink-software.html的「Software and documentation pack for Mac OS X」下載。

創建工程

根據如下步驟創建一個工程

$ cd ~/dev$ newt new myprojDownloading project skeleton from apache/incubator-mynewt-blinky...Installing skeleton in myproj...Project myproj successfully created.$ cd myproj$ newt install -v apache-mynewt-coreDownloading repository description for apache-mynewt-core...success!Downloading repository incubator-mynewt-core (branch: master; commit: mynewt_1_0_0_b1_tag) at https://github.com/apache/incubator-mynewt-core.git/newt-repo748636054'...remote: Counting objects: 51116, done.remote: Compressing objects: 100% (230/230), done.remote: Total 51116 (delta 79), reused 0 (delta 0), pack-reused 50873Receiving objects: 100% (51116/51116), 75.26 MiB | 164.00 KiB/s, done.Resolving deltas: 100% (30413/30413), done.apache-mynewt-core successfully installed version 0.9.9-none

創建目標

創建2個目標,一個是引導裝載程序(Bootloader),一個是nRF52開發板的運行程序blinky。

$ newt target create blink_nordicTarget targets/blink_nordic successfully created$ newt target set blink_nordic app=apps/blinkyTarget targets/blink_nordic successfully set target.app to apps/blinky$ newt target set blink_nordic bsp=@apache-mynewt-core/hw/bsp/nrf52dkTarget targets/blink_nordic successfully set target.bsp to @apache-mynewt-core/hw/bsp/nrf52dk$ newt target set blink_nordic build_profile=debugTarget targets/blink_nordic successfully set target.build_profile to debug$ newt target create nrf52_bootTarget targets/nrf52_boot successfully created$ newt target set nrf52_boot app=@apache-mynewt-core/apps/bootTarget targets/nrf52_boot successfully set target.app @apache-mynewt-core/apps/boot$ newt target set nrf52_boot bsp=@apache-mynewt-core/hw/bsp/nrf52dkTarget targets/nrf52_boot successfully set target.bsp to @apache-mynewt-core/hw/bsp/nrf52dk$ newt target set nrf52_boot build_profile=optimizedTarget targets/nrf52_boot successfully set target.build_profile to optimized$ newt target show targets/blink_nordic app=apps/blinky bsp=@apache-mynewt-core/hw/bsp/nrf52dk build_profile=debugtargets/my_blinky_sim app=apps/blinky bsp=@apache-mynewt-core/hw/bsp/native build_profile=debugtargets/nrf52_boot app=@apache-mynewt-core/apps/boot bsp=@apache-mynewt-core/hw/bsp/nrf52dk build_profile=optimized

編譯可執行的目標

$ newt build nrf52_bootBuilding target targets/nrf52_bootCompiling boot.cArchiving boot.a...Linking /Users/jiachengwang/dev/myproj/bin/targets/nrf52_boot/app/apps/boot/boot.elfTarget successfully built: targets/nrf52_boot$ newt build blink_nordicBuilding target targets/blink_nordicCompiling main.cArchiving blinky.a...Linking /Users/jiachengwang/dev/myproj/bin/targets/blink_nordic/app/apps/blinky/blinky.elfTarget successfully built: targets/blink_nordic

版本籤名以及創建LED燈閃爍的應用程式鏡像

要應用newt工具下載應用程式到目標開發板,需要對應用程式的鏡像文件進行版本號籤名。可以應用newt工具的「create-image」命令,並且版本號可以的任意的(例如,1.0.0)。

$ newt create-image blink_nordic 1.0.0Archiving nordic.aApp image succesfully generated: /Users/jiachengwang/dev/myproj/bin/targets/blink_nordic/app/apps/blinky/blinky.img

連接開發板

用USB線纜連接開發板和電腦的USB接口。

下載目標

首先下載引導裝載程序nrf52_boot,再下載LED燈閃爍的應用程式鏡像blink_nordic到開發板。如果LED燈沒有開始閃爍,重置(reset)一下開發板,即按一下nRF52開發板的reset按鍵,或者斷開和電腦的USB連接後再重新連接。

$ newt -v load nrf52_bootLoading bootloaderLoad command: BOOT_LOADER="1" FEATURES="BASELIBC_PRESENT BOOT_LOADER BSP_NRF52OS_CPUTIME_FREQ SANITY_INTERVAL SPI_0_MASTER_SS_PIN SPI_1_MASTER_SS_PIN TIMER_0 FLASH_OFFSET="0x0" IMAGE_SLOT="0" CORE_PATH="/Users/jiachengwang/dev/myproj/apache-mynewt-core/hw/bsp/nrf52dk" BIN_BASENAME="/Users/jiachengwang/dev/myproj/bin/targets/nrf52_boot/app/apps/boot/boot" /Users/jiachengwang/dev/myproj/repos/myproj/repos/apache-mynewt-core/hw/bsp/nrf52dk /Users/jiachengwang/dev/myproj/bin/targets/nrf52_boot/app/apps/boot/bootSuccessfully loaded image.Successfully loaded image.$ newt -v load blink_nordicLoading app image into slot 1Load command: FEATURES="BASELIBC_PRESENT BSP_NRF52 CLOCK_FREQ CONSOLE_BAUD FLASH_MAP_MAX_AREAS MSYS_1_BLOCK_COUNT MSYS_1_BLOCK_SIZE OS_CPUTIME_FREQ UART_0_PIN_RTS UART_0_PIN_RX UART_0_PIN_TX WATCHDOG_INTERVAL XTAL_32768" /repos/apache-mynewt-core" BSP_PATH="/Users/jiachengwang/dev/myproj/repos/targets/blink_nordic/app/apps/blinky/blinky" /Users/jiachengwang/dev/myproj/dev/myproj/repos/apache-mynewt-core/hw/bsp/nrf52dk /Users/jiachengwang/dev/myproj/bin/targets/blink_nordic/app/apps/blinky/blinkySuccessfully loaded image.Successfully loaded image.

註:如果要擦除開發板的快閃記憶體並重新下載鏡像文件,可以應用JLinkExe的「erase」命令

$ JLinkExe -device nRF52 -speed 4000 -if SWDSEGGER J-Link Commander V5.02d ('?' for help)Compiled Sep 18 2015 20:26:23Info: Device "NRF52" selected.DLL version V5.02d, compiled Sep 18 2015 20:26:17Firmware: J-Link OB-SAM3U128-V2-NordicSemi compiled Aug 28 2015 19:26:24Hardware: V1.00S/N: 682105491 Emulator has Trace capabilityVTarget = 3.300VInfo: Found SWD-DP with ID 0x2BA01477Info: Found Cortex-M4 r0p1, Little endian.Info: FPUnit: 6 code (BP) slots and 2 literal slotsInfo: CoreSight components:Info: ROMTbl 0 @ E00FF000Info: ROMTbl 0 [0]: FFF0F000, CID: B105E00D, PID: 000BB00C SCSInfo: ROMTbl 0 [1]: FFF02000, CID: B105E00D, PID: 003BB002 DWTInfo: ROMTbl 0 [2]: FFF03000, CID: B105E00D, PID: 002BB003 FPBInfo: ROMTbl 0 [3]: FFF01000, CID: B105E00D, PID: 003BB001 ITMInfo: ROMTbl 0 [4]: FFF41000, CID: B105900D, PID: 000BB925 ETMInfo: ROMTbl 0 [5]: FFF42000, CID: B105900D, PID: 003BB923 TPIU-LiteInfo: ROMTbl 0 [6]: F0000000, CID: 00000000, PID: 00000000 ???Cortex-M4 identified.Target interface speed: 1000 kHzJ-Link>eraseErasing device (nRF52)...Info: J-Link: Flash download: Only internal flash banks will be erased.To enable erasing of other flash banks like QSPI or CFI, it needs to be enabled via "exec EnableEraseAllFlashBanks" 0.000s, Erase: 0.263s, Program: 0.000s, Verify: 0.000s, Restore: 0.009s)Erasing done.

總結

通過以上步驟,創建、設置、編譯了在nRF52開發板PCA10040上的LED燈閃爍的應用程式blinky,並進一步把鏡像文件下載到開發板進行運行該程序,使得開發板上的LED燈開始閃爍。

運行BLE外設應用程式

BLE外設(Peripheral)應用程式bleprph實現了一個BLE外圍設備的如下功能:

支持一個BLE連接當斷開和BLE中心設備的連接時,自動發射可連接的廣播消息支持配對(pairing)和綁定(bonding)支持五個服務(service)準備

準備好BLE中心設備的應用程式App,使得運行BLE外設應用程式bleprph 的nRF52開發板能夠連接上。在macOS或者iOS上,應用LightBlue,就可以掃描到BLE外設並連接上。

創建新目標

通過如下步驟創建、設置、編譯、下載並運行BLE外設應用程式bleprph

$ newt target create myperiphTarget targets/myperiph successfully created$ newt target set myperiph bsp=@apache-mynewt-core/hw/bsp/nrf52dkTarget targets/myperiph successfully set target.bsp to @apache-mynewt-core/hw/bsp/nrf52dk$ newt target set myperiph app=@apache-mynewt-core/apps/bleprphTarget targets/myperiph successfully set target.app to @apache-mynewt-core/apps/bleprph$ newt target set myperiph build_profile=optimizedTarget targets/myperiph successfully set target.build_profile to optimized$ newt build myperiphBuilding target targets/myperiphCompiling gatt_svr.cCompiling main.c...Linking /Users/jiachengwang/dev/myproj/bin/targets/myperiph/app/apps/bleprph/bleprph.elfTarget successfully built: targets/myperiph$ newt create-image myperiph 1.0.0...Linking /Users/jiachengwang/dev/myproj/bin/targets/myperiph/app/apps/bleprph/bleprph.elfApp image succesfully generated: /Users/jiachengwang/dev/myproj/bin/targets/myperiph/app/apps/bleprph/bleprph.img$ newt load nrf52_bootLoading bootloader$ newt load myperiphLoading app image into slot 1

註:在下載程序到開發板之前,和前面的LED燈閃爍應用程式一樣,如果要擦除開發板的快閃記憶體,可以應用JLinkExe的「erase」命令。

連接LightBlue

現在,可以重置一下開發板,運行BLE中心設備的應用程式LightBlue,就可以掃描到一個名為「nimble-bleprph」的BLE外設。

現在已經看見了BLE外設設備,就可以和其廣播服務進行交互。點擊設備名就可以建立連接。

就這樣建立起了BLE連接,並看到了其廣播的服務。向下滾到底部,就可以看到讀特徵(Read Characteristic),以及讀/寫特徵(Read/Write Characteristic)

點擊讀/寫特徵就可以看見現有的值

寫入一個新的值

就可以看見剛剛寫入的新值

如果電腦的命令行終端控制臺通過串口通信程序screen或者picocom連接上nRF52開發板,可以在控制臺看到在開發板上的BLE連接請求、配對等輸出信息如下

289546:[ts=2262078120ssb, mod=64 level=1] connection established; status=0 handle=1 our_ota_addr_type=0 our_ota_addr=0a:0a:0a:0a:0a:0a our_id_addr_type=0 peer_id_addr_type=1 peer_id_addr=42:6b:bb:c8:ba:dd conn_itvl=24 conn_latency=0 supervision_timeout=72 encrypted=0 authenticated=0 bonded=0289556:[ts=2262156240ssb, mod=64 level=1] mtu=185289628:[ts=2262718704ssb, mod=64 level=1] subscribe event; conn_handle=1 attr_handle=14 reason=1 prevn=0 curn=0 previ=0 curi=1292082:[ts=2281890568ssb, mod=64 level=1] encryption change event; status=0 our_id_addr=0a:0a:0a:0a:0a:0a peer_ota_addr_type=1 peer_ota_addr=42:6b:bb:c8:ba:dd supervision_timeout=72 encrypted=1 authenticated=0 bonded=1292092:[ts=2281968688ssb, mod=64 level=1]

結束語

就這樣,通過設置好電腦上的開發環境,並創建、設置、編譯了在nRF52832開發板PCA10040上的LED燈閃爍應用程式blinky以及BLE外設應用程式bleprph,下載到開發板,並成功運行,初步了解如何使用開源IoT作業系統Mynewt和BLE協議棧NimBLE。

相關焦點

  • 騰訊IOT安卓開發初探
    騰訊IOT開發平臺:https://console.cloud.tencent.com/iotexplorer騰訊IOT Java SDK GitHub:https://github.com/tencentyun/iot-device-java開發工具:Android Studio代碼Github:android_test_iot_for_tecent
  • 汽車GPS定位器的NB-IOT技術知多少?
    今天主要討論一下NB-iot相關知識。NB-iot又叫窄帶物聯網,基於蜂窩網絡,平均消耗大約190KHz的數據信息量,目前國內普及較高的通訊類型為華為技術推動的NB-IoT,NB-IoT數據流量使用多為中國電信制式的,並且中國電信特為NB-IoT創建了數據信息傳送頻段,所在信號的幹擾相對要好很多。
  • 港中文等利用LSTM攻克IoT安全設定
    "Iotsense: Behavioral fingerprinting of iot devices". arXiv preprint arXiv:1804.03852, 2018. Available online at https://arxiv.org/abs/1804.03852.4.
  • 電子發燒友2020年度中國IoT創新獎名單正式公布
    電子發燒友總經理兼總編張迎輝表示,「今年中國IOT創新獎的獎項提名,覆蓋了IOT技術企業的各個環節,從IP到晶片,從模組到測試設備,從作業系統、開發環境到雲平臺,眾多企業都一如繼往地積極地參與該獎項。本次提名和投標企業均再破記錄,顯示了企業在IOT市場的創新熱度空前高漲。」
  • 飛機的作業系統
    根據 V友轉自百度知道的答案:航空軟體並不神秘,從計算機架構上來說,同普通的計算機系統並無太大區別,都是由處理器,總線,I/O設備,存儲設備,網絡設備,通訊設備,作業系統和應用軟體所構成的。僅僅是為了滿足很高指標的可靠性,健壯性和實時性,而採用了另一套東西而已。1、波音-787,AH-64用的作業系統是VxWorks
  • 從M2M到IoT理解萬物互聯的真實意義
    而iot則更強調了萬事萬物之間的連接,相對來說更加開放。另外,從通信技術來說,M2M是以有線通信和無線通信廣域網的通信為主,有一定的限制性。但是,物聯網卻有很大的不同。在物聯網中,凡是涉及到廣域技術的都會一起協同工作。同時,iot模塊不單可以植入到機器,將來還可以植入動物、植物的體內來進行信息傳送和信息感知。
  • 史上最失敗的十款作業系統-十款,作業系統,失敗 ——快科技...
    微軟的作業系統是使用最廣泛的產品之一,「最失敗作業系統」名列其中也不足為奇,不過讓我多少有點兒吃驚的是Vista也位列其中。人們常說「慢工出細活」,微軟潛心6年打造的Vista系統,從一上市就惡評如潮,有人預言Vista猶如Windows me一樣短命,從微軟已經著手推廣下一代作業系統Windows 7也可以看出,放棄Vista對於微軟應該是一種明智。
  • 國產作業系統Deepin安裝
    作為國產優秀的Linux內核桌面級作業系統,8月6日,Deepin再一次發布了最新版桌面作業系統---深度作業系統20Beta。Deepin內置了Chromium瀏覽器、Deepin音樂播放器、Deepin影院等Deepin製作的常用軟體,還可以在應用商店下載微信、QQ、WPS、Foxmail等應用供用戶下載。
  • 對CPU位數與作業系統位數的理解
    可以這樣理解,指令集被整合到了作業系統內核最底層的hal(硬體抽象層)中,屬於作業系統與硬體之間(宏指令與微指令)的接口,它向作業系統定義了CPU最基本的功能,而作業系統執行某個任務的實質就是在調用這些功能。指令集中的一條指令,就是讓cpu完成一系列的動作,而該動作的完成則表明了某種運算的完成。一個功能可能需要一條或幾條指令來實現。
  • iot和iot的區別 nb專題及常見問題 - CSDN
  • iot和iot區別 nb專題及常見問題 - CSDN
  • 伺服器作業系統TCO構成
    計世資訊(CCW Research)將全部企業不同作業系統、不同伺服器應用的整體擁有成本情況進行了綜合計算,以確定中國企業用戶伺服器作業系統TCO的構成情況。  研究結果表明,中國企業用戶伺服器作業系統整體擁有成本中,硬體成本所佔的比重最大,達到了35.4%,其次是運營成本,佔33%。
  • 如何禁止XP、Win7等作業系統開機按F8鍵進入作業系統的安全模式
    熟悉網絡安全的網絡管理人員都知道,作業系統的安全模式是至關重要的,關乎到整個電腦的安全。因此,在公司企業的區域網網絡管理中,網管員通常情況下需要禁用安全模式、禁止開機按F8鍵進入作業系統的安全模式。那麼,具體如何實現呢?本文提供了一種有效的方法來限制進入作業系統安全模式,從而可以有效保護電腦自身安全,進而保護電腦重要文件和商業機密的安全。
  • 華為:逆轉作業系統之「熵」
    作業系統戰爭:堪比登月的世紀工程對計算設備而言,作業系統是內核和基石。它是管家,主管著運行程序所需要的全部軟硬體資源;它是信使,控制著需要輸入和輸出設備的全部數據和信息;它是傳令官,我們對設備的每一項操作、每一句命令,都需要經由它之手。沒有作業系統,計算機或許和石頭沒兩樣,宛若失去靈魂的「死物」。
  • 國產作業系統不僅僅是換皮膚
    昨天寫國產作業系統的文章,頭條推薦量突破10萬,這證明國人對國產作業系統還是很關注的。本來今天要推QT5的研究文章,但通過昨天的議論,我覺得很多國人對國產作業系統上有誤會,「這不就是在linux系統上換一個皮膚嘛」,這種評論我聽到的最多。所以我覺得有必要給對國產作業系統有誤會的人做個科普。讓大家了解這麼多年我們在國產作業系統上做了哪些工作。什麼是桌面作業系統?桌面作業系統就是大家平常電腦裡面用的作業系統。
  • 京東數科加入「作業系統」主戰場
    成為「作業系統」,或許是每個有野心科技公司的終極目標。進入產業網際網路的下半場,巨頭們均開始「系統」建設上競相發力, OS (Operating System)之爭漸成熱點。在阿里提出成為商業作業系統、騰訊提出做數位化轉型基礎設施後,產業網際網路領域也在等待下一個面向行業空白點的「作業系統」級服務出現。
  • 除了作業系統,openEuler 還可以是什麼
    在 2019 年 7 月 19 日,華為宣布要在年底正式開源 openEuler 作業系統;在半年後的 12 月 31 日,華為正式開源了 openEuler 作業系統,邀請社區開發者共同來貢獻。openEuler 所特有的供應鏈,讓作業系統的打包和精簡變的更簡單,可以根據設備不同的類型、場景整合出適合相應場景的作業系統,從而讓這些新特性,可以不只交付給雲,更可以交付給邊和端,雲邊端一體為行業和業務創造價值。 openEuler 是作業系統,還是....
  • 國產ROS作業系統來了,你怎麼看
    一提到國產作業系統來了,相信大家激動有之,感觸有之,質疑有之,反正各有各的情緒反應。不過當看到ROS三個字母,有些了解的朋友也就沒那麼大的情緒波動了。所以稍安勿躁,國產ROS作業系統,並不是我們直觀意識中以為的那種OS作業系統。