シリアル転送で受信した画像をメソッド「POST」で送信するプログラムを、Python言語で作成します。シリアル転送での画像の送信は、「com0comによるシリアル接続の試験環境の構築」で設定した仮想のCOMポートを使用します。また、メソッド「POST」で送信した画像をブラウザで確認するために「メソッド「POST」で送られた画像をブラウザに表示」を使用します。画像ファイルのシリアル転送には、「RS232Cテストツール」を使用します。
プログラムの作成
シリアル転送で受信した画像をメソッド「POST」で送信するプログラムを次のように作成します。
- 26行目の「urllib.request.urlopen(req)」で、受信した画像データをHTTPプロトコルのPOSTメソッドで送信します。
- 37行目でシリアルデータを入力し、38行目でデータの受信を確認します。
- 40行目で受信したデータを保存します。
- 42行目で画像ファイルの受信が完了したかを判断します。30ms間(「time.sleep(0.01)」x33)データが入力されないと受信完了と判断します。
- 45行目で転送された画像のファイル名は「img.jpeg」とて保存します。
- 49行目で送信関数「sendimg」を呼び出します。
imginput/main.py
import serial
import time
from datetime import datetime
import urllib.parse
import urllib.request
serialbuf = []
def sendimg():
# read image data
f = open("img.jpeg", "rb")
reqbody = f.read()
f.close()
# create request with urllib
url = "http://localhost:3000"
req = urllib.request.Request(
url,
reqbody,
method="POST",
headers={"Content-Type": "application/octet-stream"},
)
# send the request and print response
with urllib.request.urlopen(req) as res:
pass
# print(json.loads(res.read()))
def main():
print(datetime.now().strftime('%H:%M:%S.%f'), "Serial run")
con = serial.Serial('COM11', 115200, timeout=0.01)
loopcnt = 0
while True:
indata = con.read()
if len(indata) > 0:
print(indata)
serialbuf.append(indata)
else:
if loopcnt >= 3:
loopcnt = 0
if len(serialbuf) != 0:
with open("img.jpeg", "wb") as opfile:
for i in range(len(serialbuf)):
print("w ", serialbuf[i], " ")
opfile.write(serialbuf[i])
sendimg()
serialbuf.clear()
else:
loopcnt += 1
time.sleep(0.01)
if __name__ == '__main__':
# sendimg()
# print(" end!\n")
main()
プログラムの実行
メソッド「POST」で送信した画像をブラウザで確認するために、「メソッド「POST」で送られた画像をブラウザに表示」で作成したアプリを次のように使用します。
- Visual Studio Codeのエクスプローラーから「server.js」ファイルを選択し、「実行」メニューから「デバッグの開始」を選択します。
- ChromeでURL「http://localhost:3000/」を設定して、サーバアプリにアクセスします。
- 作成したプログラム「imginput/main.py」を実行します。
- 「RS232Cテストツール」を起動して次のように設定します。「COM12」は仮想のCOMポートとなります。
- 表示されている「FILE送信」ボタンをクリックして、画像ファイルを選択します。転送された画像のファイル名は「img.jpeg」となります。
- 次のように、Visual Studio Codeのデバッグコンソールにファイルが保存されたことが表示されます。
- 次のように、Chromeに「Advanced REST client」から送信したファイルが表示されます。


