はじめに
Raspberry Pi Pico2でZephyr OSを使う際、アプリの標準出力(Printf)を簡単に確認する方法を解説します。
環境はWindows + Raspberry Pi Debug Probe + OpenOCDを使用します。
Pico2とDebug Probeをシリアル接続するだけで手軽に確認でるので、Zephyr OSでのPrintfデバッグの方法を知りたい方はぜひご覧ください。
~ この記事の内容 / Contents ~
環境
この記事で使用する環境は以下の通りです。
環境 | 内容 | バージョンなど |
開発用PCのOS | Windows11 | |
言語 | C++ | |
環境 | West | Ver.1.3.0 |
ボード | RaspberryPi Pico2 | |
デバッガ/ライタ | RaspberryPi Debug Probe | |
OpenOCD | 0.10.0 (20240916版) | |
端末ソフト | Putty | Ver.0.83 (ranvis版) |
OS | Zephyr OS |
RaspberryPi Pico2との接続
Pico2とDebugProbeを以下のように接続します。
ピン番号 | 内容 | 接続先 | 備考 |
– | SWDIO | DebugProbe(SWD 黄) | ケーブルはDebugProbe同梱の物を使用します。 |
– | GND | DebugProbe(SWD 黒) | |
– | SWCLK | DebugProbe(SWD 橙) | |
1 | UART0 TX | DebugProbe(シリアル 黄) | |
2 | UART0 RX | DebugProbe(シリアル 黒) | |
3 | GND | DebugProbe(シリアル 橙) |
Picoピンアサイン(Pin-Out)
※ Pico公式サイトより引用
使用する部品
RaspberryPi Pico 2
今からPicoを揃えるなら、RaspberryPi Pico2がおすすめです。Picoに比べて1.5倍高速で、値段はほぼ一緒です。

すぐに使えるキットもあります
ピンヘッダが半田付けされて、USBケーブルやピンのレイアウト表までついた、すぐに使えるセットもあります。

RaspberryPi Debug Probe(デバッグプローブ)
RaspberryPi 公式の低価格で高機能なデバッグプローブです
SWD(Serial Wire Debug)ラインを使って、プログラムの状態を監視したり、BOOTSELボタンを押さずに書き込みを行うことができます。
RaspberryPiのマークがついたUSBケーブルが同梱されているのもうれしいポイントです。

ブレッドボード(ハーフサイズ)
サンハヤト製のブレッドボードです。今回は簡単な回路なので小さいサイズのものを使っています。

Windows側のシリアル環境の構築
Pico2からの出力内容を確認するため、Windows側に端末ソフトをインストールします。
端末ソフトには色々なものがありますが、今回は有名なPutty(パティ)というソフトを使用する方法を紹介します。
Puttyのインストール
こちらのページから日本語パッチなどが適応された、カスタムビルド版のputtyをインストールします。
特にこだわりがなければ、最新版の64bit インストーラ版(未署名)を使用してください。Windows10様ですが、Windows11でも問題なく動作しました。
Puttyの起動とCOMポートの設定
インストールが済んだら、Puttyを起動します。
起動したら下記のように「DebugProbeと接続するCOMポート」「スピード(115200)」「接続タイプ(シリアル)」の3つを指定して「開く」をクリックしてください。
下記の画面が開ければ、Windows側の設定は完了です。
Zephyr側の設定は特になし
Zephyr側の設定は特に必要ありません。
コードの中に「printf」を記載すれば、自動的に出力内容がWindows側へ送信されます。
今回はZephyr OSの開発環境にある以下のLチカのサンプルコードを使用します。
/*
* Copyright (c) 2016 Intel Corporation
*
* SPDX-License-Identifier: Apache-2.0
*/
#include <stdio.h>
#include <zephyr/kernel.h>
#include <zephyr/drivers/gpio.h>
/* 1000 msec = 1 sec */
#define SLEEP_TIME_MS 1000
/* The devicetree node identifier for the "led0" alias. */
#define LED0_NODE DT_ALIAS(led0)
/*
* A build error on this line means your board is unsupported.
* See the sample documentation for information on how to fix this.
*/
static const struct gpio_dt_spec led = GPIO_DT_SPEC_GET(LED0_NODE, gpios);
int main(void)
{
int ret;
bool led_state = true;
if (!gpio_is_ready_dt(&led)) {
return 0;
}
ret = gpio_pin_configure_dt(&led, GPIO_OUTPUT_ACTIVE);
if (ret < 0) {
return 0;
}
while (1) {
ret = gpio_pin_toggle_dt(&led);
if (ret < 0) {
return 0;
}
led_state = !led_state;
printf("LED state: %s\n", led_state ? "ON" : "OFF");
k_msleep(SLEEP_TIME_MS);
}
return 0;
}
サンプルプログラムの実行方法
Zephyrのサンプルプログラムを実行します。Pico2のサンプルプログラムを書き込み済みの方は、Pico2に電源を投入すればOKです。
書き込んでいない場合は、以下の記事を参考にサンプルプログラムの書き込みを行ってください。
実行結果
サンプルプログラムを実行するとPuttyの画面に以下の様にblinkの状態が表示されます。
まとめ
Raspberry Pi Pico2でZephyr OSを使って、アプリの標準出力(Printf)確認する方法を解説しました。
Windows側さえ設定してしまえば、あとはコードの記載だけで出力を送信できるのはうれしいですよね。
Zephyr OSってデバッグどうなの?と悩んでる方の参考になればうれしいです。
質問・要望 大歓迎です
「こんな解説記事作って」「こんなことがしたいけど、〇〇で困ってる」など、コメント欄で教えてください。 質問・要望に、中の人ができる限り対応します。
使えたよ・設定できたよの一言コメントも大歓迎。気軽に足跡を残してみてください。記事を紹介したい方はブログ、SNSにバシバシ貼ってもらってOKです。