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 cmake
で Makefile
を作成する。
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
...