interface2024年1月号を参考にRaspberryPi Pico W でbluetoothを使う　第2章-2 

interface2024年1月号を見ながら、開発環境を整えています。
開発の状況を備忘録的に残します。<br>

### 開発のイメージ

- c言語で開発
- pico-sdkのBTstackを使用
- Bluetooth経由で文字列を送受信したい。(SPP使用？)
- 最終的にcore0に実装し、trykernelと組み合わせたい
- 
### ラズピコWのハードについて(メモ)
- 無線チップCYW43439(bluetoohtとwi-fi)が搭載されている
- CY43439との通信はgSPI(PIOを使ったSPI)
- Picoの内蔵LED(GP25)にCY43439の「CS」が割当たっている。代わりにLEDは(WL_GPIO0)を使う。(※無印picoからはまったところ。LED割り当て変える)


### BTstackについて
- オープンソースのBluetoothスタック(非商用の場合無料)
- BlueKitchen社が開発した
- シングルスレッドの処理を基本としている(FreeRTOSでマルチの例もあるが...)
- プロトコルとプロファイラをセットで実装する
- コンパイル時にプロファイラに応じた「btstack_config.h」が生成される
- pico-sdkでは、実装の方式を3パターン(poll,background,freertos)から選択する


# interface2024年1月号 第2章-2
今と当時は環境が変わっているのか、2025年5月現在、そのままではビルドエラーが出ます。解決できたポイントなどを書いていきます。

- 前提として、以下にある「interface2024年1月号のダウンロードデータ」を使います。<br>
- 今回は解凍したフォルダの「2-2_pico-examples_btstack」のreadme.txtを参考に進めていきます。
※1月号　Bluetooth＆Wi-Fi Pico W　をダウンロード。
https://www.cqpub.co.jp/interface/download/contents2024.htm
<br>

- MSYS2-Mingw64をインストールする(下記参考サイト)
https://gist.github.com/Hamayama/eb4b4824ada3ac71beee0c9bb5fa546d
<br>

- インストール後のコマンドは、以下の2種を実行する。

~~~
pacman -Syu
~~~
- pacman・・・Arch Linux のパッケージ管理システムのコマンド。パックマンじゃない。
- SyuオプションはS:sync(パッケージの同期) y:refresh(データベース更新) u:sysupgrade(リポジトリを最新に更新)の意味で、シュウ(syu)さんではない。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3657924/0b64edb3-4c75-4c38-a921-4711a0698c92.png)
- 途中で2度ほど聞かれるが[y]を選択
-
~~~
pacman -S base-devel mingw-w64-x86_64-toolchain mingw-w64-x86_64-arm-none-eabi-toolchain autoconf automake gcc libtool zlib git mingw-w64-x86_64-cmake mingw-w64-x86_64-doxygen mingw-w64-x86_64-ninja cmake
~~~

- 途中で下記のように聞かれるが、enterを押す。<br>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3657924/39bb7ba0-9b8b-4d76-a8ff-cb6dfdc4fd25.png)
- 途中で何か聞かれたら[y]を選択
- インストールには5分ほどかかる
<br>

- ビルドに必要なツールチェーンをインストールするのにcmakeとpythonも必要。
- 私の環境ではPython 3.12.10、cmake version 4.0.1　でした。





### pico/cyw43_arch.hがない

- ２つ書籍に書いていない手順が必要だった。
- １つめ、「git submodule update -–init」をしても特に追加のアップデートは発生しなかったのだが、ビルドすると下記エラーが発生した。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3657924/1084b541-58f4-47ff-8955-7f8aec805413.png)

- 「git submodule status」 を行った後に「git submodule update -–init」を行うとbtstack関連のインストールが行われ、その後はエラーなくbuildできるようになった

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3657924/73af6110-04fe-4348-ba92-1e4eddfa666c.png)

### uint8_t 型が見つからない
- ２つめ、1を修正後に再度buildすると下記エラーでとまった。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3657924/751fd1c0-97b1-41f1-b5ad-49ed19b793a4.png)

ログより「pioasm」 ツールをビルド中に uint8_t 型が見つからないというコンパイルエラーが発生している。
エラーメッセージの注釈にもあるように、これは cstdint ヘッダーをインクルードすることで解決する可能性が高いとのことで、修正する。

pico/pico-sdk/tools/pioasm　以下の「pio_types.h」「output_format.h」 を開き、#include "pio_enums.h" の次の行にcstdint ヘッダーの追加を行う。

~~~　c
pio_types.h、output_format.hの最初のほう

#include "location.h"
#include "pio_enums.h"
#include <cstdint> // この行を追加
~~~
- 変更後はpico-examples直下のbuildフォルダを削除してから、再度buildを実行。
- 問題なくbuildできるようになったが、下記問題点が発生した。

### pico-example全てビルドするのは、時間がかかる
- buildの注意点だが、全てコンパイルするのはかなり時間がかかる。(途中であきらめた)
- pico-examplesの下のCMakeLists.txtを編集して絞ったほうが良い。
- 今回は無線関連(pico_w)以外のコンパイルを切った。それでも私の環境で2時間くらいかかった。

~~~
CMakeLists.txt
最後のほう
・
・
・
# Hardware-specific examples in subdirectories:
#add_subdirectory(picoboard)
    add_subdirectory(pico_w)　#これ以外コメントアウト
#add_subdirectory(pio)
#add_subdirectory(pwm)
・
・
・
~~~

2－2は以上です。