第6回:Webサーバーを立ててみよう

つぶやき

内容

  • Pico Wで簡単なWebサーバーを構築
    → 自分のパソコンやスマホからアクセスできる小さなWebページを表示
  • ブラウザからLED制御
    → Webページ上のボタンを押すと、Pico W の LED を ON/OFF できる
  • HTMLとMicroPythonの連携
    → Pico W でWebページ(HTML)を返し、その内容に応じてGPIOを操作する

ポイント

  • WebとIoTの融合
    Pico W を使えば、IoT機器を「Webブラウザ」から操作できる。
    → 専用アプリ不要、スマホやPCからアクセス可能。
  • HTTP GET/POST の基本理解
    • GET: URLのパラメータを利用して命令を送る(例: ...?led=on
    • POST: フォームデータを送る方法(より安全で実用的)

サンプルコード(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

SSID = "your_wifi_name"
PASSWORD = "your_wifi_password"

学びのステップ

  1. Webサーバー起動確認
    • シリアルモニタに出る IP アドレスをブラウザで開く
    • Pico が返すWebページが表示されれば成功
  2. LED制御
    • 「ON」「OFF」ボタンを押して LED の状態が変わるか確認
  3. HTTP理解
    • URLの ...?led=onGETパラメータになっている
    • 実際のIoTではセンサー値送信に POST がよく使われる

コメント