1. ネットワークへのアクセス

Raspberry Pi Pico Wは、Raspberry Pi Picoと非常に似ており、GPIO、microUSBポート、サイズが同じです。唯一の違いは、InfineonからのCYW43439 2.4-GHz Wi-Fiチップが追加されている点です。 それでは、どのようにして私たちのWi-Fiネットワークに接続するのか見てみましょう。

必要なコンポーネント

このプロジェクトでは、以下のコンポーネントが必要です。

こちらが一式を購入する便利なリンクです:

名前

このキットに含まれるアイテム

リンク

Kepler Kit

450+

Kepler Kit

以下のリンクから個別に購入することもできます。

SN

コンポーネント

個数

リンク

1

Raspberry Pi Pico W

1

BUY

2

Micro USB Cable

1

1. インターネットに接続

わずか5行のMicroPythonで、Raspberry Pi Pico Wはインターネットに接続されます。

これら5行のコードは、Shellから直接実行することができ、入力後に Enter キーを押します。 または、以下の方法に従って新しい .py ファイルを作成して実行します。

import network
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect("SSID","PASSWORD")
print(wlan.isconnected())
  1. Thonnyの 新規作成 ボタンをクリックして新しいスクリプトを作成し、上記のコードをコピーして貼り付け、 SSIDPASSWORD を自分のものに変更します。

    ../_images/access1.png
  2. スクリプトを実行するには、 現在のスクリプトを実行 ボタンをクリックするか、F5キーを押します。接続が成功すると、 true が表示されます。

    注釈

    Raspberry Pi Pico WがUSBケーブルでコンピュータに接続されていることを確認し、右下のコーナーをクリックしてMicroPython(Raspberry Pi Pico).COMXxxをインタープリタとして選択します。

    ../_images/access2.png

2. タイムアウト判断とIPの表示

ネットワーク状況が良くない場合を考慮して、コードにタイムアウトの判断を追加しましょう。

接続に成功すると、スクリプトをコピーして実行した後に、Pico WのIPが表示されます。

import network
import time

wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect("SSID","PASSWORD")

# Wait for connect or fail
wait = 10
while wait > 0:
    if wlan.status() < 0 or wlan.status() >= 3:
        break
    wait -= 1
    print('waiting for connection...')
    time.sleep(1)

# Handle connection error
if wlan.status() != 3:
    raise RuntimeError('wifi connection failed')
else:
    print('connected')
    print('IP: ', wlan.ifconfig()[0])
../_images/access3.png
  • wlan.status() 関数:無線接続の現在のステータスを返します、戻り値は以下の表に示されています。

    ステータス

    説明

    STAT_IDLE

    0

    接続も活動もなし

    STAT_CONNECTING

    1

    接続中

    STAT_WRONG_PASSWORD

    -3

    パスワードが不正なため失敗

    STAT_NO_AP_FOUND

    -2

    アクセスポイントが応答しないため失敗

    STAT_CONNECT_FAIL

    -1

    その他の問題による失敗

    STAT_GOT_IP

    3

    接続成功

  • wlan.ifconfig() 関数:IPアドレス、サブネットマスク、ゲートウェイ、DNSサーバーを取得します。このメソッドは、直接呼び出された場合、上記の情報を含む4タプルを返します。この場合、IPアドレスのみを表示します。

  • class WLAN – MicroPython Docs

3. secrets.py にプライベート情報を保存

Pico Wプロジェクトを共有する際、Wi-FiのパスワードやAPIキーを他人に見られたくないでしょう。 より高いセキュリティを確保するために、 secrets.py ファイルを作成してプライベート情報を保存できます。

  1. 以下のコードをThonnyで新しいスクリプトファイルにコピーします。 SSIDPASSWORD は自分のものに変更してください。

    secrets = {
    'ssid': 'SSID',
    'password': 'PASSWORD',
    }
    
  2. 「保存」ボタンをクリックするか、 Ctrl+S を押すと表示されるポップアップウィンドウでRaspberry Pi Picoを選択します。

    ../_images/access4.png
  3. 名前を secrets.py に設定します。

    ../_images/access5.png
  4. これで、このスクリプトはRaspberry Pi Pico Wで見ることができます。

    ../_images/access6.png
  5. 他のスクリプトで次のように呼び出すことができます。実行すると、Wi-Fi接続が成功することが確認できます。 secrets.py ファイルはライブラリとしてインポートされるので、情報の漏洩を心配する必要はありません。

    import network
    import time
    from secrets import secrets
    
    wlan = network.WLAN(network.STA_IF)
    wlan.active(True)
    wlan.connect(secrets['ssid'], secrets['password'])
    
    # Wait for connect or fail
    wait = 10
    while wait > 0:
        if wlan.status() < 0 or wlan.status() >= 3:
            break
        wait -= 1
        print('waiting for connection...')
        time.sleep(1)
    
    # Handle connection error
    if wlan.status() != 3:
        raise RuntimeError('wifi connection failed')
    else:
        print('connected')
        print('IP: ', wlan.ifconfig()[0])
    
    ../_images/access8.png

4. do_connect.py でインターネットに接続

次々と行うプロジェクトでネットワーク接続が必要となるため、新しい do_connect.py ファイルを作成して関連する関数をそこに記述し、再利用するのはいかがでしょうか。これにより、複雑なプロジェクトのコードを大幅にシンプルにすることができます。

  1. 以下のコードを新しいスクリプトファイルにコピーし、Raspberry Pi Picoに do_connect.py として保存します。

    import network
    import time
    from secrets import *
    
    def do_connect(ssid=secrets['ssid'],psk=secrets['password']):
        wlan = network.WLAN(network.STA_IF)
        wlan.active(True)
        wlan.connect(ssid, psk)
    
        # Wait for connect or fail
        wait = 10
        while wait > 0:
            if wlan.status() < 0 or wlan.status() >= 3:
                break
            wait -= 1
            print('waiting for connection...')
            time.sleep(1)
    
        # Handle connection error
        if wlan.status() != 3:
            raise RuntimeError('wifi connection failed')
        else:
            print('connected')
            ip=wlan.ifconfig()[0]
            print('network config: ', ip)
            return ip
    
    ../_images/access7.png
  2. 以下のように他のスクリプトで呼び出すと、Raspberry Pi Pico Wはネットワークに接続されます。

    from do_connect import *
    do_connect()