AndroidでラズベリーパイPico WからのHTTPリクエストを受信する

Androidスマホ(タブレット)でHTTPサーバを立ち上げ、ラズベリーパイPico WからのHTTPリクエストを受信してみます。



AndroidのHTTPサーバ化はAWebServer Http Apache PHP Sqlを用いる事にし、Google Playからインストールしておきます。

AWebServer Http Apache PHP Sql - Google Play のアプリ


AWebServer Http Apache PHP Sqlは使い勝手は非常に良いですが、広告の頻度の多さが難点です。




最初にAndroid側でHTTPサーバを用意しておきます。

AWebServer Http Apache PHP Sqlを起動し、



ServiceのSTARTボタンを押して、サーバを立ち上げます。



Addressが表示されましたら、値を記録しておき、



画面上部にあるロゴのアイコンをクリックし、



Logs Web Serverの画面を開いておきます。




次はラズベリーパイPico Wの方のコードを作成します。

コードはラズベリーパイPico WでHTTPリクエストを送信してみるの内容を少しだけ改修します。


Thonnyを開き、下記のコードを作成して実行します。


main.py

import network
import utime
import socket
import machine

# ssidは必ず2.4GHz帯(11n)の方を使用
ssid = "your ssid"
pw = "your password"

# AndroidのAWebServer Http Apache PHP Sqlの画面で得られた値を指定
host = "192.168.1.44"
# Pythonでサーバを構築する時に指定したポート番号
port = 8080

# ssidとpwでWLANに接続する
def connect(ssid, pw):
	wlan = network.WLAN(network.STA_IF)
	wlan.active(True)
	wlan.connect(ssid, pw)
	wait = 0
	while wlan.isconnected() == False:
		print("Waiting for connection...")
		utime.sleep(1)
		wait += 1

		# 20秒が経過しても接続出来なかった場合はエラー
		if wait > 20:
			raise RuntimeError("network connection failed")
	ip = wlan.ifconfig()[0]
	print(f'Connected on {ip}')
	return ip

# GETのリクエストを行う
def http_get(host, port):
	ai = socket.getaddrinfo(host, port)
	addr = ai[0][-1]

	# HTTPリクエストを生成して送信する
	s = socket.socket()
	s.connect(addr)
	s.send(b"GET / HTTP/1.0\r\n\r\n")

	# レスポンスの内容を確認する
	while True:
		data = s.recv(100)
		if data:
			print(str(data, 'utf8'), end='')
		else:
			break

try:
	ip = connect(ssid, pw)
	http_get(host, port)
except KeyboardInterrupt:
	machine.reset()

早速、Thonny上で実行してみると、コンソールには下記の文字列が表示されました。


Connected on 192.168.1.76
HTTP/1.1 200 OK
Date: Wed, 01 Nov 2023 01:25:57 GMT
Server: Apache/2.4.41 (Unix) PHP/7.3.10
Last-Modified: Wed, 01 Nov 2023 00:25:55 GMT
ETag: "2d-6090c508ca472"
Accept-Ranges: bytes
Content-Length: 45
Connection: close
Content-Type: text/html

<html><body><h1>It works!</h1></body></html>



ラズペリーパイPico WからHTTPリクエストを送信した後にAndroidで立ち上げたサーバのログを確認してみると、



Thonnyのコンソールに出力されていたIPアドレスからのアクセスのログが追加されました。