Ver. 確認 と ピン互換 ほか | 60歳を迎えて、思うこと。

60歳を迎えて、思うこと。

いつの間にか、「60」という年月が経ちました。
残り少ないか多いか?わかりませんが。
じじぃ~の「ひとりごと」を細々と続けられれば。。。

Ver. 確認 と ピン互換 ほか

ぴこぴこ
わんわん

Microsoft Copilot様 情報
🧠 まとめ
| 内容 | 事実? | 説明 |
| Pico 無印と Pico W の GPIO 割り当ては同じ | ✔️ 事実 | RP2040 が同じ
だから |
| 公式ピン図どおりに MicroPython で全部の機能が使える | ❌ 事実ではない 
| MicroPython の実装・Pico W の内部予約ピンの影響 |
| 「MicroPython ではピン図どおりに使えないことがある」は都市伝説? | ❌ 
都市伝説ではない | 実際に制限がある |



💬 結論
あなたが聞いた話は 都市伝説ではなく、正しい事実 です。  
特に Pico W は内部で Wi‑Fi 用にピンが予約されている ため、  
無印と同じ感覚で使うと「ピンが動かない」現象が起きます。

必要なら、  
- Pico W で使えないピン一覧  
- MicroPython での注意点  
- 代替方法  
なども詳しく説明できますよ。
==============================
かなりショックを受ける気持ち、よくわかります。  
でも、あなたが遭遇した現象は MicroPython の仕様というより「Pico W 固有の
事情」 が原因です。

結論を先に言うと:

GP26(SDA)・GP27(SCL)が Pico W で I2C として動かないのは “仕様” 
です。

ただし、理由は MicroPython の制限ではなく、  
Pico W の内部で Wi‑Fi チップがそれらのピンを使っているため です。



🔧 なぜ GP26 / GP27 が Pico W で使えないのか

Pico W には CYW43439 という Wi‑Fi/Bluetooth チップが載っています。  
このチップと RP2040 は 内部 I2C で通信しています。

その内部 I2C に使われているのが:

GP26(I2C1 SDA)
GP27(I2C1 SCL)

つまり、  
Pico 無印では自由に使える I2C1 が、Pico W では Wi‑Fi 用に占有されている 
のです。

📌 公式ピン図に書いてあるのに使えない理由
公式ピン図は RP2040 のハードウェア仕様 を示しているだけで、  
Pico W の内部配線までは反映されていません。

そのため:
- ピン図:GP26/27 は I2C1 として使える  
- 実際:Pico W では Wi‑Fi チップが使っているのでユーザーは使えない
というズレが発生します。


🧪 MicroPython の制限ではない
MicroPython が悪いわけではありません。
Pico 無印 → GP26/27 は普通に I2C1 として使える
Pico W → ハードウェア的に内部で占有されているので使えない

MicroPython は RP2040 の仕様どおりに動いていますが、  
Pico W の内部配線までは「ピン図」に書かれていないため混乱が起きます。


✔️ Pico W で I2C を使うならどこ?
Pico W でユーザーが自由に使える I2C は I2C0 です。
GP4(SDA)
GP5(SCL)

これが最も安定して動きます。

🧠 まとめ
| 項目 | 内容 |
| GP26/27 が I2C で動かない理由 | Wi‑Fi チップが内部で使用している |
| MicroPython の制限? | ❌ 違う(ハードウェアの都合) |
| ピン図と違うのは? | ピン図は RP2040 の仕様で、Pico W の内部配線は反映
されていない |
| Pico W で使うべき I2C | GP4(SDA)・GP5(SCL) |

必要なら、  
- Pico W で使える/使えないピン一覧  
- I2C のサンプルコード  
- Pico 無印との完全比較表  
なども作れますよ。
==============================
了解です。  
Pico W と無印の違いで混乱しやすい部分を、一度で全部わかるようにまとめま
す。  
かなり丁寧に整理したので、保存版として使えるはずです。


🧩 1. Pico W で使える / 使えないピン一覧(決定版)
Pico W は Wi‑Fi チップ(CYW43439)が内部でいくつかの GPIO を占有していま
す。  
そのため、無印では使えるのに、W では使えないピンがあります。



🔴 Pico W で “使えない” / “制限される” ピン
| GPIO | 理由 |
| GP23 | Wi‑Fi チップの制御用(WL_GPIO0) |
| GP24 | Wi‑Fi チップの制御用(WL_GPIO1) |
| GP25 | 無印では LED、W では内部 LED 制御に変更されユーザー使用不可 |
| GP26 | Wi‑Fi チップと内部 I2C 接続(I2C1 SDA) |
| GP27 | Wi‑Fi チップと内部 I2C 接続(I2C1 SCL) |
| GP29 | Wi‑Fi チップの電源制御(WL_ON) |

 GP26 / GP27 が I2C として動かないのは “仕様” です。


🟢 Pico W で “自由に使える” ピン
| GPIO | 備考 |
| GP0〜GP22 | すべて通常どおり使用可能 |
| GP28 | ADC2 として使用可能(無印と同じ) |


🧩 2. Pico W で I2C を使うならどこ?(最適解)
Pico W で安定して使える I2C は I2C0 のみ。

| I2C | SDA | SCL | Pico W での状態 |
| I2C0 | GP4 | GP5 | ✔️ 推奨(最も安定) |
| I2C1 | GP26 | GP27 | ❌ Wi‑Fi チップが占有 |


🧪 3. MicroPython:I2C のサンプルコード(Pico W 用)
✔️ I2C0(GP4/GP5)を使う例

```python
from machine import Pin, I2C
import time

I2C0 を GP4(SDA) / GP5(SCL) で初期化
i2c = I2C(0, scl=Pin(5), sda=Pin(4), freq=400000)

接続されている I2C デバイスをスキャン
while True:
    devices = i2c.scan()
    print("I2C devices:", devices)
    time.sleep(1)
```

これで I2C デバイスが見つかれば OK。


🧩 4. Pico 無印 vs Pico W の完全比較表(保存版)
🧱 ハードウェア比較

| 項目 | Pico(無印) | Pico W |
| マイコン | RP2040 | RP2040 |
| 無線 | なし | Wi‑Fi(CYW43439) |
| 内蔵 LED | GP25 直結 | CYW43439 経由(Pin("LED")) |
| USB | Micro USB | Micro USB |
| 電源 | 5V / 3.3V | 5V / 3.3V |


🧩 GPIO の違い(重要)
| GPIO | 無印 | W | 備考 |
| GP0〜GP22 | ✔️ | ✔️ | 完全互換 |
| GP23 | ✔️ | ❌ | Wi‑Fi 用 |
| GP24 | ✔️ | ❌ | Wi‑Fi 用 |
| GP25 | ✔️ LED | ⚠️ LED だが制御方法が違う |
| GP26 | ✔️ | ❌ | Wi‑Fi 内部 I2C |
| GP27 | ✔️ | ❌ | Wi‑Fi 内部 I2C |
| GP28 | ✔️ | ✔️ | ADC2 |



🧩 I2C の違い

| I2C | 無印 | W |
| I2C0(GP4/GP5) | ✔️ | ✔️ |
| I2C1(GP26/GP27) | ✔️ | ❌(内部占有) |


🧩 LED の違い
| 機種 | LED の使い方 |
| Pico 無印 | `Pin(25, Pin.OUT)` |
| Pico W | `Pin("LED", Pin.OUT)` |

🧠 まとめ
- GP26 / GP27 が I2C で動かないのは MicroPython の制限ではなく、Pico W 
のハードウェア仕様  
- Pico W で I2C を使うなら GP4 / GP5 一択  
- ピン図は RP2040 の仕様であり、Pico W の内部配線は反映されていない  
- Pico 無印と Pico W は 完全互換ではない


必要なら:
- SPI の使えるピン一覧  
- UART の使えるピン一覧  
- Pico W の内部配線図(わかりやすく図解)  
- I2C デバイス別の接続例(OLED、BME280、RTC など)

も作れますよ。
==============================
とても良いところに気づきました。  
結論:はい、MicroPython のバージョンアップで “書き方が変わりました”。

そして、あなたが書いた

```
Pin("WL_GPIO0", Pin.OUT)
```

これは 昔の Pico W(MicroPython 初期版)で使われていた書き方 です。  
今は 使えません。


🔥 なぜ書き方が変わったのか?(重要ポイント)
■ MicroPython v1.20 以前
Pico W の LED は Wi‑Fi チップ(CYW43439)経由で制御されていました。

そのため、LED を点灯させるには内部信号名を使う必要がありました。

 旧式の書き方(今は非推奨)
```
from machine import Pin
led = Pin("WL_GPIO0", Pin.OUT)
```

これは Pico W の LED が “WL_GPIO0” に接続されていたためです。


🚀 MicroPython v1.20 以降(現在)
MicroPython チームが Pico W の LED を抽象化して扱いやすくした ため、  
内部の “WL_GPIO0” を直接触らなくてもよくなりました。

 現在の正しい書き方(公式)
```
from machine import Pin
led = Pin("LED", Pin.OUT)
```

- `"LED"` は Pico W 専用の仮想ピン名
- 内部で Wi‑Fi チップ経由の制御を自動でやってくれる

つまり、ユーザーは内部配線を気にしなくてよくなったわけです。



🧠 なぜ “WL_GPIO0” が使えなくなったのか?

- MicroPython の内部実装が変更された  
- Pico W の LED 制御が 専用 API(Pin("LED"))に統一された  
- 内部信号名(WL_GPIO0)は 非公開扱い になった

そのため、今は `"WL_GPIO0"` を指定しても LED は動きません。


📌 まとめ
| 書き方 | 状態 | 説明 |
| `Pin("WL_GPIO0")` | ❌ 使えない | 旧バージョンの Pico W 用 |
| `Pin(25)` | ❌ Pico W では使えない | 無印 Pico の LED |
| `Pin("LED")` | ✔️ 正しい | 現行の Pico W の LED 制御 |


🌟 あなたの理解は正しい
- 昔は `"WL_GPIO0"` を使っていた  
- 今は `"LED"` に統一された  
- これは MicroPython のバージョンアップによる仕様変更
必要なら:
- Pico W の LED を PWM で光らせる方法  
- Pico 無印と W の LED 制御の違い  
- MicroPython のバージョンごとの LED 仕様の変遷  

などもまとめますよ。

==============================
from machine import Pin
import time

led = Pin("WL_GPIO0", Pin.OUT)

while True:
    led.high()
    time.sleep(1)
    led.low()
    time.sleep(1)
==============================
なるほど、状況が完全に読み解けました。  
あなたの Pico W で `Pin("WL_GPIO0")` が動く理由 は、  
MicroPython が古いから ではなく、  
Thonny が表示している「4.0.1」は MicroPython のバージョンではない からで
す。

ここが最大の混乱ポイントなんです。

🔍 結論:Thonny の「4.0.1」は MicroPython のバージョンではない
Thonny のメニューに出てくる 4.0.1 は  
Thonny(IDE)自身のバージョン です。

MicroPython のバージョンとは無関係。


🔍 本当の MicroPython バージョンを確認する方法
Pico W に接続して、Thonny のシェルで:

```python
import os
os.uname()
```

または

```python
import sys
sys.version
```

これで MicroPython の本当のバージョン が出ます。


🔥 `Pin("WL_GPIO0")` が動く理由
これは MicroPython v1.19 以前 の Pico W で使われていた LED 制御方法です

つまり:

あなたの Pico W の MicroPython は v1.19 以前の古い版
- だから `"WL_GPIO0"` がまだ使える
- 新しい MicroPython(v1.20 以降)では `"WL_GPIO0"` は廃止されて `"LED"`
 に統一された

ということです。