みつきんのメモ

組み込みエンジニアです。Interface誌で「My オリジナルLinuxの作り方」連載中

PlatformIO nRF52840-DKをmbedで動かす

はじめに

nRF52840-DK(pca10056)をPlatoformIOで動かそうとしたところ、 デフォルトのframework(arduino)ではGPIOのピン割り当てが思ったようにならなかった。

そこで、frameworkをmbedに設定して試してみた。

プロジェクト作成

まずはプロジェクトを作成する。

$ pio init -b nrf52840_dk

platformio.iniを次の内容に修正する。

[env:nrf52840_dk]
platform = nordicnrf52
board = nrf52840_dk
framework = mbed

このように一度platformio.iniを出力してからframeworkを書き換える方法もあるが、下記のようにオプションを与えることで出力時点でframeworkを設定することもできる。

$ pio init -b nrf52840_dk -O "framework=mbed" 

objects_cryptocell.hでエラー

nRF52840-DKのmbed環境では、デフォルトの設定だと、ビルド時に次のようなエラーが発生する。

/home/mickey/.platformio/packages/framework-mbed/targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_NRF52/objects.h:58:10: fatal error: objects_cryptocell.h: No such file or directory

****************************************************************************
* Looking for objects_cryptocell.h dependency? Check our library registry!
*
* CLI  > platformio lib search "header:objects_cryptocell.h"
* Web  > https://platformio.org/lib/search?query=header:objects_cryptocell.h
*
****************************************************************************

 #include "objects_cryptocell.h"
          ^~~~~~~~~~~~~~~~~~~~~~
compilation terminated.

platform-nordicnrf52のissue(Missing objects_cryptocell.h)によるとbuild_flags = -DPIO_FRAMEWORK_MBED_RTOS_PRESENTによって回避できるとのこと。

次のようにすることで、プロジェクト作成時に設定することができる。

$ pio init -b nrf52840_dk -O "framework=mbed" -O"build_flags = -DPIO_FRAMEWORK_MBED_RTOS_PRESENT"

Lチカ

src/main.cppを次の内容で作成する。

#include "mbed.h"
 
DigitalOut myled(LED1);
 
int main() {
    while(1) {
        myled = 1;
        wait(0.25);
        myled = 0;
        wait(0.25);
    }
}

次のコマンドでビルドし、ボードへ書き込む。

$ pio run -t upload

LEDがチカチカした。

まとめ

nRF52840-DKのmbed環境ではbuild_flags = -DPIO_FRAMEWORK_MBED_RTOS_PRESENTが必要。