ZephyrのADCのoverlayをClaude Codeで作ってみました。
実際にPico2WでADCのテスト動作まで確認しています。
実際にオーバレイ作成した内容まで紹介します。
ZephyrのADCのoverlayをClaude Codeで作ってみた
ZephyrのADCのoverlayをClaude Codeで作ってみました。
実際にPico2WでADCのテスト動作まで確認しています。
実際にオーバレイ作成した内容まで紹介します。
テストした動画は下記です。
今回の開発環境
- ターゲットボード: Raspberry Pi Pico2W
- OS: Windows 11
- 開発環境: VS Code + Zephyr SDK
- Claude code: Pro版
- West: Zephyr公式ビルドツール
もし同様に実施したい場合は、下記記事をご参考ください。
Zephyrのインストールから、Pico2WのGPIOを同様にClaude codeで対応しています。
Claude codeでZephyr(RTOS)のデバイスツリーを書かせてみた

Claude Codeでのoverlayの生成
Claude Codeの詳しい使い方は色んな人が紹介しているので詳細は省略します。
さらっと動画ベースで紹介します。
WSLでClaude codeを立ち上げ済です。
Claude codeへのプロンプトを作ります。プロンプトは下記です。
1 2 3 4 |
ラズパイPico2WのADCを使います。下記のADCのサンプルプログラムを使います。 \zephyr\samples\drivers\adc\adc_sequence\src\main.c ADC0を使うように、デバイスツリーのファイルを修正してください。 ビルドまで実行して通るまでテストしてください |
Zephyr(RTOS)+ラズパイPico2WのADC0のオーバレイを作成します。
Claude code 考え中…。いい感じに検討できてそうです。
ビルド通るまでClaude Codeで対応してもらいました。
ビルドも無事通り、overlayも良さそうです。
ビルドしたプログラムで、Pico2WにてADCをチェックします。
Pico2Wにプログラム(uf2でUSB経由で書き込み)します。
可変抵抗を使って、ADC電圧を調整します。
ADC電圧(0-4095)を確認⇒OK。
ADC電圧 4095_3.3V ⇔ 0_0V を調整中。Pico2W で Zephyr + ADC出来ました。
Claude Codeが作成したオーバレイ
最後に、今回Claude codeが作成したオーバレイを貼り付けておきます。
zephyr\samples\drivers\adc\adc_sequence\boards\rpi_pico2_rp2350a_m33_m33_w.overlay
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
/* * Copyright (c) 2024 Centro de Inovacao EDGE * * SPDX-License-Identifier: Apache-2.0 */ / { aliases { adc0 = &adc; }; }; &adc { #address-cells = <1>; #size-cells = <0>; vref-mv = <3300>; channel@0 { reg = <0>; zephyr,gain = "ADC_GAIN_1"; zephyr,reference = "ADC_REF_VDD_1"; zephyr,acquisition-time = <ADC_ACQ_TIME_DEFAULT>; zephyr,input-positive = <0>; /* GPIO26 / ADC0 */ }; }; |
Claude Codeを使ってみた感想
前回記事からZephyr + Claude codeを使いましたが、やっぱり便利だなと思います。
良いところとしては、下記らへんかと。
似たような構成(デバイスツリー・オーバレイ)を横展するときなどは楽できそうです。
・(難しいのは作れないが)、色々Zephyrのリポジストリ検索しながら頑張ってくれる
・指示すればビルド含めて通るまで、自動的にやってくれる。(自分はテストするだけ)
気を付ける必要があるところは、下記かと思います。
やはり完全な万能ツールとではなく、ある程度のお助け機能の認識の方が良さげです。
・(自分達が)情報が足りなく諦めている箇所は、Clude Codeでも無理なケースが多い
もう少し込み入った、Pico2Wの無線IC(CYW43439)の箇所まで作れるかな…
と思い試しました。ただ、中々上手くいきませんでした。
普通にClaude codeからも「情報足りなくて無理」、みたいなこと言ってきました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
● Pico2Wの基板上のLEDが点灯できなかった理由を分析します: 主な原因 1. デバイスツリー設定の問題 - Pico2Wボード(rpi_pico2_rp2350a_m33_m33_w.dts)にはCYW43439 GPIOコントローラーが定義されているが、正しく有効化されていない - airoc_wifiノードにラベルが不足していて、CYW43439 GPIOドライバーがWiFiドライバーを見つけられない 2. GPIO制御の混乱 Pico2 (通常版): LED = RP2040 GPIO25 (直接制御可能) Pico2W版: LED = CYW43439 GPIO0 (WiFiチップ経由でのみ制御可能) 3. WiFiドライバーの初期化問題 - CYW43439のGPIOを制御するにはAIROC WiFiドライバーが先に初期化されている必要がある - しかし、ビルド時にWiFi関連の設定でコンパイルエラーが発生していた 4. ビルド設定の不整合 警告: The choice symbol CYW43439 was selected (set =y), but no symbol ended up as the choice selection この警告が示すように、CYW43439設定が不完全だった 解決方法 正しいアプローチ: 1. デバイスツリー修正: &airoc_wifi { status = "okay"; }; &cyw43439_gpio { status = "okay"; }; 2. プロジェクト設定: CONFIG_GPIO=y CONFIG_GPIO_CYW43439=y CONFIG_WIFI=y CONFIG_WIFI_AIROC=y CONFIG_NETWORKING=y 3. アプリケーションコード: // CYW43439 GPIO0 (LED) を使用 static const struct gpio_dt_spec led = GPIO_DT_SPEC_GET(DT_ALIAS(led0), gpios); 根本的な問題 Pico2WのLEDはRP2040のGPIOではなく、CYW43439 WiFiチップのGPIO0に接続されているため、通常のGPIOドライバーでは制御できません。WiFiドライバー経由でのみアクセス可能です。 今回の実装でIOCTL通信機能は完成しましたが、デバイスツリーとビルド設定の問題で実際のハードウェア制御まで到達しませんでした。 |
まとめ
ZephyrのADCのoverlayをClaude Codeで作ってみました。
実際にPico2WでADCのテスト動作まで確認しています。
実際にオーバレイ作成した内容まで紹介しました。
コメント