[ラズパイ] Pico W でネットワークリクエストを送信する

投稿者: | 2024-03-16

Pico W でネットワークリクエストを送信したいときは「urequests」ライブラリを使用します。

import utime
import network
import urequests

#Wi-FiのSSIDとパスワードを設定
ssid = ''
password = ''

wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(ssid, password)

# 接続が確認できない場合は1秒おきに再確認する(最大10回)
max_wait = 10
while max_wait > 0:
    if wlan.status() < 0 or wlan.status() >= 3:
        break
    max_wait -= 1
    print('waiting for connection...')
    utime.sleep(1)

# 接続できない場合はエラーを返す
if wlan.status() != 3:
    raise RuntimeError('network connection failed')
else:
    print('Connected')
    status = wlan.ifconfig()
    print('ip = ' + status[0])
    
    # ここで通信処理
    url = "https://www.yahoo.co.jp/"
    r = urequests.get(url)
    print('status_code = %d' % r.status_code)
    print('text = ' + r.text[:100])

    # 切断
    wlan.disconnect()
    print('Disconnect')

実行結果は以下の通りです。

waiting for connection...
waiting for connection...
waiting for connection...
waiting for connection...
Connected
ip = 192.168.11.10
status_code = 200
text = <!DOCTYPE html><html lang="ja"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" conte
Disconnect

「urequests.get(url)」でリクエストを送信して、「text」でテキストデータが取得できます。

また「status_code」でリクエストが成功しているかどうか確認できます。

※200番台が成功、400番台と500番台が失敗(エラー)です。

おまけ

サンプルではテキストデータを最初の100文字だけ出力していますが、もちろん全部出力できます。

# テキストデータすべて
print('text = ' + r.text)

# テキストデータ最初の100文字
print('text = ' + r.text[:100])

「text」でテキストデータが取得でき、「content」でバイナリデータが取得できます。

また、「encoding」でバイナリデータのエンコーディングが取得できます。

# バイナリデータ最初の100文字
print('content = ' + str(r.content[:100]))
# バイナリデータのエンコーディング
print('encoding = ' + r.encoding)

パラメーターを渡す時はURLの後ろに「?」を付けて記述します。

url = 'https://*****?a=1'

パラメーターが複数ある場合は「&」で繋ぎます。

url = 'https://*****?a=1&b=2'

パラメーター値が変数に入っている時は書式化演算子の「%」を使うと簡単に書けます。

a = 1
b = 2
url = 'https://*****?a=%s&b=%s' % (a, b)

urequests — Network Request Module

https://makeblock-micropython-api.readthedocs.io/en/latest/public_library/Third-party-libraries/urequests.html