RPi Pico のC/C++ SDK 環境を使う

最終更新日

RPi Pico のC/C++ 環境を使ってみる。

SDK やサンプルをバンバンもってくる

git clone でSDKやサンプルを

pico-sdk

SDK本体
https://github.com/raspberrypi/pico-sdk.git

pico-examples

基本的なサンプル
https://github.com/raspberrypi/pico-examples.git

pico-extras

色々なサンプル

https://github.com/raspberrypi/pico-extras

pico-playground

アプリの例
https://github.com/raspberrypi/pico-playground

pimoroni-pico

Pimoroni のサンプル

https://github.com/raspberrypi/pico-playground.git

cmake

イマドキは、cmake らしい。

基本的に CMakeLists.txt に mkmf みたいに定義を記述しておいて、 command cmakeMakefile を作成する。

cmake のinstall

mac ならbrew。

brew install cmake

arm のcross compile 用gccも入れる

brew tap  ArmMbed/homebrew-formulae
brew install arm-none-eabi-gcc

compile 用環境変数の設定

$HOME/.bash_profile に設定を追加

export PICO_SDK_PATH=~/develop/pico/pico-sdk
export PICO_EXTRAS_PATH=~/develop/pico/pico-extras

blink の compile

例えば、 pico-examples で、Lチカ blink を試す場合。
directory build に コンパイル環境を生成する。

cd pico-examples
mkdir build
cd build
cmake ..
ls -1
---
cmake_install.cmake hello_world     pioasm          uart
CMakeFiles      divider         i2c         pwm         usb
Makefile        dma         interp          reset           watchdog
adc         elf2uf2         multicore       rtc
blink           flash           pico-sdk        spi
clocks          generated       picoboard       system
cmake           gpio            pio         timer

pico-examples/build 配下と、 pico-examples/build の配下のディレクトリは同じ。

cd pico-examples/build/blink
make

make が成功すると、 blink.uf2 ができる。

blinkプログラム(uf2) の実行

Pico の本体の BOOLSEL を押しながら、RESET。
USB Storage RPi-RP2 がフォルダに現れるので、さきほどの blink.uf2 をコピーする。

Picoは、自動的に再起動し、LEDが点滅する。

debug 用トレース

serial 接続してトレースdebugするための設定。
UART端子だと配線が面倒なので、USBのserialを利用する。

/blink/CMakeLists.txt

libraries に、UARTを追加し、usb のシリアルを有効にする。

# target_link_libraries(blink pico_stdlib)
target_link_libraries(blink pico_stdlib hardware_uart)

pico_enable_stdio_usb(blink 1)
pico_enable_stdio_uart(blink 0)

blink.c

/**
 * Copyright (c) 2020 Raspberry Pi (Trading) Ltd.
 *
 * SPDX-License-Identifier: BSD-3-Clause
 */

#include <stdio.h>
#include "pico/stdlib.h"

int main() {
#ifndef PICO_DEFAULT_LED_PIN
#warning blink example requires a board with a regular LED
#else
    // ADD by kurosuke
    stdio_init_all();

    const uint LED_PIN = PICO_DEFAULT_LED_PIN;

    // ADD by kurosuke
    printf("start\n");

    gpio_init(LED_PIN);
    gpio_set_dir(LED_PIN, GPIO_OUT);
    while (true) {
        gpio_put(LED_PIN, 1);
        sleep_ms(250);
        gpio_put(LED_PIN, 0);
        sleep_ms(250);

        // ADD by kurosuke
        printf("blink\n");
    }
#endif
}

ADD by kurosuke の下の行を追加する。
これで、 printf() の結果が、USB シリアルポーチに出力される。

print付きblinkプログラム(uf2) の実行

make した blink.uf2 をRPi Pico にinstallして、実行。

シリアルの出力を確認

macに新しいtty /dev/tty.usbmodem14223301 が現れる。

 screen /dev/tty.usbmodem14223301
 ---
 blink
 blink
 ...

シェアする