第10章 Wi-FiとIPアドレス
🔒 研修参加者向け
この章は研修参加者向けです
この章では、Pico WをWi-Fiへ接続し、DHCPで割り当てられたIPアドレスとネットワーク設定を確認します。
研修参加者の方は、講師から案内されたパスワードを入力してください。
この教材を利用した研修については、お問い合わせください。
この章の目的
Section titled “この章の目的”この章では、Pico Wを既存のWi-Fiへ接続し、 ネットワークから割り当てられたIPアドレスを確認します。
第9章までは、センサーの値やLEDの状態を USBで接続したPCのShellから確認していました。 ここからは、Pico Wをネットワークへ参加させ、 離れた機器との通信へ進みます。
Pico W ↓ Wi-Fiへ接続アクセスポイント ↓ ネットワーク設定を取得IPアドレスをShellへ表示この章では、Webサーバーはまだ動かしません。 次の第11章で使用する接続情報を準備し、 Pico W、アクセスポイント、PCの関係を整理します。
この章でできるようになること
Section titled “この章でできるようになること”- Wi-Fiのアクセスポイントとステーションの役割を説明できる
- SSIDとパスワードを使ってPico WをWi-Fiへ接続できる
- DHCPでネットワーク設定が割り当てられることを説明できる
- IPアドレス、サブネットマスク、ゲートウェイ、DNSサーバーを区別できる
- 接続処理にタイムアウトが必要な理由を説明できる
- Shellに表示されたIPアドレスと完全なURLを確認できる
- 次章でPCとPico Wが同じネットワークに必要な理由を説明できる
使用するもの
Section titled “使用するもの”| 分類 | 使用するもの | 数量 |
|---|---|---|
| 制御用ボード | MicroPython導入済みのRaspberry Pi Pico WまたはPico WH | 1 |
| PC接続 | データ通信対応Micro USBケーブル | 1 |
| 開発環境 | Thonnyを使用できるWindows PC | 1 |
| ネットワーク | 講師から指定された2.4GHzのWi-Fi | 1 |
| 接続情報 | 研修用SSIDとパスワード | 1組 |
この章では、新しい電子部品やGPIOを使用しません。 第9章までの回路は配線したままでも構いませんが、 この章のプログラムではセンサーや外付けLEDを使用しません。
接続情報を扱うときの注意
Section titled “接続情報を扱うときの注意”- 教材の例示コードには、実在するSSIDやパスワードを記載しません
- 講師から指定された研修用の接続情報だけを使用します
- 接続情報を入力した画面を、撮影、画面共有、提出しないようにします
- 接続情報を入力したファイルを、Gitや共有フォルダーへ保存しません
- 研修終了後は、接続情報を入力したファイルを削除または置換します
- Pico Wへ
main.pyとして保存せず、この章ではPC側から実行します
SSIDはネットワークを識別する名前です。 パスワードと同じ秘密情報とは限りませんが、 研修会場の構成情報として不用意に公開しないようにします。
10-1 Pico WがWi-Fiへ参加する流れ
Section titled “10-1 Pico WがWi-Fiへ参加する流れ”Pico Wには、2.4GHz帯の無線LAN機能があります。 この章では、Pico Wをステーションとして動作させ、 既存のアクセスポイントへ接続します。
| 用語 | この章での意味 |
|---|---|
| アクセスポイント | PCやPico WをWi-Fiへ接続する機器 |
| ステーション | アクセスポイントへ接続する側の機器 |
| SSID | 接続先のWi-Fiを識別する名前 |
| DHCP | 機器へIPアドレスなどを自動で割り当てる仕組み |
| IPアドレス | ネットワーク上で通信相手を識別する番号 |
図10-1 Wi-Fi接続とIPアドレス取得の流れ
Pico WとPCは、それぞれアクセスポイントへ接続します。 次の第11章でPCからPico Wへアクセスするには、 両方の機器が互いに通信できる同じネットワークへ 接続されている必要があります。
研修会場やゲスト用Wi-Fiでは、 接続した機器どうしの通信を禁止している場合があります。 インターネットへ接続できても、 PCからPico Wへ接続できるとは限りません。
10-2 IPアドレスとネットワーク設定
Section titled “10-2 IPアドレスとネットワーク設定”Wi-Fiへ接続すると、一般的にはDHCPによって 次の4つの設定がPico Wへ割り当てられます。
| 設定 | 役割 | 表示例 |
|---|---|---|
| IPアドレス | ネットワーク上のPico Wを識別する | 192.168.10.42 |
| サブネットマスク | 同じネットワークの範囲を判断する | 255.255.255.0 |
| ゲートウェイ | 別のネットワークへ出るときの送信先 | 192.168.10.1 |
| DNSサーバー | ホスト名をIPアドレスへ変換する | 192.168.10.1 |
表の値は説明用の例です。 研修当日に割り当てられる値とは異なります。
このうち、第11章でPCのブラウザーへ入力するのは Pico WのIPアドレスです。 IPアドレスは再接続によって変わる場合があるため、 教材のコードへ固定値として書き込みません。
10-3 研修用Wi-Fiの条件を確認する
Section titled “10-3 研修用Wi-Fiの条件を確認する”接続を始める前に、講師の案内と次の項目を確認します。
| 確認項目 | この章で必要な状態 |
|---|---|
| 周波数帯 | Pico Wが接続できる2.4GHz帯を使用 |
| 接続方法 | SSIDとパスワードで接続できる |
| Web認証 | ブラウザーで追加認証を求めない |
| IPアドレス | DHCPで自動的に割り当てられる |
| 端末間通信 | 第11章ではPCとPico Wの間の通信を許可 |
| PCの接続先 | Pico Wと互いに通信できるネットワーク |
ホテル、店舗、公共施設などのWi-Fiには、 接続後にブラウザーで同意や認証を行うものがあります。 この章の単純な接続プログラムでは、その画面を操作できません。
企業向け認証や端末登録を必要とするネットワークも、 同じプログラムで接続できるとは限りません。 研修では、事前確認済みのネットワークを使用します。
10-4 Wi-Fiへ接続する
Section titled “10-4 Wi-Fiへ接続する”次のプログラムをch10_01_wifi_connect.pyとして
PC側へ保存します。
実行前に、WIFI_SSIDとWIFI_PASSWORDの文字列を
講師から指定された値へ置き換えます。
引用符は残し、その内側だけを変更します。
import networkimport time
WIFI_SSID = "YOUR_SSID"WIFI_PASSWORD = "YOUR_PASSWORD"CONNECT_TIMEOUT_MS = 20000
def connect_wifi(): wlan = network.WLAN(network.WLAN.IF_STA)
wlan.active(False) time.sleep(1) wlan.active(True)
print("Wi-Fiへ接続します...") wlan.connect(WIFI_SSID, WIFI_PASSWORD)
start_time = time.ticks_ms()
while not wlan.isconnected(): status = wlan.status()
if status in ( network.STAT_WRONG_PASSWORD, network.STAT_NO_AP_FOUND, network.STAT_CONNECT_FAIL, ): wlan.active(False) raise RuntimeError( "Wi-Fi接続に失敗しました。status={}".format(status) )
elapsed = time.ticks_diff(time.ticks_ms(), start_time) if elapsed >= CONNECT_TIMEOUT_MS: wlan.active(False) raise RuntimeError( "Wi-Fi接続がタイムアウトしました。status={}".format(status) )
print("接続待ち... status={}".format(status)) time.sleep(1)
return wlan
try: wlan = connect_wifi() ip_address, subnet_mask, gateway, dns_server = wlan.ifconfig()
print("Wi-Fi接続成功") print("IPアドレス:", ip_address) print("サブネットマスク:", subnet_mask) print("ゲートウェイ:", gateway) print("DNSサーバー:", dns_server) print("次章で使うURL: http://{}/".format(ip_address))except Exception as error: print(error)実行中は、Shellに接続待ちの状態が表示されます。 接続に成功すると、ネットワーク設定と 次章で使用するURLが表示されます。
Wi-Fiへ接続します...接続待ち... status=1Wi-Fi接続成功IPアドレス: 192.168.10.42サブネットマスク: 255.255.255.0ゲートウェイ: 192.168.10.1DNSサーバー: 192.168.10.1次章で使うURL: http://192.168.10.42/表示例のIPアドレスやstatusは、
実際のネットワークと接続状態によって異なります。
10-5 コードの重要部分
Section titled “10-5 コードの重要部分”ステーション用の無線インターフェース
Section titled “ステーション用の無線インターフェース”wlan = network.WLAN(network.WLAN.IF_STA)IF_STAは、Pico Wを既存のアクセスポイントへ接続する
ステーションとして使用する指定です。
この章では、Pico W自身をアクセスポイントにはしません。 Pico WをWebサーバーとして動かす第11章でも、 接続方法は引き続きステーションです。
無線機能を有効にして接続を開始する
Section titled “無線機能を有効にして接続を開始する”wlan.active(True)wlan.connect(WIFI_SSID, WIFI_PASSWORD)active(True)で無線インターフェースを有効にし、
connect()でSSIDとパスワードを指定して接続を開始します。
connect()を実行した直後に、
IPアドレスが利用できるとは限りません。
そのため、接続完了を確認してから次の処理へ進みます。
接続完了を確認する
Section titled “接続完了を確認する”while not wlan.isconnected():ステーションモードのisconnected()は、
アクセスポイントへ接続し、有効なIPアドレスを取得すると
Trueになります。
接続が終わるまで待つ処理はポーリングです。 第6章や第9章と同じように、 状態確認と待機を繰り返しています。
タイムアウトで待ち続けない
Section titled “タイムアウトで待ち続けない”elapsed = time.ticks_diff(time.ticks_ms(), start_time)if elapsed >= CONNECT_TIMEOUT_MS:SSIDやパスワードが違う場合や、 アクセスポイントが見つからない場合に、 接続を無期限に待ち続けないようにします。
この章では20秒を超えた場合に無線インターフェースを停止し、 接続できなかったことを表示します。 会場の通信状況によっては、 講師の指示で待ち時間を調整します。
ネットワーク設定を取り出す
Section titled “ネットワーク設定を取り出す”ip_address, subnet_mask, gateway, dns_server = wlan.ifconfig()ifconfig()は、現在のIPv4ネットワーク設定を
4つの値として返します。
変数へ順番に代入することで、
各値の役割を確認しやすくしています。
次章で使うURLを表示する
Section titled “次章で使うURLを表示する”print("次章で使うURL: http://{}/".format(ip_address))IPアドレスの前にhttp://を付け、
ブラウザーへ入力する形で表示します。
この章ではWebサーバーを動かしていないため、 このURLを開いてもページは表示されません。 第11章でWebサーバーを実行してから使用します。
- 実在するSSIDとパスワードを教材や共有ファイルへ残していない
- Pico Wをステーションとして接続している
- Shellへ
Wi-Fi接続成功と表示される - IPアドレスを確認できる
- サブネットマスク、ゲートウェイ、DNSサーバーを確認できる
- 完全なURLが表示される
- DHCPによってIPアドレスが割り当てられることを説明できる
- 接続処理がタイムアウトすることを確認できる
- 次章ではPCとPico Wの端末間通信が必要だと説明できる
よくある問題と確認方法
Section titled “よくある問題と確認方法”| 状況 | 主な確認箇所 |
|---|---|
networkを使用できない | Pico W用MicroPythonを導入しているか、Thonnyの接続先 |
| 接続失敗またはタイムアウト | SSID、パスワード、2.4GHz帯、電波状態、アクセスポイントの稼働 |
| Web認証画面が必要 | 研修用の事前確認済みWi-Fiへ切り替える |
| IPアドレスが表示されない | DHCPが有効か、接続待ちが完了しているか |
| 再実行するとIPアドレスが変わった | DHCPでは再接続時に別の値が割り当てられる場合がある |
| Wi-Fiには接続できるがインターネットへ出られない | ゲートウェイ、DNS、会場ネットワークの利用条件 |
| 次章でPCから接続できない | PCとPico Wの接続先、端末間通信の禁止、入力したIPアドレス |
| 接続情報を画面共有してしまった | 共有を停止し、実際の認証情報なら講師へ報告して変更する |
エラーが発生したときは、SSIDやパスワードを 大きな画面へ表示したまま確認しないようにします。 講師が個別に確認するか、 接続情報を再入力してから実行します。
- Pico Wは、ステーションとして既存のWi-Fiへ接続できます
- SSIDはWi-Fiを識別する名前です
- DHCPは、IPアドレスなどのネットワーク設定を自動で割り当てます
- IPアドレスは、ネットワーク上のPico Wを識別するために使用します
- IPアドレスは再接続によって変わる場合があるため、実行時に確認します
network.WLAN()で無線インターフェースを準備しますconnect()で接続を開始し、isconnected()で完了を確認します- 接続待ちにはタイムアウトを設け、失敗を区別します
ifconfig()でIPアドレス、サブネットマスク、ゲートウェイ、DNSサーバーを確認できます- 次章では、表示されたURLを使ってPCのブラウザーからPico Wへ接続します
- MicroPython公式「class WLAN – control built-in WiFi interfaces」(v1.26.0)
- MicroPython公式「Quick reference for the RP2」(v1.26.0)
- Raspberry Pi公式「Pico microcontroller boards」
- Raspberry Pi公式「Connecting to the Internet with Raspberry Pi Pico W-series」(PDF)
次の第11章 Pico WのWebサーバーでは、 Pico WをWebサーバーとして動かします。 PCのブラウザーから、この章で確認したIPアドレスへ接続し、 画面上のボタンでLEDを操作します。