Pico W で5秒おきにリクエストを送信するプログラムを実行してみます。
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])
# ここで通信処理
for i in range(1, 10):
url = 'https://www.yahoo.co.jp/'
print('i = %d' % i)
r = urequests.get(url)
utime.sleep(5)
# 切断
wlan.disconnect()
print('Disconnect')
すると以下のようなエラーが発生しました。
waiting for connection...
waiting for connection...
waiting for connection...
waiting for connection...
Connected
ip = 192.168.11.10
i = 1
i = 2
i = 3
Traceback (most recent call last):
File "<stdin>", line 35, in <module>
File "requests/__init__.py", line 180, in get
File "requests/__init__.py", line 91, in request
OSError: [Errno 103] ECONNABORTED
何回か実行しても3回目の送信時にエラーが発生していました。
調べてみた結果、どうやら接続が相手側から強制的にクローズされたみたいです。
リクエストした後の待機時間を60秒に増やしてみました。
# ここで通信処理
for i in range(1, 10):
url = 'https://www.yahoo.co.jp/'
print('i = %d' % i)
r = urequests.get(url)
utime.sleep(60)
実行結果です。
waiting for connection...
waiting for connection...
waiting for connection...
waiting for connection...
Connected
ip = 192.168.11.10
i = 1
i = 2
i = 3
Traceback (most recent call last):
File "<stdin>", line 36, in <module>
File "requests/__init__.py", line 180, in get
File "requests/__init__.py", line 76, in request
OSError: -2
何かエラー内容は変わりましたが、多分原因は同じと思われます。
さらに待機時間を120秒に増やしてみましたが結果は同じでした。
URLを変更して他のサイトへリクエストを繰り返し送信した時はエラーが発生しないで正常に動作していたので、接続する相手によって条件があり、発生してしまうエラーのようです。