Pico PR

Raspberry Pi Pico2でZephyr OSのPrintf出力を確認する方法

記事内に商品プロモーションを含む場合があります

はじめに

Raspberry Pi Pico2でZephyr OSを使う際、アプリの標準出力(Printf)を簡単に確認する方法を解説します。

環境はWindows + Raspberry Pi Debug Probe + OpenOCDを使用します。

Pico2とDebug Probeをシリアル接続するだけで手軽に確認でるので、Zephyr OSでのPrintfデバッグの方法を知りたい方はぜひご覧ください。

環境

この記事で使用する環境は以下の通りです。

環境 内容 バージョンなど
開発用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を以下のように接続します。

Pico2とDebugProbeを接続している画像
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)

RaspberryPi Picoのピンアサイン(pinout)の画像

※ Pico公式サイトより引用

使用する部品

RaspberryPi Pico 2

今からPicoを揃えるなら、RaspberryPi Pico2がおすすめです。Picoに比べて1.5倍高速で、値段はほぼ一緒です。

ノーブランド品
¥1,475 (2024/11/27 21:32時点 | Amazon調べ)

すぐに使えるキットもあります

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

RaspberryPi Debug Probe(デバッグプローブ)

RaspberryPi 公式の低価格で高機能なデバッグプローブです

SWD(Serial Wire Debug)ラインを使って、プログラムの状態を監視したり、BOOTSELボタンを押さずに書き込みを行うことができます。

RaspberryPiのマークがついたUSBケーブルが同梱されているのもうれしいポイントです。

ブレッドボード(ハーフサイズ)

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

Windows側のシリアル環境の構築

Pico2からの出力内容を確認するため、Windows側に端末ソフトをインストールします。

端末ソフトには色々なものがありますが、今回は有名なPutty(パティ)というソフトを使用する方法を紹介します。

Puttyのインストール

こちらのページから日本語パッチなどが適応された、カスタムビルド版のputtyをインストールします。

特にこだわりがなければ、最新版の64bit インストーラ版(未署名)を使用してください。Windows10様ですが、Windows11でも問題なく動作しました。

カスタムビルド(runvis版) ダウンロードURL:

https://www.ranvis.com/putty

Puttyの起動とCOMポートの設定

インストールが済んだら、Puttyを起動します。

起動したら下記のように「DebugProbeと接続するCOMポート」「スピード(115200)」「接続タイプ(シリアル)」の3つを指定して「開く」をクリックしてください。

Puttyのシリアルの設定手順を吹き出しで説明。
Putty設定方法

下記の画面が開ければ、Windows側の設定は完了です。

Puttyでシリアルポートを開いた後の画面を説明
シリアルポートを開いた状態

Zephyr側の設定は特になし

Zephyr側の設定は特に必要ありません。

コードの中に「printf」を記載すれば、自動的に出力内容がWindows側へ送信されます。

今回はZephyr OSの開発環境にある以下のLチカのサンプルコードを使用します。

サンプルはZephyrの開発環境(Windows)の以下のフォルダに格納されています

zephyrproject\zephyr\samples\basic\blinky\src

/*
 * 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の状態が表示されます。

zephyr側でprintfした内容がwindows側で表示されている所を示す画像
printfの内容がWindows側で表示される

まとめ

Raspberry Pi Pico2でZephyr OSを使って、アプリの標準出力(Printf)確認する方法を解説しました。

Windows側さえ設定してしまえば、あとはコードの記載だけで出力を送信できるのはうれしいですよね。

Zephyr OSってデバッグどうなの?と悩んでる方の参考になればうれしいです。

質問・要望 大歓迎です

「こんな解説記事作って」「こんなことがしたいけど、〇〇で困ってる」など、コメント欄で教えてください。 質問・要望に、中の人ができる限り対応します。

使えたよ・設定できたよの一言コメントも大歓迎。気軽に足跡を残してみてください。記事を紹介したい方はブログ、SNSにバシバシ貼ってもらってOKです。

ABOUT ME
えす
現役のソフトウェアエンジニアです。 C++ C# Python を使ってます。10年ちょい設計/開発部門にいましたが、今はQAエンジニアっぽいことをしています。

COMMENT

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です

→ Index