【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)が出ます。
✅ 修正方法の例
もし次のように書いていた場合:
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)
これを次のように修正します:
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 件のコメント:
コメントを投稿