2025年11月5日水曜日

Thonny raspico (dht22-3pinOK,4pin....)

【Raspberry Pi Pico】DHT22センサで温度・湿度測定 | お得なpcライフ 成功

GitHub - danjperron/PicoDHT22: Micropython DHT22 class using PIO をもちいたが

PicoDHT22.pyでセットする必要あった 原文は以下だが文末に訂正を記す

from machine import Pin
from DHT22 import DHT22
import time

dht22 = DHT22(Pin(16,Pin.IN,Pin.PULL_UP))

while True:
    T, H = dht22.read()
    now = time.localtime()
    
    print(now)
    if T is None:
        print("T=----\xdfC H=----}%")
    else:
        print("T={:3.1f}\xdfC H={:3.1f}%".format(T,H))
    time.sleep_ms(500) が原文だが、DHT22はPicoDHT22に変更すべし

このDHT22はアマゾンで購入した3v3ピン仕様 4ピンがうまくいかん。。。




 thonny i2s in i2s_init ValueError: invalid ws (must be sck+1)

答え:このエラーは「ws ピン番号が sck ピン番号+1 でなければならない」という制約を守っていないために出ています。 MicroPython の I2S 実装では、ハードウェアの仕様上、Word Select (WS/LRCLK) ピンは Serial Clock (SCK/BCLK) ピンの直後の番号である必要があります。

🔎 詳細解説

  • I²S には最低3本の信号線があります

    • SCK (BCLK): ビットクロック

    • WS (LRCLK): 左右チャンネル切り替え信号

    • SD (DIN/DOUT): データ線

  • Pico W などの MicroPython 実装では、ピンの割り当てに制約があり、i2s.init() で指定する際に

    • ws = sck + 1 でなければ ValueError: invalid ws (must be sck+1) が出ます。

✅ 修正方法の例

もし次のように書いていた場合:

python
from machine import Pin, I2S

audio = I2S(0,
    sck=Pin(10),
    ws=Pin(12),   # ← NG: sck+1 ではない
    sd=Pin(9),
    mode=I2S.TX,
    bits=16,
    format=I2S.MONO,
    rate=44100,
    ibuf=20000)

これを次のように修正します:

python
audio = I2S(0,
    sck=Pin(10),
    ws=Pin(11),   # ← OK: sck+1
    sd=Pin(9),
    mode=I2S.TX,
    bits=16,
    format=I2S.MONO,
    rate=44100,
    ibuf=20000)

⚠️ 注意点

  • ピン配置はボード依存:Raspberry Pi Pico / Pico W では GPIO の割り当てが固定されているため、必ずデータシートや MicroPython の I2S ドキュメントを確認してください。

  • ws = sck+1 の制約はハードウェアの I²S ペリフェラル設計に由来するため、回避はできません。

  • ーーーーーーwavファイルを入れるには、下記で指定したファイルをD&D

0 件のコメント:

コメントを投稿