Raspberry Pi Pico W × DHT11で温湿度を可視化!MinivizでIoTプロトタイプ構築
Raspberry Pi Pico W と DHT11 を使って、温度・湿度データを取得し、Miniviz に送信して可視化する手順をまとめます。
IoT のプロトタイプや電子工作の入門用途におすすめの構成です。
目次
Minivizとは?
IoT のデータや画像を簡単に保存・可視化・通知できるサービスです。
プロトタイプ(PoC)や電子工作、教育用途に向いています。
Miniviz - IoT Data Visualization & Graphing Platform
やること
Raspberry Pi Pico W と温湿度センサー DHT11 を使って、温度・湿度データを取得し、Miniviz 上で可視化します。
用意するもの
- Raspberry Pi Pico W(以下、ラズパイPico)
- DHT11(温度・湿度センサー)
- ブレッドボードとジャンパーワイヤー
- MicroPython 実行環境
- Miniviz のプロジェクト ID とトークン
ラズパイPicoとDHT11を配線
写真のように配線します。

ピン配置
| Pico のピン番号 | 接続先 | 役割 |
|---|---|---|
36 | VCC | 電源 |
20 (GP15) | DATA | 信号 |
38 | GND | 接地 |

データを取得する
VS Code / MicroPython を導入
今回は VS Code の MicroPython 拡張機能を使います。
- 拡張機能
MicroPicoを導入
Pico との通信やコード転送を一括管理できるようになります。 - コマンドパレット(
Ctrl+Shift+P)からMicroPico: Configure projectを実行
Pico 用の補完機能や接続設定がフォルダ内に作成されます。


Picoファームウェアのインストール
- 公式サイトから、自分のボード(Pico または Pico W)に合った
UF2ファイルをダウンロードします。 - 本体の
BOOTSELボタンを押しながら USB 接続します。 - Pico が外付けドライブとして認識されたら、
UF2ファイルをコピーします。 - 自動で再起動したら準備完了です。
MicroPython on Raspberry Pi Pico
データ取得スクリプト
環境構築が完了したら、まずはサンプルスクリプトを動かしてみましょう。
データ取得時に LED が点滅します。
from machine import Pin
import dht
import time
led = Pin("LED", Pin.OUT)
# DHT11 connected to GPIO 15
sensor = dht.DHT11(Pin(15))
print("Starting measurements...")
while True:
try:
# Trigger measurement
sensor.measure()
# Get values
temperature = sensor.temperature()
humidity = sensor.humidity()
print(f"Temperature: {temperature}°C, Humidity: {humidity}%")
# Blink onboard LED on success
led.on()
time.sleep(0.1)
led.off()
except OSError as e:
print("Failed to read sensor. Check wiring!")
# Wait for 2 seconds (DHT11 requirement)
time.sleep(2)
実行すると温度・湿度が取得できます。

Minivizに送信する
プロジェクトIDとトークンを取得
先ほどのコードに Wi-Fi 接続、時刻同期、HTTP リクエストを追加して、Miniviz に送信します。
まずはプロジェクトを作成し、プロジェクト ID とトークンを取得してください。
詳細はクイックリファレンスを参照してください。

Minivizに送信するソースコード
Wi-Fi 情報、プロジェクト ID、トークンは自分の環境に合わせて書き換えてください。
import network
import urequests
import time
import machine
import dht
import ntptime
# ================= Configuration =================
WIFI_SSID = "YOUR_WIFI_SSID" # Wi-Fi SSID
WIFI_PASS = "YOUR_WIFI_PASSWORD" # Wi-Fi Password
PROJECT_ID = "YOUR_PROJECT_ID" # Miniviz Project ID
TOKEN = "YOUR_TOKEN" # Miniviz API Token
LABEL_KEY = "PicoW_DHT" # Label for the device
SEND_INTERVAL = 120 # Interval between sends (seconds)
# =================================================
# Hardware Setup
dht_sensor = dht.DHT11(machine.Pin(15))
try:
led = machine.Pin("LED", machine.Pin.OUT)
except ValueError:
led = machine.Pin(25, machine.Pin.OUT)
def connect_wifi():
"""Connect to Wi-Fi and sync time via NTP"""
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(WIFI_SSID, WIFI_PASS)
print(f"Connecting to {WIFI_SSID}...", end="")
while not wlan.isconnected():
led.toggle()
time.sleep(0.5)
print("\n✅ Wi-Fi Connected!")
led.off()
# Attempt time synchronization using NTP
ntptime.host = "ntp.nict.jp"
try:
print("Syncing time via NTP...", end="")
ntptime.settime()
print(" Done!")
except:
print(" Failed (Using internal clock)")
def send_data_to_miniviz(temp, hum):
"""Send measurement data to Miniviz and log details"""
url = f"https://api.miniviz.net/api/project/{PROJECT_ID}?token={TOKEN}"
# Calculate UNIX timestamp in milliseconds
# Assuming time.time() is synced to 1970 Epoch
unix_time_sec = time.time()
ts_ms = int(unix_time_sec * 1000)
# Create Miniviz-compliant payload
payload = {
"timestamp": ts_ms,
"label_key": LABEL_KEY,
"payload": {
"temperature": temp,
"humidity": hum
}
}
print("\n" + "=" * 40)
print("📡 Data Packet Prepared")
print(f" [Timestamp] {ts_ms}")
print(f" [Label] {LABEL_KEY}")
print(f" [Metrics] Temp: {temp}°C, Humidity: {hum}%")
print("-" * 40)
try:
print("🚀 Sending request to Miniviz...", end="")
res = urequests.post(url, json=payload)
if res.status_code in [200, 201]:
print(f"\n✅ Success! (Status: {res.status_code})")
print(f" Response: {res.text}")
# Blink LED twice on successful transmission
for _ in range(2):
led.on()
time.sleep(0.1)
led.off()
time.sleep(0.1)
else:
print(f"\n❌ Server Error (Status: {res.status_code})")
print(f" Reason: {res.text}")
res.close()
except Exception as e:
print(f"\n⚠️ Network/Connection Error: {e}")
print("=" * 40)
def main():
connect_wifi()
print("\nStarting Telemetry (Ctrl+C to stop)")
while True:
try:
# Read from sensor
dht_sensor.measure()
t = dht_sensor.temperature()
h = dht_sensor.humidity()
# Send data
send_data_to_miniviz(t, h)
except OSError as e:
print(f"❌ Sensor Read Error: {e}")
# Wait for the next interval
time.sleep(SEND_INTERVAL)
if __name__ == "__main__":
main()
実行すると、送信ログが表示されます。

Miniviz上で確認する
Database メニューから送信したデータを確認できます。
反映まで 30 秒ほどかかる場合があります。

グラフ化する
Viz メニューからグラフを作成できます。
今回はラインチャートを選択します。


まとめ
今回はラズパイPicoを使って、温度・湿度の可視化を簡単に行いました。
Miniviz ではこのほかにもさまざまなセンサーデータや画像を扱えるので、ぜひ試してみてください。
モニター募集
Pro プランのモニターを募集しています。
個人・学生・企業など、使ってフィードバックをいただける方に一定期間 Pro プランを提供します。詳細は問い合わせや DM でお願いします。
通常 2 週間の無料トライアルもあります。画像も扱える Pro プランもぜひご利用ください。
Miniviz - IoT Data Visualization & Graphing Platform
タグ
#IT #個人開発 #IoT #電子工作 #RaspberryPi #ラズパイ