Raspberry Pi Pico Wで簡単IoT:温度を3分ごとにWordPressへ自動送信

つぶやき

Pico Wの温度をWebサーバ(WordPress)に送信して表示させた結果です。

現在のPico温度: 36.4 ℃(2025-08-17T02:44)

イントロダクション:IoT初心者でもできる温度送信システム

Raspberry Pi Pico Wは安価・小型・Wi-Fi搭載のマイコンで、簡単なIoTプロジェクトに最適です。この記事では、Pico Wの内蔵温度センサーで測った温度を3分ごとにWordPressサイトへ自動送信する方法を解説。Webサーバーに環境データを記録する入り口が学べます。


1. システム全体の仕組み

  • Pico Wが内蔵温度を測定 → HTTPリクエストでデータ送信
  • WordPressサイトで受信・表示
  • 通信は「GETパラメータ+セキュアトークン付きURL」
  • 3分ごとの定期送信

2. 使用する技術と準備

  • ハードウェア:Raspberry Pi Pico W(内蔵温度センサー)
  • 言語/ライブラリ:MicroPython/urequests, ntptime, network, machine
  • Webサーバー:WordPress(独自ドメインまたはSSL対応環境)
  • トークン認証:GETパラメータでセキュリティを確保

3. コード解説(Pico W側)

Pico Wの内蔵温度センサで取得した温度をWebサーバー(WordPress等)に3分ごとに送信します。

import network
import urequests
import machine
import time
import ntptime

# ====== Wi-Fi設定 ======
SSID = "あなたのWi-Fi SSID"
PASSWORD = "あなたのWi-Fiパスワード"

# ====== 送信先URL(温度 + 日時付き)& 認証 ======
POST_URL = "https://yourdomain.com/?pico_temp={}&datetime={}&token=your_secure_token"

# ====== 温度を取得 ======
def read_temp():
    sensor_temp = machine.ADC(4)
    conversion_factor = 3.3 / 65535
    reading = sensor_temp.read_u16() * conversion_factor
    temperature = 27 - (reading - 0.706) / 0.001721
    return round(temperature, 1)

# ====== 時刻同期(NTP) ======
def sync_time():
    try:
        ntptime.settime()
        print("時刻同期成功")
    except:
        print("時刻同期失敗")

# ====== 現在の日時を文字列で取得(UTC→JST補正) ======
def get_datetime():
    t = time.localtime(time.time() + 9 * 3600)  # JST = UTC+9
    return "{:04}-{:02}-{:02}T{:02}:{:02}".format(t[0], t[1], t[2], t[3], t[4])

# ====== Wi-Fi接続 ======
def connect_wifi():
    wlan = network.WLAN(network.STA_IF)
    wlan.active(True)
    wlan.connect(SSID, PASSWORD)
    for _ in range(10):
        if wlan.isconnected():
            print("接続成功:", wlan.ifconfig())
            return True
        time.sleep(1)
    print("Wi-Fi接続失敗")
    return False

# ====== メインループ ======
def main():
    if not connect_wifi():
        return
    sync_time()

    while True:
        temp = read_temp()
        dt = get_datetime()
        url = POST_URL.format(temp, dt)
        print(f"[{dt}] 送信: {url}")
        try:
            res = urequests.get(url)
            print("応答:", res.text)
            res.close()
        except Exception as e:
            print("送信失敗:", e)
        time.sleep(180)  # 3分ごと

main()

4. WordPress側の受信処理(※プラグイン設定)

WordPressでは、受信した pico_tempdatetime を受け取って、

  • 投稿ページに表示する
  • カスタムフィールドに保存してグラフ化する

といった処理に応用できます。

※専用プラグイン()

<?php
/*
Plugin Name: Pico Temperature Receiver
Description: Raspberry Pi Pico W から送られた温度を受信し表示するプラグイン
Version: 1.0
Author: Nitta Takanori
*/

add_action('init', function () {
    if (isset($_GET['pico_temp'], $_GET['token']) && $_GET['token'] === '1017') {
        $temp = floatval($_GET['pico_temp']);
        update_option('pico_current_temp', $temp);

        if (isset($_GET['datetime'])) {
            update_option('pico_temp_time', sanitize_text_field($_GET['datetime']));
        }

        echo 'OK';
        exit;
    }
});

add_shortcode('pico_temp', function () {
    $temp = get_option('pico_current_temp', 'データ未取得');
    $time = get_option('pico_temp_time', '時刻不明');
    return "現在のPico温度: " . esc_html($temp) . " ℃(" . esc_html($time) . ")";
});

5. WordPressプラグインのアップロード手順

1. プラグインフォルダをZIP圧縮
  • プラグインのフォルダ(例:my-plugin)を右クリック → 「送る」→「圧縮(ZIP形式)」 を選択。
  • ZIPファイルの中には プラグインフォルダが直下に入っている 必要があります。
    (例:my-plugin.zip の中に my-plugin/my-plugin.php が入っている状態)
2. WordPress管理画面にログイン
  • ブラウザで https://example.com/wp-admin/ にアクセスし、管理者アカウントでログインします。
3. プラグイン > 新規追加
  • 左サイドメニューの 「プラグイン」→「新規追加」 をクリック。
4. プラグインのアップロード
  • 画面上部の 「プラグインのアップロード」 をクリック。
5. ファイルを選択してアップロード
  • 「ファイルを選択」 ボタンを押して、作成した my-plugin.zip を選択。
  • 「今すぐインストール」 をクリック。
6. プラグインを有効化
  • インストール完了後、「プラグインを有効化」 をクリック。
  • これでプラグインが有効になります。

補足ポイント

  • プラグインフォルダ名とプラグインファイル内の Plugin Name が一致していると分かりやすいです。
  • ZIPファイル直下に my-plugin.php を置くのはNG(必ずフォルダの中に格納)。
  • 更新時は、同じ方法で新しいZIPをアップロードし、WordPressが自動で上書きしてくれます。

WordPressの投稿、固定ページ、ウィジェットなどどこでも”pico_temp” で表示可能。

6. 動作結果のイメージ

記事内に埋め込んだ画像例:

現在のPico温度: 31.3 ℃(2025-06-11T23:40)

このようにWordPress内でリアルタイムに表示される様子をサービスやブログの読者に伝えられます。

コメント