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アドレスからのアクセスのログが追加されました。