第6回:Raspberry Pi Pico WでWebサーバーを立ててみよう

つぶやき

何をする?:Pico WでWebサーバー構築の目的

今回は、Raspberry Pi Pico W を使って「手元のマイコンがWebブラウザ上から制御・表示できるサーバーになる」ことを体験することです。具体的には:

  • 自分のPCやスマホからローカルネットワーク経由でPico WがホストするWebページを開ける。
  • Webページ上のボタンを押すと、Pico W の LED が ON/OFF できる。
  • HTMLとMicroPythonの連携による、簡易的なIoT制御インターフェースを理解する。

これにより「IoT機器=ネットワーク接続+Webインターフェース」が身近になります。
例えば家庭の照明制御、工場のライン監視、スマホからボタン操作による遠隔インタラクションなど、応用範囲は広いです。


Webサーバー化のポイント:IoT×Webの融合

WebとIoTの融合

Pico W がWi-Fi機能を持つことで、従来のマイコン制御(ローカルIO)だけでなく、Webブラウザ経由での操作・表示が可能になります。つまり、専用アプリを作ることなく、スマホ・PCのブラウザから直接アクセスできるインターフェースが実現できます。
この「アプリ不要」「ブラウザ汎用利用」という利便性が、IoT化・スマート家電・スマートファクトリー化の鍵となります。

HTTP GET/POST の基本理解

  • GET:URLパラメータ(例:/?led=on)を使って命令を送る。簡易実装には十分。
  • POST:フォームデータやJSON送信など、より実用的・安全なデータ送信が可能。
    例えば、IoT機器の設定変更やセンサー値送信にはPOSTを使ったほうが望ましいです。
    実例として、公式 Raspberry Pi Pico W Webサーバー構築チュートリアルでも「REST-ish WebサーバーでLED制御」例を紹介しています。

サーバー構築における技術要素

  • ネットワーク接続:Pico W を Wi-Fi に接続。IPアドレスの確認。
  • ソケットサーバー/HTTP応答:MicroPython の socket を使って簡易 HTTP サーバーを実装。
  • HTMLページの返送:ブラウザにボタン付きWebページを返し、ユーザ操作を受け付け。
  • GPIO制御:Webリクエストを受けて、Pico W のLEDやその他デバイスを制御。

サンプルコード(MicroPython)詳細解説

以下は、Pico W にアップロードして動く基本的なWebサーバーコードの例です。

import network
import socket
import machine
import time
import secrets  # Wi-Fi情報を保存したファイル

# LED ピン(Pico W の内蔵 LED)
led = machine.Pin("LED", machine.Pin.OUT)

# Wi-Fi 接続
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(secrets.SSID, secrets.PASSWORD)

print("Wi-Fi 接続中...")
while not wlan.isconnected():
    time.sleep(1)

print("接続成功:", wlan.ifconfig())

# HTML ページ
html = """<!DOCTYPE html>
<html>
<head><title>Pico LED Control</title></head>
<body>
<h1>Pico W Web Server</h1>
<p><a href="/?led=on"><button>LED ON</button></a></p>
<p><a href="/?led=off"><button>LED OFF</button></a></p>
</body>
</html>
"""

# ソケットサーバー開始
addr = socket.getaddrinfo('0.0.0.0', 80)[0][-1]
s = socket.socket()
s.bind(addr)
s.listen(1)

print('Web server running...')

while True:
    cl, addr = s.accept()
    print('Client connected from', addr)
    request = cl.recv(1024).decode()
    print("Request:", request)

    # LED 制御
    if '/?led=on' in request:
        led.on()
    if '/?led=off' in request:
        led.off()

    # HTML を返す
    cl.send('HTTP/1.0 200 OK\r\nContent-type: text/html\r\n\r\n')
    cl.send(html)
    cl.close()

secrets.py を作る手順は、第5回:Raspberry Pi Pico WでWi-Fi接続で確認してください。

# secrets.py

SSID = "your_wifi_name"
PASSWORD = "your_wifi_password"

Pico W がワイヤレス ネットワークに接続すると、ボードの IP アドレスが Thonny シェル ウィンドウ内の REPL に表示されます。そのIP アドレスにアクセスすると次の表示が表れます。


拡張アイデア

アクセスポイント(AP)モードでのWebサーバー公開

Pico W には STA モードだけでなく AP モード(Pico W が自分自身をWi-Fiアクセスポイントにする)も使えます。これによりローカルルーターを介さず、直接スマホやPCがPico Wに接続してWeb操作できる環境が作れます。
運用例として、フィールド機器(Wi-Fiルーターがない現場)で “機器自身でアクセスポイントを提供” → スマホ接続 → 制御という構築が可能です。

将来展望:クラウド連携

Webサーバーの基盤ができたら、次のステップは

  • センサー値(温度、湿度、加速度)をWebブラウザに表示
  • データをクラウド(例:InfluxDB+Grafana、Google Sheets)に送信
  • モバイル通知(LINE、Pushアプリ)と連携
    という流れがあります。
    このように、小さなWebサーバーがIoTシステムの「入口/UI」として機能します。

運用・セキュリティ注意点

  • Webサーバーを立てる際、ネットワークアクセス範囲に留意しましょう。家庭LAN内だけに限定するか、ポートフォワーディングでインターネット公開するかでセキュリティレベルが大きく異なります。
  • Pico W はリソース(RAM・Flash)が限られているため、大量のクライアント同時接続、画像・動画配信などには向きません。軽量なWebページ設計が望ましいです。
  • APモードを使用する際は、セキュリティ設定(パスワード保護など)に注意。未設定では誰でも接続できるホットスポットとなる可能性があります。

チェックリスト

ステップ内容
① Webサーバー起動確認ブラウザでPico WのIPを開き、Webページが表示されるか確認
② LED制御確認Webページ上の ON/OFFボタンでLEDが切り替わるかチェック
③ ネットワーク理解IPアドレス・ポート・ルート・LANアクセス範囲を理解
④ 拡張設計GET → POST・センサー表示・クラウド送信などを検討
⑤ 運用/セキュリティ設計接続条件・アクセス制御・例外処理・機器再起動対策を盛り込む

まとめ

今回の記事では、Raspberry Pi Pico W を使って「Webサーバーを立て、ブラウザからLEDを制御する」という基本プロジェクトを、実装・解説・拡張・運用の観点から幅広く扱いました。
WebとIoTをつなげるこの種のプロジェクトは、初心者でも取り組みやすく、また学びの幅も広いものです。ぜひこの機会に「ブラウザから操作できるマイコン」という世界を体験し、次はセンサー表示・クラウド連携・スマホ通知といった応用にも挑戦してみてください。


参考URL

How to run a webserver on Raspberry Pi Pico W - Raspberry Pi
You can now run a webserver on your Raspberry Pi Pico W to allow you to control things remotely. Game changer.
Raspberry Pi Pico: Web Server (MicroPython) | Random Nerd Tutorials
Create a basic Raspberry Pi Pico local web server to control outputs and fetch data. You'll build a web page to control ...
Raspberry Pi Pico W: Asynchronous Web Server (MicroPython) | Random Nerd Tutorials
Build an asynchronous local web server with the Raspberry Pi Pico W programmed with MicroPython using the asyncio module...
https://forum.micropython.org/viewtopic.php?t=12652&utm_source=chatgpt.com

コメント